//1. clear/set default text on form field
function clearText(which, txt) {
    if(which.value == txt) which.value="";
}

function setText(which, txt) {
    if(which.value == "") { which.value = txt; }
}

//2. if comment field is not filled out (but with refilled text), empty it
function commentField() { 
    var comments = document.profile.comments.value;
    if(l_comments) {
        if(comments == l_comments) document.profile.comments.value="";
    } else { alert("l_comment does not exist!")}
}

//3. submit used by form submit with comment and default text inside
function submitFormwComet(btn) {
	finished = false;

	while (!finished) {
		btn = btn.parentNode;
		if (btn == undefined) {
			break;
		} 
		if (btn.submit!=undefined) {
			finished = true;
			break;
		}
	}
	theForm = document.profile;
	var s = 0;

	var requiredFields = new Array();
	requiredFields = formRequired.split(',');

	for (var i=0; i<requiredFields.length; i++) {
		var thisField = new Array();
		var thisFieldName, thisFieldType;
		thisField = requiredFields[i].split(':');
		s += checkField(thisField[0], thisField[1], theForm, thisField[2])
	}
	if (s == 0) {
	    commentField();
		theForm.submit();
	}
	return;
}

//4. original submitForm
function submitForm(btn) {
	finished = false;

	while (!finished) {
		btn = btn.parentNode;
		if (btn == undefined) {
			break;
		} 
		if (btn.submit!=undefined) {
			finished = true;
			break;
		}
	}
	theForm = document.profile;
	var s = 0;

	var requiredFields = new Array();
	requiredFields = formRequired.split(',');

	for (var i=0; i<requiredFields.length; i++) {
		var thisField = new Array();
		var thisFieldName, thisFieldType;
		thisField = requiredFields[i].split(':');
		s += checkField(thisField[0], thisField[1], theForm, thisField[2])
	}
	if (s == 0) {
		theForm.submit();
	}
	return;
}


function alertError(fieldName) {
    
    if(fieldName =="sex") { document.getElementById("genderlabel").className = 'fieldError'; }
    else if(fieldName =="spam") { document.getElementById("spamtxt").className = 'fieldError'; }
    else if(fieldName =="privacy") { document.getElementById("privacytxt").className = 'fieldError'; }
    else { 
    	if(fieldName=="birthdayY" || fieldName=="birthdayM" || fieldName=="birthdayD") { document.getElementById("birthdaylabel").className = 'fieldError'; }
   	    if(document.getElementById('f_'+fieldName)) document.getElementById('f_'+fieldName).className = 'fieldBoxError'; 
   	    if(document.getElementById('d_'+fieldName)) document.getElementById('d_'+fieldName).className = 'fieldError'; 
	}
}

function UnalertError(fieldName) {
    
    if((fieldName == "preferred" && document.getElementById('f_preferred'))|| fieldName =="country") {document.getElementById('f_'+fieldName).className = 'fieldSelNormal'; }
    else if(fieldName =="sex") { document.getElementById("genderlabel").className = 'fieldNormal'; }
    else if(fieldName =="spam") { document.getElementById("spamtxt").className = 'fieldNormal'; }
    else if(fieldName =="privacy") {document.getElementById("privacytxt").className = 'fieldNormal'; }
    else if(fieldName == "birthday") { document.getElementById("birthdaylabel").className = 'fieldNormal'; 
	document.getElementById("f_birthdayY").className = 'fieldNormal';document.getElementById("f_birthdayM").className = 'fieldNormal';document.getElementById("f_birthdayD").className = 'fieldNormal';
    } else { 
        if(document.getElementById('f_'+fieldName))document.getElementById('f_'+fieldName).className = 'fieldNormal';  
    }
}

