
$( function () { main.initiate(); });

var main = function () {
	
	var config = {
		
		//--common--//
		baseUrl : '',
		surveyOption : '',
		active : 'active',
		vertical : '.vertical-align',
		
		//--navigation--//
		productSubcategories : 'div.product_categories ul li',
		logo : '.logo',
		searchText : 'div.search input',
		mainNavTabs : 'div.main_navigation div.navigation_tabs li a',
		mainNavActive : 'main_navigation_active',
		sub_navigation : 'div.sub_navigation',
		product_category : 'div.product_category',
		footerLinks : 'li.footer_arrow',
		
		//-- form behaviour --//
		checkbox : '.checkbox'
	},
	
	params = {
		speed : 310,
		timer : 200,
		survey : 'cs_survey',
		visibility : false
	},
	
	priv = {
		
		//--common--//
		
		//only launched for ie
		//removes outline on anchor elements
		blurAnchors : function () {
			var a = $(document).find('a');
			for(var i = 0; i < a.length; i++){
			    a[i].onfocus = function () {
			        this.blur();
			    };
			}
		},
		
		verticalAlign : function () {
			$.each($(config.vertical), function (i, obj) {
				var $this = $(obj),
					objHeight = $this.outerHeight(),
					parentHeight = $this.parent().innerHeight(),
					verticalMargin = (parentHeight - objHeight) / 2;
				$this.css({marginTop : verticalMargin});
			});
		},
		
		toggleCheckbox : function () {
			$(config.checkbox)
			
				//live event binding is for ajax content uploads
				.live('mouseover', function () { $(this).css({color : '#e21a22'}); })
				.live('mouseout', function () { $(this).css({color : '#222222'}); })
				.live('click', function () {
				
					var $checkbox = $(this).find('input'),
						state = $checkbox.is(':checked') ? false : true;
					
					//toggle state of checkbox
					$checkbox.attr('checked', state);
					
					//disables text selection on click event
					if ($.browser.mozilla) {
						$(this).css('MozUserSelect','none');
						
					} else if ($.browser.msie) {
						$(this).bind('selectstart', function () { return false; });
						
					} else {
						$(this).mousedown( function () { return false; });
					};
				}
			);
		},
		
		//--navigation--//
		navigationLogoRedirect : function () {
			$(config.logo).click( function () {
				document.location.href = './';
			});
		},
		
		navigationSearch : function () {
			var dafaultValue = $(config.searchText).val();
			$(config.searchText)
			.focus( function () {
				$(this).css({color: '#666666'})
				if ($(this).val() == dafaultValue) $(this).val('');
			})
			.blur( function () {
				$(this).css({color : '#a3a3a3'});
				if ($(this).val() == '') $(this).val(dafaultValue);
			});
		},
		
		navigationMainHighlight : function () {
			$(config.mainNavTabs).click(
				function () {
					$('.' + config.mainNavActive).removeClass(config.mainNavActive);
					$(this).addClass(config.mainNavActive);
				}
			)
		},
		
		//-- category page --//
		
		productCategoryHover : function () {
			$(config.product_category)
			.hover(
				function() {
					$(this).addClass('product_category_roll');
				}, 
				function() {
					$(this).removeClass('product_category_roll');
				});
		},
		
		
		//-- product finder --//
		productFinderResultsHover : function () {
			$('.productfinder_result_0, .productfinder_result_3')
				.live('mouseover', function() {
					$(this).addClass('productfinder_small_roll');
				})
				.live('mouseout', function() {
					$(this).removeClass('productfinder_small_roll');
				});
			
			$('.productfinder_result_1, .productfinder_result_2')
				.live('mouseover', function() {
					$(this).addClass('productfinder_big_roll');
				})
				.live('mouseout', function(){
					$(this).removeClass('productfinder_big_roll');
				});
		}
	};

	return {
		
		//--common--//
		setBaseUrl : function (url) {
			config.baseUrl = url;
		},
		
		getBaseUrl : function () {
			return config.baseUrl;
		},
		
		setCookie : function ( key, value ){
			document.cookie = key+"="+value+"; path=/";
		},
		
		getCookie : function (name){
			var cookieArray = document.cookie.split(';');
			for ( i in cookieArray ) {
				cookieArray[i] = cookieArray[i].replace(/^\s+|\s+$/g,"");
				var components = cookieArray[i].split('=');
				if (key == components[0]) {
					return components[1];
				}
			}
			return null; 
		},
		
		detectIE6 : function () {
			return $.browser.msie6 = (
				$.browser.msie 
				&& typeof(XMLHttpRequest) == 'undefined' 
				&& /MSIE 6\.0/i.test(window.navigator.userAgent) 
				&& !/MSIE 7\.0/i.test(window.navigator.userAgent) 
				&& !/MSIE 8\.0/i.test(window.navigator.userAgent)
			);
		},
		
		getNthElement : function (element, n) {
			var arr = [];
			var i = n - 1;
			if (i < 2) return null;
			for ( i; i < element.length; i += n){
				arr.push(i);
			};
			return arr;
		},

		getRandomNumber : function (arr) {
			return randomNumber = arr[Math.ceil(Math.random() * arr.length)-1];
		},
		
		filterUniqueItems : function ( obj ) {
			var arr = [];
			outerloop : for ( var i = 0, n = obj.length; i < n; i++ ) {
				for ( var x = 0, y = arr.length; x < y; x++ ) {
					if ( arr[x] === obj[i] ) continue outerloop;
				};
				arr[arr.length] = obj[i];
			};
			return arr;
		},
		
		//--navigation--//
		
		highlightTopSegments : function (type) {
			$('#' + type).addClass(config.active);
		},
		
		setActiveNavItem : function (item) {
			$('#tab_' + item).addClass(config.mainNavActive);
		},
		
		showSubnavigation : function (productTab) {
			var productTab = '#tab_' + productTab,
				ie6 = main.detectIE6();
			
			$(productTab + ',' + config.sub_navigation).hover(
				function () {
					if(!params.visibility) {
						
						params.visibility = true;
						
						if (ie6) $('select').hide();
						
						$(config.sub_navigation)
							.css({display : 'block'})
							.stop()
							.animate({opacity : 1}, params.speed);
					};
					$(productTab).addClass(config.mainNavActive);
				},
				function () {
					params.visibility = false;
					
					window.setTimeout( function () {
						if (!params.visibility) {
							
							if (ie6) $('select').fadeIn(params.speed);
							
							$(config.sub_navigation).stop().animate({opacity : 0}, params.speed, function () {
								$(this).css({display : 'none'});
							});
							$(productTab).removeClass(config.mainNavActive);
						};
					}, params.timer);
				}
			);
		},
		
		// toggle down/up solution container
		toggleViewDiv: function (divId) {
			$('#solution'+divId).css("opacity", 0.4).slideToggle('fast').animate({opacity:1});
			$('#arrow'+divId).toggleClass("solution_close");
			return false;
		},
				
		
		initiate : function () {
			//-- common --//
			if ($.browser.msie) priv.blurAnchors();
			priv.verticalAlign();

			//-- navigation --//
			priv.navigationLogoRedirect();
			priv.navigationSearch();
			priv.navigationMainHighlight();
			priv.toggleCheckbox();
			
			//-- category page --//
			priv.productCategoryHover();
			
			//product finder
			priv.productFinderResultsHover();
			
		}
	};
	
}();
