var RED = "displayBad";
var LABEL = "_label";
var ERROR_DIV = "errorDiv";

var REQ_STRING = "<p>Please review the fields for correction.<br/>The fields marked with (*) are required for submisssion.</p>";
var EMAIL_STRING = "<p>Your email address is not formatted correctly</p>";
var PHONE_STRING = "<p>Your phone or fax number is not formatted correctly.<br/>Accepted formats are xxx-xxx-xxxx or xxx xxx xxxx</p>";
var PHONE_REGEX_1 = /\d{3}-\d{3}-\d{4}/;
var PHONE_REGEX_2 = /\d{3} \d{3} \d{4}/;
var PHONE_REGEX_3 = /\d{3}\d{3}\d{4}/;
var EMAIL_REGEX = /[\w\.=-]+@[\w\.-]+\.[\w]{2,3}/;

var PREFERRED_FIELD_NAME = "preferredMethodOfContact";

var HOME_PHONE_FIELD_NAME = "homePhone";
var HOME_PHONE_LABEL = "Home Phone:";
var HOME_PHONE_REQUIRED_LABEL = "Home Phone:*";

var WORK_PHONE_FIELD_NAME = "workPhone";
var WORK_PHONE_LABEL = "Work Phone:";
var WORK_PHONE_REQUIRED_LABEL = "Work Phone:*";

var EMAIL_FIELD_NAME = "email";
var EMAIL_LABEL = "E-mail Address:";
var EMAIL_REQUIRED_LABEL = "E-mail Address:*";

var FAX_FIELD_NAME = "fax";

function handlePreferredSelection()
{
	var ob = document.getElementById(PREFERRED_FIELD_NAME);
	
	if(ob.value.indexOf("Work") != -1 || ob.value.indexOf("work") != -1)
	{
		handleField(true, WORK_PHONE_FIELD_NAME, WORK_PHONE_LABEL, WORK_PHONE_REQUIRED_LABEL);
		handleField(false, HOME_PHONE_FIELD_NAME, HOME_PHONE_LABEL, HOME_PHONE_REQUIRED_LABEL);
/* handleField(false, EMAIL_FIELD_NAME, EMAIL_LABEL, EMAIL_REQUIRED_LABEL); Since
E-Mail Address is required, let's not do this.  Shah Khatri 3/17/09 */
	}
	else if(ob.value.indexOf("Home") != -1 || ob.value.indexOf("home") != -1)
	{
		handleField(false, WORK_PHONE_FIELD_NAME, WORK_PHONE_LABEL, WORK_PHONE_REQUIRED_LABEL);
		handleField(true, HOME_PHONE_FIELD_NAME, HOME_PHONE_LABEL, HOME_PHONE_REQUIRED_LABEL);
/* handleField(false, EMAIL_FIELD_NAME, EMAIL_LABEL, EMAIL_REQUIRED_LABEL); Since
E-Mail Address is required, let's not do this.  Shah Khatri 3/17/09 */
	}
	else if(ob.value.indexOf("E-mail") != -1 || ob.value.indexOf("e-mail") != -1)
	{
		handleField(false, WORK_PHONE_FIELD_NAME, WORK_PHONE_LABEL, WORK_PHONE_REQUIRED_LABEL);
		handleField(false, HOME_PHONE_FIELD_NAME, HOME_PHONE_LABEL, HOME_PHONE_REQUIRED_LABEL);
/* handleField(true, EMAIL_FIELD_NAME, EMAIL_LABEL, EMAIL_REQUIRED_LABEL); Since
E-Mail Address is required, let's not do this.  Shah Khatri 3/17/09 */
	}
}

function handleField(b, field, label, reqiredLabel)
{
	var s = field + LABEL;
	var ob = document.getElementById(s);
	if(b)
	{
		ob.innerHTML = reqiredLabel;
		markBadField(field); // Added by Shah Khatri on 3/14/09
	}
	else
	{
		ob.innerHTML = label;
		markGoodField(field);
	}	
}

function isWorkPhoneRequired()
{
	var s = WORK_PHONE_FIELD_NAME + LABEL;
//	alert("looking for " + s);
	var ob = document.getElementById(s);
	var nodes = ob.childNodes;
//	alert(nodes.length);
//	alert(nodes[0].data);
	if(nodes[0].data.indexOf("*") != -1 )
	{
		return true;
	}
	return false;
}

function isHomePhoneRequired()
{
	var s = HOME_PHONE_FIELD_NAME + LABEL;
//	alert("looking for " + s);
	var ob = document.getElementById(s);
	var nodes = ob.childNodes;
//	alert(nodes.length);
//	alert(nodes[0].data);
	if(nodes[0].data.indexOf("*") != -1 )
	{
		return true;
	}
	return false;
}

function isEmailRequired()
{
	var s = EMAIL_FIELD_NAME + LABEL;
//	alert("looking for " + s);
	var ob = document.getElementById(s);
	var nodes = ob.childNodes;
//	alert(nodes.length);
//	alert(nodes[0].data);
	if(nodes[0].data.indexOf("*") != -1 )
	{
		return true;
	}
	return false;
}

