
var bAllow = false;

function isNumber(value) {
	for (var i=0; i < value.length; i++) {
		a = parseInt(value.charAt(i));
		if (isNaN(a)) {
			return false;
			break;
		}
	}
	return true;
}

function isDate(strDate){
	if (dateCheck(strDate, '%m/%d/%y') || dateCheck(strDate, '%d/%m/%y') ||
    dateCheck(strDate, '%m-%d-%y') || dateCheck(strDate, '%d-%m-%y'))
		{return true;}
	else
		{return false;}
}

function ResetForm(form)
{
	var e;
	for (var i = 0; i < form.length; i++) {
		e = form.elements[i];
		e.required=false;
		e.number=false;
		e.email=false;
		e.creditcardnumber=false;
		e.phonenumber=false;
		e.password=false;
		e.ssn=false;
		e.quantitybox=false;
	}
}

function stripChar(sValue, sChar) {
	var i, tempChar, buildString;
	buildString = "";
	for (var i=0; i<sValue.length; i++) {
		tempChar = sValue.charAt(i);
		if (tempChar != sChar) {
			buildString = buildString + tempChar;
		}
	}
	return buildString;
}

function ValidateForm(form) {
	var e, title, empty_fields, char_check, invalid_faxNumber, invalid_card, month, year, invalid_date, eMail, invalid_eMail;
	var strDate;
	var iQuantity, quantity_check, checkSpecial, tempError, special_Error, msg, upperLine, lowerLine;
	var num, invalid_phoneNumber, passwd_mismatch, invalid_ssn;
	var strRadioButtonNames;
	var RadioExists;
	var RadioCnt;
	var RadioChecked;
	var ProdAttrCount;
	ProdAttrCount=1;
	strRadioButtonNames=";";
	msg = "";
	empty_fields = "";
	char_check = "";
	special_Error = "";
	tempError = "";
	num = form.length;
	var PasswordSet;
	var PasswordStr;
	for (var i = 0; i < form.length; i++) {
		e = form.elements[i];
		if ((e.title == null)||(e.title == "")) {
			title = e.name;
		} else {
			title = e.title;
		}
		if (((e.type == "text") || (e.type == "textarea")||(e.type == "password")) && !e.special && !e.disabled) {
			if (e.value.length <= 0 && e.required) {
				empty_fields += "\n            " + title;
				continue;
			}
			if (e.number) {
				num = e.value;
				num = stripChar(num, ".");
				num = stripChar(num, ",");
				if (!isNumber(num) || num.length>10) {
					char_check += "\n             " + title;
				}
			}
			if (e.creditcardnumber) {
				e.value = stripChar(e.value, " "); 
				e.value = stripChar(e.value, "-"); 
				invalid_card = isCardNumValid(e.value);
			}			
			if (e.email) {
				eMail = e.value;
				if (eMail.length > 0) {
					if ((eMail.indexOf("@") != -1) && (eMail.indexOf(".") != -1)) {
						invalid_eMail = false;
					} else {
						invalid_eMail = true;
					}
				}	
			}
            if (e.name == "txtEmail") {
				eMail = e.value;
				if ((eMail.indexOf("@") != -1) && (eMail.indexOf(".") != -1)) {
					invalid_eMail = false;
				} else {
					invalid_eMail = true;
				}
			}	
			if (e.phonenumber) {
				if (e.value !="") {
					var isFax = e.title.indexOf("Fax");
					if(isFax >= 0 ) {
						num = e.value;
						num = stripChar(num, " ");
						num = stripChar(num, "-");
						num = stripChar(num, "+");
						if (num.length < 10) {
							invalid_faxNumber = true;
						}	
					} else {		
						num = e.value;
						num = stripChar(num, " ");
						num = stripChar(num, "-");
						num = stripChar(num, "+");
						if (num.length < 10) {
							invalid_phoneNumber = true;
						}	
					}
				}
			}
			if (e.ssn) {
				if (e.value !="") {
					num = e.value;
					num = stripChar(num, "-");
					if (num.length != 9 || !isNumber(num)) {
						invalid_ssn = true;
					}	
				}
			}
			if (e.date) {
				if (e.value !="") {
					strDate= e.value;
					if (!isDate(strDate)) {
						invalid_date = true;
					}	
				}
			}
		}
		if (e.quantitybox) {
			iQuantity = e.value;
			if (!isNumber(iQuantity)) {
				quantity_check = true;
			}
			if (parseInt(iQuantity) < 0) {
				quantity_check = true;
			}
			if ((iQuantity) < 1) {
				quantity_check = true;
			}
		}
		if (e.password) {
			if (PasswordSet==true) {
				if (e.value != PasswordStr) {
					passwd_mismatch = true;
				}
			} else {
				PasswordSet=true;
				PasswordStr=e.value;
			}
		}
		if (e.type=="select-one") {	
			if (e.required) {		
				if (e.options[e.options.selectedIndex].value == "" ||e.options[e.options.selectedIndex].value == "-1" || (e.options[e.options.selectedIndex].value == "NONE" && e.name.indexOf("cboShipping")>-1) ||(e.options[e.options.selectedIndex].value == "0" && e.name.indexOf("cboShipChoices")>-1)) {
					empty_fields += "\n            " + title;
					continue;
				}
			}
		}
		if (e.type == "radio" && e.required) {
			if (strRadioButtonNames.indexOf(";" + e.name + ";") == -1) {
				RadioExists=true;
				RadioChecked=false;
				RadioCnt=0;
				strRadioButtonNames=strRadioButtonNames + e.name + ";";
				if (form.elements[e.name].checked==true) {
					RadioChecked=true;
				} else if (form.elements[e.name].checked==false){
					empty_fields += "\n            " + title;
				} else {			
					do {
						if (form.elements[e.name][RadioCnt]==undefined) {
							RadioExists=false;
						} else {
							if (form.elements[e.name][RadioCnt].checked==true) {RadioChecked=true;}
						}
						RadioCnt=++RadioCnt;
					}while(RadioExists==true);
					if (RadioChecked==false) {
						empty_fields += "\n            " + title;
						continue;
					}
				}
			}
		}
	}
	
	if (!empty_fields && !char_check && !invalid_ssn && !special_Error && !invalid_card && !invalid_date && !invalid_eMail && !quantity_check && !invalid_phoneNumber && !passwd_mismatch) {return true;}
	
	msg = "The form was not submited due to the following error(s).\n";
	
	upperLine = "\n_________________________________________________________\n\n";
	lowerLine = "_________________________________________________________\n";
	
	if (empty_fields) {
		msg += upperLine;
		msg += "The following field(s) must be filled in:\n";
		msg += lowerLine;
		msg += empty_fields;
	}
	if (char_check) {
		msg += upperLine;
		msg += "The following field(s) need a numeric value 10 characters long or less:\n";
		msg += lowerLine;
		msg += char_check;
	}
	if (quantity_check) {
		msg += upperLine;
		msg += "Please Enter a Positive Integer.\n";
		msg += lowerLine;
	}
	if (invalid_card) {
		msg += upperLine;
		msg += "The Credit Card Number is an invalid format.\n";
		msg += lowerLine;
	}
	if (invalid_date) {
		msg += upperLine;
		msg += "Please Enter a Valid Date.\n";
		msg += lowerLine;
	}
	if (invalid_eMail) {
		msg += upperLine;
		msg += "The Email Address is in an invalid format.\n";
		msg += lowerLine;
	}
	if (invalid_phoneNumber) {
		msg += upperLine;
		msg += "Please enter a valid Phone Number with area code.\n";
		msg += lowerLine;
	}
	if (invalid_faxNumber) {
		msg += upperLine;
		msg += "Please enter a valid Fax Number with area code.\n";
		msg += lowerLine;
	}
	if (invalid_ssn) {
		msg += upperLine;
		msg += "Please enter a valid Social Security Number.\n";
		msg += lowerLine;
	}
	if (special_Error) {
		msg += upperLine;
		msg += special_Error + "\n";
		msg += lowerLine;
	}
	if (passwd_mismatch) {
		msg += upperLine;
		msg += "Your passwords did not match. Please enter them again.\n";
		msg += lowerLine;
	}		
	alert(msg);
	return false;
}


