/*** 
    Please use jQuery instead of $ in global applications
    in order to remove conflicts with other non-jQuery
    JavaScript AJAX libraries
***/

function namespace(namespaceString) {
  var names = namespaceString.split('.'), scope = window, i;
  for(i = 0;i < names.length;i++) {
    if(typeof(scope[names[i]]) === 'undefined') {
      scope = scope[names[i]] = {};
    }
    else {
      scope = scope[names[i]];
    }
  }
}
namespace('lp.nav');
lp.nav.createMainNav = function($) {
    $(function() {
        var mainNav = $('#mainNav'); 
        mainNav.children('.tab').each(function() {
            var tab = $(this);
            tab.toggleClassOnEvent({className: 'highlight', event: 'tolerantHover', tolerance: 200, tolerancePredicate: function() {
                return tab.find('> .menu:not(.hidden)').length !== 0;
            }, offHover: function() {
              $(this).children('ul').addClass('hidden');
            }});
            
            var down_arrows = tab.find('> a > .arrow');
            var right_arrows = tab.find('.menu > li > .arrow');
            down_arrows.
                add(right_arrows).
                add(tab.children('a')).
                toggleClassOnEvent({className: 'highlight', event: 'hover'});
            
            tab.find('li:has(.submenu)').
                bind('mouseenter', function() {
                    if(tab.find('.submenu:not(.hidden)').length === 0) {
                        $(this).addClass('highlight');
                    }
                }).
                bind('mouseleave', function() {
                    if(tab.find('.submenu:not(.hidden)').length === 0) {
                        $(this).removeClass('highlight');
                    }
                }).toggleClassOnEvent({className: 'selectable', event: 'hover'});
            
            down_arrows.click(function(event) {
                event.preventDefault();
                event.stopPropagation();
                tab.addClass('highlight');
                tab.children('ul').toggleClass('hidden');
                tab.find('.submenu').addClass('hidden');
                tab.find('.menu li').removeClass('highlight');
                
                var userTab = tab.filter('.userLoggedIn, .currentUserLoggedIn');
                userTab.children('ul').width(userTab.width()-2); // Ie6 hack to solve left: 0;right: 0; for user menu.
            });
            
            tab.find('.menu').each(function() {
                // bgiframe == ie6 fix for absolute positioned elements
                var menu = $(this).bgiframe();
                var menu_items = menu.children('li'); 
                menu_items.each(function() {
                    var submenu = $(this).find('.submenu').bgiframe();
                    $(this).click(function() {
                        if(submenu.hasClass('hidden')) {
                            menu_items.find('.submenu').addClass('hidden');
                            submenu.removeClass('hidden');
                            
                            var topPadding = 14;
                            var bottomPadding = 7;
                            // center rule
                            var currentTop = parseInt(submenu.css('top'), 10) || 0;
                            var submenuTop = Math.floor(($(this).height() - submenu.height())/2) - currentTop;
                            
                            //window edge rule
                            var windowBottomEdge = $(window).scrollTop() + $(window).height();
                            var submenuOffsetTop = submenu.offset().top;
                            var submenuBottomEdge = submenu.outerHeight() + submenuOffsetTop + submenuTop;
                            if(windowBottomEdge <= submenuBottomEdge + bottomPadding) {
                                submenuTop -= (submenuBottomEdge + bottomPadding) - windowBottomEdge
                            }
                            
                            // menuTop rule
                            var menuTopEdge = menu.offset().top;
                            var submenuTopEdge = submenuOffsetTop + submenuTop;
                            if(submenuTopEdge <= menuTopEdge + topPadding) {
                                submenuTop += (menuTopEdge + topPadding) - submenuTopEdge;
                            }
                            
                            submenu.css('top', (submenuTop + currentTop) + 'px');
                            
                            menu_items.removeClass('highlight');
                            $(this).addClass('highlight');
                        }
                        else {
                            menu_items.find('.submenu').addClass('hidden');
                        }
                    });
                    $(this).children('a').add(submenu).click(function(event) {
                      event.stopPropagation();
                    });
                });
            });
        });
        mainNav.removeClass('notReady');
    });
}
lp.nav.createMainNav(jQuery);

jQuery.fn.tolerantHover = function(onHover,offHover,tolerance,tolerancePredicate) {
    jQuery(this).each(function() {
        var hover = false, self = jQuery(this), timeout, 
            tolerantOnHover = function() {
                clearTimeout(timeout);
                hover = true;
                onHover.apply(this);
            },
            // If a tolerancePredicate function is passed in then tolerantOffHover() will check
            // the result of tolerancePredicate() to determine if the tolerance should be used.
            tolerantOffHover = function() {
                var baseTolerantOffHover = function() {
                    hover = false;
                    timeout = setTimeout(function() {
                        if(!hover) {
                            offHover.apply(self);
                        };
                    }, tolerance);
                };
                if(tolerancePredicate) {
                    return function() {
                        if(tolerancePredicate()) {
                            baseTolerantOffHover()
                        }
                        else {
                            offHover.apply(self);
                        }
                    }
                }
                else {
                    return baseTolerantOffHover;
                }
            }(tolerancePredicate);
        
        self.hover(function() {
            tolerantOnHover();
        }, function(){
            tolerantOffHover();
        });
    });
    return this;
}

jQuery.fn.toggleClassOnEvent = function(options) {
    jQuery(this).each(function() {
        var onHover = options && options.onHover ? options.onHover : function() {};
        var offHover = options && options.offHover ? options.offHover : function() {};
        var target = options && options.target ? jQuery(options.target) : jQuery(this);
        if(options.event === 'hover' || options.event === 'tolerantHover') {
            jQuery(this)[options.event](function() {
                target.addClass(options.className);
                onHover.call(this);
            }, function() {
                target.removeClass(options.className);
                offHover.call(this);
            }, options.tolerance, options.tolerancePredicate);
        }
        else {
            jQuery(this).bind(options.event, function() {
                target.toggleClass(options.className);
            });
        }
    });
    return this;
}

//############ ROS - focus/blur for search field ########################
function focusForm(me) {
	//console.log(me);
	var theElements = document.getElementsByTagName("input");
	for (var i=0; i<theElements.length; i++) {
		if(theElements[i].className == 'searchText'){
		
			theElements[i].onfocus = function() {
			if(this.value == me)
			{this.value = ''}
			}
	
			theElements[i].onblur = function() {
			if(this.value.replace(' ','') == '')
			{this.value = me}
			}
		}
	}
}
//############ ROS - vaildation for search field ########################
function validateForm(e,m,n,me)
{
	var theForm = document.getElementById(n);
	if(theForm.Ntt.value == me || theForm.Ntt.value.replace(' ','') == "") {
		alert(m);

		theForm.Ntt.focus();
    	if (e && e.preventDefault) {
    		e.preventDefault(); // DOM style
        }
        return false; // IE style
	}
    else {
        return true;
    }
}

