// -----------------------------------------
// Support functions
Object.size = function(obj) {
	var size = 0, key;
	for (key in obj) {
		if (obj.hasOwnProperty(key)) size++;
	}
	return size;
};

cdw = {};
cdw.header = {
	switchImageName: function(imageUrl, fileName) {		
		var lastSlash = imageUrl.lastIndexOf("/");	
		return imageUrl.substring(0,lastSlash+1) + fileName;
	},
	
	hookButtonToFields: function(button, fields) {
		var buttonElement = $(button.name);
		var t = {};
		for (var f in fields) t[fields[f].name] = false;
		buttonElement.data('validFields', t);
		for (var i in fields) {
			var each = fields[i];
			$(each.name).data('md', {button: button, element: buttonElement, field: each});
			$(each.name).focus( function() { if ($(this).val() == $(this).data('md').field.instructions) $(this).val(""); } );
			$(each.name).blur( function() { if ($(this).val() == "") $(this).val($(this).data('md').field.instructions); } );
			$(each.name).keyup(
				function(e) {
					var md = $(this).data('md');
					var validFields = md.element.data('validFields');
					var imageUrl = md.element.attr('src');
					var fileName = md.button.offFileName;
					if ($(this).val().length > 0) {
						validFields[md.field.name] = true;
						var validCount = 0;
						for (var eachField in validFields) if (validFields[eachField] == true) validCount++;
						if (validCount == Object.size(validFields)) { 
							fileName = md.button.onFileName;
							md.element.attr('disabled', false);
						}
					}
					else {
						validFields[md.field.name] = false;
						md.element.attr('disabled', true);
					}
					md.element.attr('src', cdw.header.switchImageName(imageUrl, fileName));				
				} );
			$(each.Name).keypress(
				function(e) {
					if (e.which == 13 && $(this).data('md').element.attr('disabled') == false) {
						$(this).blur();
						$(this).data('md').element.focus().click();
					}
				});
			$(each.Name).bind(
				'paste',
				function() {
					var el = $(this);
					setTimeout(function() {
						var md = $(this).data('md');
						var validFields = md.element.data('validFields');
						var imageUrl = md.element.attr('src');
						var fileName = md.button.offFileName;
						if ($(el).val().length > 0) {
							validFields[md.field.name] = true;
							var validCount = 0;
							for (var eachField in validFields) if (validFields[eachField] == true) validCount++;
							if (validCount == Object.size(validFields))  {
								fileName = md.button.onFileName;
								md.element.attr("disabled", false);
							}
						}
						else {
							md.element.attr("disabled", true);
							validFields[md.field.name] = false;
						}
						md.element.attr("src", cdw.header.switchImageName(imageUrl, fileName));
					},
					100);
				});
		}
		try {
			buttonElement.attr("disabled", true);
			buttonElement.attr("src", cdw.header.switchImageName(buttonElement.attr("src"), button.offFileName));					
		}
		catch(ex) {
		}
	}	
};	

  // ---------------------------------------- //
 //        Global Header functionality       //