function checkField(fieldName, fieldType, theForm, required) {
	theField = eval("theForm."+fieldName);
	
	UnalertError(fieldName);
	switch (fieldType) {
		case 'text':
			return checkTextField(fieldName, theField, required);
			break;
		case 'select':
			return checkTextField(fieldName, theField, required);
			break;
		case 'date':
			if(fieldName == "birthday") {
				var a,b,c = 0;
				theFieldY = eval("theForm."+fieldName+"Y"); a = checkTextField(fieldName+"Y", theFieldY, required);
				theFieldM = eval("theForm."+fieldName+"M"); b = checkTextField(fieldName+"M", theFieldM, required);
				theFieldD = eval("theForm."+fieldName+"D"); c = checkTextField(fieldName+"D", theFieldD, required);
				return (a || b || c);
				
			} else { 
				return checkTextField(fieldName, theField, required);
			}
			break;
		case 'radio':
			return checkBoxField(fieldName, theField, required);
			break;
		case 'check':
			return checkBoxField(fieldName, theField, required);
			break;
		case 'email':
			return checkEmailField(fieldName, theField, required);
			break;
		case 'phone':
			return checkPhoneField(fieldName, theField, required);
			break;
		case 'radio':
			return checkRadioField(fieldName, theField, required);
			break;
		case 'usareacode':
			return checkUSAreacode(fieldName, theField, required);
			break;
		case 'usphone':
			return checkUSPhone(fieldName, theField, required);
			break;
		default:
			return checkTextField(fieldName, theField, required);
	}
}

function checkRadioField(fieldName, theField, required) {
	var j=0;
	if(required == 1) {
	for (i=0; i<theField.length; i++) {
		if (theField[i].checked) j++
	}
	if (j==0) { 
		alertError(fieldName);
	    return true
	}
	}
	return false
}

function checkBoxField(fieldName, theField, required) {
    
	if (theField!=null && required==1) {
		var j=0;
		if(theField.length > 1) {
		    for (var i=0; i<theField.length; i++) {
			    if (theField[i].checked) j++;
		    }
		} else { if (theField.checked) j++; }
		
		if (j==0) { 
			alertError(fieldName);
			return true
		}
	}
	return false;
}

function checkTextField(fieldName, theField, required) {
	if (theField!=null && ((Trim(theField.value)=="" && required==1) || checkForHTML(theField.value) != -1 
	    || (theField.value==l_fname && required==1) || (theField.value==l_lname && required==1)
	    || (theField.value == l_add1 && required==1) || (theField.value == l_add2 && required==1) 
	    || (theField.value == l_city && required==1) || (theField.value == l_pc && required==1) 
	    || (theField.value == l_state && required==1) || (theField.value == l_add3 && required==1) 
	    || (theField.value == l_postalcode && required==1))) {
		alertError(fieldName);
		return true;
	}
	return false;
}

function checkEmailField(fieldName, theField, required) {
	if (theField!=null && ((Trim(theField.value)=="" && required==1) || !isMail(theField.value))){
		alertError(fieldName);
		return true
	}
	return false
}

function checkPhoneField(fieldName, theField, required) {
	if (theField!=null && required==1 && !isValidPhone(Trim(theField.value))){
	    alertError(fieldName);
		return true
	}
	return false
}

function checkUSAreacode(fieldName, theField, required) {
	if (theField!=null && required==1 && !isValidUSAreacode(Trim(theField.value)) ){
	    alertError(fieldName);
		return true
	}
	return false
}


function HighLightRequired(list) {
    var orders = list.split(",");
    
    for(var i=0;i<orders.length; i++) { 
       var field = orders[i].split(":");
       if(field[2]==1) {  //only for required fields
       var y = document.getElementsByName(field[0])[0];
       if(field[0] == "birthday") { document.profile.birthdayY.className = 'requireddropdown';document.profile.birthdayM.className = 'requireddropdown';document.profile.birthdayD.className = 'requireddropdown';
       } else if(field[0] =="country" || field[0] =="preferred") y.className="requireddropdown";
       else if(field[0] != "sex" ) y.className = 'requiredfield';
       }
    }
    //for IE and remove yellow background from Google ToolBar
    setListeners();

}

function isMail(strInputMail) {
	return(new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(strInputMail));
}

function isValidPhone(phonenum) {
	var regu	= "^([0-9(+]+)+([0-9-.() ]*)+([0-9)]+)$"
	var reg		= new RegExp(regu);
	return (phonenum.search(reg) > -1);
	return true;
}

