// Navigation

// Search/Autocomplete Functions
function selectItem(k)
{
	if (k && k.selectValue && k.selectValue != '') {
		gotoSearch('/search/{0}.aspx', k.selectValue);
	}
}
var anySearch = function(field, url, event) {
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) {
		if (field.value != '') { 
			if (field.id=='q') {
				gotoSearch(getSearchUrl(),field.value);
			} else {
				gotoSearch(url,field.value);
			}
		}
		 return false;
  	} else { return true; }
}
// Search Option
var searchOption_value="";
function searchOption(obj)
{
	$("#q-option > a").removeClass("qselect");
	$(obj).addClass("qselect");
	searchOption_value = $(obj).text();
	return false;
}
function getSearchUrl()
{
	var url='/search/{0}.aspx'; // default.
	if (searchOption_value) { url= (searchOption_value=="rentals" ? '/rentals/rentalsearch.aspx?q={0}': (searchOption_value=="clearance" ? '/deals/equipment.aspx?q={0}' : url)); }
	return url;
}
// Redirects to searchpage.
function gotoSearch(url,searchKeyword)
{
	// remove bad chars from searchKeyword. Allowed chars: [^a-zA-Z0-9-_~,.\(\) ]
	var s = searchKeyword.replace('/','~');
	s=s.replace(/[^a-zA-Z0-9-_~,.\(\) ]/g,'');
	if (s!='') {
		window.location.href=url.replace("{0}",s);
	}
}
// End Search/Autocomplete functions.
// Cart function (ajax)
function addToCart(webcode,f) {
	$.post('/cart/AddToCart.aspx',{WebCode:webcode},f);
	return false;
}
function displayAddToCart(data,disp){
	if ($.trim($("cart",data).text())=="True") {
		$(disp).append("<p>1 placed in your Cart</p>").fadeIn();
	}
}

$(document).ready(
	function()
	{
		// external links
		$('a.externallinks').click(function(){
			window.open(this.href);
			return false;
		});
		if ($.browser.msie && $.browser.version < 7) { 
			try { document.execCommand("BackgroundImageCache", false, true); } catch(err) {};
		};
		// Autocomplete.
		$("#q").autocomplete("/products/autocomplete.aspx", 
			{   
				minChars:3, 
				matchSubset:1, matchContains:1, 
				cacheLength:15, 
				selectOnly:1, 
				onItemSelect:selectItem,
				autoFill:true
			}
		 );
		
		// enable 'enter key' to activate search.
		$("#q").keypress( function(e) { anySearch(this,'/search/{0}.aspx',e); } );
		$("form:first").submit( function(e) { if ($("#q").val()!="") { gotoSearch(getSearchUrl(),$("#q").val()); return false; } } );
		$("#linksearchq").click( function(e) { gotoSearch(getSearchUrl(),$("#q").val()); return false; } );
		
		// End Autocomplete.
		// Align Navigation & List Menus (set offset from it's link).
		$.setMenuOffset("menubrand",{'eX':0,'eY':22});
		$.setMenuOffset("menua1brand",{'eX':0,'eY':22});
		$.setMenuOffset("menuprice",{'eX':0,'eY':22});
		$.setMenuOffset("menuspecs",{'eX':0,'eY':22});
		$.setMenuOffset("menuselect",{'eX':0,'eY':22});
		$.setMenuOffset("menu_myaccount",{'eX':0,'eY':18});
		$.setMenuOffset("menuCatLinks",{'eX':-1,'eY':16});
		$.setMenuOffset("menubookmark",{'eX':-1,'eY':18});
		
		wireupMenu();
		// Brand list menu.
		//$("#linkMenuBrand").click(function(){ $(this).toggleMenu('#menubrand','#menubrand_img'); });			
		// Shop by price
		$('#linkSidePrice').click(function() { return clickPriceRange(this); });
		$('#linkmenuPrice').click(function() { $('#menuprice').slideToggle(500); });
		$("#navlinkCart").click(function(){ openCartView('#cartview'); return false; });
		// My account menu
		$("#cartlinks_myaccount").hover(function(){ $(this).hoverMenu('#menu_myaccount',null,true); },function(){ $(this).hoverMenu('#menu_myaccount',null,false); });
		$("#menu_myaccount").hover(function(){ $('#cartlinks_myaccount').addClass('cartlinks_myaccount-hover'); },function(){ $('#cartlinks_myaccount').removeClass('cartlinks_myaccount-hover'); });
		$('.icon_bookmark').hover(function(){ var obj=this; icon_bookmark=window.setTimeout(function(){$(obj).hoverMenu('#menubookmark',null,true);},300); },function(){ window.clearTimeout(icon_bookmark); $(this).hoverMenu('#menubookmark',null,false); });
	}
);
var icon_bookmark=null;

