// field object constructor (jea:7/28/00)
function field(desc,type,req) {
	this.desc = desc;
	this.type = type;
	this.req = req;
}

// master validation function (jea:7/27/00)
function isValid(sForm, oFields) {
	var oForm = eval("document." + sForm);
	var oErrors = new Array
	var lCount = 0;
	var strCVS = 0;
	var strArx = 0;

	for (var i in oFields) {
	
		// pass every field to the appropriate validation function
		var oField = eval("oForm." + i);
		if (oFields[i].req || oField.value.length > 0) 
		{
			
			
			// only check fields that have a value or are required
			if (!(eval("is" + oFields[i].type + "(oField)"))) {
				oErrors[lCount] = oFields[i].desc;
				lCount++;
			}
		}
		var oFieldType = oFields[i].type
		//Changes made by WIPRO on 06-10-2006
		//To check whether the entered store number is a CVS store number
		if(oFieldType == 'StoreNo' && oField.value != '') {
			var oFormnew = window.parent.data.document.frmData;
			var arrCVSstores = oFormnew.cvsstorelist.value.split("|")
			for (var i=0;i < arrCVSstores.length; i++)	{
				var arrCvsSingleStore = arrCVSstores[i].split(",")
				if (arrCvsSingleStore[0] == oField.value || arrCvsSingleStore[1] == oField.value ) {
					strCVS = 1;					
					var w = 600;
					var h= 430;
					if (document.all) {
						w = document.body.clientWidth;
						h = document.body.clientHeight;
					}
					else if (document.layers) {
						w = window.innerWidth;
						h = window.innerHeight;
					}
					var x = window.screenLeft;
					var y = window.screenTop;
					var popW = 475, popH = 175;
					var leftPos = ((w-popW)/2)+x, topPos = ((h-popH)/2)+y-50;
					window.open('storefinder/cvspopup.asp','CVSPopup',"width=475,height=175,top=" + topPos + ",left=" + leftPos + ",location=0,status=0,scrollbars=true,menubar=0,resizable=0")
					//ModalWindowOpen(leftPos,topPos,'EventHandlerMethod()');
					return false;
				}
			}					
		}

		//Changes made by wipro on 10/03/2006 to show the temporary Arx store non-availability
		if(oFieldType == 'StoreNo' && oField.value != ''){
			var oFormArxnew = window.parent.data.document.frmData;
			var arrArxstores = oFormArxnew.arxstorelist.value.split("|")
			for (var i=0;i < arrArxstores.length; i++) {
				var arrArxSingleStore = arrArxstores[i].split(",")
				if (arrArxSingleStore[0] == oField.value || arrArxSingleStore[1] == oField.value ) {
					strArx = 1;					
					alert("You have selected a location that is temporarily unavailable for internet services.  Please select another location, or contact your pharmacy of choice directly.  We apologize for the inconvenience.");
					return false;
				}
			}
		}
		//End of Changes made by wipro on 10/03/2006 to show the temporary Arx store non-availability
	}
			
	if (lCount > 0 && strCVS != 1 && strArx != 1) {
	
		// must be some errors
		var sMessage = "Please enter valid\n";
		for (i = 0; i < lCount; i++) {
			sMessage += "- " + oErrors[i] + "\n";
		}
		alert(sMessage);
		return false;
	} 
	else if (strCVS == 1)
	{
		return false;
	}
	else if (strArx == 1){
		return false;
	}

	else {
		return true;
	}
}

// check for empty strings (jea:7/27/00)
function isString(oField) {
	return (oField.value == "") ? false : true;
}

// check for valid e-mail (jea:7/27/00)
function isEmail(oField) {
	//var re = /^(\w+@\w+\.\w+)$/;
	var re = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
	return re.test(oField.value);
}

// check for valid zip code (blir:7/20/00)
function isPostal(oField) {
	var re = /^(\d{5})$/;
	return re.test(oField.value);
}

// check for valid zip extension
function isPostal4(oField) {
	var re = /^(\d{4})$/;
	return re.test(oField.value);
}

// confirm that field is all numerics (jea:7/20/00) -- deprecated?
function isNumeric(oField) {
	var re = /^(\d+)$/;
	return re.test(oField.value);
}

// make sure they made some selection (jea:7/27/00)
// this assumes that layout options, like lines, are <= 0
function isSelect(oField) {
	var re = /[a-zA-Z:]/;	// \D gives bad result
	var val = oField.options[oField.selectedIndex].value;
	// true if option value > 0 or non-numeric
	return (val > 0 || re.test(val)) ? true : false;
}

// make sure one radio button was checked (jea:7/27/00)
function isRadio(oField) {
	for (var i = 0; i < oField.length; i++) {
		// cycle through each item in the radio collection
		if (oField[i].checked) { return true; }
	}
	// if we made it here then no radio is checked
	return false;
}

// allow only future expiration dates (jea:10/5/00)
function isCCExpire(oField) {
	if (isDate(oField)) {
		// this date is generated so follows mm/dd/yy
		var re = /^((\d{1,2})\/(\d{1,2})\/(\d{2,4}))$/;
		var arMatch = re.exec(oField.value);
		var iYear = cleanYear(arMatch[4]);
		// -1 on month seems necessary for js date glitch
		var oDate = new Date(iYear, arMatch[2] - 1, arMatch[3]);
		var oThisDate = new Date();
		if (oDate > oThisDate) { return true; }
	}
	// invalid date
	return false;
}

