var HightLightColor="#e51641";
function EnableValidatorSpans(){
    var beginDate=new Date();
    for(var j = 0; j < Page_Validators.length; j++){
        if(Page_Validators[j].id.indexOf("ValidatorSpan") > -1){
            Page_Validators[j]=Page_Validators[Page_Validators.length-1];
            j=j-1;
            Page_Validators.length=Page_Validators.length-1;
        }
    }

    $("span").each(function(){ 
         if(this.id.indexOf("ValidatorSpan") > -1){
                AddValidator(this,null,spanValidatorCount);
         }
    });
    var endDate=new Date();
    //alert("EnableValidatorSpans cost "+(endDate.getTime()-beginDate.getTime())+" seconds for "+Page_Validators.length+" validators");
 }
function AddValidator(validator,controltovalidate,spanValidatorCount){
    validator.errormessage ="invalid.";
    validator.display = "Dynamic";
    validator.initialvalue ="";
    validator.validationGroup="";
    validator.validateemptytext = "false";
    
    //validator.style.color="Red";
    //validator.style.display="none";
    validator.enabled="true";
    eval(validator.getAttribute("onload"));//鍥犱负safari涓嶈璇唙alidator.onload
    validator.innerHTML=validator.errormessage;

    if (typeof(validator.evaluationfunction) == "string") {
        eval("validator.evaluationfunction = " + validator.evaluationfunction + ";");
    }
    if(controltovalidate==null){
        controltovalidate=document.getElementById(validator.controltovalidate);
    }

    if(typeof(controltovalidate)!="undefined"&&controltovalidate!=null){
        ValidatorHookupControl(controltovalidate, validator);
    }
    
    Page_Validators[Page_Validators.length]= validator;
    
}
function ExpressionValidation(val,expression,controlValue){
    var control = document.getElementById(val.controltovalidate); 
    var label = document.getElementById(val.getAttribute("labeltovalidate"));   
    var isValid=true;
    if(val.isrequired=="True"&&controlValue== ""){
            isValid = false;
    }else{
        if(expression.test(controlValue)||controlValue== ""){ 
                isValid = true;
        }else{
                isValid = false;
        }                       
    }
    if(isValid){
        //control.style.background = "White";
        label.style.color = "#666666"; 
        return true;
    }else{
        //control.style.background = HightLightColor;
        label.style.color = HightLightColor;
        return false;
    }
}
function RequiredValidation(val){
     var controlValue = ValidatorGetValue(val.controltovalidate);
     var control = document.getElementById(val.controltovalidate);
     var label = document.getElementById(val.getAttribute("labeltovalidate"));
     if(trim(controlValue) == ""){
       label.style.color = HightLightColor; 
       return false;
    }else{
       label.style.color = "#666666"; 
       return true; 
    }   
}
function CompareValidation(val){
     var controlValue = ValidatorGetValue(val.controltovalidate);
     var control = document.getElementById(val.controltovalidate);
     var compareControlValue = ValidatorGetValue(val.controltocompare);
     var compareControl = document.getElementById(val.controltocompare);
     var label = document.getElementById(val.getAttribute("labeltovalidate"));
     if (controlValue == "" || controlValue != compareControlValue)
     {
        label.style.color = HightLightColor; 
        return false;
     }
     else
     {
        label.style.color = "#666666"; 
        return true; 
     }
}
function TaxIdValidation(val){
    var control = document.getElementById(val.controltovalidate); 
    FormatTaxId(control);
     
    var expression = /\d{2}-\d{7}/; 
    return ExpressionValidation(val,expression,control.value);
}
function CurrencyValidation(val){
     var control = document.getElementById(val.controltovalidate); 
     FormatCurrency(control);
     var controlValue = control.value.replace("$","");
     while(controlValue.indexOf(",") >= 0){
            controlValue = controlValue.replace(",","");
     }
     expression = new RegExp("^\\s*([-\\+])?(\\d+)?(\\.(\\d+))?\\s*$");
    return ExpressionValidation(val,expression,controlValue);
} 