/*
var StoreFrontNS = {
	tokPat      : new RegExp("^month_strict|month|Month|MONTH|yyyy|YYYY|mins|MINS|mon_strict|ampm|AMPM|mon|Mon|MON|min|MIN|dd|DD|mm|MM|yy|YY|hh|HH|ss|SS|m|M|d|D|y|Y|h|H|s|S"),
	lowerMonArr : {jan:1, feb:2, mar:3, apr:4, may:5, jun:6, jul:7, aug:8, sep:9, oct:10, nov:11, dec:12},
	monPatArr   : 
}
*/

var tokPat=new RegExp("^month_strict|month|Month|MONTH|yyyy|YYYY|mins|MINS|mon_strict|ampm|AMPM|mon|Mon|MON|min|MIN|dd|DD|mm|MM|yy|YY|hh|HH|ss|SS|m|M|d|D|y|Y|h|H|s|S");
var lowerMonArr={jan:1, feb:2, mar:3, apr:4, may:5, jun:6, jul:7, aug:8, sep:9, oct:10, nov:11, dec:12};


var monPatArr=new Array();
monPatArr['mon_strict']=new RegExp(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/);
monPatArr['Mon']=new RegExp(/Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/);
monPatArr['MON']=new RegExp(/JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC/);
monPatArr['mon']=new RegExp("jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec",'i');