// Navigation Drop down menu.
function wireupMenu() 
{
	// Navigation drop-down menus
		$.setMenuOffset("menu1",{'eX':-1,'eY':30}); // x-1 because of the 1px border.
		$.setMenuOffset("menu2",{'eX':-1,'eY':30});
		$.setMenuOffset("menu3",{'eX':-1,'eY':30});
		$.setMenuOffset("menu4",{'eX':-1,'eY':30});
		$.setMenuOffset("menu5",{'eX':-1,'eY':30});
		$.setMenuOffset("menu6",{'eX':-1,'eY':30});
		$.setMenuOffset("menu7",{'eX':-1,'eY':30});
		$.setMenuOffset('list_searchoptions',{'eX':0,'eY':24});
		// Bind Dropdown Navigation menus.
		$("#navlink1").hover(function(){ $(this).hoverMenu('#menu1',null,true); },function(){ $(this).hoverMenu('#menu1',null,false); });
		$("#menu1").hover(function(){ $('#navlink1').addClass('menu-item-hover'); },function(){ $('#navlink1').removeClass('menu-item-hover'); });
		$("#navlink2").hover(function(){ $(this).hoverMenu('#menu2',null,true); },function(){ $(this).hoverMenu('#menu2',null,false); });
		$("#menu2").hover(function(){ $('#navlink2').addClass('menu-item-hover'); },function(){ $('#navlink2').removeClass('menu-item-hover'); });
		$("#navlink3").hover(function(){ $(this).hoverMenu('#menu3',null,true); },function(){ $(this).hoverMenu('#menu3',null,false); });
		$("#menu3").hover(function(){ $('#navlink3').addClass('menu-item-hover'); },function(){ $('#navlink3').removeClass('menu-item-hover'); });
		$("#navlink4").hover(function(){ $(this).hoverMenu('#menu4',null,true); },function(){ $(this).hoverMenu('#menu4',null,false); });
		$("#menu4").hover(function(){ $('#navlink4').addClass('menu-item-hover'); },function(){ $('#navlink4').removeClass('menu-item-hover'); });
		$("#navlink5").hover(function(){ $(this).hoverMenu('#menu5',null,true); },function(){ $(this).hoverMenu('#menu5',null,false); });
		$("#menu5").hover(function(){ $('#navlink5').addClass('menu-item-hover'); },function(){ $('#navlink5').removeClass('menu-item-hover'); });
		$("#navlink6").hover(function(){ $(this).hoverMenu('#menu6',null,true); },function(){ $(this).hoverMenu('#menu6',null,false); });
		$("#menu6").hover(function(){ $('#navlink6').addClass('menu-item-hover'); },function(){ $('#navlink6').removeClass('menu-item-hover'); });
		$("#navlink7").hover(function(){ $(this).hoverMenu('#menu7',null,true); },function(){ $(this).hoverMenu('#menu7',null,false); });
		$("#menu7").hover(function(){ $('#navlink7').addClass('menu-item-hover'); },function(){ $('#navlink7').removeClass('menu-item-hover'); });
		$("#navlink8").hover(function(){ $(this).hoverMenu('#menu8',null,true); },function(){ $(this).hoverMenu('#menu8',null,false); });
		$("#menu8").hover(function(){ $('#navlink8').addClass('menu-item-hover'); },function(){ $('#navlink8').removeClass('menu-item-hover'); });	
}


