/********************************************************
Copyright (c) Vantage Media Corporation 2006
This source file is bound by United States copyright law.

Content: basic JS validation functions

Author: fred
********************************************************/

Array.prototype.indexOf=function(n){for(var i=0;i<this.length;i++){if(this[i]===n){return i;}}return -1;}

function getStepFromField(field) {
	for(i=1;i<GSteps+1;i++) {
		var fields = eval('StepG'+i);
		for(x=0;x<fields.length;x++) {
			if(field == fields[x]) {
				return 'Step'+i;
			}
		}
	}
}

function ShowStep(field) {
	var activate = getStepFromField(field);
	for(i=1;i<GSteps+1;i++) {
		if('Step'+i != activate) {
			document.getElementById('Step'+i).style.display = "none";
		} else {
			document.getElementById('Step'+i).style.display = "block";
		}
	}
}

function trim(value) {
	var tmpstr = ltrim(value);
	return rtrim(tmpstr);
}

function checkSelect(name,message,color) {
	var form = document.ACMEForm;
	var fieldValue = document.getElementById(name).value;
	var invalid = new Array("-1","0");
	if(invalid.indexOf(fieldValue) != -1) {
		ShowStep(name);				
		alert(message);
		document.getElementById('l_'+name).style.color = color;
		return false;
	} else {
		document.getElementById('l_'+name).style.color = "";
		return true;
	}
}


function checkArray(form,arrayName) {
	var retval = new Array();
	for(var i=0; i < form.elements.length; i++) {
		var el = form.elements[i];
		if(el.type == "checkbox" && el.name == arrayName && el.checked) {
        	retval.push(el.value);
		}
    }
    return retval;
}

function validateCheckBoxArray(name,message,color) {
	var form = document.ACMEForm;
	var itemsChecked = checkArray(form,name+"[]");

	if(itemsChecked.length == 0) {
		ShowStep(name);
		alert(message);
		document.getElementById('l_'+name).style.color = color;
		return false;
	}
	
	document.getElementById('l_'+name).style.color = "";
	return true;
}

