﻿// VALIDATION

function validateForm(sContainer){
    //var oContainer=document.getElementById(sContainer);
    var oContainer=$("#"+sContainer)[0];
    if(!oContainer){alert("Bad object");return false;}
    var bValid=true;
    //var oF,cF=oContainer.getElementsByTagName("input");
    var oF,cF=$("input, select");
    var cRad,bFoundOne;
    var ValidationMessage = new Array();
    var cRequired,cValue;
    var oMsgSpan,iTop=0,iLeft=0,iWidth=0,oBM;
    for(x=cF.length-1;x>=0;x--){
        oF=cF[x];
        while(ValidationMessage.length>0){ValidationMessage.pop();}
        cRequired=checkClass(oF,"v_required");
        switch(oF.type){
            case "text":
                cValue=oF.value;
                if(cRequired&&(cValue==""||cValue==ttt12)){ValidationMessage.push(ttt12);}
                if(checkClass(oF,"v_date")&&!valDate(cValue)){ValidationMessage.push("mm/dd/yyyy");}
                if(checkClass(oF,"v_state")&&!valStateCode(cValue)){ValidationMessage.push(ttt13);}
                if(checkClass(oF,"v_email")&&!valEmail(cValue)){ValidationMessage.push(ttt14);}
                if(checkClass(oF,"v_zipcode")&&!valZip(cValue)){ValidationMessage.push(ttt15);}
                if(checkClass(oF,"v_phone")&&!valPhone(cValue)){ValidationMessage.push(ttt16);}
                if(checkClass(oF,"v_fullname")&&!valFullname(cValue)){ValidationMessage.push(ttt24);}
               break;
            case "select-one":
                if(cRequired&&oF.selectedIndex==0){ValidationMessage.push(ttt12);}
                break;
            case "radio":
                if(cRequired){
                    // get all radios with this name
                    // make sure at least one is checked
                    bFoundOne=false;
                    cRad=document.getElementsByName(oF.name);
                    for(y=0;y<cRad.length;y++){if(cRad[y].checked){bFoundOne=true;}}
                    if(!bFoundOne){ValidationMessage.push(ttt12);}
                }
                break;
        }// switch
        //oMsgSpan=document.getElementById(oF.id+"_msg");
        //if(oMsgSpan){oMsgSpan.innerHTML=""};
        if(ValidationMessage.length>0){
            bValid=false;
            oF.value=ValidationMessage.join(" ");
            oF.style.color="#c00";
            oF.style.fontWeight="bold";
            oF.onclick=function(){this.style.color="";this.style.fontWeight="";this.value="";clearThis(this);}
            oF.onfocus=function(){this.style.color="";this.style.fontWeight="";this.value="";clearThis(this);}
            oF.onkeypress=function(){this.onclick=function(){}}
            /*
            if(!oMsgSpan){
                oMsgSpan=document.createElement("span");
                oMsgSpan.id=oF.id+"_msg";
                oMsgSpan.className="err";
                if(document.getBoxObjectFor){
                    var oBM = document.getBoxObjectFor(oF); 
                    iTop=oBM.y;
                    iLeft=oBM.x;
                    iWidth=oBM.width;
                }
                else if (oF.getBoundingClientRect){
                    oBM=oF.getBoundingClientRect();
                    iTop=oBM.top+document.body.scrollTop;
                    iLeft=oBM.left;
                    iWidth=oBM.right-oBM.left;
                }
                if(oF.type=="radio"){iLeft+=22;}
                oMsgSpan.style.top=iTop+4;
                oMsgSpan.style.left=iLeft+iWidth+5;
                oContainer.appendChild(oMsgSpan);
             }
            oMsgSpan.innerHTML=ValidationMessage.join(" ");
            //oF.onchange=eval("function(){clearMsg('" + oMsgSpan.id + "')}");
            oMsgSpan=null;
            */
        }
    }// next
    if(!bValid){alert(ttt1);}
    return bValid;
}
function clearThis(w){
    w.onclick=function(){}
    w.onfocus=function(){}
}
function checkClass(obj,className){
    return obj.className.indexOf(className)!=-1;
}
function clearMsg(msgID){
    document.getElementById(msgID).innerHTML="";
}

function valFullname(val){
	var oReg=new RegExp(/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/);
	if(oReg.test(val)||val==""){
		return true;
		}
	else{
		return false;
	}
}

