function QuickFormValidate() {
	var hReturnInfo;
	var bReturnValue = true;
	var dCurrentDate = new Date();
	var sCurrentDate = (dCurrentDate.getMonth() + 1) + '/' + dCurrentDate.getDate() + '/' + dCurrentDate.getFullYear();

	//Clear the error messages and the marked fields.
	ResetErrorDisplay(); 

	try {	

			//Check if the user entered a valid origin zip code. 
			hReturnInfo = IsValidZipCode(document.getElementById('sidebar1_txtFromZip').value, false); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('sidebar1_txtFromZip', hReturnInfo.ErrorDescription ,1);	
				
			//Check if the user has entered the origin city name.
			if (IsEmpty(document.getElementById('sidebar1_txtToCity').value).ReturnCode > 0)
				throw new UserError('sidebar1_txtToCity', 'Please enter the destination city name', 1);
				
			//Check if the user selected the destination state.
			if (document.getElementById('sidebar1_cboToState').selectedIndex == 0)
				throw new UserError('sidebar1_cboToState', 'Please select the destination state.', 1);
				
			//Format the move date properly.
			document.getElementById('sidebar1_txtEstMoveDate').value = FormatDate(document.getElementById('sidebar1_txtEstMoveDate').value);
				
			//Check if the user entered a valid e-mail address.
			hReturnInfo = CompareDates(document.getElementById('sidebar1_txtEstMoveDate').value, sCurrentDate, 'GE'); 

			if (hReturnInfo.ReturnCode > 0) {
				if (hReturnInfo.ReturnCode != 9)
					throw new UserError('sidebar1_txtEstMoveDate', 'Please enter a date (mm/dd/yyyy)' ,1);
				else
					throw new UserError('sidebar1_txtEstMoveDate', 'Please enter a future date.' ,1);
			}						
			
		}
		
		//If an exeption was raised an error message will be displayed.
		catch (hUserError) {
			hUserError.DisplayError();
			bReturnValue = false;
		}	

	return bReturnValue;							
}
	//=========================================================================
	// This function performs validity checks on the first page of the estimate
	// request form and displays an informative message to the user if any 
	// errors occurred.
	// If no error has occured the second page of the form will be displayed.
	//=========================================================================
	function NextPage() {
	
	var hReturnInfo;
	var bReturnValue = true;
	var dCurrentDate = new Date();
	var sCurrentDate = (dCurrentDate.getMonth() + 1) + '/' + dCurrentDate.getDate() + '/' + dCurrentDate.getFullYear();
	var iIndex;
	var sItemName, sQuantity;
	var sOrderItems = '';
	var sOrderRooms = '';	
	
		//Clear the error messages and the marked fields.
		ResetErrorDisplay(); 

		try {

			//Format the move date properly.
			document.getElementById('txtEstMoveDate').value = FormatDate(document.getElementById('txtEstMoveDate').value);
				
			//Check if the user entered a valid e-mail address.
			hReturnInfo = CompareDates(document.getElementById('txtEstMoveDate').value, sCurrentDate, 'GE'); 

			if (hReturnInfo.ReturnCode > 0) {
				if (hReturnInfo.ReturnCode != 9)
					throw new UserError('txtEstMoveDate', hReturnInfo.ErrorDescription ,2);
				else
					throw new UserError('txtEstMoveDate', 'Please enter a future date.' ,2);
			}

	
			//Check if the user entered a valid origin zip code. 
			hReturnInfo = IsValidZipCode(document.getElementById('txtFromZipCode').value, false); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtFromZipCode', hReturnInfo.ErrorDescription ,3);


			//Check if the user has entered the origin city name.
			if (IsEmpty(document.getElementById('txtFromCity').value).ReturnCode > 0)
				throw new UserError('txtFromCity', 'Please enter the origin city name', 3)

			//Check if the user selected the origin state.
			if (document.getElementById('cboFromState').selectedIndex == 0)
				throw new UserError('FromState', 'Please select the origin state.', 3)



			//Check if the user entered a valid destination zip code. 
			hReturnInfo = IsValidZipCode(document.getElementById('txtToZipCode').value, true); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtToZipCode', hReturnInfo.ErrorDescription ,4);

			//Check if the user has entered the destination city name.
			if (IsEmpty(document.getElementById('txtToCity').value).ReturnCode > 0)
				throw new UserError('txtToCity', 'Please enter the destination city name', 4)

			//Check if the user selected the destination state.
			if (document.getElementById('cboToState').selectedIndex == 0)
				throw new UserError('cboToState', 'Please select the destination state.', 4)

			//Check if the user selected at least on house hold room or item.
			if (document.getElementById('lstSelectedItems').options.length <= 0 && IsEmpty(document.getElementById('txtTotalItemsWeight').value).ReturnCode > 0)
				throw new UserError('radContentsOption', 'Please specify household items and number of rooms, or total items weight', 6);

			//Check if the user entered a valid total items weight.
			hReturnInfo = IsValidNumber(document.getElementById('txtTotalItemsWeight').value, 1, 9999999, 0, true); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtTotalItemsWeight', hReturnInfo.ErrorDescription, 6);

			//Check if the user entered a valid total volume.
			hReturnInfo = IsValidNumber(document.getElementById('txtTotalVolume').value, 1, 999999, 0, true); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtTotalVolume', hReturnInfo.ErrorDescription, 6);
		}
		
		//If an exeption was raised an error message will be displayed.
		catch (hUserError) {
			hUserError.DisplayError();
			bReturnValue = false;
		}			
		
		//If all the data in the form is valid some data formting is done
		//before submiting the form.
		if (bReturnValue) {
			//Iterating through the selected household rooms and items and 
			//format them in a convenient way for easy read at the backend. 
			with (document.getElementById('lstSelectedItems').options) {
				for (iIndex=0; iIndex < length; iIndex++) {
					sItemName = item(iIndex).value;
					sItemName = sItemName.substring(0, sItemName.indexOf('_'));
					sQuantity = item(iIndex).text.substring(item(iIndex).text.indexOf('(')+1, item(iIndex).text.indexOf(')'));

					if (sItemName.indexOf('R') < 0)
						sOrderItems += sItemName + ';' + sQuantity + ';'; 
					else
						sOrderRooms += sItemName.substring(sItemName.indexOf('R') + 1, sItemName.length) + ';' + sQuantity + ';'; 

				}
			} 

			//Setting the household rooms and items hidden form fields.			
			document.getElementById('txtHouseholdItems').value = sOrderItems.substring(0, sOrderItems.length -1);
			document.getElementById('txtHouseholdRooms').value = sOrderRooms.substring(0, sOrderRooms.length -1);
		}
		
		
		//If no error was found then the second page of the estimate request
		//form will be displayed. 
		//if (bReturnValue) {
		//	document.getElementById('EstimatePage1').style.display = 'none';
		//	//frmInfo.radContentsOption[0].checked = true;
		//	document.getElementById('EstimatePage2').style.display = 'inline';
		//}
	}
	
	
	
	//=========================================================================
	// This function performs validity checks on the second page of the 
	// estimate request form and displays an informative message to the user 
	// if any error occurred.
	// If no error has occured the form will be submitted to the server.
	//=========================================================================
	function frmInfo_onsubmit() {
	var hReturnInfo;
	var bReturnValue = true;
	var iIndex;
	var sItemName, sQuantity;
	var sOrderItems = '';
	var sOrderRooms = '';
	
	
		//Clear the error messages and the marked fields.
		ResetErrorDisplay(); 


		//Perform validity checks on the second half of the form.
		try {

			//Check if the user entered his full name.
			if (IsEmpty(document.getElementById('txtFullName').value).ReturnCode > 0)
				throw new UserError('txtFullName', 'Please enter your full name.', 1)

	
			//Check if the user entered a valid phone number. 
			hReturnInfo = IsValidPhoneNumber(document.getElementById('txtPhone').value, false); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtPhone', hReturnInfo.ErrorDescription ,1);

			//Format the phone number properly.
			document.getElementById('txtPhone').value = FormatPhoneNumber(document.getElementById('txtPhone').value);
			
			//Check if the phone extension is valid.
			if (IsValidNumber(document.getElementById('txtPhoneExt').value, 1, 99999, 0, 2).ReturnCode > 0)
				throw new UserError('txtPhoneExt', 'Please enter a valid extension number' ,1, 1);
			
			
			//Check if the user entered a valid additional phone number. 
			/*
			 * 11/18/2007 - No longer required:
			 *
			 * hReturnInfo = IsValidPhoneNumber(document.getElementById('txtAdditionalPhone').value, true); 
			 * if (hReturnInfo.ReturnCode > 0)
			 * 	throw new UserError('txtAdditionalPhone', hReturnInfo.ErrorDescription ,1);
			 */

			//Format the additional phone number properly.
			/*
			 * 11/18/2007 - No longer required:
			 *
			 * frmInfo.txtAdditionalPhone.value = FormatPhoneNumber(document.getElementById('txtAdditionalPhone').value);
			 */

			//If the user entered an extension for the additional phone number
			//making sure he will enter the phone number as well.
			/*
			 * 11/18/2007 - No longer required:
			 *
			 * if ((IsEmpty(document.getElementById('txtAdditionalPhone').value).ReturnCode > 0) && (IsEmpty(document.getElementById('txtAdditionalPhoneExt').value).ReturnCode == 0))
			*	throw new UserError('txtAdditionalPhone', 'Please enter your additional phone number', 1, 3);
			*/

			//Check if the phone extension is valid.
			/*
			 * 11/18/2007 - No longer required:
			 *
			 * if (IsValidNumber(frmInfo.txtAdditionalPhoneExt.value, 1, 99999, 0, 2).ReturnCode > 0)
			 *	throw new UserError('txtAdditionalPhoneExt', 'Please enter a valid extension number' ,1, 1);
			 */


			//Check if the user entered a valid e-mail address. 
			hReturnInfo = IsValidEMailAddress(document.getElementById('txtEMail').value, false); 
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtEMail', hReturnInfo.ErrorDescription ,1);				
					
		}
		
		//If an exption was throwen an error message will be displayed.
		catch (hUserError) {
			hUserError.DisplayError();
			bReturnValue = false;
		}	
		
		
		//If all the data in the form is valid some data formting is done
		//before submiting the form.
		if (bReturnValue) {
			//Iterating through the selected household rooms and items and 
			//format them in a convenient way for easy read at the backend. 
			with (document.getElementById('lstSelectedItems').options) {
				for (iIndex=0; iIndex < length; iIndex++) {
					sItemName = item(iIndex).text;
					sItemName = sItemName.substring(0, sItemName.indexOf('(') - 1);
					sQuantity = item(iIndex).text.substring(item(iIndex).text.indexOf('(')+1, item(iIndex).text.indexOf(')'));

					if (sItemName.indexOf('R') < 0)
						sOrderItems += sItemName + ';' + sQuantity + ';'; 
					else
						sOrderRooms += sItemName.substring(sItemName.indexOf('R') + 1, sItemName.length) + ';' + sQuantity + ';'; 

				}
			} 

			//Setting the household rooms and items hidden form fields.			
			document.getElementById('txtHouseholdItems').value = sOrderItems.substring(0, sOrderItems.length -1);
			document.getElementById('txtHouseholdRooms').value = sOrderRooms.substring(0, sOrderRooms.length -1);
		}
		
				
		return bReturnValue;
	}


	function PreviousPage() {
		document.getElementById('EstimatePage2').style.display = 'none';
		document.getElementById('EstimatePage1').style.display = 'inline';
	}
	
