//limits allowable characters for address

function valadd(field) 
{
	var valid = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-'.#,1234567890/";
	var ok = "yes";
	var temp;
	var p;
	var o;
	var b;
	var o2;
	if(field.value.length>0)
	{
		var lower = field.value.toLowerCase();
		for(var c=0;c<lower.length;c++)
		{
			if(lower.charAt(c)=="p")
			{
				p=1;
			}
			else
			if((lower.charAt(c)=="o") && (p==1))
			{
				o=1;
			}
			
			if((lower.charAt(c)=="b") && (o==1))
			{
				b=1;
			}
			else
			if((lower.charAt(c)=="o") && (b==1))
			{
				o2=1;
			}
			
			if((lower.charAt(c)=="x") && (o2==1))
			{
				ok = "noPO";
			}
		}		
	}
	for (var i=0; i<field.value.length; i++) 
	{
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	
	if (ok == "noPO") 
	{
		alert("We currently do not allow PO Boxes as addresses.");
		field.focus();
		field.select();
		return false;
	}
	else
	if (ok == "no") 
	{
		alert("Please use only letters and numbers for address.");
		field.focus();
		field.select();
		return false;
	}
	else return true;
}


//limits allowable characters for names

function valname(field)
{
	var valid = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-'.";
	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) 
	{
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") 
	{
		alert("Please use only letters for names.");
		field.focus();
		field.select();
		return false;
	}
	else return true;
}


//limits allowable characters for city

function valcity(field) 
{
	var valid = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-'.";
	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) 
	{
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") 
	{
		alert("Please use only letters for city name.");
		field.focus();
		field.select();
		return false;
	}
	else return true;
}


//limits allowable characters and lengths for Postal

function valZIP(field) 
{
	var valid = "-1234567890";
	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) 
	{
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	
	if ((field.value.length==10) && ((field.value.indexOf('-')!=5) || (field.value.split('-').length!=2)))
	{
		ok = "no";
	}
	
	if ((field.value.length!=5) && (field.value.length!=10) && (field.value.length>0))
	{
		ok = "no";
	}
	
	if (ok == "no")
	{
		alert("You have entered an invalid ZIP/Postal code.");
		field.focus();
		field.select();
		return false;
	}
	else return true;
}


//checks only the specified required fields within a form to prevent empty fields

function checkEmptyTextFields(aForm, requiredFieldElementsArray)
{
	var f = aForm;
	var emptyfields = "";
	var msg = "";
	var genderSelected=false;
	var genderCount=0;

	for(var i = 0; i < f.length; i++)
	{
		var e = f.elements[i];
		var required=false;
		if ((e.type=="text") || (e.type=="password"))
		{
			if((e.value == null) || (e.value == "") || isblank(e))
			{
				for (var j=0; j <requiredFieldElementsArray.length; j++)
				{
					if(e.name == requiredFieldElementsArray[j].fieldName)
					{
						emptyfields += "\n     " + requiredFieldElementsArray[j].displayName;
						continue;
					}
				}
			}
		}
		else if (e.type=="radio")
		{
			if(e.checked)	genderSelected=true;	
			genderCount++;
			if (!genderSelected&&genderCount>1)	emptyfields += "\n     Gender";
		}
		else if (e.type=="select-one")
		{
			for (var j=0; j <requiredFieldElementsArray.length; j++)
			{
				if(e.name == requiredFieldElementsArray[j].fieldName)
				{
					var selIndex = e.selectedIndex;
					if  (selIndex<=0)
					{
						emptyfields += "\n     " + requiredFieldElementsArray[j].displayName;
						continue;
					}
				}
			}
		}
	}
	if(emptyfields.length>1) 
	{
		msg = "The following required fields are empty:" + "\n" + emptyfields + "\n";	
		return msg;
	}
	else return false;
}


//sets dropdown menus to specified values

function setDropDown(dropdown, theValue)
{
	var selectedItem = 0;
	if((theValue != "") && (theValue != "null"))
	{
		for(var j = 0; j < dropdown.length; j++)
		{
			if(dropdown.options[j].value == theValue)
			{
				selectedItem = j;
				break;
			}			
		}
	}
	dropdown.selectedIndex = selectedItem;
}


//checks for "blank" fields

function isblank(s)
{
	for(var i = 0; i < s.value.length; i++)
	{
		var c = s.value.charAt(i);
		if((c != " ") && (c != '\n') && (c != '\t')) return false;
	}
	return true;
}



//////////////////////////////////////////////////////////////////
//
//	Field Name Mappings
//
//////////////////////////////////////////////////////////////////


//this function is the construct for field elements
//to be used for mapping field names and field display names

function FieldElement(fieldName, displayName)
{
	this.fieldName = fieldName;
	this.displayName = displayName;
}


//this function creates a field element array from
//a list of field names and display names.

function createFieldElements(fieldNames, displayNames)
{
	var myFieldElements = new Array();
	for (var i=0; i< fieldNames.length; i++)
		myFieldElements[i] = new FieldElement(fieldNames[i],displayNames[i]);
	return myFieldElements;
}


//unchecks address box if user changes info

function uncheck(form)

{
	
	if (form.name=="step2")
	
	{
		return true;
	}
	
	if (form.addressBox.checked)
	
	{	
		form.addressBox.checked = false;
	}
}


//checks for empty fields on submit, calls checkagainUpdate

function valformupdate(f)

{	
	var msg = "";
	
	if ((f.pword.value.length!=0) || (f.pword2.value.length!=0))
		{
	
			var reqFieldNames	= ["email",			"pword",	"pword2",			"address1",			"city",
									"state",	"postal",	"birthdate_month",	"birthdate_day",
									"birthdate_year", "occupation", "education", "income"];
	
			var reqDisplayNames	= ["Email Address", "Password",	"Re-Enter Password","Address Line 1",	"City",
									"State",	"ZIP Code",	"Birthday Month",	"Birthday Date",
									"Year of Birth",  "Occupation", "Education", "Income"];
									
		}
	
	else
		{
	
			var reqFieldNames	= ["email",			"address1",			"city",
									"state",	"postal",	"birthdate_month",	"birthdate_day",
									"birthdate_year", "occupation", "education", "income"];
	
			var reqDisplayNames	= ["Email Address", "Address Line 1",	"City",
									"State",	"ZIP Code",	"Birthday Month",	"Birthday Date",
									"Year of Birth",  "Occupation", "Education", "Income"];
									
		}
							  
	var fieldElements;
	fieldElements = createFieldElements(reqFieldNames, reqDisplayNames);

	
	msg+=checkEmptyTextFields(f,fieldElements);
	
	if (msg!="false")
	{
		msg = "The following problems occurred: \n\n" + msg;
		alert(msg);
		return false;
		
	}
	else 
	{
		if (checkagainUpdate(f))
		{
			if(f.StartEmail.value!=f.email.value)
			{
				alert('You must reconfirm your registration from your new email address by responding to an email from XMarkstheSpot.');	
			}
			return true;
		}
		else
		{	
			return false;
		}
	}
		
}


//rechecks validations for all fields

function checkagainUpdate(form)

{
	 
	if (!valadd(form.address1))
	{	
		return false;
	}
	else
	if (!valadd(form.address2))
	{	
		return false;
	}
	else
	if (!valcity(form.city))
	{	
		return false;
	}
	else
	if (!valZIP(form.postal))
	{	
		return false;
	}
	else
	if (!valpassupdate(form.pword2))
	{	
		return false;
	}
	else
	if (!validate_email(form.email))
	{	
		return false;
	}
	else
	{
		return true;
	}
}


function valformupdate2(f)

{	
	var msg = "";
	
	if ((f.pword.value.length!=0) || (f.pword2.value.length!=0))
		{
	
			var reqFieldNames	= new Array();
									
			reqFieldNames[0] = "email";
			reqFieldNames[1] = "pword";
			reqFieldNames[2] = "pword2";
			reqFieldNames[3] = "address1";
			reqFieldNames[4] = "city";
			reqFieldNames[5] = "state";
			reqFieldNames[6] = "postal";
			reqFieldNames[7] = "occupation";
			reqFieldNames[8] = "education";
			reqFieldNames[9] = "income";
	
			var reqDisplayNames	= new Array();
			
			reqDisplayNames[0] = "Email Address";
			reqDisplayNames[1] = "Password";
			reqDisplayNames[2] = "Re-Enter Password";
			reqDisplayNames[3] = "Address Line 1";
			reqDisplayNames[4] = "City";
			reqDisplayNames[5] = "State";
			reqDisplayNames[6] = "ZIP Code";
			reqDisplayNames[7] = "Occupation";
			reqDisplayNames[8] = "Education";
			reqDisplayNames[9] = "Income";
									
		}
	
	else
		{
			var reqFieldNames	= new Array();
									
			reqFieldNames[0] = "email";
			reqFieldNames[1] = "address1";
			reqFieldNames[2] = "city";
			reqFieldNames[3] = "state";
			reqFieldNames[4] = "postal";
			reqFieldNames[5] = "occupation";
			reqFieldNames[6] = "education";
			reqFieldNames[7] = "income";
	
			var reqDisplayNames	= new Array();
			
			reqDisplayNames[0] = "Email Address";
			reqDisplayNames[1] = "Address Line 1";
			reqDisplayNames[2] = "City";
			reqDisplayNames[3] = "State";
			reqDisplayNames[4] = "ZIP Code";
			reqDisplayNames[5] = "Occupation";
			reqDisplayNames[6] = "Education";
			reqDisplayNames[7] = "Income";
									
		}
							  
	var fieldElements;
	fieldElements = createFieldElements(reqFieldNames, reqDisplayNames);

	
	msg+=checkEmptyTextFields(f,fieldElements);
	
	if (msg!="false")
	{
		msg = "The following problems occurred: \n\n" + msg;
		alert(msg);
		return false;
		
	}
	else 
	{
		if (checkagainUpdate2(f))
		{
			if(f.StartEmail.value!=f.email.value)
			{
				alert('You must reconfirm your registration from your new email address by responding to an email from XMarkstheSpot.');	
			}
			return true;
		}
		else
		{	
			return false;
		}
	}
		
}


//rechecks validations for all fields

function checkagainUpdate2(form)

{
	 
	if (!valadd(form.address1))
	{	
		return false;
	}
	else
	if (!valadd(form.address2))
	{	
		return false;
	}
	else
	if (!valcity(form.city))
	{	
		return false;
	}
	else
	if (!valZIP(form.postal))
	{	
		return false;
	}
	else
	if (!valpassupdate2(form.pword2, form))
	{	
		return false;
	}
	else
	if (!validate_email(form.email))
	{	
		return false;
	}
	else
	{
		return true;
	}
}


//prepopulates update form

function populateUpdate(form)

{
	setDropDown(form.state, form.hidestate.value);
	setDropDown(form.occupation, form.hideocc.value);
	setDropDown(form.education, form.hideedu.value);
	setDropDown(form.income, form.hideinc.value);
}


//validates V,MC ccn's (NOT USED)

/*function valccn(field)

{
	chkccn(field);
	
	if (chkccn(field))

		{	
			nakedccn(field);
			return true;
		}
	
	else
	
		{
			alert("You have entered an invalid credit card number.");
			field.focus();
			field.select();
			return false;
		}
}*/


//validates ccn's according to algorithm
 
function valanyccn(kind,numb)

{	
	if (isblank(numb) || notselected(kind))
	{
		return true;
	}
	else
	{
	
		nakedccn(numb);
		var CardNumber = numb.value;
		var no_digit = numb.value.length;
		var ok;
	
		if (! isNum(CardNumber)) 
			{
				if (no_digit==0)
				{
					return true;
				}
				else
				{
					alert('Please enter only numbers for Credit Card Number.');
					numb.focus();
					numb.select();
					return false;
				}
			}

		var oddoeven = no_digit & 1;
		var sum = 0;

		for (var count = 0; count < no_digit; count++)
			{
				var digit = parseInt(CardNumber.charAt(count));
				if (!((count & 1) ^ oddoeven))
				{
					digit *= 2;
					if (digit > 9)
					{
						digit -= 9;
					}
				}
				sum += digit;
			}
	
		if (sum % 10 != 0)
			{
				ok="no";
			}
			else
		if (CardNumber.length<14)
			{
				ok="no";
			}
			else
		if ((CardNumber.charAt(0)<3) || (CardNumber.charAt(0)>6))
			{
				ok="no";
			}
			else
		if (kind!="notype")
			{
				var k=kind.selectedIndex;
				var v=kind;
				
			//MasterCard
				if ((v.value.charAt(0).toLowerCase()=="m") && ((numb.value.substring(0,2)<"51") || (numb.value.substring(0,2)>"55") || (CardNumber.length!=16)))
					{
						ok="no";
					}
					else
					
			//Visa
				if ((v.value.charAt(0).toLowerCase()=="v") && ((numb.value.charAt(0)!="4") || (CardNumber.length!=16)))
					{
						ok="no";
					}
					else
					
			//AmericanExpress
				if ((v.value.charAt(0).toLowerCase()=="a") && (((numb.value.substring(0,2)!="34") && (numb.value.substring(0,2)!="37")) || (CardNumber.length!=15)))
					{
						ok="no";
					}
					else
			
			//DinersClub
				if ((v.value.charAt(0).toLowerCase()=="d") && (v.value.charAt(2).toLowerCase()=="n") && (((numb.value.substring(0,2)!="30") && (numb.value.substring(0,2)!="36") && (numb.value.substring(0,2)!="38")) || (CardNumber.length!=14)))
					{
						ok="no";
					}
				else
				
			//Discover
				if ((v.value.charAt(0).toLowerCase()=="d") && ((numb.value.substring(0,4)!="6011") || (CardNumber.length!=16)))
					{
						ok="no";
					}
				else
				
			//JCB
				if ((v.value.charAt(0).toLowerCase()=="j") && (((numb.value.substring(0,4)!="3088") && (numb.value.substring(0,4)!="3096") && (numb.value.substring(0,4)!="3112") && (numb.value.substring(0,4)!="3158") && (numb.value.substring(0,4)!="3337") && (numb.value.substring(0,4)!="3528")) || (CardNumber.length!=16)))
					{
						ok="no";
					}
			}
					
		if (ok=="no")
			{
				alert('You have entered an invalid credit card number. Please do not use any spaces or dashes.');
				numb.value="";
				numb.focus();
				return false;
			}
			/*else
		if (ok=="mismatch")
			{
				alert('There is a mismatch between your credit card type and the number you entered.');
				kind.selectedIndex=0;
				kind.focus();
				return false;
			}*/
		else
			{
				return true;
			}
	}
}

//checks to make sure argvalue is a number

function isNum(argvalue)
{
	argvalue = argvalue.toString();

	if (argvalue.length == 0)
	return false;

	for (var n = 0; n < argvalue.length; n++)
	if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
	return false;

	return true;
}

function isNumAlert(field)
{
	argvalue = field.value.toString();
	
	for (var n = 0; n < argvalue.length; n++)
	{
		if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
		{
			alert("Please enter numbers for this field");
			field.focus();
			field.select();
			return false;
		}
	}
	return true;	
}




//limits allowable characters and lengths for V, MC credit card number (NOT USED)

/*function chkccn(field)
{	
	var valid = " 1234567890-";
	var ok = "yes";
	var temp;
	var s = field.value.split(' ');
	var d = field.value.split('-');
	
	for (var i=0; i<field.value.length; i++) 
		{
			temp = "" + field.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1")
				{
					ok = "no";
				}
		}	
	
	if (((field.value.length)!=16) && ((field.value.length)!=19) && ((field.value.length)>0))
		{
			ok = "no";
		}
	
	else if (((field.value.length)==16) && ((field.value.indexOf(' ')!=-1) || (field.value.indexOf('-')!=-1)))
		{
			ok = "no";
		}
			
	else if ((s.length==4) && (d.length!=1))
		{
			ok = "no";
		}
	
	else if ((d.length==4) && (s.length!=1))
		{
			ok = "no";
		}
		
	else if ((field.value.length==19) && (s.length!=4) && (d.length!=4))
		{
			ok = "no";
		}
		
	else if ((s.length!=4) && (s.length!=1))
		{
			ok = "no";
		}
		
	else if ((d.length!=4) && (d.length!=1))
		{
			ok = "no";
		}
		
	else if (s.length==4)
		{
			for (var j=0; j<s.length; j++)
			if (s[j].length!=4)
			{
				ok = "no";
			}
		}
		
	else if (d.length==4)
		{
			for (var k=0; k<d.length; k++)
			if (d[k].length!=4)
			{
				ok = "no";
			}
		}
		
	if (ok == "yes")
		{
			return true;
		}
		
	else return false;
}*/


//limits allowable characters and lengths for V, MC, AM, DS credit card number (NOT USED)

/*function chkanyccn(field)

{	
	var valid = " 1234567890-";
	var ok = "yes";
	var temp;
	for (var i=0; i<field.value.length; i++) 
	{
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if ((ok == "no") || (((field.value.length)!=15) && ((field.value.length)!=16) && ((field.value.length)!=17) && ((field.value.length)!=19) && ((field.value.length)>0)))
	{
		return false;
	}
	else return true;
}*/


//Removes spaces from CCN

function nakedccn(field)

{
	str=field.value;
	if ((field.value.indexOf(" ")!=-1) || (field.value.indexOf("-")!=-1))
	
	{	
		{	
			
			var a = "";
			str = '' + str;
			splitstr = str.split(" ");
			for(i = 0; i < splitstr.length; i++)	
			a += splitstr[i];
			
		}
			
		takeoutdash(a, field);
	}
}


//Removes -'s from CCN

function takeoutdash(a, field)

{
	{
		var b = "";
		a = '' + a;
		splita = a.split("-");
		for(j = 0; j < splita.length; j++)
		b += splita[j];
	}
	
	field.value = b;
}


//opens new window

function openWin(url,winName,features)
					
{
	window.open(url,winName,features)
}

function secure(page)
	{
		var x = window.location.hostname;
		y = 'https://' + x + '/' + page;
		window.location = y;
	}
	
function insecure(page)
	{	
		var x = window.location.hostname;
		y = 'http://' + x + '/' + page;
		window.location = y;
	}

//takes phone down to only numbers, assures it is 10 numbers

function stripphone(field)

{
	{
		var valid = " ().-1234567890";
		var ok = "yes";
		var temp;
		for (var i=0; i<field.value.length; i++) 
		{
			temp = "" + field.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") ok = "no";
		}
		
		var a = field.value;
		var b;
		var c;
		var d;
		var e;
		var splita = a.split("-");
		b = splita.join("");
		var splitb = b.split(".");
		c = splitb.join("");
		var splitc = c.split("(");
		d = splitc.join("");
		var splitd = d.split(")");
		e = splitd.join("");
		var splite = e.split(" ");
		f = splite.join("");
	}
	
	if (((f.length!=10) || (ok=="no")) && (field.value.length>0))
	{
		alert('You have entered an invalid phone number.  Please try again.');
		field.focus();
		field.select();
		return false;
	}
	else
	{
		field.value = f;
		return true;
	}
}


function insecure(page)
	{	
		var x = window.location.hostname;
		y = 'http://' + x + '/' + page;
		window.location = y;
	}