// make sure that date entered is valid birthday (jea:8/23/00)
function isBirthDate(oField) {
	if (isDate(oField)) {
		var re = /^((\d{1,2})[\/-\\](\d{1,2})[\/-\\](\d{2,4}))$/;
		var arMatch = re.exec(oField.value);
		var iYear = cleanYear(arMatch[4]);
		// -1 on month seems necessary for js date glitch
		var oDate = new Date(iYear, arMatch[2] - 1, arMatch[3]);
		var oThisDate = new Date();
		var iThisYear = cleanYear(oThisDate.getYear());
		var iMaxAge = 120;		// not many people older than that
		
		if (oDate < oThisDate && iYear > (iThisYear - iMaxAge)) {
			// can't have birthday in future or more than MaxAge
			return true;
		}
	}
	// invalid birth date
	return false;
}

// make sure that a date has been entered (jea:7/27/00)
// allows dashes or slashes, m/d/yy or mm/dd/yyyy
function isDate(oField) {
	var re = /^((\d{1,2})[\/-\\](\d{1,2})[\/-\\](\d{2,4}))$/;
	if (re.test(oField.value)) {
		// format is right--now check each date value
		var arMatch = re.exec(oField.value);
		var iMonth = arMatch[2];
		var iDay = arMatch[3];
		var iYear = cleanYear(arMatch[4]);
		
		if (iMonth <= 12 && iMonth >= 1 && iDay <= 31 && iDay >= 1 && iYear <= 2010 && iYear >= 1850) {
			return true;
		}
	} 
	// invalid date format
	return false;
}

// make years four digits (jea:8/23/00)
function cleanYear(sYear) {
	if (sYear.length == 2) {
		// assume century break on xx10
		sYear = (sYear > 10 ? "19" : "20") + sYear;
	}
	return sYear;
}

// confirm that phone number has right number of digits (jea:7/27/00)
// we don't care how they may have formatted it
function isPhone(oField) {
	var sPhone = toNumeric(oField.value);
	return (sPhone.length == 10) ? true : false;
}

// validate social security number (jea:8/25/00)
function isSSN(oField) {
	var sSSN = toNumeric(oField.value);
	return (sSSN.length == 9) ? true : false;
}

// do Mod10 check on CCN (jea:10/12/00)
function isCCN(oField) {
	var sCCN = toNumeric(oField.value)
	
	// temp validation to check out with test CCN
	//var re = /^41{14,15}$/;
	//if (re.test(sCCN)) { return true; }
	// end temp stuff ---------------------------
	
	var re = /^\d{15,16}$/;
	// fail if wrong length
	if (!(re.test(sCCN))) {	return false; }

	var lLength = sCCN.length;
  	var bEven = lLength & 1;
	var lCheckSum = 0;

	for (var i = 0; i < lLength; i++) {
		var thisNum = parseInt(sCCN.charAt(i));
		if (!((i & 1) ^ bEven)) {
			thisNum *= 2;
			if (thisNum > 9) { thisNum -= 9; }
		}
		lCheckSum += thisNum;
	}
	// fail if non-zero Mod10
	if (lCheckSum % 10 != 0) { return false; }
	return true;
}

// validate prescription #
function isPrescNo(oField) {
	var re = /^(\d{4,7})$/;
	return re.test(oField.value);
}

// validate pharmacy #
function isPharmNo(oField) {
	var re = /^(\d+)$/;
	return re.test(oField.value);
}

// validate store # against list in hidden frame (jea:11/13/00)
// also notify the customer if the store has been renumbered.
function isStoreNo(oField) {
	var oForm = window.parent.data.document.frmData;
	//var sStoreList = oForm.storelist.value;
	var arrStores = oForm.storelist.value.split("|")
	
	//Check for value enter. If not entered, alert user--Sunil S. Karkera
	if (oField.value.length ==0)
		{
		return oField.value;
		}
	
			
	for (var i = 0;i < arrStores.length;++i){
		var arrSingleStore = arrStores[i].split(",")
		if (arrSingleStore[0] == oField.value) {
			return true;
		}
	}
	for (var i = 0;i < arrStores.length;++i){
		var arrSingleStore = arrStores[i].split(",")
		if (arrSingleStore[1] == oField.value) {
			alert("This pharmacy number has changed. Please make a note of this for future reference.\n\n-The new pharmacy number is "+arrSingleStore[0]+".")
			oField.value = arrSingleStore[0];
			return true;
		}
	}
	//return sStoreList.search(","+oField.value+",") != -1 ? true : false; 
}

// converts a field to all numbers (jea:7/27/00)
// should change to use regexp
function toNumeric(sField) {
	var sNum = "";
	for (var i = 0; i < sField.length; i++) {
		var sChar = sField.substring(i, i + 1);
		if (sChar >= "0" && sChar <= "9") {
			sNum += sChar;
		}
	}
	return sNum;
}