//Author: Stuart Cochrane
//URL: www.freecontactform.com
//Email: stuartc1@gmail.com
//Date: 3rd July 2007
//Version: 3.0 Beta
//License: Free to use and edit, but all comments must remain intact.

//SPECIFY ALL REQUIRED FIELDS AND
//VALIDATION TYPE

//EXAMPLES:
//one or more characters
//required.add('[ FIELDID ]', 'NOT_EMPTY');
//alpha characters, no spaces
//required.add('[ FIELDID ]', 'ALPHA');
//alpha characters, accept spaces
//required.add('[ FIELDID ]', 'ALPHASPACE');
//numeric characters, no spaces
//required.add('[ FIELDID ]', 'NUMERIC');
//numeric characters, also accepts +-.
//required.add('[ FIELDID ]', 'NUMERICPLUS');
//alpha and numeric characters, no spaces
//required.add('[ FIELDID ]', 'ALPHANUM');
//alpha and numeric characters, accept spaces
//required.add('[ FIELDID ]', 'ALPHANUMSPACE');
//email address
//required.add('[ FIELDID ]', 'EMAIL');
//date format yyyy-mm-dd, accepts - or / separators
//required.add('[ FIELDID ]', 'YYYYMMDD');
//date format dd-mm-yyyy, accepts - or / separators
//required.add('[ FIELDID ]', 'DDMMYYYY');
//date format mm-dd-yyyy, accepts - or / separators
//required.add('[ FIELDID ]', 'MMDDYYYY');
//enter own regular expression, example: '^[0-9]{3}$'
//required.add('[ FIELDID ]', '[ REGULAR EXPRESSION ]');

//NOTES:
//[ FIELD ID ] = REPLACE WITH ACTUAL FIELD ID VALUE
//example: <input type="text" name="THIS" ID="THIS"> = THIS

//to specify your own regular expression,
//enter the literal regex as type
//example: required.add('fieldid', '^[0-9]{3}$');
//note: no leading or preceeding / (slash) is required!


function $$(id) {
	try {
		var tmp = document.getElementById(id).value;
	}
	catch(e) {
		alert("Field " + id + " does not exist!\nvalidation is configured on a field with no ID");
		return false;
	}
	if(tmp == "") {
//		alert("Field " + id + " cannot be empty");
//		document.getElementById(id).style.background='RED';
		document.getElementById(id).style.border='2px solid red';


		return false;
	}
	return tmp;
}

var required = {
		field : [],
		add : function(name, type) {
	this.field[this.field.length] = [name,type];
},
out : function() {
	return this.field;
}
}

var validate = {

		check : function() {
	var tmp;
	var  validationcorrect=true;

	for(var i=0; i<required.field.length; i++) {
		document.getElementById(required.field[i][0]).style.border='1px solid #808080';
	}
//	loop all required fields
	for(var i=0; i<required.field.length; i++) {
//		check the form field exists
		this.tmp = $$(required.field[i][0]);
		if(this.tmp) {
			if(this.checkit(required.field[i][0],required.field[i][1])) {
//				validated okay

			}
			else {
				//alert("Field "+required.field[i][0]+" not valid\n");
				validationcorrect=false
				document.getElementById(required.field[i][0]).style.border='2px solid orange';

			}
		} else {
			try {
				validationcorrect=false;		
			} catch(e) { }

			validationcorrect=false

		}
	} // for
	return validationcorrect;
},

checkit : function(value,type) {
	exp : '';
switch(type) {

case "NOT_EMPTY":
	if(this.trim($$(value)).length < 1) { return false; } else { return true; }
	break;

case "ALPHA":
	exp = /^[A-Za-z]+$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "ALPHASPACE":
	exp = /^[A-Za-z ]+$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "NUMERIC":
	exp = /^[0-9]+$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "NUMERICPLUS":
	exp = /(^-*\d+$)|(^-*\d+\.\d+$)/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "ALPHANUM":
	exp = /^[a-zA-Z0-9]+$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "ALPHANUMSPACE":
	exp = /^[a-zA-Z0-9 ]+$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "EMAIL":
	exp = /^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "YYYYMMDD":
	exp = /^(19|20)[0-9][0-9][- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "DDMMYYYY":
	exp = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9][0-9]$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "MMDDYYYY":
	exp = /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/;
	if($$(value).match(exp)==null) { return false; } else { return true; }
	break;

case "USNUMBER":
	if(checkNumber($$(value))) {
		return true; 
	} else { return false; }
	break;

case "USPOSTAL":
	if(checkPostalCode($$(value))) {
		return true; 
	} else { return false; }
	break;


default:
	exp = new RegExp(type);
if($$(value).match(exp)==null) { return false; } else { return true; }
} // switch
},
trim : function(s) {
	return s.replace(/^\s+/, '').replace(/\s+$/, '');
}

}
function $val(id) {
	return document.getElementById(id);
}
function trim(id) {
	$val(id).value = $val(id).value.replace(/^\s+/, '').replace(/\s+$/, '');
}
function checkNumber(v) {
	
	var regex = /^(\()?(\d{3})([\)-\. ])?(\d{3})([-\. ])?(\d{4})$/;
	return  regex.test(v);
}



