//validate form submission
function validateLeadAff(lead, form_id, requireZip, requireAddress, requireService)
{
	if(form_id == 0) form_id = ""; 
	//make sure encrypted user id set
	var userId = lead.nx_e_userId;
	if(userId && userId.value !="")
		return validateLead(lead, form_id, requireZip, requireAddress, requireService);
	
	return false; //no userid for some odd reason
}

// regular form
function validateLead(lead, form_id, requireZip, requireAddress, requireService)
{
	var reason = "";
	
	if(requireService) reason+=validateService(document.getElementById('service_type'));
	
	reason+=validateName(lead.f_name, document.getElementById('f_name_label'+form_id));
	reason+=validatePhoneNum(lead.n_phone.value, document.getElementById('phone_label'+form_id));
	reason+=validateEmail(lead.email, document.getElementById('email_label'+form_id));

	if(requireZip) reason+=validateZip(document.getElementById('zip'+form_id).value, document.getElementById('zip_label'+form_id));

	if(requireAddress)
	{
		var address = lead.address;
		var lbl = document.getElementById('address_label'+form_id);
		if(!address.value)
		{
			 lbl.style.color = 'Red';
			 reason += "your address\n";
		}else
		{
			lbl.style.color = 'Black';
		}
	} 
	
	// optional (alternate) phone
	if(document.getElementById('alternate_label'+form_id) && lead.d_phone.value!="")
	{
		reason += validatePhoneNum(lead.d_phone.value, document.getElementById('alternate_label'+form_id));
	}
	
	//validate questions
	reason += validateQuestions(lead, form_id);
	
	if(reason != "")
	{
		alert("In order to be contacted please fill in:\n"+reason);
		return false;
	}

	disableSubmit(lead);
	return true;
}

/**
 * Validate fields on regular form
 * validateZip
 * validateName
 * validateEmail
 * validatePhone
 * validateService
 * validateQuestions
 * @using accessory functions: trim, isInteger, isValidZip etc.
 */
function validateZip(fld,lbl)
{
	var error = "";
	if(fld == "")
	{
		error = "your zip code\n";
		lbl.style.color = 'Red';
	}else if(!isValidZip(fld)) // validate zip format
	{
		error = "your zip code correctly\n";
		lbl.style.color = 'Red';
	}else
	{
		lbl.style.color = 'Black';
	}
    return error;
}

function validateName(fld,lbl)
{
	var error = "";
	var str=trim(fld.value);
	if (!str || str == "") {
        lbl.style.color = 'Red'; 
        error = "your name\n";
    } else {
        lbl.style.color = 'Black';
    }
    return error;
}

function validateEmail(fld, lbl)
{
	var error = "", required = (lbl.className.indexOf("required")!=-1);
	
	if(fld.value == "" && required)
	{
		error = "your email\n";
		lbl.style.color = 'Red';
	}else if(fld.value != "" && !isValidEmail(fld.value)) // check if email matches the regexp
	{
		lbl.style.color = 'Red';
		error = "your email correctly\n";
	}else
	{
		lbl.style.color = 'Black';
	}
	return error;
}

function validatePhone(fld1, fld2, fld3, lbl)
{
	return validatePhoneNum(fld1.value + fld2.value + fld3.value, lbl);
}

function validatePhoneNum(value, lbl)
{
    var error = "";
    var alt = (lbl.id.indexOf("alternate_label")==0) ? "alternate " : "";
	
	if(value == "")
	{
        error = "your "+alt+"phone number\n";
        lbl.style.color = 'Red';
	}
	else if(!isValidPhone(value)) // validate phone format
	{
        error = "your "+alt+"phone number correctly\n";
        lbl.style.color = 'Red';
    }
	else
    {
		lbl.style.color = 'Black';
	}
    return error;
}

function validateService(fld)
{
	var error = "";
    if(fld.value.length == 0) error = "Please select the service you need\n";
    return error;
}

function validateQuestions(lead, form_id)
{
	var errorMsg = ""; 
	//if we have a task id then check it's value
	if(document.getElementById('sm_task_id'+form_id))
	{
		if(document.getElementById('sm_task_id' + form_id).value =="")
		{
			errorMsg = "an answer for each of the required questions";
			document.getElementById('label_task'+form_id).style.color = 'red';
		}else{
			document.getElementById('label_task'+form_id).style.color = 'black'; 
		}			
	}

	for (var i = 0; i < lead.elements.length; ++i)
	{ 
		var eleName = lead.elements[i].name; 
		//see if name is question 
		//this is a question
		var question_id = eleName.substr(9,eleName.length-10); 
		if(eleName.substr(0, 8)=="question" && lead.elements[i].className=="required" && lead.elements[i].value=="")
		{
			errorMsg = "an answer for each of the required questions";
			document.getElementById('label_question_'+question_id).style.color = 'red'; 
		} else if(eleName.substr(0,8)=="question" && lead.elements[i].className=="required" && lead.elements[i].value!="")
		{
			document.getElementById('label_question_'+question_id).style.color = 'black'; 
		}
	}
	return errorMsg; 		
}

/**
 * Accessory functions:
 * trim
 * autoTab
 * disableSubmit
 */
function trim(s)
{
	if(s) return s.replace(/^\s+|\s+$/, '');
}

function autoTab(field1, len, field2)
{
	if(document.getElementById(field1).value.length == len)
	{
		if(document.getElementById(field2)) document.getElementById(field2).focus();
	}
}

function disableSubmit(form)
{
	var send_button;
    for(var i=0;i<form.elements.length;i++)
    {
        if(form.elements[i].name=="cmdSubmitRequest")
        {
            send_button = form.elements[i];
            break;
        }
    }
	if(send_button)	send_button.style.visibility="hidden";
	return true;
}

/**
 * Accessory Functions to validate format of the string:
 * isInteger
 * isValidPhone
 * isValidEmail
 * isValidZip
 */
function isInteger(s)
{
	var i;
    for(i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function isValidEmail(s)
{
	var exp = /^[\+_a-z0-9-]+(\.[\+_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i;
	return s.match(exp);
}

function isValidPhone(s)
{
	var stripped = s.replace(/[\(\)\.\-\ ]/g, '');
	if(!isInteger(stripped) || !(stripped.length == 10)) return false;
	return true;
}

function isValidZip(s)
{
	if(isNaN(s) || !(s.length == 5)) return false;
	return true;
}

/**
 * JQuery Functions
 */

/**
 * This one is taking care of all masked inputs
 * uses maskedinput plugin
 */
function applyMaskedInput()
{
	$(function(){
		$(".phone_mask").mask("?(999) 999-9999");
	});
}

/**
 * Attach our function to show/hide the default text to
 * all .default_text elements onfocus, onblur and on page load
 */
function applyDefaultText(defText)
{
	$(function(){
		$(".default_text").each(function(i){
			$(this).
			focus(function(){changeDefaultText(this, defText);}).
			blur(function(){changeDefaultText(this, defText);});
			changeDefaultText(this, defText);
		});
	});
}

function changeDefaultText(elt, defText)
{
	var defaultText = defText;
	
	var elt_data = $(elt).data("default_text");
	if(elt_data) defaultText = elt_data;
	
	if($.trim(elt.value) == defaultText)
	{
		elt.value = "";
		elt.style.fontStyle = "normal";
		elt.style.color = "#000";
	}	
	else if($.trim(elt.value) == "")
	{
		elt.value = defaultText;
		elt.style.fontStyle = "italic";
		elt.style.color = "gray";
	}
}