function DisplayWeightHelp(e) {
	var iLeftPos = 300;
	
		document.getElementById('winPopupHelpWeight').style.left = e.clientX + document.body.scrollLeft - iLeftPos;
		document.getElementById('winPopupHelpWeight').style.top =  e.clientY + document.body.scrollTop;
		document.getElementById('winPopupHelpWeight').style.display = 'inline';
	}

	function DisplayZipHelp(e) {
	var iLeftPos = 300;
	
		document.getElementById('winPopupHelpZip').style.left = e.clientX + document.body.scrollLeft - iLeftPos;
		document.getElementById('winPopupHelpZip').style.top =  e.clientY + document.body.scrollTop;
		document.getElementById('winPopupHelpZip').style.display = 'inline';
	}
		
	function AdjustPopupWindows() {
		document.getElementById('winPopupHelpZip').style.display = 'none'; 	
		document.getElementById('winPopupZipList').style.display = 'none'; 	
		document.getElementById('winPopupHelpWeight').style.display = 'none'; 	
	}
	
	
	function AddSelectedItem() {
	var hActiveList;
		if (document.getElementById('radContentsOption2').checked)
			hActiveList = document.getElementById('lstHouseholdItems');
		else
			if (document.getElementById('radContentsOption3').checked)
				hActiveList = document.getElementById('lstHouseholdRooms');	
	var hReturnInfo;
	var bAddItem = true;
	var sNewItemCode, iQuantity;
	var hNewOption;
	var iIndex, bItemFound = false;
	
		//Clear the error messages and the marked fields.
		ResetErrorDisplay(); 

		try {
			//Check if the user entered a valid quantity for the item or room
			//he wants to add.
			hReturnInfo = IsValidNumber(document.getElementById('txtQuantity').value, 1, 999, 0, false);
			if (hReturnInfo.ReturnCode > 0)
				throw new UserError('txtQuantity', hReturnInfo.ErrorDescription, 6, 1)
		}
		
		//Display an error message if the quantity is invalid.
		catch (hUserError) {
			hUserError.DisplayError()
			bAddItem = false;
		}	
		
		if (bAddItem) {
			//Saving the new item code in a local variable.
			sNewItemCode = hActiveList.value;
			
			//Check if the new item already exists in the selected items list.
			with (document.getElementById('lstSelectedItems').options) 
				for (iIndex = 0; iIndex < length && !bItemFound; iIndex++) {
					bItemFound = (item(iIndex).value == sNewItemCode);
					if (bItemFound) 
						hNewOption = item(iIndex);
				}
		
			if (!bItemFound) {
				//Adding the new item to the list if it does not exist.
				hNewOption = document.createElement("OPTION");
				document.getElementById('lstSelectedItems').options.add(hNewOption, (document.getElementById('radContentsOption2').checked?0:hActiveList.options.length));
				iQuantity = document.getElementById('txtQuantity').value;
			}
			else 
				//Changing the quantity of the item if it does exist.
				iQuantity = Number(hNewOption.innerHTML.substring(hNewOption.innerHTML.indexOf('(')+1, hNewOption.innerHTML.indexOf(')'))) + Number(document.getElementById('txtQuantity').value);

			//Setting the item code and text. 
			hNewOption.innerHTML = hActiveList.options[hActiveList.selectedIndex].text + ' (' + iQuantity + ')';
			hNewOption.value = sNewItemCode;
			
			//Recalculating the total weight if the selected rooms and items.
			document.getElementById('txtCalcTotalWeight').value = Number(document.getElementById('txtCalcTotalWeight').value) + (Number(document.getElementById('txtQuantity').value) * Number(sNewItemCode.substring(sNewItemCode.indexOf('_') + 1, sNewItemCode.length)));
			document.getElementById('txtTotalItemsWeight').value = document.getElementById('txtCalcTotalWeight').value;
			txtTotalItemsWeight_OnKeyUp(); 
			 
			//Settting the default quantity to 1.
			document.getElementById('txtQuantity').value = '1';
		}
	}
	


	function RemoveSelectedItem() {
	var iSelectedItemIndex = document.getElementById('lstSelectedItems').selectedIndex;
	var sItemCode = document.getElementById('lstSelectedItems').value;
	var sItemText = document.getElementById('lstSelectedItems').options[iSelectedItemIndex].text;
	
		//Recalculating the total weight if the selected rooms and items.
		document.getElementById('txtCalcTotalWeight').value = Number(document.getElementById('txtCalcTotalWeight').value) - (Number(sItemText.substring(sItemText.indexOf('(')+1, sItemText.indexOf(')'))) * Number(sItemCode.substring(sItemCode.indexOf('_') + 1, sItemCode.length)));
		document.getElementById('txtTotalItemsWeight').value = document.getElementById('txtCalcTotalWeight').value;
		txtTotalItemsWeight_OnKeyUp(); 

		//Removing the selected item.
		document.getElementById('lstSelectedItems').options.remove(iSelectedItemIndex);
		
		//Setting the newly selected item to the item that appeared before the
		//deleted item on the list.
		if (iSelectedItemIndex > 0)
			iSelectedItemIndex--;
		
		//Selecting the new item if there is more than one item on the list.	
		if (document.getElementById('lstSelectedItems').options.length > 0)
			document.getElementById('lstSelectedItems').selectedIndex = iSelectedItemIndex;
		else
			document.getElementById('cmdRemoveItem').disabled = true;
	}
	

	
	//Toggle the view between the household items and the rooms list.
	function ToggleListView(e) {
		var src;
		if (e.srcElement) src = e.srcElement;
		else if (e.target) src = e.target;
		switch (src.value)
		{
			case '1':		
				document.getElementById('blkRoomsTitle').style.display = 'none';
				document.getElementById('lstHouseholdRooms').style.display = 'none';
				document.getElementById('blkItemsTitle').style.display = 'inline';
				document.getElementById('lstHouseholdItems').style.display = 'inline';
				document.getElementById('lstSelectedItems').style.display = 'inline';
				document.getElementById('cboMoveWeight').style.display = 'none';
				document.getElementById('blkSelectedItems').style.display = 'inline';
				document.getElementById('blkItemsButtons1').style.display = 'inline';
				document.getElementById('blkItemsButtons2').style.display = 'inline';
				document.getElementById('blkSpecificWeight').style.display = 'none';				
				break;
			case '2':
				document.getElementById('blkItemsTitle').style.display = 'none';
				document.getElementById('lstHouseholdItems').style.display = 'none';
				document.getElementById('blkRoomsTitle').style.display = 'inline';
				document.getElementById('lstHouseholdRooms').style.display = 'inline';
				document.getElementById('lstSelectedItems').style.display = 'inline';
				document.getElementById('cboMoveWeight').style.display = 'none';
				document.getElementById('blkSelectedItems').style.display = 'inline';
				document.getElementById('blkItemsButtons1').style.display = 'inline';
				document.getElementById('blkItemsButtons2').style.display = 'inline';
				document.getElementById('blkSpecificWeight').style.display = 'none';				
				break;
			case '3':
				document.getElementById('blkRoomsTitle').style.display = 'none';
				document.getElementById('lstHouseholdRooms').style.display = 'none';
				document.getElementById('blkItemsTitle').style.display = 'none';
				document.getElementById('lstHouseholdItems').style.display = 'none';
				document.getElementById('lstSelectedItems').style.display = 'none';
				document.getElementById('blkSelectedItems').style.display = 'none';
				document.getElementById('blkItemsButtons1').style.display = 'none';
				document.getElementById('blkItemsButtons2').style.display = 'none';
				document.getElementById('cboMoveWeight').style.display = 'inline';
				document.getElementById('blkSpecificWeight').style.display = 'none';				
				break;
			case '4':
				document.getElementById('blkRoomsTitle').style.display = 'none';
				document.getElementById('lstHouseholdRooms').style.display = 'none';
				document.getElementById('blkItemsTitle').style.display = 'none';
				document.getElementById('lstHouseholdItems').style.display = 'none';
				document.getElementById('lstSelectedItems').style.display = 'none';
				document.getElementById('blkSelectedItems').style.display = 'none';
				document.getElementById('blkItemsButtons1').style.display = 'none';
				document.getElementById('blkItemsButtons2').style.display = 'none';	
				document.getElementById('cboMoveWeight').style.display = 'none';
				document.getElementById('blkSpecificWeight').style.display = 'inline';				
				break;
			default:
				break;			
		}
				
		document.getElementById('cmdAddItem').disabled = true;
	}
		
	
	
	function SelectNewItem() {
	var sFindText, sTextLength, iIndex, iNewSelectedIndex = -1;

		if (event.keyCode != 13) {
			if (IsEmpty(document.getElementById('txtFindItem').value).ReturnCode == 0) {
				sFindText = document.getElementById('txtFindItem').value.toLowerCase();
				sTextLength = sFindText.length;
				with (document.getElementById('lstHouseholdItems').options)
					for (iIndex = 0; (iIndex < length) && (iNewSelectedIndex == -1); iIndex++)
						iNewSelectedIndex = (sFindText == item(iIndex).text.substring(0, sTextLength).toLowerCase()?iIndex:-1);  
			}

			document.getElementById('lstHouseholdItems').selectedIndex = iNewSelectedIndex;
			document.getElementById('cmdAddItem').disabled = (iNewSelectedIndex == -1);
		}
		else 
			if (!document.getElementById('cmdAddItem').disabled)
				document.getElementById('cmdAddItem').click();
	}



	function txtQuantity_OnKeyDown(){
		if (event.keyCode == 13) {
			event.returnValue = false;
			if (!document.getElementById('cmdAddItem').disabled) 
				document.getElementById('cmdAddItem').click();
		}
	}
	
	
	
	function txtTotalItemsWeight_OnKeyUp() {
	var sNewVolume;
	
		if (IsValidNumber(document.getElementById('txtTotalItemsWeight').value , 1, 9999999, 0, false).ReturnCode == 0) {
			sNewVolume = (Number(document.getElementById('txtTotalItemsWeight').value) / 7).toString();
			if(sNewVolume.indexOf('.') > -1) {
				document.getElementById('txtTotalVolume').value = sNewVolume.substring(0, sNewVolume.indexOf('.'));
				if (document.getElementById('txtTotalVolume').value == '0') 
					document.getElementById('txtTotalVolume').value = '';
				}
			else
				document.getElementById('txtTotalVolume').value = sNewVolume;
		}
		else
			document.getElementById('txtTotalVolume').value = '';
	}
	
	
	function txtTotalVolume_OnKeyUp() {
	var sNewWeight;
		if (IsValidNumber(document.getElementById('txtTotalVolume').value, 1, 999999, 0, false).ReturnCode == 0) {
			sNewWeight = (Number(document.getElementById('txtTotalVolume').value) * 7).toString();
			document.getElementById('txtTotalItemsWeight').value = sNewWeight;
		}
		else
			document.getElementById('txtTotalItemsWeight').value = '';
	}
	
	function cboMoveWeight_OnChange() {
	var sNewVolume;
	
		document.getElementById('txtTotalItemsWeight').value = document.getElementById('cboMoveWeight').value;
		sNewVolume = (Number(document.getElementById('txtTotalItemsWeight').value) / 7).toString();
		if(sNewVolume.indexOf('.') > -1) {
			document.getElementById('txtTotalVolume').value = sNewVolume.substring(0, sNewVolume.indexOf('.'));
			if (document.getElementById('frmInfo.txtTotalVolume').value == '0') 
				document.getElementById('frmInfo.txtTotalVolume').value = '';
			}
		else
			document.getElementById('txtTotalVolume').value = sNewVolume;
	}	