
(function($)
{
var defaults = {
onClick: function(){
$(this).find('>a').each(function(){
if ( this.href )
{
window.location = this.href;
}
});
},
arrowSrc: '',
subDelay: 300,
mainDelay: 10
};
$.fn.clickMenu = function(options) 
{
var shown = false;
var liOffset = ( ($.browser.msie) ? 4 : 2 );
var settings = $.extend({}, defaults, options);
var hideDIV = function(div, delay)
{

if ( div.timer && !div.isVisible )
{
clearTimeout(div.timer);
}
else if (div.timer)
{
return; 
}
if ( div.isVisible )
{
div.timer = setTimeout(function()
{

$(getAllChilds(getOneChild(div, 'UL'), 'LI')).unbind('mouseover', liHoverIn).unbind('mouseout', liHoverOut).unbind('click', settings.onClick);

$(div).hide();
div.isVisible = false;
div.timer = null;
}, delay);
}
};
var showDIV = function(div, delay)
{
if ( div.timer )
{
clearTimeout(div.timer);
}
if ( !div.isVisible )
{
div.timer = setTimeout(function()
{

if ( !checkClass(div.parentNode, 'hover') )
{
return;
}

$(getAllChilds(getOneChild(div, 'UL'), 'LI')).mouseover(liHoverIn).mouseout(liHoverOut).click(settings.onClick);

if ( !checkClass(div.parentNode, 'main') )
{
$(div).css('left', div.parentNode.offsetWidth - liOffset);
}

div.isVisible = true; 
$(div).show();
if ( $.browser.msie ) 
{
var cW = $(getOneChild(div, 'UL')).width();
if ( cW < 100 )
{
cW = 100;
}
$(div).css('width', cW);
}
div.timer = null;
}, delay);
}
};

var testHandleHover = function(e)
{

var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;

while ( p && p != this )
{
try
{ 
p = p.parentNode;
}
catch(e)
{ 
p = this;
}
}

if ( p == this )
{
return false;
}
return true;
};
var mainHoverIn = function(e)
{


var lis = getAllChilds(this.parentNode, 'LI');
var pattern = new RegExp("(^|\\s)hover(\\s|$)");
for (var i = 0; i < lis.length; i++)
{
if ( pattern.test(lis[i].className) )
{
$(lis[i]).removeClass('hover');
}
}
$(this).addClass('hover');
if ( shown )
{
hoverIn(this, settings.mainDelay);
}
};
var liHoverIn = function(e)
{
if ( !testHandleHover(e) )
{
return false;
}
if ( e.target != this )
{

if ( !isChild(this, e.target) )
{
return;
}
}
hoverIn(this, settings.subDelay);
};
var hoverIn = function(li, delay)
{
var innerDiv = getOneChild(li, 'DIV');

var n = li.parentNode.firstChild;
for ( ; n; n = n.nextSibling ) 
{
if ( n.nodeType == 1 && n.nodeName.toUpperCase() == 'LI' )
{
var div = getOneChild(n, 'DIV');
if ( div && div.timer && !div.isVisible ) 
{
clearTimeout(div.timer);
div.timer = null;
}
}
}

var pNode = li.parentNode;
for ( ; pNode; pNode = pNode.parentNode ) 
{
if ( pNode.nodeType == 1 && pNode.nodeName.toUpperCase() == 'DIV' )
{
if (pNode.timer)
{
clearTimeout(pNode.timer);
pNode.timer = null;
$(pNode.parentNode).addClass('hover');
}
}
}

$(li).addClass('hover');

if ( innerDiv && innerDiv.isVisible )
{

if ( innerDiv.timer )
{
clearTimeout(innerDiv.timer);
innerDiv.timer = null;
}
else
{
return;
}
}

$(li.parentNode.getElementsByTagName('DIV')).each(function(){
if ( this != innerDiv && this.isVisible )
{
hideDIV(this, delay);
$(this.parentNode).removeClass('hover');
}
});

if ( innerDiv )
{
showDIV(innerDiv, delay);
}
};
var liHoverOut = function(e)
{
if ( !testHandleHover(e) )
{
return false;
}
if ( e.target != this )
{
if ( !isChild(this, e.target) ) 
{
return;
}
}

var div = getOneChild(this, 'DIV');
if ( !div )
{
$(this).removeClass('hover');
}
else 
{
if ( !div.isVisible )
{
$(this).removeClass('hover');
}
}
};
var mainHoverOut = function(e)
{


var div = getOneChild(this, 'DIV');
var relTarget = e.relatedTarget || e.toElement; 
var p;
if ( !shown )
{
$(this).removeClass('hover');
}
else if ( !div && relTarget ) 
{
p = findParentWithClass(e.target, 'UL', 'clickMenu');
if ( p.contains(relTarget))
{
$(this).removeClass('hover');
}
}
else if ( relTarget )
{

p = findParentWithClass(e.target, 'UL', 'clickMenu');
if ( !div.isVisible && (p.contains(relTarget)) )
{
$(this).removeClass('hover');
}
}
};
var mainClick = function()
{
var div = getOneChild(this, 'DIV');
if ( div && div.isVisible ) 
{
clean();
$(this).addClass('hover');
}
else
{
hoverIn(this, settings.mainDelay);
shown = true;
$(document).bind('mousedown', checkMouse);
}
return false;
};
var checkMouse = function(e)
{

var vis = false;
var cm = findParentWithClass(e.target, 'UL', 'clickMenu');
if ( cm )
{
$(cm.getElementsByTagName('DIV')).each(function(){
if ( this.isVisible )
{
vis = true;
}
});
}
if ( !vis )
{
clean();
}
};
var clean = function()
{

$('ul.clickMenu div.outerbox').each(function(){
if ( this.timer )
{
clearTimeout(this.timer);
this.timer = null;
}
if ( this.isVisible )
{
$(this).hide();
this.isVisible = false;
}
});
$('ul.clickMenu li').removeClass('hover');

$('ul.clickMenu>li li').unbind('mouseover', liHoverIn).unbind('mouseout', liHoverOut).unbind('click', settings.onClick);
$(document).unbind('mousedown', checkMouse);
shown = false;
};
var getOneChild = function(elem, name)
{
if ( !elem )
{
return null;
}
var n = elem.firstChild;
for ( ; n; n = n.nextSibling ) 
{
if ( n.nodeType == 1 && n.nodeName.toUpperCase() == name )
{
return n;
}
}
return null;
};
var getAllChilds = function(elem, name)
{
if ( !elem )
{
return [];
}
var r = [];
var n = elem.firstChild;
for ( ; n; n = n.nextSibling ) 
{
if ( n.nodeType == 1 && n.nodeName.toUpperCase() == name )
{
r[r.length] = n;
}
}
return r;
};
var findParentWithClass = function(elem, searchTag, searchClass)
{
var pNode = elem.parentNode;
var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
for ( ; pNode; pNode = pNode.parentNode )
{
if ( pNode.nodeType == 1 && pNode.nodeName.toUpperCase() == searchTag && pattern.test(pNode.className) )
{
return pNode;
}
}
return null;
};
var checkClass = function(elem, searchClass)
{
var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
if ( pattern.test(elem.className) )
{
return true;
}
return false;
};
var isChild = function(elem, childElem)
{
var n = elem.firstChild;
for ( ; n; n = n.nextSibling ) 
{
if ( n == childElem )
{
return true;
}
}
return false;
};
return this.each(function()
{

if (window.Node && Node.prototype && !Node.prototype.contains)
{
Node.prototype.contains = function(arg) 
{
return !!(this.compareDocumentPosition(arg) & 16);
};
}

if ( !checkClass(this, 'clickMenu') )
{
$(this).addClass('clickMenu');
}

$('ul', this).shadowBox();

if ( $.browser.msie && (!$.browser.version || parseInt($.browser.version) <= 6) )
{
if ( $.fn.bgiframe )
{
$('div.outerbox', this).bgiframe();
}
else
{


}
}

$(this).bind('closemenu', function(){clean();}); 

var liElems = getAllChilds(this, 'LI');
for ( var j = 0; j < liElems.length; j++ )
{
if ( getOneChild(getOneChild(getOneChild(liElems[j], 'DIV'), 'UL'), 'LI') ) 
{
$(liElems[j]).click(mainClick);
}
}

$(liElems).hover(mainHoverIn, mainHoverOut).addClass('main').find('>div').addClass('inner');

if ( settings.arrowSrc )
{
$('div.inner div.outerbox', this).before('<img src="' + settings.arrowSrc + '" class="liArrow" />');
}

$(this).wrap('<div class="cmDiv"></div>').after('<div style="clear: both; visibility: hidden;"></div>');
});
};
$.fn.clickMenu.setDefaults = function(o)
{
$.extend(defaults, o);
};
})(jQuery);
(function($)
{
$.fn.shadowBox = function() {
return this.each(function()
{
var outer = $('<div class="outerbox"></div>').get(0);
if ( $(this).css('position') == 'absolute' )
{

$(outer).css({position:'relative', width:this.offsetWidth, height:this.offsetHeight});
}
else
{

$(outer).css('position', 'absolute');
}

$(this).addClass('innerBox').wrap(outer).
before('<div class="shadowbox1"></div><div class="shadowbox2"></div><div class="shadowbox3"></div>');
});
};
})(jQuery);