/**
* @uses lib/Prototype/Prototype.js
* @uses lib/Sureflix/Sureflix.js
* @uses lib/Sureflix/Error/ErrorHandler.js
*/

/**
* @namespace This namespace contains classes for individual widgets. Classes are implemented inside /pc/Templates/Widgets/
* @author erik 02/17/2009
*/

Sureflix.Widgets = {};

//Shorthand
SxWi = Sureflix.Widgets;


/*******************************************/
/*** HunkRegisterBox Widget Begin        ***/
/*******************************************/

Sureflix.Widgets.HunkRegisterBox = {};

Sureflix.Widgets.HunkRegisterBox.Focus = function(event, idModifier) {
	var textInput = $("SureHunkRegisterBoxInput" + idModifier);
	if (textInput.hasClassName("SureHunkRegisterBoxPrompt")) {
		textInput.value = "";
		textInput.removeClassName("SureHunkRegisterBoxPrompt");
	}
	return true;
};

Sureflix.Widgets.HunkRegisterBox.KeyDown = function(event, idModifier) {
	var key = (isNav ? event.which : window.event.keyCode);
	if (key == 13) {
		Sureflix.Widgets.HunkRegisterBox.Submit(idModifier);
		return false;
	} else {
		return true;
	}
};

Sureflix.Widgets.HunkRegisterBox.Submit = function(idModifier) {
	var email = $F("SureHunkRegisterBoxInput" + idModifier);
	if ((email == "") || (email.indexOf(" ") != -1) || (email.indexOf("@") == -1) || (email.indexOf(".") == -1)) {
		alert(jsErrEmailEnter);
		return false;
	}
	if (!window.open("register.asp?Email=" + URLencode(email), "popup", "width=450,height=200,scrollbars=no,toolbar=no,directories=no,resizable=no,status=no")) {
		PopupBlocked(); //**** TODO: Move to Sureflix.Utilities namespace
	}
	return false;
};

/*******************************************/
/*** HunkRegisterBox Widget End          ***/
/*******************************************/


/*******************************************/
/*** StarMasthead Widget Begin           ***/
/*******************************************/

Sureflix.Widgets.StarMasthead = {};

Sureflix.Widgets.StarMasthead.MouseOver = function(event, idModifier) {
	$("SureStarMastheadCaption" + idModifier).show();
}

Sureflix.Widgets.StarMasthead.MouseOut = function(event, idModifier) {
	$("SureStarMastheadCaption" + idModifier).hide();
}

/*******************************************/
/*** StarMasthead Widget End             ***/
/*******************************************/

/*******************************************/
/*** QuickSearch Widget Begin            ***/
/*******************************************/

