﻿function RequiredField(sender, args)
{   
    var val = args.Value;
    if((val.indexOf("Enter ") != -1 || val=="")&& !Skip( sender.id )){
        errorCss(sender.id, true);
        toggleError(sender.id,true,"This is a Required Field");
        args.IsValid = false;
        return false;
    }else{
        errorCss(sender.id, false);
        toggleError(sender.id,false);
    }
    args.IsValid = true;
    return true;
}

function RequiredFieldShowHidden(sender, args) {   
    var val = args.Value;
    if((val.indexOf("Enter ") != -1 || val=="")&& !Skip( sender.id )){
        errorCss(sender.id, true);
        toggleError(sender.id,true,"This is a Required Field");
        
        var fieldobj = parseFieldName(sender.id, true);
        var obj = $(fieldobj.path + 'selectedAddress');       
        obj.style.display = "block";
        
        args.IsValid = false;
        return false;
    }else{
        errorCss(sender.id, false);
        toggleError(sender.id,false);
    }
    args.IsValid = true;
    return true;
}

function RequiredDropDown(sender, args) {   
    var val = args.Value;
    if((val == -1)&& !Skip( sender.id )){
        errorCss(sender.id, true);
        toggleError(sender.id,true,"This is a Required Field");
        args.IsValid = false;
        return false;
    }else{
        errorCss(sender.id, false);
        toggleError(sender.id,false);
    }
    args.IsValid = true;
    return true;
}
//RFC compliant function
function validateEmail(sender, args) {
    var objRegExp  = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
    
    if(args.Value!="" && !Skip()){
        if(!objRegExp.test(args.Value)){
            errorCss(sender.id, true);
            toggleError(sender.id,true,"Invalid Email Address");
            args.IsValid = false;
            return false;
        }else{
            errorCss(sender.id, false);
            toggleError(sender.id,false);
        }
    }
    args.IsValid = true;
    return true;
}

function validateCompare(sender, args) {
    var fieldobj = parseFieldName(sender.id, false);
    var compareWith = document.getElementById( fieldobj.path + fieldobj.field );   
    if( compareWith ){
        
        if( (compareWith.value != args.Value) && !Skip() ){
            
            errorCss(sender.id, true);
            toggleError(sender.id,true,"The Fields Do Not Match");
            args.IsValid = false;
            return;
        }else{
            errorCss(sender.id, false);
            toggleError(sender.id,false);
        }
    }else{
        errorCss(sender.id, true);
        args.IsValid = false;
        return;
    }
    args.IsValid = true
}

function validatePhoneNumber(sender, args) { 
    if(args.Value!="" && !Skip()){
        var str=args.Value.replace(/ /g,"")
        if(!isNumeric(str)){
            if(!(isNumeric(str.substring(1)) && (str.substring(0,1) == "+"))){
                errorCss(sender.id, true);
                toggleError(sender.id,true,"Please enter a valid phone number.");
                args.IsValid = false;
                return false;
            }
        }
        else{
            errorCss(sender.id, false);
            toggleError(sender.id,false);
        }
    }
    args.IsValid = true;
    return true;  
}
          
function isNumeric(sText) {
   var ValidChars = "0123456789";
   var Char;
   for (i = 0; i < sText.length; i++) {
       Char = sText.charAt(i);
       if (ValidChars.indexOf(Char) == -1) {
          return false;
       }
    }
   return true;
}

function toggleError(id,show,txt){
    var fieldobj = parseFieldName(id, true);
    var msg = document.getElementById("msg_"+fieldobj.field);
    if(msg){
        if(show){
                msg.style.display = "block";
                msg.innerHTML = txt;
        }else{
            if(msg) msg.style.display = "none";
        }
    }
}

function errorCss( id, err )
{
    var fieldobj = parseFieldName(id, true);
    var obj = document.getElementById("con_"+fieldobj.field);
    var sum = document.getElementById("ErrorSummary");
    
    if(obj){
        if(err){
            
            if( obj.className.indexOf("fieldError")==-1 ){
                obj.className = obj.className + " fieldError";
            }
            if(sum) sum.style.display = "block";
        }else{
            if( obj.className.indexOf("fieldError")!=-1 ){
                obj.className = obj.className.substring( 0, obj.className.indexOf("fieldError") );
            }
            if(sum) sum.style.display = "none"; 
        }
    }
}

function Skip(id){
    var skipobj = document.getElementById("SkipValidation");
    var fldobj = document.getElementById(id);
    
    if(skipobj && fldobj){
        var ary = skipobj.value.split(",");
        var group = fldobj.getAttribute("CustomGroup");
        if(group != null){
            for( var i = 0; i < ary.length; i++ ){
                if( ary[i] == group ){
                    return true;
                } 
            }
        }
    }
    return false;
}



function toggleSkipGroup(group){
    var obj = document.getElementById("SkipValidation");
    if(obj){
        var str = obj.value
        
        if(str.indexOf(group) > -1){
            //Remove
			str = ( str.indexOf( "," + group  ) > -1 ? remove( str, "," + group ):remove( str, group) );
			if( str.indexOf(",")==0 ){
				str = str.substring( 1, str.length );
			}
        }else{
            //Add
			str = str + ( str == "" ? group : "," + group );
        }
		obj.value = str;
    }
}

function remove(s, t) {
    i = s.indexOf(t);
    r = "";
    if (i == -1) return s;
    r += s.substring(0,i) + remove(s.substring(i + t.length), t);
    return r;
}

