﻿/*******************************************************************/
/*                ErrorValidator.js for WCI - 8/6/2009             */
/*******************************************************************/
//General Functions
   function IsIE()  {
        //IE detector
        return /*@cc_on!@*/false;
        }
   //Added by Julio Obispo
   //07/08/2010
   //Bug 10176
   //Method that checks if the version of Internet Explorer is version 8.
   function IsIE8()
   {
      return /*@cc_on!@*/false && ( parseInt( navigator.userAgent.toLowerCase().match( /msie (\d+)/ )[1], 10 ) >= 8 );
   }
   function classByBrowser()
   {    
   //Modified by Julio Obispo
   //07/08/2010
   //Bug 10176
   //Returns the type of property must use the browser to give 
   //value to the property, according to his version.
          if(IsIE8())
          {
            return 'class';
          }
          else if(IsIE())
          {
            return 'className';
          }
          else
          {
           return 'class';
          }
   }     

/******************************************************************
 ///                     EnterInfoWC Validation                  ///
 *******************************************************************/
 
 String.prototype.trim = function() {
            return this.replace(/^\s*/, "").replace(/\s*$/, "");
        }


    function InputValidation(id) {
        var input = document.getElementById(id);
        var classAsig = (input.value == '' || input.value == null) ? 'txtError' : '';
        var IsValid = false;
        input.setAttribute(classByBrowser(), classAsig);

        if (input.id.search('txtCode')!=-1) {
            var ctrlReq = document.getElementById('errorReqCode');
            var ctrlExp = document.getElementById('errorExpCode');
            
            if (input.value == '' || input.value == null) {
                ctrlExp.style.display = 'none';
                ctrlReq.style.display = 'block';
                IsValid = false;
            }
            else {
                switch (input.value.trim().length) {
                    case 6:
                        var exp = /\s*([0-9a-zA-Z]{6})\s*/
                        IsValid = ExpresionValidator(input, exp, ctrlExp);
                        break;
                    case 8:
                        var exp = /\s*([a-zA-Z]{2}\d{6})\s*/
                        IsValid = ExpresionValidator(input, exp, ctrlExp);
                        break;
                    case 12: case 13: case 14:
                        var exp = /\s*(\d{12,14})\s*/
                        IsValid = ExpresionValidator(input, exp, ctrlExp);
                        break;
                    default:
                        input.setAttribute(classByBrowser(), 'txtError');
                        ctrlExp.style.display = 'block';
                        IsValid = false;
                }
                ctrlReq.style.display = 'none';

            }
        }
        else if (input.id.search('txtLastName')!=-1) {
            var ctrlReq = document.getElementById('errorReqLastName');
            var ctrlExp = document.getElementById('errorExpLastName');

            if (input.value == '' || input.value == null) {
                ctrlExp.style.display = 'none';
                ctrlReq.style.display = 'block';
                IsValid = false
            }
            else {
                ctrlReq.style.display = 'none';
                IsValid = LastNameValidator(input, ctrlExp)
            }
        }
        else {
            input.setAttribute(classByBrowser(), '');
            IsValid = true;
        }
        
        return IsValid;
    }

    function ExpresionValidator(input, exp, span) {
        if (input.value.search(exp) == -1) {
            input.setAttribute(classByBrowser(), 'txtError');
            span.style.display = 'block';
            var IsValid = false;
        }
        else {
            input.setAttribute(classByBrowser(), '');
            span.style.display = 'none';
            var IsValid = true;
        }
        return IsValid;
    }

    function LastNameValidator(input, span) {
        if (input.value.trim().search(/[0-9]|\.|\,|\+|\-|\*|\&|\@|\#|\(|\)|\=|\?|\¿|\<|\>|\:|\;|\_|\&|\%|\°|\!|\¡/) != -1) {
            input.setAttribute(classByBrowser(), 'txtError');
            span.style.display = 'block';
            var IsValid = false;
        }
        else {
            input.setAttribute(classByBrowser(), '');
            span.style.display = 'none';
            var IsValid = true;
        }
        return IsValid;
    }

    function CheckInValidator() {
        var IsValCode = InputValidation('ctl00_WCIContentPlaceHolder_txtCode');
        var IsValLastName = InputValidation('ctl00_WCIContentPlaceHolder_txtLastName');

        return (IsValCode && IsValLastName);

    }
    
    function emailValidator(id)
    {
        var IsValid = false;
        var IsCheckBoxChecked =  false;
        var input = document.getElementById(id);
        var flag = new Boolean(input.value == '' || input.value == null);
        
        var checkboxs = document.getElementsByTagName('input');
        for(index = 0; index < checkboxs.length; index++)
        {   if(checkboxs[index].type=='checkbox' && checkboxs[index].id.search('SelectRowCheckBox')!=-1 && checkboxs[index].checked)
            {   IsCheckBoxChecked = true;
                break;
            }
        }
        if(IsCheckBoxChecked)
        {
            if(flag == true)
            {   //function inside PrintBoardingPass control.
               ShowMessage('NOT_PROVIDED');
               input.setAttribute(classByBrowser(), 'txtError');
            }
            else if(input.value.trim().search(/\s*^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*$\s*/) == -1)
            {  ShowMessage('ERROR_FORMAT');
               input.setAttribute(classByBrowser(), 'txtError');
            }
            else
            {   input.setAttribute(classByBrowser(), '');
                IsValid = true;
            }
        }
        else 
        {  ShowMessage(''); }
        
        return IsValid;   
    }
/***************************************************************
              PassPortNumberAndExpirationWC Validation      
****************************************************************/

    function ValidateControls()
    {   //Validate Inputs
        var inputs = document.getElementsByTagName('input');
        var IsValid = true, valid = true;  
        for(index = 0; index < inputs.length; index++)
        {
            if(inputs[index].type=='text')
            {
                var input = inputs[index];
                valid = ValidateInput(input);
            }
            IsValid = IsValid && valid;
        }
        //Validate Selects
        var selects = document.getElementsByTagName('select');
        for(index = 0; index < selects.length; index++)
        {
            if(selects[index].id.search('ddl')!=-1)
            {
                var select = selects[index];
                valid = ValidateSelect(select);
            }
            IsValid = IsValid && valid;              
        }
        //Validate Calendar Controls
        valid = ValidateCalendar('CalendarBirthday');
        valid = ValidateCalendar('CalendarPassportExpDate') &&  valid;
        valid = ValidateCalendar('CalendarDocumentExpDate') &&  valid;
        IsValid = IsValid && valid;
        if(!IsValid)
        {
          window.scrollTo(0,0);
        }
        else
        {
          CreateOmnitureVariable();
        }
        //return controls evaluation.
        return IsValid;
        
        
    }
    //Added by Julio Obispo
    //06/02/2010
    //Task 9281
    //Method that checks if the entry in the field is an alpha character.
    function ValidateCharacter(event)
    {
        var characterCode;
        var flag=false;
        var browserName="Microsoft Internet Explorer";
        if((event.charCode) && (event.keyCode==0))
        {
          characterCode=event.charCode;
        }
        else
        {
          characterCode=event.keyCode;
          if(navigator.appName!=browserName)
          {
            if(event.which!=undefined)
            {
              if(event.which==0)
              {
                flag=true;   
              }
            }
            
          }
        }
     
     if(flag)
     {
       if(IsSpecialCharacter(characterCode))
       {
            if(characterCode!=9)
            {
              return true;
            }
            else if((characterCode==9 || (characterCode>=37 && characterCode<=40)) && (event.shiftKey==true || event.shiftKey==false))
            {
                return true
            }
            else
            {
               return false;
            }  
       }
       else if(IsAlphabetic(characterCode))
       {
         return true;
       }
       else
       {
         return false;
       }
     }
     else
     {      
      if(IsAlphabetic(characterCode)|| characterCode==8 || characterCode==9 ||characterCode==32)
      {
        return true;
      }
      else
      {
        return false;
      }
     }
    
    }
    
    //Added by Julio Obispo
    //06/15/2010
    //Task 9631
    function SpecialCharacter(event)
    {
      var characterCode=event.charCode;
      var characterNull=0;
      if((characterCode==undefined)||(characterCode==characterNull))
      {
         characterCode=event.keyCode;
      }
      
      if(event.altKey||event.ctrlKey||event.shiftKey)
      {
        return true;
      }
      else
      {
          if(IsSpecialCharacter(characterCode))
          {
            return true;
          }
          else if(IsAlphabetic(characterCode))
          {
            return true;
          }
          else
          {
            return false;
          }
      }
        
    }
    
    //Added by Julio Obispo
    //06/17/2010
    //Task 9631
    //Method to determine if the key pressed, it is expected (in the case of functions, arrows, etc).
    function IsSpecialCharacter(characterCode)
    {
        if(characterCode==8 || characterCode==9 || characterCode==27 || characterCode==32 || (characterCode>=33 && characterCode<=40) || characterCode==45 || characterCode==46 ||(characterCode>=112 && characterCode<=123))
        {
          return true;
        }
        else
        {
          return false;
        }
    }
    
    //Added by Julio Obispo
    //06/17/2010
    //Task 9631
    //Method that determines whether the pressed key belongs to the alphabetic keys.
    function IsAlphabetic(characterCode)
    {
      if((characterCode>64 && characterCode < 91) || (characterCode > 96 && characterCode < 123))  
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    
    function ValidateInputHandler(id)
    {   return ValidateInput(document.getElementById(id));
    }
    
    function ValidateSelectHandler(id)
    {   return ValidateSelect(document.getElementById(id));
    }
    
    function ValidateInput(input)
    {
	    var span = document.getElementById(input.id.substring(input.id.search('txt') + 3));	
	    var flat = input.value == '' || input.value == null;
    	
	    if((flat) && (input.id.match('txtWhereIsStayingZipAndPostalCode') == null))
	    {
	       //If the object is checked span, related to marking as required field. 
	       //In the absence, not style or you can make this showing.
	       if(span!=null)
	       {
		    input.setAttribute(classByBrowser(), 'TextBoxStyle txtError');
		    span.setAttribute(classByBrowser(), 'asterisk show');
		    ShowMessage();
		    var IsValid = false;
		   }
		   else
		   {
		     var IsValid = true;
		   }
	    }
	    else
	    {
	        if(input.id.match('txtFirstName') != null || input.id.match('txtMiddleName') != null || input.id.match('txtLastName') != null)
	        {
	            var exp = /^([\w]|[\s])*$/;
	        }
	        else if(input.id.match('txtWhereIsStayingZipAndPostalCode') != null || input.id.match('txtPassportNumber') != null
	            || input.id.match('txtDocumentNumber') != null || input.id.match('txtWhereIsStayingStreetAddress') != null || input.id.match('txtWhereIsStayingCity') != null)
	        {
	            var exp = /^([\w]|[\s]|[\(]|[\)]|[\&]|[\#]|[\‘]|[\-]|[\/]|[\\]|[\,]|[\;]|[\:]|[\.]|[\¨])*$/;
	        }
		    
		    var CssClass = (input.value.search(exp) == -1) ? 'TextBoxStyle txtError' : 'TextBoxStyle';
		    var spanClass = (input.value.search(exp) == -1) ? 'asterisk show' : 'asterisk';
		    
		    input.setAttribute(classByBrowser(), CssClass);		    

		    //Checking if the object 'span' exists.
		    if(span != null)
		    {
		       span.setAttribute(classByBrowser(), spanClass);
    		}
    		
		    if (input.value.search(exp) == -1)
		    {
			    ShowMessage(); 
			    var IsValid = false; 
		    }
		    else 
		    {
			    var IsValid = true; 
		    }
	    }
	    
	    return IsValid;
    }
    
    function ValidateSelect(select)
    {
        var span = document.getElementById(select.id.substring(select.id.search('ddl') + 3));
        var spanClass = (select.options[select.selectedIndex].value=='')?'asterisk show':'asterisk';
        span.setAttribute(classByBrowser(), spanClass);
        return (select.options[select.selectedIndex].value!='')
        
    }
    
 
    
    //Calendar Validation
    function ValidateCalendar(id)
    { 
       var currentDate = new Date();
       var selectedDate = new Date();
       var selectsCalendar = document.getElementsByTagName('select');
       
       for(index = 0; index < selectsCalendar.length ; index++)
       {
            if(selectsCalendar[index].id.search(id)!=-1)
            {
               if(selectsCalendar[index].id.search('Day')!=-1)
               {
                 var day = selectsCalendar[index].options[selectsCalendar[index].selectedIndex].value;
               }
               if(selectsCalendar[index].id.search('Month')!=-1)
               {
                 var month = selectsCalendar[index].options[selectsCalendar[index].selectedIndex].index;
               }
               else if(selectsCalendar[index].id.search('Year')!=-1)
               {
                 var year = selectsCalendar[index].options[selectsCalendar[index].selectedIndex].value;
                 break;
               } 
            }
            
       }
       if( year!=null || month!=null ||  day!=null )
       {    
           
            selectedDate.setFullYear(year,month,day);
            return CompareDate(currentDate,selectedDate,id, day, month,year) 
       } 
       else 
       {
            return true;
       }               
    
    }

function CorrectNumberOfDaysInMonth(day,month,year) 
{
    var correctNumberOfDays=0;
    if( (month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12) ) 
    {
        correctNumberOfDays= 31;
    }
    
    else if( (month == 4) || (month == 6) || (month == 9) || (month == 11) )
    {
        correctNumberOfDays= 30;
    }
    
    else if( month == 2 )
    {
    
        if( (year% 4 == 0) && (year % 100 != 0) || (year % 400 == 0) )
        {
            correctNumberOfDays= 29;
        }
        else
        {
            correctNumberOfDays= 28;
        }
    
    } 
    
    if(day>correctNumberOfDays)
    {
        return false;
    }
    else
    {
        return true;
    }
}

function CompareDate(currentDate, selectedDate, id, day, month,year)
{
  
    if(id.search('Birthday')!=-1)
    {    
        var dateIsValid = (selectedDate < currentDate);
        
    }
    else  if(id.search('Document')!=-1||id.search('Passport')!=-1)
    {    
        var dateIsValid = (selectedDate > currentDate);
        
    }
    else 
    { 
        var dateIsValid = (selectedDate < currentDate);
    }
    var spanArr = document.getElementsByTagName('span');
    
    if(dateIsValid)
    {
        dateIsValid= CorrectNumberOfDaysInMonth(day,month+1,year);
    }
    
    for(index = 0; index < spanArr.length; index++)
    {
        if(spanArr[index].id.search(id)!=-1)
        {
            var span=spanArr[index];
            var disp= (!dateIsValid)?'inline':'none';
            span.style.display=disp;
         }
     }
     if(!dateIsValid)
     { 
        ShowMessage();
     }   
         
    return dateIsValid;           
 }
 

