var aryvalidate = new Array;
var regexAnything = '^[0-9a-zA-Z]';
var regexZipCode = '^[0-9]{5}([- /]?[0-9]{4})?$';
var regexEmail = '^([0-9a-zA-Z]([-.\w_]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$';
var regexPhone = '^[\\(]{0,1}([0-9]){3}[\\)]{0,1}[ ||-]?([^0-1]){1}([0-9]){2}[ ]?[-]?[ ]?([0-9]){4}[ ]*((x){0,1}([0-9]){1,5}){0,1}$';
var regexCC = '^3(?:[47]\\d([ -]?)\\d{4}(?:\\1\\d{4}){2}|0[0-5]\\d{11}|[68]\\d{12})$|^4(?:\\d\\d\\d)?([ -]?)\\d{4}(?:\\2\\d{4}){2}$|^6011([ -]?)\\d{4}(?:\\3\\d{4}){2}$|^5[1-5]\\d\\d([ -]?)\\d{4}(?:\\4\\d{4}){2}$|^2014\\d{11}$|^2149\\d{11}$|^2131\\d{11}$|^1800\\d{11}$|^3\\d{15}$';
var regexNumeric = '^([0-9]+(\\.)?[0-9]*)$';
var regexDate = '^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$';
var regexTime = '^\\d{1,2}:\\d{2}([ap]m)?$';
Array.prototype.inArray = function(value) {
    var i;
    for (i = 0; i < this.length; i++) {
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};
function IsStyleDisplay(elem) {
    el = elem.parentNode;
    do {
        el = el.parentNode;
        if (el.style.display == "none") {
            return false;
        }
    } while (el.nodeName.toLowerCase() != "body");
    return (elem.disabled ? false : true);
}
function validate(elem, regex) {

    /*
	Regular Expression parameters for various fields
	Zip Code:  ^[0-9]{5}([- /]?[0-9]{4})?$
	Email: ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$
	Phone: ^[\\(]{0,1}([0-9]){3}[\\)]{0,1}[ ||-]?([^0-1]){1}([0-9]){2}[ ]?[-]?[ ]?([0-9]){4}[ ]*((x){0,1}([0-9]){1,5}){0,1}$
	Anything not starting with a special charachter (default) : ^[0-9a-zA-Z]
	*/
    bReturnValue = true;
    if (regex == "") {
        regex = regexAnything;
    }
    var re = new RegExp(regex);
    
    
    
    if (elem.type == undefined) { //Entire Form Validation

        var elemfocus = -1;
        var elemmissed = 0;
        var strElementSummary = "";
        var aryRadioButtonNames = new Array();
        for (var i = 0; i < elem.length; i++) {  //Whole Form
        
						
							
                
            if (elem.elements[i].id != undefined) {
                var bElementIsDisplayed = IsStyleDisplay(elem.elements[i]);
                if (bElementIsDisplayed) {
                    var strrfv = "rfv" + elem.elements[i].id; //.substr(3);
                    rfv = document.getElementById(strrfv);
                    if (aryvalidate[elem.elements[i].id]) {
                        var re = new RegExp(aryvalidate[elem.elements[i].id]);
                    }
                    else {
                        var re = new RegExp(regex);
                    }
					
					

                    if (elem.elements[i].type == "text" || elem.elements[i].type == "textarea" || elem.elements[i].type == "password" || elem.elements[i].type == "select-one") {
                    
                        if ((!elem.elements[i].value.match(re)) && document.getElementById(strrfv) && (elem.elements[i].type != undefined)) {
                            //rfv.style.fontWeight = "bold";
                            var mooElem = $(elem.elements[i]);
		                            
				            var mooStr = "msg"+mooElem.id;
							var mooStrElem = $(mooStr);
							if(mooStrElem.get('rel')){
							    aryReturnText = mooStrElem.get('rel').split("|"); 
								mooStrElem.set('html',aryReturnText[0]);
								mooStrElem.addClass('bFail');
			                	mooStrElem.addClass('enable');
			                	mooStrElem.removeClass('disable');
			                	mooStrElem.removeClass('bSuccess');
			                }
	



                            //elem.elements[i].style.backgroundColor = "#FFCC99";
                            strElementSummary = strElementSummary + "<li>" + (elemmissed + 1) + ". ";
                            strInnerText = rfv.innerText;
                            if (rfv.innerText == undefined) {
                                strInnerText = rfv.textContent;
                            }
                            if (strrfv.indexOf('Billing') > 0) {
                                strElementSummary = strElementSummary + "Billing " + strInnerText + "\n";
                            }
                            else if (strrfv.indexOf('Shipping') > 0) {
                                strElementSummary = strElementSummary + "Shipping " + strInnerText + "\n";
                            }
                            else {
                                strElementSummary = strElementSummary + strInnerText + "\n";
                            }
                            strElementSummary += "</li>";
                            bReturnValue = false;
                            elemmissed++;
                            if (elemfocus == -1) {
                                elemfocus = i;
                            }
                        }
                    } else if (elem.elements[i].type == "radio" || elem.elements[i].type == "checkbox") {
                        try {
                            var ary = elem.elements[i].id.split("_");
                            var strrfv = "rfv" + ary[0] + '[]'; //.substr(3);
                            rfv = document.getElementById(strrfv);
                            if (rfv != null) {
                                //aryRdBtn=eval("document."+elem.name+"."+elem.elements[i].name);
                                aryRdBtn = document.getElementsByName(ary[0] + '[]');
                                bChecked = false;
                                for (j = 0; j < aryRdBtn.length; j++) {
                                    //if (eval("document."+elem.name+"."+elem.elements[i].name+"["+j+"].checked;")) {
                                    tmpBtn = aryRdBtn[j];
                                    if (tmpBtn.checked) {
                                        bChecked = true;
                                        break;
                                    }
                                }
                                if (!bChecked && !aryRadioButtonNames.inArray(ary[0] + '[]')) {
                                    strElementSummary = strElementSummary + "<li>" + (elemmissed + 1) + ". ";
                                    strInnerText = rfv.innerText;
                                    rfv.style.fontWeight = "bold";
                                    if (rfv.innerText == undefined) {
                                        strInnerText = rfv.textContent;
                                    }
                                    if (strrfv.indexOf('Billing') > 0) {
                                        strElementSummary = strElementSummary + "Billing " + strInnerText + "\n";
                                    }
                                    else if (strrfv.indexOf('Shipping') > 0) {
                                        strElementSummary = strElementSummary + "Shipping " + strInnerText + "\n";
                                    }
                                    else {
                                        strElementSummary = strElementSummary + strInnerText + "\n";
                                    }
                                    strElementSummary += "</li>";
                                    bReturnValue = false;
                                    elemmissed++;
                                    if (elemfocus == -1) {
                                        elemfocus = j;
                                    }
                                    aryRadioButtonNames.push(ary[0] + '[]');
                                }
                            }
                        } catch (e) {
                        }
                    }
                }
            }
        }
        

        
        if (!bReturnValue) {
            var strMessage = "We caught " + elemmissed + " incorrectly completed or missed field(s). Look for and correct the highlighted items, summarized below";
            if (document.getElementById('alert')) {
                document.getElementById('alert').innerHTML = "<h2>" + strMessage + "</h2><ul>" + strElementSummary + "</ul>";
                document.getElementById('alert').style.display = "block";
            }
            else {
                var strStrippedSummary = strElementSummary.replace(/(<([^>]+)>)/ig, "");
//                alert(strMessage + "\n" + strStrippedSummary);
            }
            elem.elements[elemfocus].focus();
          return false;
        }
    }
    else { //Form Element Validation
        if (elem.type == "text" || elem.type == "textarea" || elem.type == "select-one" || elem.type == "password") {

            var strrfv = "rfv" + elem.id; //.substr(3);
               
            var mooStr = "msg"+elem.id;
            var mooElem = $(mooStr);
         
			aryReturnText = mooElem.get('rel').split("|"); 
			
            if (regex != regexAnything) {
                aryvalidate[elem.id] = regex;
            }

            if(elem.id=="phone-four"){ 
            	var strCombine  = $("phone-area").value+$("phone-three").value+$("phone-four").value;
            	mooElem = $('msgPhone');
            	if(strCombine.length == 10 && IsNumeric(strCombine)){
            		var bypass = true;
            	} else {
            		var bypass = false;
            	}
            }
            
            if (((!elem.value.match(re)) && document.getElementById(strrfv)) || (!bypass && (elem.id=="phone-four"))) {
	            
                 	rfv = document.getElementById(strrfv);
               	 	mooElem.addClass('bFail');
                	mooElem.addClass('enable');
                	mooElem.removeClass('disable');
                	mooElem.removeClass('bSuccess');
                    
                    
                    
                    if(aryReturnText[0]){
	                	mooElem.set('html',aryReturnText[0]);
	                }else{
	                	mooElem.set('html','Can you try again?');
	                }
                    
                	bReturnValue = false;
              
			} else {
				
                rfv = document.getElementById(strrfv);
                if (rfv || bypass) {
                    //elem.style.backgroundColor = "";
                    mooElem.removeClass('bFail');
					mooElem.addClass('enable');
					mooElem.removeClass('disable');
                    mooElem.addClass('bSuccess');
                    if(aryReturnText[1]){
	                	mooElem.set('html',aryReturnText[1]);
	                }else{
	                	mooElem.set('html','Great!');
	                }
                    
                    
                    

                    	
                    bReturnValue = true;
                }
            }
        }
    }
    return bReturnValue;
}
function doClear(theText) {
    if (theText.value == theText.defaultValue) {
        theText.value = ""
    }
}
function IsNumeric(input)
{
   return (input - 0) == input && input.length > 0;
}