﻿window.focus = false;
window.subfocus = false;
window.customSubMenus = false;
window.handleMenuExt = null;


$(function() {

    if (SearchAPI) SearchAPI.Init();

    // search plugins
    $('#Criteria').bind('keydown', function(e) { if(e.keyCode==13) { SearchAPI.Refine($('#Criteria').val()); } });
    $('#searchSide .searchbox').bind('keydown', function(e) { if(e.keyCode==13) { SearchAPI.Search($(this).val(), this.id.substr(4,2)); } }); 
   
    // setting archive specific elements
    var arch = parseInt($('#ArchiveID').val());
    if (arch > 0) showSearchDiv('#search_' + arch);
    
    if ($('#Criteria').length!=0)setTimeout(function() { $('#Criteria').focus() }, 200)

    if (arch > 0) $('#SubMenu').addClass('subMenuBck'+arch);
    //else $('#SubMenu').addClass('subMenuBck3');

    // alter menu item layout under specified conditions
    if (!window.customSubMenus) $('.menu > img, .menuFiller').remove();


    $('#archive').FancyDropDown(showSubCat, false);
    $('.search_cat .source').FancyDropDown(selectedSource, true);
    

    $('#topmenu li').bind('mouseover', function() {
        $('.menu').hide();
        var el = $(this);
        var menuid = el.attr('menu');
        if (menuid && handleMenu) handleMenu(el,menuid);
    });

    $('#topmenu li, .menu').bind('mouseout', function() {
        setTimeout('hideMenus()', 300);
        window.focus = false;

        if (!$(this).children(0).hasClass('submenutrigger')) {
        	setTimeout('hideSubMenus()', 50);
        	subfocus = false;
        }
    });

    $('.menu').bind('mouseover', function() {
        window.focus = true;
    });

	$('.submenutrigger').bind('mouseover', function() {
       	$('.submenu').hide();

       	var pos = $(this).offset();
       	var ulParent = $(this).parent().parent().parent();
       	var ulHeight = parseInt(ulParent.height());
       	var ulTop = parseInt(ulParent.offset().top);
       	var menuHeight = parseInt($($(this).attr('submenu')).height()) + 2;
       	var menuTop = ulTop + (ulHeight - menuHeight);

        if (!window.customSubMenus)
            $($(this).attr('submenu')).css('top', pos.top - 2);
        else
       	    $($(this).attr('submenu')).css('top', menuTop);
       	$($(this).attr('submenu')).css('left', pos.left + 149);
       	$($(this).attr('submenu')).show();
       	window.subfocus = true;
       });

	$('.submenutrigger').bind('mouseout', function() {
		setTimeout('hideSubMenus()', 50);
		focus = false;
	});

	$('.submenu').bind('mouseout', function() {
		setTimeout('hideSubMenus()', 50);
		window.subfocus = false;
		window.focus = false;
	})

	$('.submenu').bind('mouseover', function() {
		window.focus = true;
		window.subfocus = true;
	});
	
	if (window.compactSubMenu) {
	    $('.menu  img').remove();
	    $('.menu .menuFiller').remove();
	}
});

function showSearchDiv(divID) {
    if (divID.indexOf('#') != 0)
        divID = divID.substr(divID.indexOf('#'));
	$(divID).show();
	$('#searchPanels').slideDown(function() {$('.searchbox', $(divID)).focus();});
}

function hideMenus() {
	if (!window.focus && !window.subfocus)
		$('.menu').hide();
}

function hideSubMenus() {
	if (!window.subfocus)
		$('.submenu').hide();

	hideMenus();
}			

function showSubCat(e, item, value) {
    setTimeout(function(){
        $('.search_cat').hide();
        showSearchDiv(value);
       }, 40);
    
    $('#searchPanels').hide();
    $('#ArchiveID').val(e.fancyVal());
}

function selectedSource(e, li, value) {
    $('#Source').val(e.fancyVal());

}

jQuery.fn.outerHTML = function() {
    return $('<div>').append( this.eq(0).clone() ).html();
};