function replaceAll(str,from,to) {
    var idx = str.indexOf(from);
    while (idx > -1) {
        str = str.replace(from,to); 
        idx = str.indexOf(from);
    }
    return str;
}
function checkZipForm(str) { //check usa zipcode format
	if('0123456789'.indexOf(str.charAt(0))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(1))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(2))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(3))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(4))<0) {return false;}	
	return true;	
}
function checkPostalForm(str) { //check can postalcode format
	//Letters and numbers alternate
	//Certain letters never occur(I AND O)
	//The first character is even more restricted as it designates region. Regions are(from east to west, then north): A,B,C,E,G,H,J,K,L,M,N,P,R,S,T,V,X,Y 
	if('ABCEGHJKLMNPRSTVXY'.indexOf(str.charAt(0))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(1))<0) {return false;}
	if('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(str.charAt(2))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(3))<0) {return false;}
	if('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(str.charAt(4))<0) {return false;}
	if('0123456789'.indexOf(str.charAt(5))<0) {return false;}
	return true;	
}

function checkZipCode(color) {
	var form = document.ACMEForm;
	var c = form.code; //code
	var v = c.value; //code value
	var country = document.getElementById('country').value;

	var valid_usa = new Array("c1");
	var valid_can = new Array("c2");

	v = replaceAll(v," ","");
	v = replaceAll(v,"-","");
	v = v.toUpperCase();

	if (valid_usa.indexOf(country) != -1 || valid_can.indexOf(country) != -1) { //code check for USA and CAN
	
		if ((v.length < 5) || (v.length > 6)) {	
			ShowStep('code');
			alert('Please enter a valid ZIP or Postal Code.');
			document.getElementById('l_code').style.color = color;
			return false;
		} else {
			if (v.length == 5) { // usa zipcode
				if (valid_usa.indexOf(country) != -1) { 
					if (!checkZipForm(v)) {
						ShowStep('code');
						alert('Please enter a valid ZIP Code.');
						document.getElementById('l_code').style.color = color;
						return false;
					}
				} else {
					ShowStep('code');
					alert('Please enter a valid Postal Code.');
					document.getElementById('l_code').style.color = color;
					return false;
				}
			}
			if (v.length == 6) { // can postalcode
				if (valid_can.indexOf(country) != -1) {
					if (!checkPostalForm(v)) {
						ShowStep('code');
						alert('Please enter a valid Postal Code.');
						document.getElementById('l_code').style.color = color;
						return false;
					}
				} else {
					ShowStep('code');
					alert('Please enter a valid Zip Code.');
					document.getElementById('l_code').style.color = color;
					return false;
				}
			}
		}
	} else { //end USA / CAN if
		if (v == '') {
			ShowStep('code');
			alert('Please enter a Zip Code.');
			document.getElementById('l_code').style.color = color;
			return false;
		}
	}	

	document.getElementById('l_code').style.color = "";
	return true;
}

function emailCheck(color) {
	var emailStr = document.getElementById('email').value;
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray = emailStr.match(emailPat)
	if(matchArray == null) {
		ShowStep('email');
		alert('Please enter a valid email address.');
		document.getElementById('l_email').style.color = color;
		return false;
	}
	var user = matchArray[1];
	var domain = matchArray[2];
	if(user.match(userPat) == null) {
		ShowStep('email');
		alert('Please enter a valid email address.');
		document.getElementById('l_email').style.color = color;
		return false;
	}
	var IPArray = domain.match(ipDomainPat);
	if(IPArray != null) {
		  for(var i=1;i<=4;i++) {
			if(IPArray[i]>255) {
				ShowStep('email');
				alert('Please enter a valid email address.');
				document.getElementById('l_email').style.color = color;
				return false;
			}
		}
		document.getElementById('l_email').style.color = "";
		return true;
	}
	var domainArray = domain.match(domainPat);
	if(domainArray == null) {
		ShowStep('email');
		alert('Please enter a valid email address.');
		document.getElementById('l_email').style.color = color;
		return false;
	}
	var atomPat = new RegExp(atom,"g");
	var domArr = domain.match(atomPat);
	var len = domArr.length;
	if(domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
		ShowStep('email');
		alert('Please enter a valid email address.');
		document.getElementById('l_email').style.color = color;
		return false;
	}
	if(len < 2) {
		ShowStep('email');
		alert('Please enter a valid email address.');
		document.getElementById('l_email').style.color = color;
		return false;
	}
	
	document.getElementById('l_email').style.color = "";
	return true;
}

function checkName(name,msg,color) {
	var form = document.ACMEForm;
	var element = document.getElementById(name);

	var regexp = /[0-9\$\%\^\&\*\!\@\#\(\)\{\}\[\]\\\|\/\?\<\>\,\:\;\+\=\"]+/gi;
	if (element.value.search(regexp) != -1) {
		ShowStep(name);	
		alert("Your "+msg+" must contain only characters.");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}

	var regexp = /[A-Z]{2,}/gi;
	if (element.value.search(regexp) == -1) {
		ShowStep(name);	
		alert("Your "+msg+" must contain at least 2 characters.");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}	
	
	document.getElementById('l_'+name).style.color = "";
	return true;
}

function checkCheckBox(name,msg,color) {
	var form = document.ACMEForm;
		
	if(document.getElementById(name).checked == false) {
		ShowStep(name);	
		alert(msg);		
		document.getElementById('l_'+name).style.color = color;
		return false;
	}	
	
	document.getElementById('l_'+name).style.color = "";
	return true;
}

function checkAddress(name,msg,color) {
	var form = document.ACMEForm;
	var element = document.getElementById(name);

	if (element.value.length < 6) {
		ShowStep(name);	
		alert("Your "+msg+" must contain at least 6 characters.");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}

	var regexp = /\d+/gi;
	if (element.value.search(regexp) == -1)	{
		ShowStep(name);	
		alert("Your "+msg+" must contain characters and numbers.");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}

	var regexp = /[A-Z#,. -]+/gi;
	if (element.value.search(regexp) == -1) {
		ShowStep(name);	
		alert("Your "+msg+" must contain characters and numbers.");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}
	
	document.getElementById('l_'+name).style.color = "";
	return true;
}

function isInteger(s) {   
	var i;
    for(i=0;i<s.length;i++) { 
        var c = s.charAt(i);
        if(((c < "0") ||(c > "9"))) return false;
    }
    return true;
}

function stripCharsFromString(s, chars) {
	var i;
    var returnString = "";
    for(i=0;i<s.length;i++) {   
        var c = s.charAt(i);
        if(chars.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkPhone(name,msg,color) {
	var form = document.ACMEForm;
	var element = document.getElementById(name);
	
	var digits = "0123456789";
	var valid = "()- ";
	var minlength = 10;
	
	var first = element.value.substr(0,1);
	var fourth = element.value.substr(3,1);
	
	if(first == 1){	
		ShowStep(name);
		alert("A phone number cannot begin with a 1.  Please enter a valid "+msg+".");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}
	
	if(first == 0){	
		ShowStep(name);
		alert("A phone number cannot begin with a 0.  Please enter a valid "+msg+".");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}
	
	if(fourth == 0 || fourth == 1){	
		ShowStep(name);
		alert("The first digit after the area code cannot be a 0 or 1.  Please enter a valid "+msg+".");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}
	
	if(element.value == null || element.value == "") {
		ShowStep(name);
		alert("Please enter a valid "+msg+".");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}
	
	s = stripCharsFromString(element.value,valid);
	
	if(!(isInteger(s) && s.length >= minlength)) {
		ShowStep(name);
		alert("Please enter a valid "+msg+".");
		element.focus();
		document.getElementById('l_'+name).style.color = color;
		return false;
	}

	document.getElementById('l_'+name).style.color = "";
	return true;
 }