function parseFieldName( id, compare ){

    var path, field
    if(id.indexOf("val_")!= -1){
        path = id.substring( 0, id.indexOf("val_") );
        field = id.substring(id.indexOf("val_") + 4);
        
        if( compare && field.indexOf("_compare")!=-1 ){
        
            field = field.substring(0, field.indexOf("_compare") + 8 );
        } else if( field.indexOf("_")!=-1 ){
            field = field.substring(0, field.indexOf("_"));
        }
        var obj = { path:path, field:field };
        return obj
    }
    return obj;    
}

// Fixes issues with RadioButtons in a repeater control
function SetUniqueRadioButton(nameregex, current)
{
   re = new RegExp(nameregex);
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == 'radio')
      {
         if (re.test(elm.name))
         {
            elm.checked = false;
         }
      }
   }
   current.checked = true;
}

function doSubmit(theForm)
{
    var myDeliveryAddRet=true;
    var myBillingAddRet=true;
    var myCCRet=true;

        if ($('ctl00_ContentPlaceHolder_Delivery_Surname').value!='' || $('ctl00_ContentPlaceHolder_Delivery_FirstName').value!='' || $('ctl00_ContentPlaceHolder_Delivery_Address1').value!='' || $('ctl00_ContentPlaceHolder_Delivery_Address3').value!='' || $('ctl00_ContentPlaceHolder_Delivery_Address4').value!='')
        {
       
            myDeliveryAddRet=validateAddress('Delivery');
        }
        
        if ($('ctl00_ContentPlaceHolder_Billing_Surname').value!='' || $('ctl00_ContentPlaceHolder_Billing_FirstName').value!='' || $('ctl00_ContentPlaceHolder_Billing_Address1').value!='' || $('ctl00_ContentPlaceHolder_Billing_Address3').value!='' || $('ctl00_ContentPlaceHolder_Billing_Address4').value!='')
        {
            myBillingAddRet=validateAddress('Billing');
        }
        
        if ($('ctl00_ContentPlaceHolder_CardNumber').value!='')
        {
            myCCRet=validateCC();
        }

        if (myDeliveryAddRet && myBillingAddRet && myCCRet) 
        {
            
            document.aspnetForm.submit();
        }
            else
        {
            if(!myDeliveryAddRet) 
                {
                    window.scrollTo(0,400);
                }
                else if (!myBillingAddRet) 
                {
                    window.scrollTo(0,880);
                }
        }
}
            
function validateCC()
{
        var myret=true;
        if (!checkfield("CardNumber","Card number is required")) myret=false;
        if (!checkfield("CardName","Name on card is required")) myret=false;
        if (!checkfield("secCode","Security code is required")) myret=false;
        if (!checkselect("CardType","Card type is required")) myret=false;
        if (!checkselect("ExpiryMonth","Expiry month required")) myret=false;
        if (!checkselect("ExpiryYear","Expiry year is required")) myret=false;
        return myret;
}

// type='Delivery' or 'Billing'
function validateAddress(type)
{
   var myret=true;
    
    if (!checkselect(type+"_Title","Title is required"))myret=false;
    if (!checkfield(type+"_FirstName","First Name is required")) myret=false;
    if (!checkfield(type+"_Surname","Surname is required")) myret=false;
    if (!checkfield(type+"_Address1","Address 1 is required")) myret=false;
    if (!checkfield(type+"_Address3","Town/city is required")) myret=false;
    if (!checkfield(type+"_Address4","County is required")) myret=false;
    if (!checkfield(type+"_Telephone","Telephone is required")) myret=false;
    if (!checkselect(type+"_Country","Country is required"))myret=false;

    if($('ctl00_ContentPlaceHolder_' + type + '_Email').value=='')
    {
        document.getElementById("divError" + type + "_Email").innerHTML="Invalid Email Address";
        document.getElementById("divError" + type + "_Email").className="errorMsg";
        document.getElementById("div" + type + "_Email").className="fieldError checkAccountField";
        myret=false;
    }
   
    return myret;
}

function checkfield(fld,msg)
{

if ($('ctl00_ContentPlaceHolder_' +fld).value=='')
    {
    document.getElementById("divError" + fld).innerHTML=msg;
    document.getElementById("divError" + fld).className="errorMsg";
    document.getElementById("div" + fld).className="fieldError checkAccountField";
     
    myret=false;
    }
else
    {
    document.getElementById("divError" + fld).innerHTML="";
    document.getElementById("divError" + fld).className="";
    document.getElementById("div" + fld).className="checkAccountField";
    myret=true;
    }
return myret;
}

function checkselect(fld,msg)
{

    if ($('ctl00_ContentPlaceHolder_' +fld).selectedIndex == 0)
    {
        document.getElementById("divError" + fld).innerHTML=msg;
        document.getElementById("divError" + fld).className="errorMsg";
        document.getElementById("div" + fld).className="fieldError checkAccountField";
        myret=false;   
    }
    else
    {
        document.getElementById("divError" + fld).innerHTML="";
        document.getElementById("divError" + fld).className="";
        document.getElementById("div" + fld).className="checkAccountField";
        myret=true;
    }
    return myret;
}

function ResetAddress(type)
    {
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Title').selectedIndex=0; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_FirstName').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Surname').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Email').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Telephone').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Address1').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Address2').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Address3').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Address4').value=''; 
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Postcode').value='';
        document.getElementById('ctl00_ContentPlaceHolder'+type+'_Country').selectedIndex=0; 
    }
