// validation
var vMsg="";
var vFormattedMsg="";
var VT_IS_NOT_NULL=1;
var VT_IS_NUMERIC=2;
var VT_IS_EMAIL=4;
var VT_IS_PHONE_NUMBER=8;
var VT_IS_US_POSTALCODE=16;
var VT_IS_CANADIAN_POSTCODE=32;
var VT_IS_EQUAL=64;
var VT_IS_DIFFERENT=128;
var VT_IS_TRUE=256;
var VT_IS_FALSE=512;
var VT_IS_CREDITCARDNUMBER=1024;
var VT_IS_NOT_TOO_YOUNG=2048;

function initValidation(){
	vMsg="";
	vFormattedMsg="";
}
function assert(vType, value, errMsg){
  	if (vType==VT_IS_NOT_NULL){
  		appMsgIfError(emptyString(value), errMsg);
  		return;
  	}
  	if (vType==VT_IS_NUMERIC){
  		appMsgIfError((value==null||!/^[0-9]+$/.test(value)), errMsg);
  		return;
  	}
  	if (vType==VT_IS_EMAIL){
  		// appMsgIfError((value==null || !/^[a-zA-Z0-9]+([\.-]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([\.-]?[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]{2,3})+$/.test(value)), errMsg);
  		// Adding '_' as a valid email character
  		appMsgIfError((value==null || !/^[a-zA-Z0-9]+([\.-]?[_-]?[\--]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([\.-]?[_-]?[\--]?[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]{2,7})+$/.test(value)), errMsg);
  		return;
  	}
  	if (vType==VT_IS_PHONE_NUMBER){
  		appMsgIfError(emptyString(value), errMsg);
  		return;
  	}
  	if (vType==VT_IS_US_POSTALCODE){
  		//appMsgIfError((value==null||!/^[0-9]{10}$/.test(value)), errMsg);
  		appMsgIfError(emptyString(value), errMsg);
  		return;
  	}
  	if (vType==VT_IS_CANADIAN_POSTCODE){
  		appMsgIfError(emptyString(value), errMsg);
  		return;
  	}
  	if (vType==VT_IS_EQUAL){
  		val1=value[0];
  		val2=value[1];
  		appMsgIfError( !((emptyString(val1)&&emptyString(val2))||val1==val2), errMsg);
  		return;
  	}
  	if (vType==VT_IS_DIFFERENT){
  		val1=value[0];
  		val2=value[1];
  		appMsgIfError( !emptyString(val1)&&!emptyString(val2) && val1==val2, errMsg);
  		return;
  	}

  	if (vType==VT_IS_TRUE){
  		appMsgIfError( value==null||!value, errMsg);
  		return;
  	}

  	if (vType==VT_IS_FALSE){
  		appMsgIfError( value==null||value, errMsg);
  		return;
  	}
  	if (vType==VT_IS_CREDITCARDNUMBER){
  		appMsgIfError((value==null||!/^[0-9\*]+$/.test(value)), errMsg);
  		return;
  	}

  	if (vType==VT_IS_NOT_TOO_YOUNG){
  		appMsgIfError( value!=null&&value=='1', errMsg);
  		return;
  	}
}


function appMsgIfError(condition, errMsg){
	if (condition){
		vMsg+=errMsg+"\n";
		vFormattedMsg+="<li>"+errMsg+"</li>";
	}
}

function isvalid(){
	return vMsg=="";
}

function getErrorMessage(){
	return vMsg;
}
function getFormattedErrorMessage(){
	return vFormattedMsg;
}
function displayErrorMessage(divName){
	msgArea = document.getElementById(divName);
	msgArea.innerHTML="<div class=\"error\">Error:"+"<ol>"+getFormattedErrorMessage()+"</ol></div>";
	msgArea.visibility="visible";
}
function emptyString(stringVar){
	if (stringVar==null || stringVar=='') return true;
	for (var index=0; index < stringVar.length; index++){
        	if (stringVar.charAt(index) != ' ') {return false;}
     	}
     	return false;
}

// changes input field to strip out all characters other than ones in filteredValues
function onlyNumeric (input, filteredValues) {
	s = input.value;
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (filteredValues.indexOf(c) != -1) returnString += c;
	}	
	input.value = returnString;
}