function valNum(){
	var iK = window.event.keyCode;
	if(iK<48||iK>57){
		event.returnValue=null;
	}
}
function valStateCode(sSC){
	var sStates=",AL,AK,AZ,AR,CA,CO,CT,DE,DC,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY,AB,BC,MB,NB,NL,NT,NS,NU,PE,SK,ON,QC,YT,"
	var sSearch=","+sSC.toUpperCase()+",";
	if(sStates.indexOf(sSearch)==-1&&sSearch!=",,"){
		return false;
	}
	else{
		return true;
	}
}
function valZip(val){
    val=val.toUpperCase();
	var oRegUS=new RegExp(/^((\d{5}-\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d))$/);
	var oRegCA=new RegExp(/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/);
	var oRegPH=new RegExp(/^((\d{4}))$/);
	if(oRegUS.test(val)||oRegCA.test(val)||oRegPH.test(val)||val==""){
		return true;
		}
	else{
		return false;
	}
}
function valEmail(val){
	var oReg=new RegExp(/^[a-zA-Z0-9][\w\.\-\']*[a-zA-Z0-9]@[\w-\.]*[a-zA-Z0-9]\.[a-zA-Z]{2,7}$/);
	if(oReg.test(val)||val==""){
		return true;
		}
	else{
		return false;
	}
}

function valPhone(val){
	var oReg=new RegExp(/\s*([\(]?)\[?\s*\d{3}\s*\]?[\)]?\s*[\-]?[\.]?\s*\d{3}\s*[\-]?[\.]?\s*\d{4}/);
	var oRegPH=new RegExp(/\s*([\(]?)\[?\s*\d{0,1}\s*\]?[\)]?\s*[\-]?[\.]?\s*\d{3}\s*[\-]?[\.]?\s*\d{4}/);
	if(oReg.test(val)||oRegPH.test(val)||val==""){
		return true;
		}
	else{
		return false;
	}
}

function valDate(dateStr){
	if(dateStr==""){return true;}
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is format OK?
	if (matchArray == null) {
	  //alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
	  return false;
	}

	month = matchArray[1];
	day = matchArray[3];
	year = matchArray[5];

	if (month < 1 || month > 12) {
	  //alert("Month must be between 1 and 12; please enter a valid date.");
	  return false;
	}
	if (day < 1 || day > 31) {
	  //alert("Day must be between 1 and 31; please enter a valid date.");
	  return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
	  alert("Month " + month + " doesn't have 31 days; please enter a valid date.")
	  return false;
	}
	if (month == 2) {
	  var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	  if (day > 29 || (day==29 && !isleap)) {
	    alert("February " + year + " doesn't have " + day + " days; please enter a valid date.");
	    return false;
	  }
	}
	return true;
}



function checkCC(checkCCNumber){
	// validate cc info
	if(checkCCNumber==null){checkCCNumber=true}
	var oCCType=$(".frmCCType")[0];
	var oCCNum=$(".frmCCnum")[0];
	var oCCcvv2=$(".frmCCcvv2")[0];
	var oCCmm=$(".frmCCExpMonth")[0];
	var oCCyy=$(".frmCCExpYear")[0];
	var oCCName=$(".frmCCName")[0];
	var oCCAdd=$(".frmCCAddress")[0];
	var oCCZip=$(".frmCCZip")[0];
	var oCCExpDate=$("#frmCCExpDate")[0];
	var oCCLastFour=null;
	var oCCcvv2=$(".frmCCcvv2")[0];

	if(oCCType.selectedIndex==0){alert(ttt4);return false;}
	if(!checkVal(oCCNum, "Card Number")){return false;}
	if(!checkVal(oCCName, "Name on card")){return false;}
	if(!checkVal(oCCAdd, "Card Billing Address")){return false;}
	if(!checkVal(oCCZip, "Card Billing Zip Code")){return false;}
	//if(oCCZip.value.length!=5){alert("Please enter a valid zip code.");oCCZip.select();return false;}
	if(!valZip(oCCZip.value)){alert(ttt3);oCCZip.select();return false;}
	
	var sCCNum=oCCNum.value;
	var sCCType=oCCType.options[oCCType.selectedIndex].value;

    if(checkCCNumber){
	    if (!LuhnCheck(sCCNum) || !validateCCNum(sCCType,sCCNum)){
		    alert(ttt2);
		    return false;
	    }
	}
	oCCExpDate.value=oCCmm.value+"/"+oCCyy.value;			
	if(!isValidExpDate(oCCExpDate)){
		alert(ttt5);
		return false;
	}
	oCCExpDate.value=oCCmm.value+"/28/20"+oCCyy.value; // not presently used
	return true;
}
function checkVal(oWhich, sName){
	if(oWhich.value==""){
		alert(ttt6+" "+sName+".");
		oWhich.focus();
		return false;
	}
	else{return true;}
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) 
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
    
  return result;
}
function validateCCNum(cardType,cardNum)
{
	var result = false;
	cardType = cardType.toUpperCase();
	
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	switch (cardType)
	{
		case "3":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "2":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "4":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "5":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "6":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
	}
	return result;
}
function isValidExpDate(formField)
{
	var result = true;
	var formValue = formField.value;
  
 	if (result && (formField.value.length>0))
 	{
 		var elems = formValue.split("/");
 		
 		result = (elems.length == 2); // should be two components
 		var expired = false;

 		if (result)
 		{
 			var month = parseInt(elems[0],10);
 			var year = parseInt(elems[1],10);
 			if (elems[1].length == 2)
 				year += 2000;
 			var now = new Date();
 			var nowMonth = now.getMonth() + 1;
 			var nowYear = now.getFullYear();
 			expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
			result=true;
 		}
 		
  		if (!result){}
		else if (expired){result = false;}
	} 
	
	return result;
}

var bNumberIsValid=false;
function checkCA(){
    // check to see if account # exists for this RDS
    var accntNum=$(".frmCANumber").val();
    if(accntNum==""){return false;}
    clearAlert();
    bNumberIsValid=false;
    $("#AccountConfirm").html(ttt17+" . . .");
    $(".btnCheckCA")[0].disabled=true;
    var accntName="";
    $.post("/order/services/CheckHouseAccount.ashx", {an:accntNum,rds:_ThisRDS}, function(data){
        if(data==""){
            $("#AccountConfirm").html(ttt18+" . . .");
            window.setTimeout("clearAlert()", 3000);        
        }
        else{
            if(data=="EXISTS"){
                $("#AccountConfirm").html(ttt19+" . . .");
                window.setTimeout("clearAlert()", 3000);   
            }
            else{
                bNumberIsValid=true;
                accntName=data;
                // show message
                $("#AccountConfirm").html(accntName);
                $("#ConfirmCheck").css("visibility","visible");
                $(".btnSaveCA")[0].disabled=false;
            }

        }
    });
    return bNumberIsValid;
}


function clearAlert(){
    $("#AccountConfirm").html("&nbsp;");
    $("#ConfirmCheck").css("visibility","hidden");
    $(".btnCheckCA")[0].disabled=false;
    $(".btnSaveCA")[0].disabled=true;
}
