//	<input class="required"/>
//	<span id="submitError">&nbsp;</span>
//	.input_error {
//		background-color: #EF6868;
//	}
//	for inputs on same shipping use sameship checked to skip checking.
//	modified 4/10/07

function addInputValidate(){
	var check_input = document.getElementsByTagName('input');
	var input_count = check_input.length;
	for(var i=0; i<input_count; i++){
		if('text'!=check_input[i].type && 'password'!=check_input[i].type || -1 == check_input[i].className.search(/ ?required/g )){continue}
		attachEventListener(check_input[i],"blur",validateField,false);
	}
}
addLoadEvent(addInputValidate);
function validateField(event){
	var target = getEventTarget(event);
	if( true == validateValue(target)){
		target.className=target.className.replace(/ ?input_error/g , '' );
	}else{
		target.className=target.className+' input_error';
	}
}
function validateValue(target) {
	//if(-1 != target.name.search(/save\[cc\]/) && !document.getElementById('creditcard').checked) {
		//return true;
	//}
	//check for blank
	if(''==target.value){target.className=target.className+' input_error'; return false;}
	//check for good email
	if(-1 != target.name.search(/email/)) {
		if(-1==target.value.search( /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ )) {
			return false;
		}
	}
	//check for good zip
	if(-1!=target.name.search(/zip(code)?/)) {
		var USzip=target.value.replace(/\D/g, '');
		if(-1==USzip.search(/\d{5}(-\d{4})?/) && -1==target.value.search(/[a-zA-Z]{1}\d{1}[a-zA-Z]{1}\s{1}\d{1}[a-zA-Z]{1}\d{1}/)) {
			return false;
		}
	}
	//check credit card number
	if(-1 != target.name.search(/save\[cc\]\[number\]/)) {
		var ccnumber=target.value.replace(/\D/g, '');
		if( ''==ccnumber || false==validatecc(ccnumber)) {
			return false;
		}else{
			target.value = ccnumber;
		}
	}
	//check CVV2 CID CVC CSC
	if(-1 != target.name.search(/save\[cc\]\[cvv2\]/)) {
		var cvv=target.value.replace(/\D/g , '');
		if(-1==cvv.search(/^\d{3,4}$/)) {
			return false;
		}else{
			target.value = cvv;
		}
	}
	//check phone number
	if(-1 != target.name.search(/phone|fax/)) {
		//var phone=target.value.replace(/\D/g, '');
		if(-1==target.value.search(/(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$/)) {
			return false;
		}
	}
	//check confirm field
	//hmmm.... still a work in progress
	if(-1 != target.name.search(/password_confirm/)){
		if( false == validatePassword(target.value)){
			return false;
		}
	}

	//passed all the tests
	return true;
}
function getEventTarget(event){
	var targetElement=null;
	if(typeof event.target!="undefined"){
		targetElement=event.target;
	}else{
		targetElement=event.srcElement;
	}
	while(targetElement.nodeType==3 && targetElement.parentNode!=null){
		targetElement=targetElement.parentNode;
	}
	return targetElement;
}
function validatecc(ccnumber){
	var cclength=ccnumber.length;
	var parity=cclength % 2;
	var sum=0;
	for (i=0; i < cclength; i++) {
		var ccdigit=ccnumber.charAt(i);
		if (i % 2 == parity) ccdigit=ccdigit * 2;
		if (ccdigit > 9) ccdigit=ccdigit - 9;
		sum = sum + parseInt(ccdigit);
	}
	if(sum % 10 == 0){ return validateBIN(ccnumber); }
	return false;
}
function validateBIN(ccnumber){
	var cclength=ccnumber.length;
	if( cclength == 13 ) {
		if ( 4 == ccnumber.substr(0,1) ) {return true;} //Visa
	}else if( cclength == 15 ){
		if ( 34 == ccnumber.substr(0,2) ) {return true;} //AMEX
		if ( 37 == ccnumber.substr(0,2) ) {return true;} //AMEX
	}else if( cclength == 16 ){
		if ( 4 == ccnumber.substr(0,1) ) {return true;} //Visa
		if ( 6011 == ccnumber.substr(0,4) ) {return true;} //Discover
		if ( 65 == ccnumber.substr(0,2) ) {return true;} //Discover
		if ( 51 <= ccnumber.substr(0,2) && 55 >= ccnumber.substr(0,2) ) {return true;} //MasterCard
	}
	return false;
}
function validatePassword( password_confirm ) {
	var password = document.getElementById( 'password' );
	if( password_confirm != password.value){
		password.className=password.className+' input_error';
		return false;
	}
	password.className=password.className.replace(/ ?input_error/g , '' );
}
function addFormValidate(){
	var forms = document.forms;
	var forms_length = forms.length;
	for(var i=0; i<forms_length; i++){
		thisform = this
		attachEventListener(forms[i],"submit",validateForm,true);
	}
}
addLoadEvent(addFormValidate);
function validateForm(event){
	var thisform = getEventTarget(event);
	var stopSubmit=false;
	for(var i=0; i<thisform.length; i++){
		if('input' != thisform[i].nodeName.toLowerCase() || -1 == thisform[i].className.search(/ ?required/g )){continue;}
		if(document.getElementById('sameship') != null
			&& document.getElementById('sameship').checked == true
			&& 0 == thisform[i].name.search(/^save\[shipping\](.+)$/g))
			{continue;}
		if( false == validateValue(thisform[i])){
			thisform[i].className=thisform[i].className+' input_error';
			stopSubmit=true;
		}
	}
	if( true == stopSubmit){displayProblemIndicator();}
	if( true == stopSubmit){cancelEvent(event);}
}
function cancelEvent(event){
	if (event.cancelable){
		event.preventDefault();// DOM style
	}
	event.returnValue=false;//IE
}
function displayProblemIndicator() {
	var errorText = document.createTextNode('* Please complete/correct all required fields marked in red.');
	var newPara = document.createElement("p");
	newPara.appendChild(errorText);
	var parent = document.getElementById('submitError');
	var oldChild = parent.childNodes;
	if( 0 != oldChild.length ){
		var newChild = parent.replaceChild(newPara,oldChild[0]);
	}else{
		parent.appendChild(newPara);
	}
}