/// <reference path="intellisense/intellisense.js" />

/******************************************************************************
**      Desc: Contains the client-side functionality for Home page.
**		Auth: Aleksey Fomichenko
**		Date: 01/22/2008
*******************************************************************************
**		Change History
*******************************************************************************
**		Date:		Author:		Description:
**		-----------	-----------	-----------------------------------------------
**		01/22/2008	Aleksey F.	File created.
*******************************************************************************/


//*************************************************************************
// Namespaces Registration
//*************************************************************************
Type.registerNamespace("Fidelity.Scripts.Pages");


/******************************************************************************
	Fidelity.Scripts.Pages.Home static class
******************************************************************************/

Fidelity.Scripts.Pages.Home = function () { throw Error.notImplemented(); };

Fidelity.Scripts.Pages.Home.prototype = 
{
	// --- Private Fields --------------------------------------------------------------------------------------------
	_initialized	: false,
	_elements		: null,
	_hintText		: "Enter one or multiple zip codes",


	// --- Page Lifecycle Methods -----------------------------------------------------------------------------------------------
	
	initialize : function ()
	{
		/// <summary>Occurs when the page has been loaded.</summary>
		
		this._elements = 
		{
			searchTextbox	: "search_textbox",
			searchButton	: "search_button",
			searchTextboxExpert	: "search_textboxExpert",
			searchButtonExpert	: "search_buttonExpert",
			searchError		: "search_error",
			searchErrorExpert		: "search_errorExpert"
		};
		
		this._addEventHandlers();
		
		this._refreshHintText();
		
		this._initialized = true;	
	},
	
	dispose : function ()
	{
		/// <summary>Occurs when the page is being unloaded.</summary>
		
		this._clearEventHandlers();
	},
	
	
	// --- Public Methods --------------------------------------------------------------------------------------------
	// ...
		
	
	// --- Private Methods -----------------------------------------------------------------------------------------------
	
	_addEventHandlers : function ()
	{
	    $addHandlers(
			$get(this._elements.searchTextboxExpert),
			{
				focus : function (evt) 
				{
					var txt = $get(this._elements.searchTextboxExpert);
					if (txt.value === this._hintText)
					{
						txt.value = String.empty;
						txt.style.color = "#444";
					}
				},
				blur : function (evt) 
				{ 
					this._refreshHintTextExpert(); 
				},
				keydown : function (evt)
				{
					if ($util.getEventKey(evt) === Sys.UI.Key.enter)
					{
						$util.freezeEvent(evt.rawEvent);
						this._submitExpert();
					}
				}
			},
			this);
			
		$addHandlers(
			$get(this._elements.searchTextbox),
			{
				focus : function (evt) 
				{
					var txt = $get(this._elements.searchTextbox);
					if (txt.value === this._hintText)
					{
						txt.value = String.empty;
						txt.style.color = "#444";
					}
				},
				blur : function (evt) 
				{ 
					this._refreshHintText(); 
				},
				keydown : function (evt)
				{
					if ($util.getEventKey(evt) === Sys.UI.Key.enter)
					{
						$util.freezeEvent(evt.rawEvent);
						this._submit();
					}
				}
			},
			this);
		
		$addHandlers(
			$get(this._elements.searchButton),
			{
				click : function (evt) { $util.freezeEvent(evt.rawEvent); this._submit(); }
			},
			this);
			
		$addHandlers(
			$get(this._elements.searchButtonExpert),
			{
				click : function (evt) { $util.freezeEvent(evt.rawEvent); this._submitExpert(); }
			},
			this);	
	},
	
	_clearEventHandlers : function ()
	{
		if (!this._initialized)
			return;
		
		$clearHandlers($get(this._elements.searchTextbox));
		$clearHandlers($get(this._elements.searchButton));
		
		//clear expert handlers
		$clearHandlers($get(this._elements.searchTextboxExpert));
		$clearHandlers($get(this._elements.searchButtonExpert));
	},
	
	_refreshHintText : function ()
	{
		var txt = $get(this._elements.searchTextbox);
		if (String.isNullOrEmpty(txt.value) && document.activeElement !== txt) 
		{
			txt.value = this._hintText;
			txt.style.color = "#999";
		}
	},
	
	_refreshHintTextExpert : function ()
	{
		var txt = $get(this._elements.searchTextboxExpert);
		if (String.isNullOrEmpty(txt.value) && document.activeElement !== txt) 
		{
			txt.value = this._hintText;
			txt.style.color = "#999";
		}
	},
	
	_submit : function ()
	{
		if (!this._validate())
			return;
		
		location.href = "Shopping/CheckAvailability.aspx?AdZipSearch={0}".format(escape($get(this._elements.searchTextbox).value));
	},
	
	_submitExpert : function ()
	{
		if (!this._validateExpert())
			return;
		
		location.href = "Shopping/CheckAvailability.aspx?Product=EMS&AdZipSearch={0}".format(escape($get(this._elements.searchTextboxExpert).value));
	},
	
	_validate : function ()
	{
		var errorText = String.empty;
		var txt = $get(this._elements.searchTextbox);
		var err = $get(this._elements.searchError);
		
		if (String.isNullOrEmpty(txt.value) || txt.value.trim() === this._hintText)
			errorText = "Please enter one or multiple zip codes";
		else
		{
			// fix the user entry
			txt.value = txt.value.replaceBasic(" ", String.empty).replaceBasic(",", ", ");
			
			var objRegExp;
			
			if (txt.value.length <= 5)
			{
				objRegExp = /^\d{5}$/;
				if (!objRegExp.test(txt.value))
					errorText = "The zip code you entered is invalid.";
			}
			else
			{
				objRegExp = /^\d{5}(,\s\d{5}){0,4}$/;
				if (!objRegExp.test(txt.value))
					errorText = "Try using commas to seperate up to 5, 5 digit zip codes.";
			}
		}
		
		err.innerHTML = errorText;
		err.style.display = String.isNullOrEmpty(errorText) ? "none" : String.empty;

		return String.isNullOrEmpty(errorText);
	},
	
	_validateExpert : function ()
	{
		var errorText = String.empty;
		var txt = $get(this._elements.searchTextboxExpert);
		var err = $get(this._elements.searchErrorExpert);
		
		if (String.isNullOrEmpty(txt.value) || txt.value.trim() === this._hintText)
			errorText = "Please enter one or multiple zip codes";
		else
		{
			// fix the user entry
			txt.value = txt.value.replaceBasic(" ", String.empty).replaceBasic(",", ", ");
			
			var objRegExp;
			
			if (txt.value.length <= 5)
			{
				objRegExp = /^\d{5}$/;
				if (!objRegExp.test(txt.value))
					errorText = "The zip code you entered is invalid.";
			}
			else
			{
				objRegExp = /^\d{5}(,\s\d{5}){0,4}$/;
				if (!objRegExp.test(txt.value))
					errorText = "Try using commas to seperate up to 5, 5 digit zip codes.";
			}
		}
		
		err.innerHTML = errorText;
		err.style.display = String.isNullOrEmpty(errorText) ? "none" : String.empty;

		return String.isNullOrEmpty(errorText);
	},
	
	// --- Public Properties -----------------------------------------------------------------------------------------------
	
	get_isInitialized : function () { return this._initialized; }
};

// register the class
Fidelity.Scripts.Pages.Home.registerStaticClass("Fidelity.Scripts.Pages.Home");


// Notify ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();