function displayLinks(target,linkc,tclass)
{
	$(target).slideToggle(500);
	$(linkc).toggleClass(tclass);
	return false;
}

function clickPriceRange(linkTo, prefix) {
	var pr1 = $('#'+(prefix!=null ? prefix:'')+'pr1').val().replace(/[^0-9.]/g,'');
	var pr2 = $('#'+(prefix!=null ? prefix:'')+'pr2').val().replace(/[^0-9.]/g,'');
	if (pr1!="" || pr2 != "")
	{
		location.href=linkTo.href + (linkTo.href.indexOf("?") < 0 ? "?":"&") + "pr1="+(pr1!="" ? pr1 : "0") + "&pr2=" + (pr2!="" ? pr2 : "99999");
	}
	return false;
}


function pngHack(elem,src)
{
	var ltie7 = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent);
	var pFilter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='crop')";
	ltie7=true;
	if (ltie7) {
			
			//$(elem).css({backgroundImage:'none', filter:pFilter});
			//$(elem).css('filter', );
			//$(elem+" > a").css('position',"relative");
	}
}

function getIframeDoc(n) // gets iframe document object
{
	var ifm = document.getElementById(n);
	if (ifm.contentDocument!=null) //ff / ns6 / safari syntax
	{
		return ifm.contentDocument;
	}
	else if (ifm.Document!=null) 
	{
		return ifm.Document;
	}
	else if (frames[n].document!=null)
	{	
		return frames[n].document;
	}
	else {
		return ifm;
	}
}

/* Cart View */
var cartopen=false;
function openCartView(cartview) {
	$(cartview).addClass('is_loading').slideToggle(500,
	function() {
		// clear navalignment.
		$.resetMenu();
		if (!cartopen) { 
			cartopen=true;
			$(cartview).append($("<iframe frameborder='0' scrolling='no' src='/cart/navcart/cartview.aspx'>").load(function() { $(cartview).removeClass('is_loading'); }));
		} else { 
			$(cartview).empty(); cartopen=false;
		}
	});
}

/* Ad click */
function adClick(href, adDetailId) {
	$.ajax({
	   type: "POST", url: "/controls/stats/c.aspx", data: "a="+adDetailId, dataType:"xml", processData: false,
	   timeout:100, complete: function(){ window.location.href = href; }
	});
	return false;
}


/* Switch Menu [Primary Navigation] */
// Menu
var tHover = {};
$(document).ready(function() {
$('#mainnav > ul > li > a').hover(
	function(){ var menuID = this.id.replace('mainnav_','');  tHover[menuID] = setTimeout(function(){ switchMenu(menuID); },800); },
	function(){ var menuID = this.id.replace('mainnav_',''); if(tHover) { window.clearTimeout(tHover[menuID]); } });
});
function switchMenu(menuID){
	$.post('/controls/navmenus/MenuData.aspx',{MenuID:menuID},
		function(data, textStatus){ 
			if (data!=""){
		 		$('body > div.vmenu').remove(); $('body > form > div.vmenu').remove();
				$(document.body).append(data).each( function() {
					switchMenu2(menuID);
				});
			}
		});
}
function switchMenu2(menuID){
	$.post('/controls/navmenus/MenuData.aspx',{MenuIDnav:menuID},
		function(data, textStatus){ 
		 	$('#secondarynav').html(data);
			$.resetMenu();
			wireupMenu();
			switchNavClass(menuID);			
		});
}
function switchNavClass(menuID){
	$('#mainnav > ul > li').removeClass('mainnav_active').each( function() {
		var l = $('a',this).get(0);
		if (l!=null)
		{
			if (l.id=='mainnav_'+menuID){ $(this).addClass('mainnav_active'); }
		}
	});
}

/*
**  jquery.toggleMenu.js -- jQuery plugin that is a DropDownList replacement (with links instead).
*   dependancies: jquery.align.js plugin.
* 
*/