Sureflix.Widgets.QuickSearch = Class.create({
	initialize: function(idModifier, submitAction, itemSelectedAction, dontSubmit) {
		this.dontSubmit = dontSubmit || false;
		this.idModifier = idModifier || "";
		this.submitAction = submitAction || "SmartSearch.asp?Fields=Phrase&Values={actionParams0}";
		this.itemSelectedAction = itemSelectedAction || "QuickSearch.asp?Text={actionParams0}&QuickSearch={actionParams1}";
		this.textInputID = "SureQuickSearchInput";
		this.submitElementID = "SureQuickSearchSubmit";
		this.loadingElementID = "SureQuickSearchLoading";
		this.promptClassName = "SureQuickSearchPrompt";
		this.itemSelectedSubmitted = false; //private
		this.callback;
		// try to attach
		this.AttachEvents();
	},


	GetTextInputID: function() {
		return this.getElementIdWithModifier(this.textInputID);
	},
	GetLoadingElementID: function() {
		return this.getElementIdWithModifier(this.loadingElementID);
	},
	GetSubmitElementID: function() {
		return this.getElementIdWithModifier(this.submitElementID);
	},
	getElementIdWithModifier: function(id) {	//private
		return id + this.idModifier;
	},

	// This will do nothing if the elements aren't all already created in the DOM
	AttachEvents: function() {
		var textInput = $(this.GetTextInputID());
		var submitElement = $(this.GetSubmitElementID());
		var loadingElement = $(this.GetLoadingElementID());

		if (!textInput || !submitElement || !loadingElement) return;

		textInput.observe('focus', this.Focus.bindAsEventListener(this));
		textInput.observe('blur', this.Blur.bindAsEventListener(this));
		textInput.observe('keydown', this.KeyDown.bindAsEventListener(this));
		submitElement.observe('click', this.submit.bind(this));
		loadingElement.observe('click', this.submit.bind(this));
	},

	Focus: function(event) {
		var textInput = $(this.GetTextInputID());
		if (textInput.hasClassName(this.promptClassName)) {
			textInput.value = "";
			textInput.removeClassName(this.promptClassName);
		}
		this.isFocused = true;
		return true;
	},
	
	Blur: function(event) {
	    this.isFocused = false;
	    return true;
	},

	KeyDown: function(keyStroke) {
		key = (isNav ? keyStroke.which : window.event.keyCode);
		if (key == 13) {
			this.submit();
			return (false);
		} else {
			return (true);
		}
	},

	/**
	* Submits the QuickSearch form to SmartSearch.asp. 
	* (ItemSelected submits to QuickSearch.asp)
	* @return {void}
	*/
	submit: function() {
	    if (!this.isFocused) return;
	    
    	var text = $F(this.GetTextInputID());
		var action = this.getReplacedAction(this.submitAction, { 0: encodeURIComponent(text) })

		//don't submit if ItemSelected has already submitted
		if (this.hasItemSelectedBeenSubmitted() || this.dontSubmit) return;
		this.submitForm(action);
	},

	submitForm: function(action, quickSearchID) {
		var text = $F(this.GetTextInputID());
		if (this.dontSubmit) {
			this.callback(text, quickSearchID);
			return;
		}
		document.thisForm.action = action;
		document.thisForm.submit();
		this.ShowLoading(true);
	},

	/**
	* Submits the QuickSearch form when an item is selected from the dropdown menu
	* @return {void}
	*/
	ItemSelected: function(textBox, li) {
		var quickSearchID = li.id;
		var text = $F(textBox);
		var action = this.getReplacedAction(this.itemSelectedAction, { 0: encodeURIComponent(text), 1: quickSearchID });

		this.itemSelectedSubmitted = true;
		this.submitForm(action, quickSearchID);
	},

	hasItemSelectedBeenSubmitted: function() { //private
		return this.itemSelectedSubmitted;
	},

	ShowLoading: function(permanently) {
		var loadingElement = $(this.GetLoadingElementID());
		if (!loadingElement) return;

		loadingElement.style.visibility = 'visible';
		if (permanently) {
			$(this.GetLoadingElementID()).id = "";
		}
	},

	HideLoading: function() {
		$(this.GetLoadingElementID()).style.visibility = 'hidden';
	},

	getReplacedAction: function(action, paramsObject) {	//private
		var replacedAction = action;
		if (paramsObject != null) {
			replacedAction = replacedAction.replace("{actionParams0}", paramsObject[0]);
			replacedAction = replacedAction.replace("{actionParams1}", paramsObject[1]);
		}
		return replacedAction;
	}
});


/*******************************************/
/*** QuickSearch Widget End              ***/
/*******************************************/




/*******************************************/
/*** AutoComplete Widget Begin            ***/
/*******************************************/

Sureflix.Widgets.AutoCompleteList = Class.create({
	initialize: function(idModifier, inputElementID, hiddenFieldID, initialValuesArray) {
		this.idModifier = idModifier || "";
		this.inputElementID = inputElementID;
		this.hiddenFieldID = hiddenFieldID;
		this.listItemsElementId = "SureAutoCompleteList" + this.idModifier;
		this.itemSpanId = "SureAutoCompleteItem";
		this.listItems = new Array();
		this.initialValuesArray = initialValuesArray || null;
		if (this.initialValuesArray) {
			this.listItems = initialValuesArray;
		} 
		this.buildItemList();
	},

	AddItem: function(selectedItem) {
		this.listItems.push(selectedItem);
		$(this.inputElementID).value = "";
		this.buildItemList();

	},
	buildItemList: function() {
		var starsHTML = "";

		for (var i = 0; i < this.listItems.length; i++) {
			starsHTML += "<span id=\"" + this.itemSpanId + this.idModifier + i + "\" class=\"" + this.itemSpanId + this.idModifier + "\">" + this.listItems[i] + "&nbsp;&nbsp;<a style='cursor:pointer;color:red'><b><big>&#215;</big></b></a><br/></span>";
		}

		$(this.listItemsElementId).innerHTML = starsHTML;

		var elements = $$("span." + this.itemSpanId + this.idModifier);
		for (var i = 0; i < elements.length; i++) {
			Event.observe(elements[i], 'click', this.removeArrayElement.bindAsEventListener(this));
		}

		$(this.hiddenFieldID).value = this.parseIDs();
	},

	parseIDs: function() {
		var newArray = new Array();
		for (var i = 0; i < this.listItems.length; i++) {
			var starID = this.listItems[i].split(":")[0];
			if (newArray.indexOf(starID) < 0) {
				newArray.push(starID);
			}
		}
		return newArray;
	},
	removeArrayElement: function(event) {
		var span = Event.findElement(event, 'span')
		var indexToRemove = span.id.replace(this.itemSpanId + this.idModifier, '');
		this.listItems.splice(indexToRemove, 1);
		this.buildItemList();
	}
});

/*******************************************/
/*** AutoComplete Widget Ends            ***/
/*******************************************/