function DateValidation(val){
    var today = new Date();
    var minDate = new Date("12/31/1899");     
    
    var control = document.getElementById(val.controltovalidate);      
    var controlValue = FormatDate(control);        
     
    if(val.isrequired=="False"&&controlValue== ""){
        control.style.background = "White";
        return true; 
    }
    val.dateorder = "mdy";
    var isDate = ValidatorConvert(controlValue, "Date", val);
    var inputDate = new Date();
    inputDate.setTime(isDate);
     
    if(isDate && CompareDate(inputDate,minDate) > 0){        
        control.style.background = "White";
        return true; 
    }else{        
        control.style.background =HightLightColor;
        return false; 
    }
} 

function EmailValidation(val, args){
    var controlValue = ValidatorGetValue(val.controltovalidate);
    var expression = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 
    return ExpressionValidation(val,expression,controlValue);
} 

function PasswordValidation(val, args){
    var controlValue = ValidatorGetValue(val.controltovalidate);
    var expression = /^[A-Za-z0-9]+$/; 
    return ExpressionValidation(val,expression,controlValue);
} 

function NumberValidation(val, args){
    var controlValue = ValidatorGetValue(val.controltovalidate);
    var expression = /^\s*[-\+]?\d+\s*$/; 
    return ExpressionValidation(val,expression,controlValue);
} 
function DecimalValidation(val, args){
    var controlValue = ValidatorGetValue(val.controltovalidate);
    var expression = new RegExp("^\\s*([-\\+])?(\\d+)?(\\.(\\d+))?\\s*$");
    return ExpressionValidation(val,expression,controlValue);
} 
function PercentValidation(val){
    var control = document.getElementById(val.controltovalidate); 
    FormatPercent(control);
    var expression = /^(-?\d+)(\.\d+)?%$/;
    return ExpressionValidation(val,expression,control.value);
}

function PhoneValidation(val){
     var control = document.getElementById(val.controltovalidate); 
    FormatPhone(control);
     var expression = /(\([2-9]\d{2}\)|(\d{3}-))\d{3}-\d{4}/; 
    return ExpressionValidation(val,expression,control.value);
}
function SsnValidation(val){
    var control = document.getElementById(val.controltovalidate); 
    FormatSsn(control);
    var expression = /\d{3}-\d{2}-\d{4}/; 
    return ExpressionValidation(val,expression,control.value);
}
function TimeValidation(val){
    var control = document.getElementById(val.controltovalidate); 
    FormatTime(control);
    var expression = new RegExp("(([0|1][0-9])|(2[0-3])){1}[:]?([0-5]{1}[0-9]{1}){1}"); 
    return ExpressionValidation(val,expression,control.value);
}
function YearValidation(val){
    var control = document.getElementById(val.controltovalidate); 
    var expression = /\d{4}/; 
    return ExpressionValidation(val,expression,control.value);
}
function ZipCodeValidation(val){
    var control = document.getElementById(val.controltovalidate); 
    FormatZipCode(control);
    
    var expression = /\d{5}-\d{4}/; 
    if(control.value.length==5){
        expression = /\d{5}/; 
    }
    return ExpressionValidation(val,expression,control.value);
}
function IPAddressValidation(val){
   var control = document.getElementById(val.controltovalidate);    
   var expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
   if (expression.test(control.value)) 
   {
      var parts = control.value.split(".");
      if (parseInt(parseFloat(parts[0])) == 0) 
      { 
        return false; 
      }
      for (var i=0; i<parts.length; i++) 
      {
         if (parseInt(parseFloat(parts[i])) > 255) 
         { 
            return false; 
         }
      }
      return true;
   } 
   else 
   {
      return false;
   } 
}