(function($) {
	// Toggle Menu List function. DropDownList replacement (with links instead).
	// Expected use: $("#linkID").click(function(){$(this).toggleMenu('#menuID');});
	// @params: m menu, a align element (image works best).
	$.fn.extend({
		toggleMenu : function (m,a) { 
			m = $(m);
			if (m.get(0)!=null)
			{
				var m_id = m.get(0).id;
				if (!$.isAligned("#"+m_id)) {
					$(a).align("#"+m_id,getMenuOffset(m_id));
				}
				// init menu settings. (only for toggle menus).
				if (!menuSettings || !menuSettings[m_id]) {  
					menuSettings[m_id] = { lastToggle:null, showMenuTimeout:0 }; // initialize
					wireUpToggleMenu(m); 
				}
				// toggle (isVisible)
				menuSettings[m_id].lastToggle = !(menuSettings[m_id].lastToggle);
				if (!menuSettings[m_id].lastToggle) {  
					showHideMenu(m,"hide");
					menuTimeout(m_id,null); // clear timeout
				} else {
					// Show Menu
					showHideMenu(m,"show");
					menuTimeout(m_id,2000); // settimeout.
				}
			}
		}
	});
	
	// Internal variables.
	var menuSettings = {};  //default: [lastToggle:null,showMenuTimeout:0 }];
	// menu offset (set by $.setMenuOffset)
	var menuOffset = [{'eX':0,'eY':22}];
	
	// Main show/hide function.
	function showHideMenu(menu,v)
	{
		menu.css("visibility",((v=="show") ? "visible":"hidden"));
		//$("#output").html($("#output").html()+"<br />"+v);
	}
	
	function menuTimeout(m_id,timeout)
	{
		if (menuSettings[m_id].showMenuTimeout!=0) { window.clearTimeout(menuSettings[m_id].showMenuTimeout); // clear any previous timeout.
        menuSettings[m_id].showMenuTimeout=0; }
		if (timeout && timeout>0) { menuSettings[m_id].showMenuTimeout=setTimeout("$.hideMenuExt('#"+m_id+"')",timeout); }
	}
	// Hide menu: setTimeout function required external function.
	$.hideMenuExt = function (id) {	
		id=$(id);
		if (menuSettings[id.get(0).id]) { menuSettings[id.get(0).id].lastToggle=null; } // reset toggle.
		showHideMenu(id,"hide");
	}

	function wireUpToggleMenu(m)
	{
		var m_id=m.get(0).id;
		m.hover(function(e) { e.stopPropagation();showHideMenu(m,"show");menuTimeout(m_id,null); },function(e){ e.stopPropagation();menuTimeout(m_id,800);});
	}
	
	function getMenuOffset(id)
	{
		if (menuOffset[id]){ return menuOffset[id]; }
		else { return menuOffset[0]; }
	}
	
	// Externally accessible functions / settings.
	$.setMenuOffset = function(id,offset)
	{
		menuOffset[id] = offset;
	}
	$.resetMenu = function()
	{
		menuSettings = {}; // reset settings.
		$.alignedIds = { }; // reset alignment.
	}
	
	
	/* Hover Menu */
	// Dropdown Menu function.  No timeout req.
	// Expected use: $("#LinkID").hover(function(){ $(this).hoverMenu('#MenuID','#NavContainterID',true); },function(){ $(this).hoverMenu('#MenuID','#NavContainterID',false);});
    $.fn.extend({
		hoverMenu : function (m,c,show) {
			m = $(m); // menu
			if (m.get(0)!=null)
			{
				c = (c)?$(c):null; // container
				var m_id = m.get(0).id, c_id = (c) ? c.get(0).id:"";
				if (c && !$.isAligned("#"+c_id)) {
					this.align("#"+c_id,getMenuOffset(c_id));
				} else if (!c && !$.isAligned("#"+m_id)) { // no container used. (cont=null).
					this.align("#"+m_id,getMenuOffset(m_id));
				}
				if (!menuSettings || !menuSettings[m_id]) {  
					menuSettings[m_id] = {showMenuTimeout:0 }; // initialize
					wireUpHoverMenu(m,c); 
				}
				if (!show) {  
					//menuTimeout(m_id,10); // start timeout
					if(c){showHideMenu(c,"hide");}
					showHideMenu(m,"hide");			
				} else {
					// Show Menu
					//menuTimeout(m_id,null); // clear timeout
					if(c){showHideMenu(c,"show");}
					showHideMenu(m,"show");
				}
			}
		}
	});
	
	function wireUpHoverMenu(m,c)
	{
		m.hover(function(e){ e.stopPropagation(); showHideMenu(m,"show"); if(c){showHideMenu(c,"show");} },
				function(e){ e.stopPropagation(); showHideMenu(m,"hide"); if(c){showHideMenu(c,"hide");} });
	    //m.hover(function(e){ showHideMenu(m,"show"); menuTimeout(m_id,null);},function(e){ menuTimeout(m_id,10); })
	}	
})(jQuery);