var monthPatArr=new Array();
monthPatArr['month']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/i);
monthPatArr['Month']=new RegExp(/^January|February|March|April|May|June|July|August|September|October|November|December/);
monthPatArr['MONTH']=new RegExp(/^JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER/);
monthPatArr['month_strict']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/);

var cutoffYear=50;




function FormatToken (token, type) {
	this.token=token;
	this.type=type;
}

function parseFormatString (formatStr) {
	var tokArr=new Array;
	var tokInd=0;
	var strInd=0;
	var foundTok=0;
	while (strInd < formatStr.length) {
		if (formatStr.charAt(strInd)=="%" && (matchArray=formatStr.substr(strInd+1).match(tokPat)) != null) {
			strInd+=matchArray[0].length+1;
			tokArr[tokInd++]=new FormatToken(matchArray[0],"symbolic");
		} else {
			if (tokInd>0 && tokArr[tokInd-1].type=="literal") {
				tokArr[tokInd-1].token+=formatStr.charAt(strInd++);
			} else {
				tokArr[tokInd++]=new FormatToken(formatStr.charAt(strInd++), "literal");
		    }
		}
	}
	return tokArr;
}

function buildDate(dateStr,formatStr) {
	var tokArr=parseFormatString(formatStr);

	var strInd=0;
	var tokInd=0;
	var intMonth;
	var intDay;
	var intYear;
	var intHour;
	var intMin;
	var intSec;
	var ampm="";
	var strOffset;

	// Create a date object with the current date so that if the user only
	// gives a month or day string, we can still return a valid date.

	var curdate=new Date();
	intMonth=curdate.getMonth()+1;
	intDay=curdate.getDate();
	intYear=curdate.getFullYear();

	// Default time to midnight, so that if given just date info, we return
	// a Date object for that date at midnight.

	intHour=0;
	intMin=0;
	intSec=0;

	// Walk across dateStr, matching the parsed formatStr until we find a 
	// mismatch or succeed.

	while (strInd < dateStr.length && tokInd < tokArr.length) {

		// Start with the easy case of matching a literal.

		if (tokArr[tokInd].type=="literal") {
			if (dateStr.indexOf(tokArr[tokInd].token,strInd)==strInd) {

				// The current position in the string does match the format 
				// pattern.

				strInd+=tokArr[tokInd++].token.length;
				continue;
			} else {

				// ACK! There was a mismatch; return error.

				return "\"" + dateStr + "\" does not conform to the expected format: " + formatStr;
			}
		}

		// If we get here, we're matching to a symbolic token.
		switch (tokArr[tokInd].token) {
			case 'm':
			case 'M':
			case 'd':
			case 'D':
			case 'h':
			case 'H':
			case 'min':
			case 'MIN':
			case 's':
			case 'S':

			// Extract one or two characters from the date-time string and if 
			// it's a number, save it as the month, day, hour, or minute, as
			// appropriate.

			curChar=dateStr.charAt(strInd);
			nextChar=dateStr.charAt(strInd+1);
			matchArr=dateStr.substr(strInd).match(/^\d{1,2}/);
			if (matchArr==null) {

				// First character isn't a number; there's a mismatch between
				// the pattern and date string, so return error.

				switch (tokArr[tokInd].token.toLowerCase()) {
					case 'd': var unit="day"; break;
					case 'm': var unit="month"; break;
					case 'h': var unit="hour"; break;
					case 'min': var unit="minute"; break;
					case 's': var unit="second"; break;
				}
				return "Bad " + unit + " \"" + curChar + "\" or \"" + curChar +
				nextChar + "\".";
			}
			strOffset=matchArr[0].length;
			switch (tokArr[tokInd].token.toLowerCase()) {
				case 'd': intDay=parseInt(matchArr[0],10); break;
				case 'm': intMonth=parseInt(matchArr[0],10); break;
				case 'h': intHour=parseInt(matchArr[0],10); break;
				case 'min': intMin=parseInt(matchArr[0],10); break;
				case 's': intSec=parseInt(matchArr[0],10); break;
			}
			break;
			case 'mm':
			case 'MM':
			case 'dd':
			case 'DD':
			case 'hh':
			case 'HH':
			case 'mins':
			case 'MINS':
			case 'ss':
			case 'SS':

			// Extract two characters from the date string and if it's a 
			// number, save it as the month, day, or hour, as appropriate.

			strOffset=2;
			matchArr=dateStr.substr(strInd).match(/^\d{2}/);
			if (matchArr==null) {

				// The two characters aren't a number; there's a mismatch 
				// between the pattern and date string, so return an error
				// message.

				switch (tokArr[tokInd].token.toLowerCase()) {
					case 'dd': var unit="day"; break;
					case 'mm': var unit="month"; break;
					case 'hh': var unit="hour"; break;
					case 'mins': var unit="minute"; break;
					case 'ss': var unit="second"; break;
				}
				return "Bad " + unit + " \"" + dateStr.substr(strInd,2) + 
				"\".";
			}
			switch (tokArr[tokInd].token.toLowerCase()) {
				case 'dd': intDay=parseInt(matchArr[0],10); break;
				case 'mm': intMonth=parseInt(matchArr[0],10); break;
				case 'hh': intHour=parseInt(matchArr[0],10); break;
				case 'mins': intMin=parseInt(matchArr[0],10); break;
				case 'ss': intSec=parseInt(matchArr[0],10); break;
			}
			break;
			case 'y':
			case 'Y':

			// Extract two or four characters from the date string and if it's
			// a number, save it as the year.Convert two-digit years to four
			// digit years by assigning a century of '19' if the year is >= 
			// cutoffYear, and '20' otherwise.

			if (dateStr.substr(strInd,4).search(/\d{4}/) != -1) {

				// Four digit year.

				intYear=parseInt(dateStr.substr(strInd,4),10);
				strOffset=4;
			} else {
				if (dateStr.substr(strInd,2).search(/\d{2}/) != -1) {

					// Two digit year.

					intYear=parseInt(dateStr.substr(strInd,2),10);
					if (intYear>=cutoffYear) {
						intYear+=1900;
					} else {
						intYear+=2000;
					}
					strOffset=2;
				} else {

					// Bad year; return error.

					return "Bad year \"" + dateStr.substr(strInd,2) + 
					"\". Must be two or four digits.";
				}
			}
			break;
			case 'yy':
			case 'YY':

			// Extract two characters from the date string and if it's a 
			// number, save it as the year.Convert two-digit years to four 
			// digit years by assigning a century of '19' if the year is >= 
			// cutoffYear, and '20' otherwise.

			if (dateStr.substr(strInd,2).search(/\d{2}/) != -1) {

				// Two digit year.

				intYear=parseInt(dateStr.substr(strInd,2),10);
				if (intYear>=cutoffYear) {
					intYear+=1900;
				} else {
					intYear+=2000;
				}
				strOffset=2;
			} else {
				// Bad year; return error
				return "Bad year \"" + dateStr.substr(strInd,2) + 
				"\". Must be two digits.";
			}
			break;
			case 'yyyy':
			case 'YYYY':

			// Extract four characters from the date string and if it's a 
			// number, save it as the year.

			if (dateStr.substr(strInd,4).search(/\d{4}/) != -1) {

				// Four digit year.

				intYear=parseInt(dateStr.substr(strInd,4),10);
				strOffset=4;
			} else {

				// Bad year; return error.

				return "Bad year \"" + dateStr.substr(strInd,4) + 
				"\". Must be four digits.";
			}
			break;
			case 'mon':
			case 'Mon':
			case 'MON':
			case 'mon_strict':

			// Extract three characters from dateStr and parse them as 
			// lower-case, mixed-case, or upper-case abbreviated months,
			// as appropriate.

			monPat=monPatArr[tokArr[tokInd].token];
			if (dateStr.substr(strInd,3).search(monPat) != -1) {
				intMonth=lowerMonArr[dateStr.substr(strInd,3).toLowerCase()];
			} else {

				// Bad month, return error.

				switch (tokArr[tokInd].token) {
					case 'mon_strict': caseStat="lower-case"; break;
					case 'Mon': caseStat="mixed-case"; break;
					case 'MON': caseStat="upper-case"; break;
					case 'mon': caseStat="between Jan and Dec"; break;
				}
				return "Bad month \"" + dateStr.substr(strInd,3) + 
				"\". Must be " + caseStat + ".";
			}
			strOffset=3;
			break;
			case 'month':
			case 'Month':
			case 'MONTH':
			case 'month_strict':

			// Extract a full month name at strInd from dateStr if possible.

			monPat=monthPatArr[tokArr[tokInd].token];
			matchArray=dateStr.substr(strInd).match(monPat);
			if (matchArray==null) {

				// Bad month, return error.

				return "Can't find a month beginning at \"" +
				dateStr.substr(strInd) + "\".";
			}

			// It's a good month.

			intMonth=lowerMonArr[matchArray[0].substr(0,3).toLowerCase()];

			strOffset=matchArray[0].length;
			break;
			case 'ampm':
			case 'AMPM':
			matchArr=dateStr.substr(strInd).match(/^(am|pm|AM|PM|a\.m\.|p\.m\.|A\.M\.|P\.M\.)/);
			if (matchArr==null) {

				// There's no am/pm in the string.Return error msg.

				return "Missing am/pm designation.";
			}

			// Store am/pm value for later (as just am or pm, to make things
			// easier later).

			if (matchArr[0].substr(0,1).toLowerCase() == "a") {

				// This is am.

				ampm = "am";
			} else {
				ampm = "pm";
			}
			strOffset = matchArr[0].length;
			break;
		}
		strInd += strOffset;
		tokInd++;
	}
	if (tokInd != tokArr.length || strInd != dateStr.length) {

		/* We got through the whole date string or format string, but there's 
		 more data in the other, so there's a mismatch. */

		return "\"" + dateStr + "\" is either missing desired information or has more information than the expected format: " + formatStr;
	}

	// Make sure all components are in the right ranges.

	if (intMonth < 1 || intMonth > 12) {
		return "Month must be between 1 and 12.";
	}
	if (intDay < 1 || intDay > 31) {
		return "Day must be between 1 and 31.";
	}

	// Make sure user doesn't put 31 for a month that only has 30 days

	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && intDay == 31) {
		return "Month "+intMonth+" doesn't have 31 days!";
	}

	// Check for February date validity (including leap years) 

	if (intMonth == 2) {

		// figure out if "year" is a leap year; don't forget that
		// century years are only leap years if divisible by 400

		var isleap=(intYear%4==0 && (intYear%100!=0 || intYear%400==0));
		if (intDay > 29 || (intDay == 29 && !isleap)) {
			return "February " + intYear + " doesn't have " + intDay + 
			" days!";
		}
	}

	// Check that if am/pm is not provided, hours are between 0 and 23.

	if (ampm == "") {
		if (intHour < 0 || intHour > 23) {
			return "Hour must be between 0 and 23 for military time.";
		}
	} else {

		// non-military time, so make sure it's between 1 and 12.

		if (intHour < 1|| intHour > 12) {
			return "Hour must be between 1 and 12 for standard time.";
		}
	}

	// If user specified amor pm, convert intHour to military.

	if (ampm=="am" && intHour==12) {
		intHour=0;
	}
	if (ampm=="pm" && intHour < 12) {
		intHour += 12;
	}
	if (intMin < 0 || intMin > 59) {
		return "Minute must be between 0 and 59.";
	}
	if (intSec < 0 || intSec > 59) {
		return "Second must be between 0 and 59.";
	}
	return new Date(intYear,intMonth-1,intDay,intHour,intMin,intSec);
}

