/**
 * Main Javascript file for common functions used throughout the site
 * 
 * @author Freshleaf Team
 */
(function($){

	$('html').addClass('js');
	var valid_email = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	
	//----------------------------------------------------------------------	
	
	/**
	 * Check if element is child of selecter
	 */
	jQuery.fn.isChildOf = function(b){ 
		return (this.parents(b).length > 0); 
	};

	//----------------------------------------------------------------------

	var live_chat = {
			
		init : function(){
			
			var rand = Math.floor(Math.random()*10001);
			
			$.getJSON("/cache/live_person_cache.js?v=" + rand, function(data) {
			
				//sidebar button
				$('#lpButDivID-1309963589353').html("<img id='lpButImgID-1309963589353' src='" + data.image + "'>")
				.show()
				.click(function(){
					live_chat.open_window(data);
				});
			
				//navigation tabs
				switch (data.state_code) {
					case '1': //offline
						$('.nav_live_chat_status').text(live_chat.states.OFFLINE);
						break;
					
					case '2': //online
						$('.nav_live_chat_status').text(live_chat.states.ONLINE)
						.click(function(){
							live_chat.open_window(data);
						});
						break;
					
					case '3': //occupied
						$('.nav_live_chat_status').text(live_chat.states.OCCUPIED);
						break;
					
					default:
						break;
				}
			
			});	
			
		},
			
		open_window : function(data){
			var settings = {					
				height:550, 					
				width:500					
			};
				
			var centeredY = (screen.height - settings.height)/2;
			var centeredX = (screen.width - settings.width)/2;
				
			var windowFeatures =
			'height=' + settings.height +
			',width=' + settings.width +
			',toolbar=' + 0 +
			',scrollbars=' + 0 +
			',status=' + 0 +
			',resizable=' + 0 +
			',location=' + 0 +
			',menuBar=' + 0 +
			',left=' + centeredX +
			',top=' + centeredY;
				
			try 
			{
				window.open(data.image_link, '', windowFeatures).focus();
			}
			catch(e)
			{
				console.log("Can't open the new window");
			}				
		},
			
		states : {
			'OFFLINE'  : 'Sorry, nobody is available to chat',
			'ONLINE'   : 'Click here to chat',
			'OCCUPIED' : 'Sorry, experts are busy'
		}
	}

	//----------------------------------------------------------------------

	/**
	 * Multi-level drop down menu
	 */
	$.fn.DDMenu = function(options)
	{
		var $base = $(this);
		$base.addClass('DDMenuContainer');

		var defaults = {
			fadeInSpeed  : 200,
			fadeOutSpeed : 0,
			hoverClass   : 'DDHover',
			delaySpeed   : 500,
			megaClass    : 'mega-container',
			$listItems   : $base.find('li')
		};

		//show menu on page load
		$base.show();

		return defaults.$listItems.each(function()
		{
			var opts = $.extend(defaults, options),
			t,
			t_sub,
			$menu               = $(this),
			$menu_children      = $menu.children('ul').children('li'),
			$menu_grandchildren = $menu_children.not('.'+opts.megaClass).children('ul').children('li'),
			$menu_x_offset      = $menu.position();
			
			if ($menu_children.length)
			{
				$menu.addClass('parent');
				
			//sub menus inside mega menu
			/*if($menu.isChildOf('.mega-container'))
				{
					var menuTxt = $menu.children('a').html()+' <span>&gt;</span>';
					if(!$menu.find('ul.nav_no_hover').length)
					{
						$menu.children('a').html(menuTxt);
					}
					
					$menu.hover(function()
					{
						$menu.parent().children('li').children('ul').removeClass('mega-sub-hover');
						clearTimeout(t_sub);
						$menu.children('ul').addClass('mega-sub-hover');
					},
					function()
					{
						t_sub = setTimeout(function() {
							$menu.children('ul').removeClass('mega-sub-hover');
						}, opts.delaySpeed);
					});
				}*/
			}
			
			$menu.children('ul').not('.'+opts.megaClass).each(function()
			{
				if(!$(this).parents('ul.'+opts.megaClass).length)
				{
					$(this).addClass('DDMenu');
				}
			});
			
			if(!$(this).parents('ul.'+opts.megaClass).length)
			{
				$menu.hover(function()
				{
					var $this = $(this);

					//hide any showing child menus
					$this.siblings().not('.'+opts.hoverClass).children('ul').fadeOut(opts.fadeOutSpeed);
					//$this.find('li').not('.'+opts.hoverClass).children('ul').hide();

					clearTimeout(t);
					$this.addClass(opts.hoverClass).children('ul').show();

					if($this.find('.'+opts.megaClass).is('.menu-align-right'))
					{
						//align mega-menu to right of screen
						var $mega_menu = $this.find('.'+opts.megaClass),
						drop_down_width = $mega_menu.outerWidth(),
						menu_width = $menu.parent().outerWidth(),
						menu_pos = $menu_x_offset.left - (menu_width - drop_down_width);
						//round up
						
						$mega_menu.css('left', -menu_pos);
					}
					else
					{
						//force whole number (+0.1 force IE round up)
						menu_pos = Math.ceil($menu_x_offset.left+0.1);
						
						//align mega-menu to left of screen
						$this.find('.'+opts.megaClass).css('left',-menu_pos);
					}

				}, function()
				{
					$menu.removeClass(opts.hoverClass);
					t = setTimeout(function() {
						$menu.children('ul').hide();
					}, opts.delaySpeed);

				});

				$menu_grandchildren.each(function()
				{
					var parent_width = $(this).parent().parent().parent().width();
					$(this).parent()
					.css('left', parent_width);
				});
			
			}

		});

	};

	//----------------------------------------------------------------------

	/**
	 * Search box text show/hide
	 */
	$.fn.searchText = function(options) {

		var defaults = {
			searchValue : 'Search (e.g. products, model #\'s, solutions, etc.)'
		};

		return this.each(function() {

			var opts = $.extend(defaults, options),
			$searchField = $(this),
			setSearchValue = $searchField.val();

			if (setSearchValue == '') $searchField.val(opts.searchValue);

			$searchField.click(function() {
				if ($searchField.val() == opts.searchValue) {
					$searchField.val('');
				}
			});

			$searchField.blur(function() {
				if ($searchField.val() == '') {
					$searchField.val(opts.searchValue);
				}
			});


		});
	};
	
	//----------------------------------------------------------------------
	
	/**
	 * Tree navigation
	 */
	$.fn.subNav = function() {
		return this.each(function() {

			var $tree = $(this), $roots = $tree.find('li');

			// add class to allow styling
			$tree.addClass('tree');

			// iterate through all list items
			$roots.each(function() {

				// if list-item contains a child list
				if ($(this).children('ul').length > 0)
				{
					// add expand/contract control
					$(this).addClass('root').prepend('<span class="expand" />');
				}

			});

			// handle clicking on expand/contract control
			$('span.expand').toggle(
				// if it's clicked once, find all child lists and expand
				function() {
					$(this).toggleClass('contract').nextAll('ul')
					.slideDown();
				},
				// if it's clicked again, find all child lists and
				// contract
				function() {
					$(this).toggleClass('contract').nextAll('ul')
					.slideUp();
				});
		});
	};

	//----------------------------------------------------------------------
	
	/**
	 * Product power requirement search
	 */
	var powerSearchModule = {
		
		search_type : 'ac-dc',
	
		switchType : function(){
			powerSearchModule.search_type = $(this).val();
					
			if(powerSearchModule.search_type == 'dc-dc'){
				$('#input-voltage-field').slideDown();
			} else {
				$('#input-voltage-field').slideUp();
			}
			
			return false;
		},
		
		addOutput : function(){
			$('#output-fields li:hidden:first').slideDown();
			
			return false;
		},
		
		init : function(){
			
			$('#power-requirements-search input[name=type]:radio').change(this.switchType);
			$('#search-add-output').click(this.addOutput);	
		}
	}
	
	//----------------------------------------------------------------------
	
	/**
	 * Hightlight items on hover and make whole area clickable
	 */
	$.fn.hoverHighlight = function()
	{
		return this.each(function()
		{
			$(this).hover(
				function()
				{
					$(this).addClass('over').css('cursor', 'pointer');
				},
				function()
				{
					$(this).removeClass('over').css('cursor', 'default');
				}
				)
			.click(function(event)
			{
				event.preventDefault();
				event.stopPropagation();
				
				var link_href = $(this).find('a').attr('href');
        
				if($(this).is('.close_button'))
				{
					$(this).parents('li').removeClass('DDHover').children('ul').hide();
				}			
				else if (link_href != undefined)
				{
					var target = $(this).find('a').attr('target');
					if (target == '_blank')
					{
						window.open(link_href);
					}
					else
					{
						document.location = link_href;
					}
				}
				else 
					return false;
			});
		});
	}

	//----------------------------------------------------------------------

	/**
	 * Switch tabs on feedback form
	 */
	function feedbackSwitchTabs()
	{
		var feedbackForm = $('#feedback-form'),
		tab = $(this),
		title = tab.attr('title'),
		classname = tab.attr('class');
	
		// update hidden field with selection class name
		feedbackForm.find('input[name|=type]').val(classname);

		$('#feedback-tabs li').removeClass('selected');
		tab.parent().addClass('selected');
		feedbackForm.find('fieldset h2:first span').text(title);
	}

	//----------------------------------------------------------------------

	/**
	 * Feedback form response
	 */
	function feedbackSuccess(responseText)
	{
		if (responseText)
		{
			// Handle Success
			$('.feedback h1').text('Feedback sent successfully')
					
			$('.feedback form').fadeOut('fast', function()
			{
				$('#output').fadeIn('slow');		  
			});
		}
	}
		
	//----------------------------------------------------------------------

	/**
	 * dom ready
	 */
	$(function() {

		$('#slides').slides({
			preload: true,
			play: 9000,
			pause: 2000,
			preloadImage: '/images/home_banner/loading.gif',
			hoverPause: true,
			generatePagination: true
		});

		$('.industry_solutions').slides({
			preload: true,
			play: 8000,
			pause: 2000,
			preloadImage: '/images/home_banner/loading.gif',
			hoverPause: true,
			generatePagination: true
		});

		$('.whats_new').slides({
			preload: true,
			play: 7000,
			pause: 2000,
			preloadImage: '/images/home_banner/loading.gif',
			hoverPause: true,
			generatePagination: true
		});

		// drop down menu
		$('#main_nav, #emerson_nav').DDMenu();
		
		// bind esc to close menu
		$(document).keyup(function(e) {
			if (e.keyCode == 27) {
				$('#main_nav .close_button').click();
			} 
		});


		// Feedback form tabs
		$('#feedback-tabs li a').live("click", feedbackSwitchTabs);

		//show/hide search value
		$('.search_input').searchText();
		
		$('#search-product').searchText({
			searchValue : 'Enter Product Name/Model #'
		});
		
		$('#newsletter_email').searchText({
			searchValue : 'Enter Your Email Address'
		});
		
		$("#bottom-list-container form.newsletter input#email_address").searchText({
			searchValue : 'Enter Your Email Address'
		});
		
		$('#bottom-list-container form.newsletter input.form-submit-go').click(function() {
			// validate and process form here
	  
			var email = $("#bottom-list-container form.newsletter input#email_address").val();
            
			if (email == "" || !valid_email.test(email)) {                
				$("#bottom-list-container form.newsletter input#email_address").animate({
					backgroundColor: "#ffa650"
				}, 1000);
				$("#bottom-list-container form.newsletter input#email_address").focus();
				return false;
			} 
			else {
				$("#bottom-list-container form.newsletter input#email_address").css('background-color', '#fff');
			}

			var formData = $("#bottom-list-container form.newsletter").serialize();
			formData = formData+'&first_name=Emerson&last_name=Network+Power';
	  
			$.ajax({
				type: "POST",
				url: "http://oi.vresp.com?fid=7a2cd04347",
				data: formData,
				success: function() {
                    
				}
			});
			
			$('#bottom-list-container form.newsletter div.field').html("<p>Thank you for signing up to our newsletter</p>")					
			.hide()
			.fadeIn(1500);
			
			return false;
      
		});
		
		$('#part_number').searchText({
			searchValue : 'Enter Part Number'
		});
  
		$('#product-categories').subNav();
		
		$('ul.news-list li, table.searchResults tbody tr').not('.powerpad_table tbody tr').hoverHighlight();
		$('ul.photoLib li').hoverHighlight();
		$('ul.side-module-hover li').hoverHighlight();
		$('#social-media-list li').hoverHighlight();
		$('#main-visual-search li').hoverHighlight();
		$('#mdw-list li').hoverHighlight();
		$('#vertical_list li').hoverHighlight();
		
		powerSearchModule.init();
		
		$(".side-module select").sSelect({
			ddMaxHeight: '180px'
		});
		
		$('.cat-side-module > ul').quickTree();
		
		$(".resources ul li a img").each(function(){
			$(this).data("dim", {
				width: $(this).width(), 
				height: $(this).height()
			});
		});

		$('a.thickbox').colorbox({
			maxHeight:'100%',
			maxWidth: '98%',
			current:''
		});
		
		/*$('#product_image a').colorbox({
			maxHeight:'100%',
			maxWidth: '650px',
			current:'',			
			onCleanup:function(){
				$('div#cboxOverlay').hide();
				$('div#colorbox').hide();
			}			
		});*/
		
		//----------------------------------------------------------------------
		
		/**
		 * Home page drop downs
		 */
		$('#home-power-search select').sSelect({
			ddMaxHeight: '210px'
		});
		
		$('#select-acdc, #select_dcdc').change(function(){
			window.location = '/power-supplies/websheet/'+$(this).val()+'/'+$(this).find(':selected').text();
		});
		
		$('#select-acdc-wattage, #select-dcdc-wattage').change(function(){
			window.location = $(this).val();
		});
		
		$('#select-acdc-type, #select-dcdc-type').change(function(){
			window.location = '/power-supplies/type/?type_id='+$(this).val();
		});
		
		$('#select_type').sSelect({
			ddMaxHeight: '250px',
			defaultText: 'Select Product Type'
		}).change(function(){
			window.location = '/power-supplies/type/?type_id='+$(this).val();
		});
				
		/*$('.ftr_choose_lang').sSelect({
			defaultText: 'Select preferred language',
			containerClass: 'ftr_choose_lang'
		}).change(function(){
			if($(this).val() == 'en')
			{
				window.location = '/';
			}
			else
			{
				window.location = '/international/'+$(this).val();
			}
		});*/
		
		//----------------------------------------------------------------------
		
		/**
		 * Nav Input Array
		 */
		var nav_input_object = new Object();
		
		/**
		 * Nav drop downs
		 */
		if($('html.ie7').length == 0){
			$('.mega-container select:not(#nav_product_purchase_select), #support_tabs select').sSelect({
				ddMaxHeight: '347px'
			}).change(function(){
				$(this).parents('form').submit();
			});
		}
		
		/**
		 * Nav Inputs
		 */
		$('.mega-container input, #support_tabs input').each(function() {
			nav_input_object[$(this).attr('name')] = $(this).val();
		});
		
		$('.mega-container input, #support_tabs input').focusin(function() {
			var is_empty = /^enter/i;			
			if(is_empty.test($(this).val())) {
				$(this).val('');
			}
		});
		
		$('.mega-container input, #support_tabs input').focusout(function() {
			if($(this).val().toLowerCase() == '') {
				$(this).val(nav_input_object[$(this).attr('name')]); 
			}
		});

		// select product type navigation drop down
		$('#nav_product_purchase_select').sSelect({
			defaultText: 'Select Product Type'
		}).change(function(){
			window.location = '/power-supplies/type/?type_id='+$(this).val();
		});

		//----------------------------------------------------------------------
			
		$('#websheet_tabs').tabs();
		
		$('#support_tabs').tabs();
		
		$('#home-power-search').tabs();
		/*
		 * all contact forms with selects have style select enabled
		 */					
		$('.default-form select').sSelect({
			ddMaxHeight: '250px'
		});
		
		// Side Bar Last border
		$("ul.side-module-hover li:last-child").addClass("no-border");

		/*
		 * support/product/technical-literature.php
		 */
		$('#tech-lit-search').focusin(function() {
			var is_empty = /^enter/i;
			
			if($(this).val().toLowerCase() == 'search' || is_empty.test($(this).val())) {
				$(this).val('');
			}	
		});
		
		$('#tech-lit-search').focusout(function() {
			if($(this).val().toLowerCase() == '') {
				$(this).val('Search'); 
			}
		});
		
		//----------------------------------------------------------------------

		/**
		 * Navigation image hover
		 */
		$('.mega-container a img.hover_banner').hover(function(){
			var curr_src = $(this).attr('src');
			curr_src = curr_src.replace('.gif', '');
			$(this).attr('src', curr_src+'_thumb.gif');
		},
		function(){
			var curr_src = $(this).attr('src');
			curr_src = curr_src.replace('_thumb', '');
			$(this).attr('src', curr_src);
		});
		
		$('#main_nav .mega-container').each(function(){
			$(this).append('<li class="close_button"></li>');
		});
		
		$('#main_nav .mega-container li.close_button').hoverHighlight();

		$('#lpChatBtnHref3719749436').addClass('overlay-tab');
		
		//----------------------------------------------------------------------
		
		//product page
		$('#sp_img_thumbs a').click(function(){
			var href = $(this).attr('href'),
			rel = $(this).attr('rel');
			$('#sp_img_thumbs li').removeClass('current');
			$(this).parent().addClass('current');

			var large_href = $('#sp_img_placeholder a').attr('href');
			large_href = large_href.slice(0, -1)+rel;
            
			$('#sp_img_placeholder img')
			.attr('src', href)
			.parent().attr('href', large_href);
			return false;
		});

		if ($.colorbox){
			$('#sp_img_placeholder a').colorbox({
				width:'662px',
				height:'600px',
				iframe: true
			});
		}
		
		//----------------------------------------------------------------------
		
		if($.fn.filestyle) {
			$("input#file").filestyle({ 
				image: "/images/btn_select_file.png",
				imageheight : 28,
				imagewidth : 92,
				width : 518,
				padding: "0 0 0 10px"
			});
			
			$(".filestyle_button").hover(
				function()
				{
					$(this).addClass('over').css('cursor', 'pointer');
					if($.browser.msie) {
						$(this).css('background-position', '-94px 0');
					}
				},
				function()
				{
					$(this).removeClass('over').css('cursor', 'default');
					if($.browser.msie) {
						$(this).css('background-position', '0 0');
					}
				});
		}
		
		/* Site Buttons styled with jQuery UI */
		/*($('.btn-large').addClass('btn-small').removeClass('btn-large');
		$('.btn-small').removeClass('active').addClass('ui-state-default ui-corner-all');*/
		$('.btn-small').hover(
			function(){ 
				$(this).addClass("over"); 
			},
			function(){ 
				$(this).removeClass("over"); 
			});
		
		//---------------------------------------------------------------------
		
		/**
		 * Menu tabs
		 */
		$('.nav_tabs li > h3 a').mouseover(function(){
			//get hash
			var link_hash = $(this).attr('href');
			
			$('.nav_tabs li > h3').removeClass('selected');
			$(this).parent().addClass('selected');
			
			$('.tab_content').hide();
			$(link_hash).show();
			return false;
		});
		
		$('.nav_tabs li > h3.selected a').mouseover();
		
		//hackattack
		$('.nav_tabs li > h3 > a').click(function(){
			if($(this).attr('href')=='#dc_dc_tab')
			{
				document.location = '/power-supplies/cat/26/DC-DC-Converters';
				return false;
			}
			if($(this).attr('href')=='#ac_dc_tab')
			{
				document.location = '/power-supplies/cat/25/AC-DC-Power-Supplies';
				return false;
			}
			if($(this).attr('href')=='#vertical_tab')
			{
				document.location = '/embedded-power-industry-solutions';
				return false;
			}
		});
		
		/*Support tabs*/
		$('.mini-tabs').each(function(){
			var $this = $(this),
			$links = $this.find('ul li a');
			
			$links.click(function(){
				//get hash
				var link_hash = $(this).attr('href');

				$links.parent().removeClass('selected');
				$(this).parent().addClass('selected');

				$this.find('.mini_tab_content').hide();
				$(link_hash).show();
				return false;
			});
			$links.first().click();
		});
				
		live_chat.init();
	
	});	
})(jQuery);

