
Profile = {
  
  resetRequiredFields:function(fields) {
    Element.setStyle($('errorField'), {'display':'none'});
    fields.each(function(item) {
        //AS: we don't want to display '*'
        //var label = $('reqLabel_' + item);
        //Element.setStyle(label, {'display':'none'});
        var label = $('label_' + item);
        
        var urs = SiteVars.this_pagerule_hints.match(/unlimited/);
        var lableColor = (urs == 'unlimited') ? '#4F3B30' : '#3A6BB0';
        //Element.setStyle(label, {'color':'#3A6BB0'});
        Element.setStyle(label, {'color': lableColor});
        
    });
  },
  
  //AS:20080111 - checks not only required fields are not empty, but some data format too
  checkRequiredFields:function(frm, step) {
    var error = false;
    var formatError = false;
    var errorMessage = '';
    var myPhone = '';
    
    $('errorField').innerHTML = '';
    
     switch(step) {
      case 'preferences':
        var fields = new Array(
          'dateOfBirth'
         );
          //'collect' - this one just never empty
        var notRequiredFields = new Array(
          'alaskaCardNo'
          //AS:can't do the same for 'Agree' or 'CBAgree' - have "$(item) has no properties" error in FF
        );
        break;
      case 'regirter':
        var fields = new Array(
          'Title',
          'FirstName',
          'LastName', 
          'Address1',
          'City', 
          'Province', 
          'Zip',
          'Country',
          'Email',
          'username',
          'password'
          
        );
        var notRequiredFields = new Array(
          'Phone'
          );
        break;
      case 'modify':
        var fields = new Array(
          'Title',
          'FirstName',
          'LastName', 
          'Address1',
          'City', 
          'Province', 
          'Zip',
          'Country',
          'Email'
        );
        var notRequiredFields = new Array(
          'Phone'
          );
          break;
			case 'changepassword':
        var fields = new Array(
          'oldPassword',
					'firstPassword',
					'secondPassword'
        );
        var notRequiredFields = new Array();
        break;					
      default:
     }   
      
    Profile.resetRequiredFields(fields);

    fields.each(function(item) {
      
       switch(item) {
        case 'password':
          //var objRegExp  = /^[\w]{4,8}$/; // any 4-8 characters a-z or A-Z or 0-9 or _
          var objRegExp  = /^.{4,8}$/; // any 4-8 characters
          var res = objRegExp.test($(item).value);
          if (!res) {
            formatError = true;
            errorMessage += '<br/> Password should contain 4-8 characters';
          } 
          if ($(item).value != $('Confirm').value) {
            formatError = true;
            errorMessage += '<br/> Your passwords do not match';
          } 
          break;
			 case 'firstPassword':
          //var objRegExp  = /^[\w]{4,8}$/; // any 4-8 characters a-z or A-Z or 0-9 or _
          var objRegExp  = /^.{4,8}$/; // any 4-8 characters
          var res = objRegExp.test($(item).value);
          if (!res) {
            formatError = true;
            errorMessage += '<br/> Password should contain 4-8 characters';
          } 
          if ($(item).value != $('secondPassword').value) {
            formatError = true;
            errorMessage += '<br/> Your passwords do not match';
          } 
          break;					
        case 'Email':
          var objRegExp  = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*(\.[a-z]{2,4})$/;
          var res = objRegExp.test($(item).value.trim());
          if (!res) {
            formatError = true;
            errorMessage += '<br/> Incorrect email format';
          } 
          break;
        case 'dateOfBirth':
          var objRegExp  = /^(19|20)[\d]{2}-([0][1-9]|[1][0-2])-([0-2][\d]|[3][0-1])$/;
          var res = objRegExp.test($(item).value.trim());
          if (!res) {
            formatError = true;
            errorMessage += '<br/> Date of Birth should be YYYY-MM-DD';
          } 
          
          var ci_y = $(item).value.substring(0, 4);
          var ci_m = $(item).value.substring(5, 7);
          var ci_d = $(item).value.substring(8);
          if (dayExceedsMonth(ci_y, ci_m, ci_d) == true) {
            formatError = true;
            errorMessage += '<br/> Date of Birth must be a valid date';
          } 
          break;
        default:          
      } 
      
      // shiw asretiks* if empty:
      if ($(item) && $(item).value.trim() == '') {
        //var label = $('reqLabel_' + item);
        //Element.setStyle(label, {'display':'block'});
        var label = $('label_' + item);
        Element.setStyle(label, {'color':'red'});
        error = true;
       //     errorMessage += '<br/> '+item;

      }
     
    });
    
    
    // check collect field
    
    
    
    
    if (error == true) {  
      $('errorField').innerHTML = 'Please enter all required fields.';
      
      Element.setStyle($('errorField'), {'display':'block'});
    }


    //AS: not equired fields:
    notRequiredFields.each(function(item) { 
      if ($(item).value!='') {
        switch(item) {
          case 'alaskaCardNo': 
            var objRegExp  = /^[\d]{1,12}$/;
            var res = objRegExp.test($(item).value.trim());
            if (!res) {
              formatError = true;
              errorMessage += '<br/> Alaska Card # should be numbers only, maximum 12 digits';
            } 
            break;
          //AS: Shayne, I can't do the same for  CBAgree or Agree: 
          //case 'CBAgree': //alert($(item).checked); //- FF bug - $(item) has no properties - ok in IE
          //case 'Agree': //alert($(item).value); //- FF bug - $(item) has no properties - ok in IE
          
          case 'Phone': 
            //- Display error message if they enter anything that isn't +, 0-9, (, ), and -
            var objRegExp  = /^\+?[\d\(\)\-]+$/;
            var res1 = objRegExp.test($(item).value.trim());
            if (!res1) {
              formatError = true;
              errorMessage += '<br/> Incorrect phone - can contain only +, 0-9, (, ), and -';
            } 
            
            //- Display error message if they enter less than 10 numbers (and more then 20)
            myPhone = $('Phone').value.replace(/[\D]/g,''); //leave only digits
            objRegExp  = /^\d{10,20}$/;
            var res2 = objRegExp.test(myPhone);
            //alert(myPhone+'|'+res2);
            if (!res2) {
              formatError = true;
              errorMessage += '<br/> Incorrect phone - should contain a least 10 digits';
            } 
            
            break;
          default:          
        } 
      }
    });
   
    var collectValue = '';
    
    if(frm.collect && (SiteVars.this_url == '/register' || SiteVars.this_url == '/profile/modify/personalinfo')) {
      collectValue = frm.collect.options[frm.collect.selectedIndex].value;
      
      
      
      // make sure user enters aueroplan or alaska
      if (collectValue == '187') { // alaska
        if($('aeroplanNo').value.trim() == '') {
          formatError = true;
          errorMessage += '<br/> Please enter an Aeroplan number';
        }
      } else if (collectValue == '186') { // aeroplan
        if($('alaskaCardNo').value.trim() == '') {
          formatError = true;
          errorMessage += '<br/> Please enter an Alaska Airmiles number';
        }
      }
      
      
    }
     
    
    if (collectValue == '186' && frm.alaskaCardNo.value.trim() != '') {
      var objRegExp  = /^[\d]{1,12}$/;
      var res = objRegExp.test($('alaskaCardNo').value.trim());
      if (!res) {
        formatError = true;
        errorMessage += '<br/> Alaska Card # should be numbers only, maximum 12 digits';
      } 
    }
    
    if (frm.aeroplanNo) {
      frm.aeroplanNo.value = frm.aeroplanNo.value.trim().replace(/ /g, '');
      
      var aeroplanNo = frm.aeroplanNo.value;
      
      if(aeroplanNo != '') {
      
        // min 9 numbers, max 16. 
        if ( !(aeroplanNo.length >= 9 &&  aeroplanNo.length <= 16 )) {
          formatError = true;
          errorMessage += '<br/> Please enter a valid Aeroplan number';
        }
        
      }
    }
    
    //AS: couldn't insert it into above "notRequiredFields.each" - FF bug - $(item) has no properties - ok in IE
    if (frm.CBAgree) {
      if (step=='preferences' && !$(frm.CBAgree.checked)) {
        formatError = true;
        errorMessage += '<br/> Please agree to the Membership guidelines';
      }
    }

    
    if (formatError == true) {  
      $('errorField').innerHTML += errorMessage;
      Element.setStyle($('errorField'), {'display':'block'});
    }
    
    //if no errors in form  - change Phone (leave only digits):
    //AS: TODO: optimize this expression!
    if ((step=='register' || step=='modify') && formatError == false && error == false ) {
      //alert('no errors in form - changing phone to: '+myPhone);
      $('Phone').value = myPhone;
    }  
    
    //alert(formatError +'|'+ error+'|'+!(formatError || error));
    return !(formatError || error);
  }
}





String.prototype.trim = function() {
  a = this.replace(/^\s+/, '');
  return a.replace(/\s+$/, '');
};


/* hack */
Event.observe(window, 'load', function() {
  // we need this to switch between provinces.
  if ($('Province')) {
    Event.observe($('Province'), 'change', function() {
        var province = $('Province').options[$('Province').selectedIndex].value.trim();
        
        switch(province) {
           case 'BC':
           case 'AB':
           case 'MB':
           case 'NB':
           case 'NL':
           case 'ON':
           case 'NS':
           case 'NT':
           case 'NU':
           case 'PE':
           case 'QC':
           case 'SK':
           case 'YT':
             for(var i = 0; i < $('Country').length; i++) {
               if ($('Country').options[i].value.trim() == 'CANADA') {
                 $('Country').selectedIndex = i;
                 break;
               }
             }
             
            break;
           case 'ZZ':
            $('Country').selectedIndex = 0;
            break;
           default:
             for(var i = 0; i < $('Country').length; i++) {
               if ($('Country').options[i].value.trim() == 'UNITED STATES') {
                 $('Country').selectedIndex = i;
                 break;
               }
             }
             
        }
    });
  }
});