function dateCheck(dateStr,formatStr) {
	var myObj = buildDate(dateStr,formatStr);
	if (typeof myObj == "object") {
		return true;
	} else {
		return false;
	}
}

//  End -->









function PopUpWin(strHref, intHeight, intWidth, strAttributes) {
	var intScreenHeight;
	var intScreenWidth;
	var strFeatures;
	var hWin;

	intScreenHeight = window.screen.availHeight;
	intScreenWidth = window.screen.availWidth;
	strFeatures = 'HEIGHT=' + intHeight + ',WIDTH=' + intWidth + ',SCREENY=' + (intScreenHeight*.30) + ',SCREENX=' + (intScreenWidth*.33) + ',TOP=' + (intScreenHeight*.30) + ',LEFT=' + (intScreenWidth*.33) + ',';

	if(strAttributes.replace(' ', '') == '') {
		strFeatures = strFeatures + 'TOOLBAR=no,scrollbars=yes,resizable=yes,location=no,status=yes';
	}
	else {
		strFeatures = strFeatures + strAttributes;
	}
	hWin = window.open(strHref,'POPW',strFeatures);
	return hWin;
}


//--------------------------------------------------------------------------------------------



function SwapImage(strImageId,strImage){
	var objImage = document.getElementById(strImageId);
	objImage.src = strImage;
}


