/**
 * Script for RH salesforce signup.
 */
YAHOO.namespace('sfsignup');
YAHOO.sfsignup.map = null;
YAHOO.sfsignup.icons = [];
YAHOO.sfsignup.init = function()
{
  YAHOO.sfsignup.dlg = new YAHOO.widget.Dialog('sf_signup',
    {
      zIndex: 11,
      width: '303px',
      fixedcenter : true,
      visible : false,
      constraintoviewport : true,
      draggable: false,
      modal: false,
      close: true
    }
  );
  YAHOO.util.Dom.setStyle('sf_signup', 'display', 'block');
  YAHOO.sfsignup.dlg.render();

  // Set listener for
  var node = YAHOO.util.Dom.get('sfsignup_btn');
  YAHOO.util.Event.addListener(node, 'click', function(event)
  {
    YAHOO.sfsignup.setError('00NC0000005DCQ8', '', true);
    if (! YAHOO.sfsignup.validateCity('NC0000005DCQ8'))
    {
      YAHOO.sfsignup.setError('00NC0000005DCQ8', 'Select city, please');
      return false;
    }
    YAHOO.sfsignup.dlg.show();
  });

  // Set listener for submit.
  var node = YAHOO.util.Dom.get('sfsignForm');
  YAHOO.util.Event.addListener(node, 'submit', function(event)
  {
    var form = YAHOO.util.Event.getTarget(event);

    // Collect phone value.
    var phoneValue = '', phoneParts = ['phone1', 'phone2', 'phone3'];
    for (var ip in phoneParts) phoneValue += form.elements[phoneParts[ip]].value;
    form.elements['phone'].value = phoneValue;

    if (! YAHOO.sfsignup.validateForm(form))
    {
      YAHOO.util.Event.preventDefault(event);
      if (event.stopPropagation) event.stopPropagation();
      return false;
    }

    return true;
  });
}

/**
 * Set text error for field.
 * 
 * @param {String} field Field name
 * @param {String} error Error text
 * @param {Boolean} clean Clean flag
 */
YAHOO.sfsignup.setError = function(field, error, clean)
{
  var node = null;
  var nodeId = field + '_error';
  if (null != (node = YAHOO.util.Dom.get(nodeId)))
  {
    if (undefined != clean)
    {
      node.innerHTML = '';
      YAHOO.util.Dom.replaceClass(node, 'show', 'hidden');
    }
    else {
      node.innerHTML = error;
      YAHOO.util.Dom.replaceClass(node, 'hidden', 'show');
    }
  }
}

/**
 * Form validator.
 * @return {Boolean}
 */
YAHOO.sfsignup.validateForm = function(form)
{
  var iErrors = 0;
  // Search fields for validate.
  for (var i = 0; i < form.elements.length; i++)
  {
    var eName = null;
    if (undefined != form.elements[i].name)
    {
      eName = new String(form.elements[i].name);
      YAHOO.sfsignup.setError(eName, '', true);

      // Check empty value.
      if ('' == form.elements[i].value)
      {
        iErrors++;
        if (eName.match(/phone/i)) {
          YAHOO.sfsignup.setError('phone1', 'Please enter correct phone number');
        }
        // hotel type.
        else if (eName.match(/00NC0000004ZAY5/i)) {
          YAHOO.sfsignup.setError('00NC0000004ZAY5', 'Please select hotel category');
        }
        // travel month.
        else if (eName.match(/00NC0000004ZAYA/i)) {
          YAHOO.sfsignup.setError('00NC0000004ZAYA', 'Please select month');
        }
        else YAHOO.sfsignup.setError(eName, 'Set value, please');
      }
      // validate email.
      else if ('email' == eName)
      {
        var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
        if (! emailPattern.test(form.elements[i].value)) {
          iErrors++;
          YAHOO.sfsignup.setError(eName, 'Set correct email, please');
        }
      }
    }
  }

  return (0 == iErrors);
}

/**
 * Face select for city choice validator.
 * @return {Boolean}
 */
YAHOO.sfsignup.validateCity = function(idElement)
{
  var node = YAHOO.util.Dom.get(idElement);
  var city = node.options[node.selectedIndex].value;
  return ('' != city);
}

YAHOO.util.Event.onContentReady('sf_signup', YAHOO.sfsignup.init);