function validateAll(requiredFields)
{
	var b = validateForm(requiredFields);
	if(!b)
	{
		return false;
	}
	
	// got this far, passed required fields test
	if(!isEmpty(EMAIL_FIELD_NAME))
	{
		var ob = document.getElementById(EMAIL_FIELD_NAME);

		b = validateEmail(ob.value);
		if(!b)
		{
			return false;
		}
	}
	if(!isEmpty(HOME_PHONE_FIELD_NAME))
	{
		ob = document.getElementById(HOME_PHONE_FIELD_NAME);
		b = validatePhone(ob.value, HOME_PHONE_FIELD_NAME);
		if(!b)
		{
			return false;
		}
	}

	if(!isEmpty(WORK_PHONE_FIELD_NAME))
	{
		ob = document.getElementById(WORK_PHONE_FIELD_NAME);
		b = validatePhone(ob.value, WORK_PHONE_FIELD_NAME);
		if(!b)
		{
			return false;
		}
	}

	if(!isEmpty(FAX_FIELD_NAME)) // Fax validation added by Shah Khatri on 3/16/09
	{
		ob = document.getElementById(FAX_FIELD_NAME);
		b = validatePhone(ob.value, FAX_FIELD_NAME);
		if(!b)
		{
			return false;
		}
	}
	
	return true;
}

function validatePhone(phone, phoneFieldName)
{
	
	var b = validPhone(phone);
	if(!b)
	{
		handleErrorDiv(PHONE_STRING);
		markBadField(phoneFieldName);		
	}
	return b;
}

function validPhone(phone)
{
	//alert("validPhone " + phone);
	var ret = true;
	var regex = PHONE_REGEX_1;
	var x = phone.match(regex);
	if(x == null)
	{
		regex = PHONE_REGEX_2;
		x = phone.match(regex);
		if(x == null)
		{
			regex = PHONE_REGEX_3;
			x = phone.match(regex);
			if(x == null)
			{
				ret = false;
			}
		}
	}
	return ret;
}


function validateEmail(email)
{
	
	var b = validEmail(email);
	if(!b)
	{
		handleErrorDiv(EMAIL_STRING);
		markBadField(EMAIL_FIELD_NAME);
	}
	return b;
}

function validEmail(email)
{
	var ret = true;
	var regex = EMAIL_REGEX;
	var x = email.match(regex);
	if(x == null)
	{
		ret = false;
	}
	return ret;
}





function validateForm(requiredFields)
{
	var noBadField = true;
	for(var i = 0; i < requiredFields.length; i++)
	{		
		var field = requiredFields[i];
		
		if(isEmpty(field))
		{			
			markBadField(field);
			noBadField = false;
		}
		else
		{
			markGoodField(field);
		}				
	}
	
	if(isWorkPhoneRequired())
	{
		var field = WORK_PHONE_FIELD_NAME;
		if(isEmpty(field))
		{			
			markBadField(field);
			noBadField = false;
		}
		else
		{
			markGoodField(field);
		}		
	}
	
	if(isHomePhoneRequired())
	{
		var field = HOME_PHONE_FIELD_NAME;
		if(isEmpty(field))
		{			
			markBadField(field);
			noBadField = false;
		}
		else
		{
			markGoodField(field);
		}		
	}
	
	if(isEmailRequired())
	{
		var field = EMAIL_FIELD_NAME;
		if(isEmpty(field))
		{			
			markBadField(field);
			noBadField = false;
		}
		else
		{
			markGoodField(field);
		}		
	}
	
	if(!noBadField)
	{
		handleErrorDiv(REQ_STRING);
	}
	return noBadField;
}

function handleErrorDiv(s)
{
	var ob = document.getElementById(ERROR_DIV);
	ob.innerHTML = s;
}

function markBadField(fieldId)
{
	try {
		var labelName = fieldId + LABEL;
		var ob = document.getElementById(labelName);
		ob.className = RED;
	} catch(err)
	{

	}
}

function markGoodField(fieldId)
{
	try {
		var labelName = fieldId + LABEL;
		var ob = document.getElementById(labelName);
		ob.className = "";
	} catch(err)
	{
	}
}


function isEmpty(fieldId)
{

	var ob = document.getElementById(fieldId);
	if(ob == null)
	{
		return true;
	}

	if(ob.value == "" || ob.value.length == 0)
	{
		return true;
	}
	return false;
}

function getFormName()
{
	var ob = document.getElementById("formName");
	return ob.value;		
}

function sendFormName(url) {
	url = url + "?formName=" + getFormName();
	new AJAXRequest(
			      'POST',
			      url,
			      null,
			      processReqChange,
			      true,
			      true
			     );
} // End of function sendFormName(url) {

function processReqChange(req) 
{
    // only if req shows "loaded"
    if (req.readyState == 4) 
    {
        // only if "OK"
        if (req.status == 200 || req.status == 0) {
            // ...processing statements go here...
        	// in this case a noop
        } else 
        {
            alert("error req.status != 200\n" +
                req.statusText);
        }
    }
}

function validate() {
	return validateAll(requiredFields);
}