function PopDefinition2(CallingElement,TriggeredElement,OffsetWidth,OffsetHeight)
{
	if (typeof OffsetWidth=="undefined") {
		OffsetWidth=0;
	}
	if (typeof OffsetHeight=="undefined") {
		OffsetHeight=0;
	}
	TriggeredElement.style.width='300px';
	TriggeredElement.style.top = eval(curTop(CallingElement) + CallingElement.offsetHeight + 20 + OffsetHeight) + "px";
	TriggeredElement.style.left = eval(curLeft(CallingElement) - 80 + OffsetWidth) + "px";
	TriggeredElement.style.backgroundColor="lavender";
	TriggeredElement.style.padding='5px';
	TriggeredElement.style.textAlign='justify';
	TriggeredElement.style.color = "333333";
	TriggeredElement.style.fontSize ='10pt';
	TriggeredElement.style.visibility='visible';
}


function WipePop2(TriggeredElement){
	TriggeredElement.style.visibility='hidden';
	TriggeredElement.style.top = "0";
	TriggeredElement.style.left = "0";
}


function toggleVisibility(me){
	if (me.style.visibility=="hidden"){
		me.style.visibility="visible";
	} else {
		me.style.visibility="hidden";
	}
}



/* Offset position from top of the screen */
function curTop(obj) {
	toreturn = 0;
	if (obj.offsetParent) {
		while(obj) {
			toreturn += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	return toreturn;
}
function curLeft(obj) {
	toreturn = 0;
	if (obj.offsetParent) {
		while(obj) {
			toreturn += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	return toreturn;
}
/* ------ End of Offset function ------- */
