var g_nMaxMessageLen = 2000;

function txtMessage_EnforceLimit()
{
	// Enforce limit
	var form = document.getElementById('WholesaleForm');

	if (form.txtMessage.value.length > g_nMaxMessageLen)
	{
		 form.txtMessage.value = form.txtMessage.value.substring(0, g_nMaxMessageLen); 
	}

	// Update visual cue
	var nNumLeft = g_nMaxMessageLen - form.txtMessage.value.length;
	var countdown = document.getElementById('txtMessage_Countdown');
	countdown.innerHTML = nNumLeft;

	return true;
}

//
// 0 - ok
// 1 - unspecified
// 2 - empty
// 3 - too long
// 
// bEmptyDisallowed defaults to true
//
function IsValidSimpleField(strField, nMaxLen, bEmptyDisallowed)
{
	var nRet = 0;

	try
	{
		do
		{
			if (bEmptyDisallowed == undefined || bEmptyDisallowed == false)
			{
				// Is field empty
				if (strField == "")
				{// yes

					nRet = 2;
					continue;
				}
			}

			// Is field too long?
			strSubstring = strField.substring(0, nMaxLen);
			
			if (strSubstring != strField)
			{// yes

				nRet = 3;
				continue;
			}

			nRet = 0;

		} while (false);
	}
	catch (e)
	{
		nRet = 1;
	}

	return nRet;
}

function ValidateFormFields(strFormID)
{
	var bRet = false;
	var ErrorArray = new Array();
	var form = document.getElementById(strFormID);

	var strCompanyName = form.txtCompanyName.value;
	var strContactName = form.txtContactName.value;
	var strAddress1 = form.txtAddress1.value;
	var strAddress2 = form.txtAddress2.value;
	var strCity = form.txtCity.value;
	var nState = form.cboState.selectedIndex;
	var strZipCode = form.txtZipCode.value;
	var strEmailAddress = form.txtEmailAddress.value;
	var strTelephoneNumber = form.txtTelephoneNumber.value;
	var strTaxID = form.txtTaxID.value;
	var strCompanyType = form.txtCompanyType.value;
	var strWebsite = form.txtWebsite.value;
	var strMessage = form.txtMessage.value;

	// Validate email address
	var nMaxLen = 255;
	var strSubstring = strEmailAddress.substring(0, nMaxLen);
	var nSym1 = strEmailAddress.indexOf ('@') ;
	var nSym2 = strEmailAddress.indexOf ('.', nSym1 + 2) ;

	switch (IsValidSimpleField(strCompanyName, nMaxLen))
	{
	case 0:
		break;
	case 1:
		ErrorArray.push("The company name is not valid.  Please re-enter.");
		break;
	case 2:
		ErrorArray.push("The company name cannot be empty.");		
		break;
	case 3:
		strCompanyName = strCompanyName.substring(0, nMaxLen);
		form.txtCompanyName.value = strCompanyName;
		break;
	}

	switch (IsValidSimpleField(strContactName, nMaxLen))
	{
	case 0:
		break;
	case 1:
		ErrorArray.push("Your name is not valid.  Please re-enter.");
		break;
	case 2:
		ErrorArray.push("Your name cannot be empty.");		
		break;
	case 3:
		strContactName = strContactName.substring(0, nMaxLen);
		form.txtContactName.value = g_strCompanyName;
		break;
	}

	switch (IsValidSimpleField(strAddress1, nMaxLen))
	{
	case 0:
		break;
	case 1:
		ErrorArray.push("The address is not valid.  Please re-enter.");
		break;
	case 2:
		ErrorArray.push("The address cannot be empty.");		
		break;
	case 3:
		strAddress1 = strAddress1.substring(0, nMaxLen);
		form.txtAddress1.value = strAddress1;
		break;
	}

	switch (IsValidSimpleField(strAddress2, nMaxLen, true))
	{
	case 0:
		break;
	case 1:
		ErrorArray.push("The address line 2 is not valid.  Please re-enter.");
		break;
	case 2: 
		// This is ok
		break;
	case 3:
		strAddress2 = strAddress2.substring(0, nMaxLen);
		form.txtAddress2.value = strAddress2;
		break;
	}
	
	switch (IsValidSimpleField(strCity, nMaxLen))
	{
	case 0:
		break;
	case 1:
		ErrorArray.push("The city is not valid.  Please re-enter.");
		break;
	case 2:
		ErrorArray.push("The city cannot be empty.");		
		break;
	case 3:
		strCity = strCity.substring(0, nMaxLen);
		form.txtCity.value = strCity;
		break;
	}

	// STATE
	if (nState < 1)
	{
		ErrorArray.push("The state cannot be empty.");
	}

	// ZIP CODE
	do // once
	{
		if (strZipCode == "")
		{
			ErrorArray.push("The zip code cannot be empty.");
			continue;
		}

		var re  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
		if (re.test(strZipCode) == false)
		{
			ErrorArray.push("The zip code is not valid.  It can be 5 digits.  It can also be in ZIP+4 format, like this:  12345-1234");
			continue;
		}

	} while (false);

	// EMAIL
	do
	{
		if (strEmailAddress == "")
		{
			ErrorArray.push("The e-mail address cannot be empty.");
			continue;
		}

		if (strSubstring != strEmailAddress)	// false means strEmailAddress is too long
		{
			ErrorArray.push("The e-mail address is too long.");
		}

		if (strEmailAddress.length  < 5	)	// Email address contains at least 5 characters (e.g., a@a.c)
		{
			ErrorArray.push("The e-mail address is too short.");
		}

		if (nSym1 == -1)	// '@' must exist
		{
			ErrorArray.push("The e-mail address must contain a '@'.");
		}

		if (nSym2 == -1)	// '.' must exist at least 2 positions after '@'
		{
			ErrorArray.push("The e-mail address must contain a '.'.");
		}

	} while (false);

	// TELEPHONE
	var nTelephoneMinLen = 10;
	var nTelephoneMaxLen = 11;
	strTelephoneNumber = strTelephoneNumber.replace(/[^0-9]/g, "");
	strTelephoneNumber = strTelephoneNumber.substring(0, nTelephoneMaxLen + 1);
	form.txtTelephoneNumber.value = strTelephoneNumber;

	do // ONCE
	{
	   if (strTelephoneNumber == "")
	   {
		   ErrorArray.push("The telephone number cannot be empty.");		
		   continue;
	   }

		//
		// 10 digits (country code not included)
		// 11 digits (country code included...country code = 1 most of the time, 
		// but we won't force the country code to be 1.  Why not?  Using Skype 
		// to make phone calls is becoming more common, and I've seen instances 
		// where the country code for Skype caller is 0.
		//
		var TelephoneRegExp = /(^\d{10}$)|(^\d{11}$)/;
		if (TelephoneRegExp.test(strTelephoneNumber) == false)
		{
			if (strTelephoneNumber.length < 10)
			{
				ErrorArray.push("The telephone number is too short.");
			}
			else 
			{
				ErrorArray.push("The telephone number is too long.");
			}

			continue;
		}
	   
	} while (false);

	switch (IsValidSimpleField(strTaxID, nMaxLen))
	{
	case 1:
		ErrorArray.push("The resale number is not valid.  Please re-enter.");
		break;
	case 3:
		strTaxID = strTaxID.substring(0, nMaxLen);
		form.txtTaxID.value = strTaxID;
		break;
	}

	switch (IsValidSimpleField(strCompanyType, nMaxLen))
	{
	case 0:
		break;
	case 1:
		ErrorArray.push("The type of business is not valid.  Please re-enter.");
		break;
	case 2:
		ErrorArray.push("The type of business cannot be empty.");		
		break;
	case 3:
		strCompanyType = strCompanyType.substring(0, nMaxLen);
		form.txtCompanyType.value = strCompanyType;
		break;
	}

	switch (IsValidSimpleField(strWebsite, nMaxLen))
	{
	case 1:
		ErrorArray.push("The website is not valid.  Please re-enter.");
		break;
	case 3:
		strWebsite = strWebsite.substring(0, nMaxLen);
		form.txtWebsite.value = strWebsite;
		break;
	}

	// Display errors
	if (ErrorArray.length > 0)
	{
		bRet = false;

		// Show errordiv
		var errordiv = document.getElementById("errordiv");
		errordiv.style.visibility = "visible";

		errordiv.innerHTML = "<b>There is a problem with the information that was entered:</b><br><br>";

		// Populate errordiv text
		var i = 0;
		for (i = 0; i < ErrorArray.length; i++)
		{
			if (i > 0)
				errordiv.innerHTML += "<br>";
			errordiv.innerHTML += "* " + ErrorArray[i];
		}
	}
	else
	{
		bRet = true;
	}

	ErrorArray = null;

	return bRet;
}