function checkUSPhone(fieldName, theField, required) {
	var num = Trim(theField.value);
	if (theField!=null && required==1){
		//trim white spaces and dash
		var temp; 
		temp = num.replace(/\s|-/g,"");
		
		//match num who's 7 digits long and repeated i.e. 0000000
		var reg = new RegExp(/(\d)\1{6}/);
		var reglength = new RegExp(/^(\d){7}$/); //match exactly 7 digits
		
		if(reg.test(temp) || !reglength.test(temp)) { alertError(fieldName); return true }
	}
	return false
}

function isValidUSAreacode(num) {
    
	var grptwo = new RegExp(/2[01][1-9]|210|22[4-9]|23[1469]|24[028]|25[0-46]|26[0247-9]|27[06]|28[1349]/);
	var grpthree = new RegExp(/3[01][1-9]|310|32[135]|33[14679]|34[01357]|35[12]|36[0149]|38[056]/);
	var grpfour = new RegExp(/4[01][1-9]|410|42[3-5]|43[02458]|44[0-357]|45[068]|46[49]|47[03589]|48[04]/);
	var grpfive = new RegExp(/5[01][0-9]|520|53[03]|54[01]|55[1579]|56[1-47]|57[013-5]|58[015-7]/);
	var grpsix = new RegExp(/6[01][0-9]|62[036-8]|63[016]|64[1679]|65[0179]|66[0-2479]|67[0189]|68[1249]/);
	var grpseven = new RegExp(/7[01][0-9]|72[047]|73[0-247]|74[07]|75[478]|76[02-579]|77[02-589]|78[014-7]/);
	var grpeight = new RegExp(/8[01][0-9]|82[2589]|83[0-35]|84[3-57-9]|85[05-9]|86[02-9]|87[026-8]|888/);
	var grpnine = new RegExp(/9[01][0-9]|92[058]|93[15-9]|94[0179]|95[1246]|97[0-3589]|98[0459]/);
	
	return(grptwo.test(num) || grpthree.test(num) || grpfour.test(num) || grpfive.test(num) 
		|| grpsix.test(num) || grpseven.test(num) || grpeight.test(num) || grpnine.test(num));
	
}

/**
* Method to see if a string contains HTML
*
*   @params string String to check for HTML
*   @returns position of first match, -1 if no match
*/

function checkForHTML(string) {
    var regEx = /<(.|\n)+?>/;
    var result = string.search(regEx); 
    return(result);
}

function Trim(strInput) {
    var temp;
    if(strInput) temp = strInput.replace(/(^\s*)|(\s*$)/g,""); else temp = strInput;
	return temp;
}

function ShowZip(v) {
	window.open("/master/welcome/_incs/zipcode.asp?version="+v,"_blank","scrollbars=yes, resizable=no, width=316, height=250");
}

function setListeners(){
  if(navigator.appName =="Microsoft Internet Explorer") {
    inputList = document.getElementsByTagName("INPUT");
    for(i=0;i<inputList.length;i++){
      inputList[i].attachEvent("onpropertychange",restoreStyles);
      inputList[i].style.backgroundColor = "";
	}
    selectList = document.getElementsByTagName("SELECT");
    for(i=0;i<selectList.length;i++){
      selectList[i].attachEvent("onpropertychange",restoreStyles);
      selectList[i].style.backgroundColor = "";
    }

  } else {
    inputList = document.getElementsByTagName("INPUT");
    for(i=0;i<inputList.length;i++){
      inputList[i].addEventListener("onpropertychange",restoreStyles,false);
      inputList[i].style.backgroundColor = "";
	}
    selectList = document.getElementsByTagName("SELECT");
    for(i=0;i<selectList.length;i++){
      selectList[i].addEventListener("onpropertychange",restoreStyles,false);
      selectList[i].style.backgroundColor = "";
    }
}
}

function restoreStyles(){
    if(event.srcElement.style.backgroundColor != "")
      event.srcElement.style.backgroundColor = "";
}