/*
 * jQuery Color Animations
 * Copyright 2007 John Resig
 * Released under the MIT and GPL licenses.
 */

(function(jQuery){

	// We override the animation for all of these color styles
	jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
		jQuery.fx.step[attr] = function(fx){
			if ( fx.state == 0 ) {
				fx.start = getColor( fx.elem, attr );
				fx.end = getRGB( fx.end );
			}

			fx.elem.style[attr] = "rgb(" + [
				Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0),
				Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)
			].join(",") + ")";
		}
	});

	// Color Conversion functions from highlightFade
	// By Blair Mitchelmore
	// http://jquery.offput.ca/highlightFade/

	// Parse strings looking for color tuples [255,255,255]
	function getRGB(color) {
		var result;

		// Check if we're already dealing with an array of colors
		if ( color && color.constructor == Array && color.length == 3 )
			return color;

		// Look for rgb(num,num,num)
		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
			return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];

		// Look for rgb(num%,num%,num%)
		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
			return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];

		// Look for #a0b1c2
		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
			return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];

		// Look for #fff
		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
			return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];

		// Otherwise, we're most likely dealing with a named color
		return colors[jQuery.trim(color).toLowerCase()];
	}
	
	function getColor(elem, attr) {
		var color;

		do {
			color = jQuery.curCSS(elem, attr);

			// Keep going until we find an element that has color, or we hit the body
			if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") )
				break; 

			attr = "backgroundColor";
		} while ( elem = elem.parentNode );

		return getRGB(color);
	};
	
	// Some named colors to work with
	// From Interface by Stefan Petre
	// http://interface.eyecon.ro/

	var colors = {
		aqua:[0,255,255],
		azure:[240,255,255],
		beige:[245,245,220],
		black:[0,0,0],
		blue:[0,0,255],
		brown:[165,42,42],
		cyan:[0,255,255],
		darkblue:[0,0,139],
		darkcyan:[0,139,139],
		darkgrey:[169,169,169],
		darkgreen:[0,100,0],
		darkkhaki:[189,183,107],
		darkmagenta:[139,0,139],
		darkolivegreen:[85,107,47],
		darkorange:[255,140,0],
		darkorchid:[153,50,204],
		darkred:[139,0,0],
		darksalmon:[233,150,122],
		darkviolet:[148,0,211],
		fuchsia:[255,0,255],
		gold:[255,215,0],
		green:[0,128,0],
		indigo:[75,0,130],
		khaki:[240,230,140],
		lightblue:[173,216,230],
		lightcyan:[224,255,255],
		lightgreen:[144,238,144],
		lightgrey:[211,211,211],
		lightpink:[255,182,193],
		lightyellow:[255,255,224],
		lime:[0,255,0],
		magenta:[255,0,255],
		maroon:[128,0,0],
		navy:[0,0,128],
		olive:[128,128,0],
		orange:[255,165,0],
		pink:[255,192,203],
		purple:[128,0,128],
		violet:[128,0,128],
		red:[255,0,0],
		silver:[192,192,192],
		white:[255,255,255],
		yellow:[255,255,0]
	};
	
})(jQuery);