function HandleOnSubmit()
{
	var strFormID = "WholesaleForm";
	var form = document.getElementById(strFormID);
	var bSubmitButtonVisible = true;

	try
	{
		// Hide the submit button
		if (form)
		{
			bSubmitButtonVisible = false;
			form.btnSubmit.style.visibility = "hidden";
		}

		// Hide the error div
		var bOK = false;
		var errordiv = document.getElementById("errordiv");
		if (errordiv)
		{	
			errordiv.style.visibility = "hidden";
		}

		// Validate the form fields
		bOK = ValidateFormFields(strFormID);

		if (bOK == true)
		{
			// Set txtState for the server.
			if (form)
			{
				var strState = form.cboState.options[form.cboState.selectedIndex].text;

				var state = document.getElementById("txtState");
				if (state)
				{
					state.value = strState;
				}
			}
		}
		else
		{
			// Form failed validation.  Show the submit button, so user can try again.
			if (form)
			{
				form.btnSubmit.style.visibility = "visible";
			}
		}
	}
	catch (e)
	{
		if (bSubmitButtonVisible == false)
		{
			if (form)
			{
				form.btnSubmit.style.visibility = "visible";
			}
		}
	}

	return bOK;
}

function SetupAction()
{
   var objForm = document.getElementById('WholesaleForm');
   if (objForm)
   {
      objForm.action = 'http://www.dealfarm.com/wholesale.php';
   }
}

function HandleOnLoad()
{
   try
   {
      SetupAction();

	   var countdown = document.getElementById('txtMessage_Countdown');
	   countdown.innerHTML = g_nMaxMessageLen;

	   var txtMessage = document.getElementById('txtMessage');
	   if (txtMessage)
	   {
		   // Enforce limit on key strokes
		   txtMessage.onkeydown = txtMessage_EnforceLimit;
		   txtMessage.onkeyup = txtMessage_EnforceLimit;

		   // Enforce limit when mouse moves inside text area
		   txtMessage.onmousemove = txtMessage_EnforceLimit; 

		   // Enforce limit when mouse moves out of text area
		   txtMessage.onblur = txtMessage_EnforceLimit;
	   }

	   var strElementName = 'WholesaleForm';
	   var WholesaleForm = document.getElementById(strElementName);
	   if (WholesaleForm)
	   {
		   // Make submit button visible when the page loads
		   WholesaleForm.btnSubmit.style.visibility = "visible";

		   // Set focus to first form control
		   WholesaleForm.elements[0].focus();
		   WholesaleForm.onsubmit = HandleOnSubmit;
	   }
	}
	catch (e)
	{
	}
}

window.onload = HandleOnLoad;