//------------------------------------------------------------------------------
function FormatTaxId(control){    
    if(control.value != ""){
         var tax =  control.value.replace(/\-/g,"");
         if(tax.length == 9)
            control.value = tax.substring(0,2) + "-" + tax.substring(2);
    return control.value;
    } 
}
function FormatCurrency(control){    
    if(control.value != ""){
        var currency =  control.value;
        currency = currency.replace("$","");
        while(currency.indexOf(",") >= 0){
            currency = currency.replace(",","");
        } 
         if(!/[^0-9\.\-]/.test(currency)) 
         {
            currency=currency.replace(/^((-)?\d*)$/,"$1.");
            currency=(currency+"00").replace(/(\d*\.\d\d)\d*/,"$1");
            currency=currency.replace(".",","); 
            var re=/(\d)(\d{3},)/; 
            while(re.test(currency))
                currency=currency.replace(re,"$1,$2");
            currency=currency.replace(/,(\d\d)$/,".$1"); 
            currency=currency.replace(/^\./,"0.") ;
            if(currency.length >0 &currency.substring(0,1)!="$" )
            control.value = "$"+currency;
         } 
         return control.value;
    } 
}

function FormatDate(control){
    var date=control.value;
    var days = date.split("/");
    if(days.length > 2 && days[2].length > 3) return date; 
    var isDate = new Date(date);
    if(isDate != "NaN"){
       date=(isDate.getMonth() + 1) + "/" + isDate.getDate() + "/20" + ("0" +isDate.getFullYear()).substring(3,5); 
    }
    date = date.replace(/\//g,"");
    if(date.length == 6){
        date=date.substring(0,2) + "/" + date.substring(2,4) + "/20" + date.substring(4,6);
    }
    if(date.length == 8){
        date=date.substring(0,2) + "/" + date.substring(2,4) + "/" + date.substring(4,8);
    }
    control.value=date;
    return date; 
}
function FormatTime(control){
    var timeString = control.value;    
    var timeReg = new RegExp("(([0|1][0-9])|(2[0-3])){1}[:]?([0-5]{1}[0-9]{1}){1}");
    if(timeReg.exec(timeString)){
        if(timeString.length == 4){
            control.value = timeString.substring(0,2) + ":" + timeString.substring(2,4);
        }   
    }
    return control.value;
}

function FormatPhone(control){    
    if(control.value != ""){
         var phone =  control.value.replace(/\D/g,"").replace(/^[01]{1,}/,"");
        if(phone.length>10) phone = phone.substr(0,10);
         if(phone.length == 10)
            control.value = "(" + phone.substring(0,3) + ")" + phone.substring(3,6) + "-" + phone.substring(6);
         else
            control.value=phone;  
    } 
}

function FormatZipCode(control){    
    if(control.value != ""){
         control.value =  control.value.replace(/\-/g,"");
         if(control.value.length >5)
            control.value = control.value.substring(0,5) + "-" + control.value.substring(5);
    } 
}

function FormatSsn(control){    
    if(control.value != ""){
         var ssn =  control.value.replace(/\-/g,"");
         if(ssn.length== 9)
            control.value = ssn.substring(0,3) + "-" + ssn.substring(3,5) + "-" + ssn.substring(5,9);
    } 
}


function FormatPercent(control){    
    if(control.value != ""){
         var tax =  control.value.replace(/\-/g,"").replace("%","");
         if(tax.length >0 & !/[^0-9\.]/.test(tax))
            control.value =  tax+"%";
    } 
}
//------------------------------------------------------------------------------------
function CompareDate(leftValue,rightValue){    
    var leftDate = typeof(leftValue) == "string" ? new Date(leftValue) : leftValue;        
    var rightDate = typeof(rightValue) == "string" ? new Date(rightValue) : rightValue;
    var d = leftDate.getTime() - rightDate.getTime(); 
    if(d>0){
       return 1;
    }else if(d==0){
       return 0;
    }else{
       return -1;
    }
}

function NameValidation(val, args){
    var controlValue = ValidatorGetValue(val.controltovalidate);
    var expression = /^[A-Za-z\ \-]+$/; 
    return ExpressionValidation(val,expression,controlValue);
} 

function SpecialNameValidation(val, args){
    var controlValue = ValidatorGetValue(val.controltovalidate);
    var expression = /^[A-Za-z\ \-\!\@\#\$\%\^\&\*\(\)_\+\=\{\}\[\]\\\|\;\'\:\"\,\.\/\<\>\?]+$/; 
    return ExpressionValidation(val,expression,controlValue);
} 