function checkPostalCode(value) {
	value = value.toUpperCase();
	
	value=value.replace(/^\s+/, '').replace(/\s+$/, '');  //Perform Trim Function
	var regex = /((^\d{5}([- |]\d{4})?$)|(^[A-Z]\d[A-Z][- |]\d[A-Z]\d$))/;
	if( value !='' && regex.test(value)){
		return true;
	}
	return false;
}

/*
  Validation Funcion for checking the radion button  is checked or not.

 */
function checkRadio() {

	var form=document.getElementById('fcform2');
	var statusFlag=false;
	var choice = form.dropmode;
	 for (i = 0; i < choice.length; i++) {
		 choice[i].style.border='none';
		}
	for (i = 0; i < choice.length; i++) {
		if (choice[i].checked == true )
		{
			statusFlag=true;
			break  
		}
	}
 if(!statusFlag)
 {
	 for (i = 0; i < choice.length; i++) {
		 choice[i].style.border='1px solid red';
		}
  } //end of status flag
  return statusFlag;
}
//End of uncheck radion button


function validateSelectList (elementToCheck)
{
	document.getElementById(elementToCheck+'wrapper').style.border='none';
	   if(document.getElementById(elementToCheck).value=='')
	   {
		   document.getElementById(elementToCheck+'wrapper').style.border='1px solid red';
		   
		   return false;
	   }
	   return true;
}

function specificModel(elementToCheck)
{
	document.getElementById(elementToCheck).style.border='1px solid #808080';
	if(document.getElementById('model').value=='Other')  //Checking Model
	{
		
		 if(document.getElementById(elementToCheck).value=='')
		   {
			   document.getElementById(elementToCheck).style.border='1px solid red';
			   return false;
		   }
	}
	return true;
}
function getDropMode() {

	var form=document.getElementById('fcform2');
	var statusFlag=false;
	var choice = form.dropmode;
	 for (i = 0; i < choice.length; i++) {
		if (choice[i].checked == true )
		{
		return choice[i].value;
		}
	}

}

function copyAddress(control)
{
      if(control.checked)
      {
	  document.getElementById('shippingaddress').value=document.getElementById('billingaddress').value;
      document.getElementById('shippingaddressdetail').value=document.getElementById('billingaddressdetail').value;
      document.getElementById('shippingcity').value=document.getElementById('billingcity').value;
      document.getElementById('shippingstate').value=document.getElementById('billingstate').value;
      document.getElementById('shippingzip').value=document.getElementById('billingzip').value;
      document.getElementById('shippingphone').value=document.getElementById('billingphone').value;
      document.getElementById('shippingphone1').value=document.getElementById('billingphone1').value;
      }	
}