// ---------------------------------------- //
$(document).ready(function(){  

	// Fix presistant bar width for IE 
	function resizebar(){ var width1 = $(document).width(); var width_diff = width1 - 21 + "px"; $('#presistantBar').css('width',width_diff); }

	// Call function on page load 
	if ($.browser.msie) { resizebar(); }
	
	// Call function on window resize
	$(window).resize(function() {if ($.browser.msie) { resizebar(); } });
	
	// Handler for catalog drop down height
	function resizeCatalogDropDown(){ 
				
		var catlogCount = $(".catalogOptions ").children().length
		// Supress catalog for Canada not logged in.
		if (catlogCount < 2){
			$('.catalogWrapper').css('display','none');
			$('.keywordInput').addClass('keywordInputCA');
			$('.searchBar').addClass('searchBarCA');
			$('.advancedSearch').addClass('advancedSearchCA');			
			}


		if (catlogCount > 23){
			$('.catalogOptions').css('height',250);
			$('.catalogOptions').css('overflow','hidden'); 			
			$('.catalogOptions').css('overflow-y','scroll'); 			
			}

		}
		resizeCatalogDropDown();

	// Products Menu Functions //
	// Show Level 1 menu
	showProductsMenu = {
        sensitivity: 3, 
        interval: 100, 
        timeout: 200, 
        over:	function() { 
			// Handler for IE Top Level hover state
			if ($.browser.msie) { 
				$('.productsMenu li').removeClass('activeTopLink');
				$('.productsMenu li .topLink').removeClass('activeTopLink');
				$(this).addClass('activeTopLink');
				$(this).find('.topLink').addClass('activeTopLink');
			}
		$('.rightCol').hide(); $(this).find('.levelOne').show(); $('.columnTwo').hide(); $('.columnOne li').find('a').removeClass('active'); 
		}, 
        out:	function() { $('.rightCol').hide(); $(this).find('.levelOne').hide(); } 
    }
    $('.productsMenu li').hoverIntent(showProductsMenu)

	$('.productsMenuWrapper').hover(
	function(){},
	function(){
		if ($.browser.msie) { 
				$('.productsMenu li').removeClass('activeTopLink');
				$('.productsMenu li .topLink').removeClass('activeTopLink');
			}
		}
	);

	// Clear TopLink active state 
	$('.levelOne').hover(
	function(){},
	function(){
		if ($.browser.msie) { 
				$('.productsMenu li').removeClass('activeTopLink');
				$('.productsMenu li .topLink').removeClass('activeTopLink');
			}
		}
	);

	// Detect iPad and Android, optimize menu
	var isiPad = navigator.userAgent.match(/iPad/i);
	var ua = navigator.userAgent.toLowerCase();
	var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
	
	if (isiPad != null && isAndroid != null){
	// Show Level 1 menu on tap
	$('.productsMenu li').click(
		function(){            
			$('.productsMenuWrapper').hide();
			$('.brandsMenuWrapper').hide();
			$('.offersMenuWrapper').hide();
			$('.favoritesMenuWrapper').hide();			
			$('.rightCol').hide();
			$(this).find('.levelOne').show();
			$('.columnTwo').hide();
			$('.columnOne li').find('a').removeClass('active');
			},
		function(){            
			$('.rightCol').hide();
    	    $(this).find('.levelOne').hide();
		});  
		
		$("#hardwareTopNav").attr("href", "#");
		$("#softwareTopNav").attr("href", "#")
		$("#brandsTopNav").attr("href", "#")
		$("#offersTopNav").attr("href", "#")
		$("#findersTopNav").attr("href", "#")		
		$("#favoritesTopNav").attr("href", "#")				
		}

	// Hardware menu toggle
	hardwareMenuHover = {
        sensitivity: 3, 
        interval: 15, 
        timeout: 200, 
        over:	function() { $('.hardwareColumnOne li').find('a').removeClass('active'); $('.columnTwo').hide(); $('.rightCol').show(); $('.rightCol div.' + $(this).attr('id')).show(); $(this).find('a').addClass('active'); }, 
		out:	function(){ }
    }
    $('.hardwareColumnOne li').hoverIntent(hardwareMenuHover)

	// Software menu toggle
	softwareMenuHover = {
        sensitivity: 3, 
        interval: 15, 
        timeout: 200, 
        over:	function(){ $('.softwareColumnOne li').find('a').removeClass('active'); $('.columnTwo').hide(); $('.rightCol').show(); $('.rightCol div.' + $(this).attr('id')).show(); $(this).find('a').addClass('active'); }, 
		out:	function(){}
    }
    $('.softwareColumnOne li').hoverIntent(softwareMenuHover)

	// Finders menu toggle
	findersMenuHover = {
        sensitivity: 3, 
        interval: 15, 
        timeout: 200, 
        over:	function() {$('.findersColumnOne li').find('a').removeClass('active'); $('.columnTwo').hide(); $('.rightCol').show(); $('.rightCol div.' + $(this).attr('id')).show(); $(this).find('a').addClass('active'); },
		out:	function(){}
    }
    $('.findersColumnOne li').hoverIntent(findersMenuHover)

	// Solutions and Services menu functions //		
	//  Solutions Services Menu Levl 1 toggle
	solutionsServicesMenuHover = {
        sensitivity: 3, 
        interval: 30, 
        timeout: 200, 
        over:	function(){ 	
				// Handler for IE Top Level hover state
				if ($.browser.msie) { 
					$('.solutionsServicesMenu li').removeClass('activeTopLink');
					$('.solutionsServicesMenu li .topLink').removeClass('activeTopLink');
					$(this).addClass('activeTopLink');
					$(this).find('.topLink').addClass('activeTopLink');
				}	
				$('.columnOne li').find('a').removeClass('active'); 
				$(this).find('.levelOne').css('display', 'block'); 
				
				}, 
		out:	function(){		$(this).find('.levelOne').css('display', 'none'); $('.rightCol').hide();}
    }
    $('.solutionsServicesMenu li').hoverIntent(solutionsServicesMenuHover)

	// Clear TopLink active state 
	$('.levelOne').hover(
	function(){},
	function(){
		if ($.browser.msie) { $('.solutionsServicesMenu li').removeClass('activeTopLink');$('.solutionsServicesMenu li .topLink').removeClass('activeTopLink');	$('.rightCol').hide(); }
		}
	);

	
	// iPad handler for solutions menu
	if (isiPad != null && isAndroid != null){
	// Show Level 1 menu on tap
	$('.solutionsServicesMenu li').click(
		function(){            
			$('.rightCol').hide(); $('.columnOne li').find('a').removeClass('active'); $(this).find('.levelOne').css('display', 'block');
			},
		function(){            
			$(this).find('.levelOne').css('display', 'none');
		});  
		
		$(".solutionsMenuItem").attr("href", "#");
		}
		
	// Solutions menu toggle
	solutionsMenuHover = {
        sensitivity: 3, 
        interval: 15, 
        timeout: 200, 
        over:	function(){	 
							$('.solutionsColumnOne li').find('a').removeClass('active'); 
							$('.columnTwo').hide(); $('.rightCol').show(); 
							$('.rightCol div.' + $(this).attr('id')).show(); 
							$(this).find('a').addClass('active'); 
							},
		out:	function(){}
    }
    $('.solutionsColumnOne li').hoverIntent(solutionsMenuHover)

	// Services menu toggle
	servicesMenuHover = {
        sensitivity: 3,
        interval: 15,
        timeout: 200,
        over:	function(){ 
							$('.servicesColumnOne li').find('a').removeClass('active');
							$('#listItem5').removeClass('active');
							$('.columnTwo').hide(); $('.rightCol').show(); 
							$('.rightCol div.' + $(this).attr('id')).show(); 
							$(this).find('a').addClass('active'); 
							},
		out:	function(){}
    }
    $('.servicesColumnOne li').hoverIntent(servicesMenuHover)

	// Regional menu toggle
	regionalMenuHover = {
        sensitivity: 3,
        interval: 15,
        timeout: 200,
        over:	function(){ $('.regionalColumnOne li').find('a').removeClass('active'); $('.columnTwo').hide(); $('.rightCol').show(); $('.rightCol div.' + $(this).attr('id')).show(); $(this).find('a').addClass('active'); },
		out:	function(){}
    }
    $('.regionalColumnOne li').hoverIntent(regionalMenuHover)

	// Hide Right Column
	hideRightCol = {
        sensitivity: 3, 
        interval: 5, 
        timeout: 200, 
        over:	function(){	$('.solutionsColumnOne li').find('a').removeClass('active'); $('.rightCol').hide();},
		out:	function(){}
    }
    $('.hideRightCol').hoverIntent(hideRightCol)

	// Account Center menu functions	
	accountCenterMenuHover = {
        sensitivity: 3, 
        interval: 30, 
        timeout: 200, 
        over:	function(){ 	
				// Handler for IE Top Level hover state
				if ($.browser.msie) { 
					$('.accountCenterMenu li').removeClass('activeTopLink');
					$('.accountCenterMenu li .topLink').removeClass('activeTopLink');
					$(this).addClass('activeTopLink');
					$(this).find('.topLink').addClass('activeTopLink');
				}	
			$(this).find('.levelOne').css('display', 'block');
				
				}, 
		out:	function(){		$(this).find('.levelOne').css('display', 'none');}
    }
    $('.accountCenterMenu li').hoverIntent(accountCenterMenuHover)
	
//	$('.accountCenterMenu li').hover(
//		function(){
//				// Handler for IE Top Level hover state
////				if ($.browser.msie) { 
//					$('.accountCenterMenu li').removeClass('activeTopLink');
//					$('.accountCenterMenu li .topLink').removeClass('activeTopLink');
//					$(this).addClass('activeTopLink');
//					$(this).find('.topLink').addClass('activeTopLink');
////				}	
//							
//			$(this).find('.levelOne').css('display', 'block');
//			
//			},
//		function(){$(this).find('.levelOne').css('display', 'none');});  

	// Presistant Bar Functions
	$('.jsDisabledSpacer').hide()
	
	// Hide all Presistatnt bar controls 
	function closePBControls() {$('#logonContainer').hide(); $('div.socialMediaWrapper').hide(); $('#helpContainer').hide(); $(".quickLInksList").hide(); $('#cartContainer').hide(); $(".orderStatus").hide(); $(".quickOrder").hide(); $(".priorSearches").hide(); }	

	// Logon Module Show
	$('#log-on-link').click( function() {
		closePBControls(); 
		$('#logonContainer').slideDown("fast"); 
		return false;
		});
		
	// Logon Module Close
	$('#closeLogonModule').click(	function() {		
		$('#logonContainer').slideUp("fast");	
		$('.logonPopupUserName').val('Enter Username');	
		$('.logonPopupPassword').val('');	
		return false;
		});
	
	// Clear Username Field 
	 $('.txtbox-logon').focus(function() {		if(this.value == "Enter Username"){ this.value = '';        }      });		

	// Help Module Toggle
	$('.needHelpLink').click(		function() {return false});	
	showHelpModule = {
        sensitivity: 10,
        interval: 200,
        timeout: 200,
        over:	function() {	closePBControls(); $('#helpContainer').slideDown("fast"); cmCreatePageElementTag('Expand Module', 'Help Module');}, 
        out:	function() {	$('#helpContainer').slideUp("fast"); } 
    }
    $('.needHelp').hoverIntent(showHelpModule)
		
	// Social Media Toggle
	$('.socialMedia').show()
	
	showSocialMedia = {
        sensitivity: 10,
        interval: 200,
        timeout: 500, 
        over:	function() {	closePBControls(); $('.socialMediaWrapper').slideDown("fast");}, 
        out:	function() {	$('.socialMediaWrapper').slideUp("fast"); } 
    }
	
    $('.socialMedia').hoverIntent(showSocialMedia)
	$('.socialMedia').find('a').click(function(){ $('.socialMediaWrapper').slideUp("fast");});

	// Quick Links Toggle
	$(".quickLInksWrapper").show()
	$(".quickLinksLink").click(		function() {$(".quickLInksList").slideToggle(100);		});

	// Order Status Toggle
	$(".orderStatusLink").click(	function() {$(".quickLInksList").hide(); $(".orderStatus").show("fast");	});

	// Quick Order Toggle
	$(".quickOrderLink").click(		function()	{$(".quickLInksList").hide(); $(".quickOrder").show("fast");	});

	// Previous Searches Toggle
	$(".priorSearchLink").click(	function() {$(".quickLInksList").hide(); $(".priorSearches").show("fast");	});

	// Close Quick Link modals 
	$(".close").click(				function() {$(".orderStatus").hide("fast"); $(".quickOrder").hide("fast"); $(".priorSearches").hide("fast");	});

	//  Cart Module Toggle
	showCart = {
        sensitivity: 10, 
        interval: 200, 
        timeout: 200, 
        over:	function() {	closePBControls(); $('#cartContainer').slideDown("fast"); cmCreatePageElementTag('Expand Shopping Cart', 'Global Header');}, 
        out:	function() {	$('#cartContainer').slideUp("fast"); } 
    }
    $('.cartModule').hoverIntent(showCart)	

	// Search Bar Functions 
	
 	// Catalog Toggle
	$(".selectedCatalog").click(	function() {$(".advancedSearch").hide(); $(".catalogOptions").slideToggle("fast");	});
		
	// Catalog Dropdown
	$(".catalogOptions a").click(	function() {$(".selectedCatalogLabel").text($(this).text()); $("input[name=ctlgfilter]").val($(this).attr('alt')); $(".catalogOptions").hide();	});
	
	// Advanced Search Toggle
	$(".advancedSearchLink").click(	function() {$(".catalogOptions").hide(); $(".advancedSearch").slideToggle("fast");	});

	// Close Advanced Serch
	$(".closeAdvancedSearch").click(function() {$(".catalogOptions").hide(); $(".advancedSearch").slideToggle("fast");	});
	$("#searchbox2").click(function() {$(".catalogOptions").hide(); $(".advancedSearch").hide();	});

	// Hide Right col for View All links 
	//$(".viewAllCat").hover(function(){ $(".rightCol").hide(); });

	

   }); // Close main function
