/// <reference path="C:\References\jquery-1.4.1-vsdoc.js" />

// ********************************************************************
// 
// Manheim Retail Marketing
// ********************************************************************
// Copyright © 2010 Manheim Retail Marketing.
//
//  Summary
// ******************************
// $Workfile: LinkEnhancer.js $
// Notes:		Provides common tracing functionality.
//
// File History Information
// ************************
// Created on:					    
// Last Modified:					$Modtime: 7/04/10 15:19 $
// Original Author:					Liam Prescott
// Last Modified by:				$Author: Prescottl $
// Last JS Lint:					07/12/2009 11:40
//
// Source Control Information
// **************************
// File Version:					$Revision: 5 $
// VSS Location:					$Archive: /Manheim.Portfolio/Manheim.Portfolio.Web.UI.Client.Assets/assets/js/mrm/lib/utilities/1.0/LinkEnhancer.js $
//
// ********************************************************************


	// Check / create namespace
	if (!mrm.global.isNamespaceDefined("mrm.lib.utilities"))
	{
		mrm.global.createNamespace("mrm.lib.utilities", "1.0");
	}


	// Class definition
	mrm.lib.utilities.LinkEnhancer = Object.subClass
	(
		{
		
			/*
			=============================
			CONSTANTS
			=============================
			*/
				"AUTO_HOVER_CLASS_STUB"			: "-hover",
				"AUTO_HOVER_CLASS_TARGET_NAME"	: "a-auto-hover",
				"DEFAULT_HOVER_CLASS"			: "hover",
				
				/*
				-----------------------
				-----------------------
				*/
				
				
				
			
			/*
			=============================
			CONSTRUCTOR
			=============================
			*/
				"init" : function (clearHoverOnClick)
				{
					this._setup(clearHoverOnClick);
				},
			
			/*
			=============================
			PUBLIC MEMBERS
			=============================
			*/
				"setupHoverBehaviour" : function (jqTargetContainer, clearHoverOnClick)
				{
					var __this = this;
					
					var host = (jqTargetContainer) ? jqTargetContainer : $(document).find("body");
					
					var targets = host.find(".a-auto-hover");
					
					targets.each
					(
						function(i)
						{
							var $this = $(this);
							__this.addHoverBehaviour($this, clearHoverOnClick);
						}
					)
				},
				
				
				"addHoverBehaviour" : function (jqElement, clearHoverOnClick)
				{
					var target = jqElement;
					var uniqueHoverClassName = this._generateHoverClassName(target);
					
					target.hover
					(
						function(e)
						{
							//ADD CLASS
							var $this = $(this);
							if (!$this.hasClass(uniqueHoverClassName)) $this.addClass(uniqueHoverClassName);
						},
						function(e)
						{
							//REMOVE CLASS
							var $this = $(this);
							if ($this.hasClass(uniqueHoverClassName)) $this.removeClass(uniqueHoverClassName);
						}
					);
					
					if (clearHoverOnClick)
					{
						target.click
						(
							function ()
							{
								//REMOVE CLASS
								var $this = $(this);
								if ($this.hasClass(uniqueHoverClassName)) $this.removeClass(uniqueHoverClassName);
							}
						);
					}
				},
			
			/*
			=============================
			PRIVATE MEMBERS
			=============================
			*/
				/*
				=============================
				SETUP METHODS
				=============================
				*/
					"_setup" : function (setupAutoHover, clearHoverOnClick, setupNewWindowLinks, disableLinks)
					{
						if (setupAutoHover) this.setupHoverBehaviour(clearHoverOnClick);
		
						if (setupNewWindowLinks) this._setupNewWindowLinks();
						
						if (disableLinks) this._disableLinks();
					},
					
					
					
					
					
					
				/*
				=============================
				EVENT HANDLERS
				=============================
				*/
				
				
				
				/*
				=============================
				DISPLAY MANIPULATION METHODS
				=============================
				*/
					
				
				
				
				/*
				=============================
				UTILITY METHODS
				=============================
				*/
					"_generateHoverClassName" : function (jqObj)
					{
						var classNames = jqObj.attr("class");
						
						//Get index of 'AUTO_HOVER_CLASS_TARGET_NAME'
						//Add 1 to account for space
						//Get next class name
							//:: Find index of next space (nextSpaceIndex)
							//:: Extract class name string :: BETWEEN (indexOf(AUTO_HOVER_CLASS_TARGET_NAME) + AUTO_HOVER_CLASS_TARGET_NAME.length + 1) &&&&&& indexOf(nextSpaceIndex)
						//Append 'HOVER_CLASS_STUB' to extracted class name and return
						
						var tgtClassIndex			= classNames.indexOf(this.AUTO_HOVER_CLASS_TARGET_NAME);
						var baseClassIndexStart		= tgtClassIndex + this.AUTO_HOVER_CLASS_TARGET_NAME.length + 1;
						var baseClassIndexEnd		= 0;
						
						var baseClassName			= "";
						var hoverClassName			= "";
						
						//alert("tgtClassIndex = " + tgtClassIndex + "\nbaseClassIndexStart = " + baseClassIndexStart + "\nbaseClassIndexEnd = " + baseClassIndexEnd);
						
						// Only generate class name if there is a class following the 'AUTO_HOVER_CLASS_TARGET_NAME' class
						if (baseClassIndexStart < classNames.length && baseClassIndexStart < classNames.length)
						{
							baseClassIndexEnd		= classNames.indexOf(" ", baseClassIndexStart)
							baseClassName			= (baseClassIndexEnd == -1) ? classNames.slice(baseClassIndexStart) : classNames.slice(baseClassIndexStart, baseClassIndexEnd);
							hoverClassName			= baseClassName + this.AUTO_HOVER_CLASS_STUB;
						}
						else
						{
							hoverClassName = this.DEFAULT_HOVER_CLASS;
						}
						//alert("tgtClassIndex = " + tgtClassIndex + "\n" + "baseClassIndexStart = " + baseClassIndexStart + "\n" + "baseClassIndexEnd = " + baseClassIndexEnd + "\n" + "baseClassName = " + baseClassName + "\n" + "hoverClassName = " + hoverClassName);
						
						return hoverClassName;
					},
					
					
					
					/*
					-----------------------
					UTILITY METHOD OPEN LINKS MARKED AS EXTERNAL IN A NEW WINDOW
					-----------------------
					*/
						"_setupNewWindowLinks" : function ()
						{
							/*
							 * Utility function that opens any new window commands. Add a w=NUM and h=NUM to the QS to force a custom size on open.
							 */
							
							/*
							 * UPDATE	:: 17-02-2009
							 *			:: Liam Prescott 
							 *			:: Upgraded to be compatiable with jQuery v1.3.1
							 *			:: Change log:
							 *			::	> a[@rel = 'external'] changed to a[rel = 'external']
							 */
								 
							$("a[rel = 'external']").click(
								function() {
									var link = $(this);
									var qs = manheim.global.getQSParams(link.attr("href"));
									if (!qs.w) qs.w = 800;
									if (!qs.h) qs.h = 600;
									window.open(link.attr("href"), link.attr("id"), "width=" + qs.w + ",height=" + qs.h + ",menubar=yes,location=yes,resizable=yes,status=yes,toolbar=yes,scrollbars=yes");
									return false;
								}
							);
						},
					
					
					
					/*
					-----------------------
					ANY LINKS MARKED AS DISABLED HAVE THE HREF ATTRIBUTE REMOVED
					-----------------------
					*/
						"_disableLinks" : function ()
						{
							/*
							 * Utility function that removes the href from any disabled links.
							 */
							$("a.disabled").each(
								function() {
									$(this).removeAttr("href");
								}
							);
						}
			
		}
	);