(function($){
    $.fn.fancyVal = function(val) {
        if (val == undefined)
            return $('input:first', $(this)).val();
        this.each(function() {
            var el = $(this);
            $('input:first', el).val(val);
        });
    }
    
    $.fn.fancyCap = function(val) {
        if (val == undefined)
            return $('.fancy_cap', $(this)).html();
        this.each(function() {
            var el = $(this);
            $('.fancy_cap', el).html(val);
        });
    }
    
    

    $.fn.FancyDropDown = function(cb, clickToOpen) {
        this.each(function() {
            var el = $(this);
            var obj = {
                e:el,
                txt: $('div:first', el),
                items: $('ul', el),
                cb: cb
            };
            __buildHtml(obj);
        });
        
        function __buildHtml(obj) {
            // create visual text
            
            var html = '';
            
            obj.txt.addClass('fancyBox');
            
            var txt = obj.txt.html();
            obj.txt.html('<input type="hidden" /><div class="fancy_cap" style="float:left;padding:3px 0px 0px 5px">'+txt+'</div><div style="float:right"><img src="/Content/Img/dropdown.gif" /></div>');
            
            var items = obj.items.parent();
            
            items.addClass('fancyList');
            
            obj.items.css({padding:'0px', margin:'0px'});
            $('li', obj.items).each(function() {
                var el = $(this);
                var txt = el.html();
                el.html('<a id="'+el.attr('id')+'" href="'+el.attr('title')+'" value="'+el.attr('value')+'">'+txt+'</a>')
                    .attr('title','')
                    .attr('id','');
            });

            $('li a', obj.items).each(function() {
                var a = $(this);
                a.bind('click', function() {
                    if (!obj.cb) return false;
                    var val = a.attr('href');
                    $('input',obj.txt).val(a.attr('value'));
                    obj.txt.fancyCap(a.html());
                    obj.cb(obj.e, a, val);
                    __out(obj.items, true);
                    return false;
                });
            });

            obj.txt.data('focus', false); 

            if (clickToOpen)
                obj.txt.bind('click', function() { __boxOver(obj.items, clickToOpen, true) } );
            obj.txt.bind('mouseover', function() { __boxOver(obj.items, clickToOpen, false) } );
            obj.txt.bind('mouseout', function() { __out(obj.items) } );
            items.bind('mouseover', function() { __keepOpen(obj.items) } );
            items.bind('mouseout', function() { __out(obj.items) } );
            $('a', obj.e).bind('mouseover', function() { __keepOpen(obj.items) } );
            
        }

        function __boxOver(items, clickToOpen, clicked) {
            var itemsDiv = items.parent();
            var box = itemsDiv.parent();
            
            var vis = itemsDiv.css('display');
            if (clickToOpen && !clicked && vis=='none')
                return;
            
            box.data('focus', true);
            var offset = box.offset();
            itemsDiv.show();
            items.css('width', box.innerWidth()-20);            
            itemsDiv.css('top', (offset.top + 21)+'px');
            itemsDiv.css('left', (offset.left + 2)+'px');
        }
        
        
        function __out(items, force) {
            var itemsDiv = items.parent();
            var box = itemsDiv.parent();
            
            if (force) {itemsDiv.hide();box.data('focus', false);}
            else setTimeout(function() { __hideItems(items); }, 500);
            box.data('focus', false); 
        }
        
        function __hideItems(items) {
            var itemsDiv = items.parent();
            var box = itemsDiv.parent();
            
            if (!box.data('focus')) 
                itemsDiv.hide();
                
        }
        
        function __keepOpen(items) {
            var itemsDiv = items.parent();
            var box = itemsDiv.parent();
            
            box.data('focus', true);
        }
    };
 

})(jQuery);



window.handleMenu = function(el,menuid) {
    var menu = $('#' + menuid);
    var offset = el.offset();
    menu.show();
    
    var size = { width: el.outerWidth(), height: el.outerHeight() };
    offset.top += size.height;
    menu.css(offset);
    window.focus = true;

    if (handleMenuExt) handleMenuExt(el, menu, offset);    
}

