/*
 * DO NOT REMOVE THIS NOTICE
 *
 * PROJECT: mygosuMenu
 * VERSION: 1.1.6
 * COPYRIGHT: (c) 2003,2004 Cezary Tomczak
 * LINK:http://gosu.pl/dhtml/mygosumenu.html
 * LICENSE: BSD (revised)
 */
function DropDownMenuX(id) {

this.type = "horizontal";
this.delay = {
"show": 0,
"hide": 200
}
this.position = {
"level1": { "top": 0, "left": 0},
"levelX": { "top": 0, "left": 0}}
this.fixIeSelectBoxBug = true;this.zIndex = {
"visible": 500,
"hidden": -1
};this.browser = {
"ie": Boolean(document.body.currentStyle),
"ie5": (navigator.appVersion.indexOf("MSIE 5.5") != -1 || navigator.appVersion.indexOf("MSIE 5.0") != -1),
"ie6": (navigator.appVersion.indexOf("MSIE 6.0") != -1)
};if (!this.browser.ie) {
this.browser.ie5 = false;this.browser.ie6 = false;}
this.init = function() {
if (!document.getElementById(this.id)) { return alert("DropDownMenuX.init() failed. Element '"+ this.id +"' does not exist."); }
if (this.type != "horizontal" && this.type != "vertical") { return alert("DropDownMenuX.init() failed. Unknown menu type: '"+this.type+"'"); }
if (this.browser.ie && this.browser.ie5) { fixWrap(); }
fixSections();parse(document.getElementById(this.id).childNodes, this.tree, this.id);}
function fixSections() {
var arr = document.getElementById(self.id).getElementsByTagName("div");var sections = new Array();var widths = new Array();for (var i = 0; i < arr.length; i++) {
if (arr[i].className == "section") {
sections.push(arr[i]);}}
for (var i = 0; i < sections.length; i++) {
widths.push(getMaxWidth(sections[i].childNodes));}
for (var i = 0; i < sections.length; i++) {
sections[i].style.width = (widths[i]) + "px";}
if (self.browser.ie) {
for (var i = 0; i < sections.length; i++) {
setMaxWidth(sections[i].childNodes, widths[i]);}}
}
function fixWrap() {
var elements = document.getElementById(self.id).getElementsByTagName("a");for (var i = 0; i < elements.length; i++) {
if (/item2/.test(elements[i].className)) {
elements[i].innerHTML = '<div nowrap="nowrap">'+elements[i].innerHTML+'</div>';}}
}
function getMaxWidth(nodes) {
var maxWidth = 0;for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType != 1 || /section/.test(nodes[i].className)) { continue; }
if (nodes[i].offsetWidth > maxWidth) { maxWidth = nodes[i].offsetWidth; }}
return maxWidth;}
function setMaxWidth(nodes, maxWidth) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].nodeType == 1 && /item2/.test(nodes[i].className) && nodes[i].currentStyle) {
if (self.browser.ie5) {
nodes[i].style.width = (maxWidth) + "px";} else {
nodes[i].style.width = (maxWidth - parseInt(nodes[i].currentStyle.paddingLeft) - parseInt(nodes[i].currentStyle.paddingRight)) + "px";}}}}
function parse(nodes, tree, id) {
for (var i = 0; i < nodes.length; i++) {
if (1 != nodes[i].nodeType) {
continue;}
switch (true) {
case /\bitem1\b/.test(nodes[i].className):
nodes[i].id = id + "-" + tree.length;tree.push(new Array());nodes[i].onmouseover = itemOver;nodes[i].onmouseout = itemOut;break;case /\bitem2\b/.test(nodes[i].className):
nodes[i].id = id + "-" + tree.length;tree.push(new Array());nodes[i].onmouseover = itemOver;nodes[i].onmouseout = itemOut;break;case /\bsection\b/.test(nodes[i].className):
nodes[i].id = id + "-" + (tree.length - 1) + "-section";nodes[i].onmouseover = sectionOver;nodes[i].onmouseout = sectionOut;var box1 = document.getElementById(id + "-" + (tree.length - 1));var box2 = document.getElementById(nodes[i].id);var el = new Element(box1.id);if (1 == el.level) {
if ("horizontal" == self.type) {
box2.style.top = box1.offsetTop + box1.offsetHeight + self.position.level1.top + "px";if (self.browser.ie5) {
box2.style.left = self.position.level1.left + "px";} else {
box2.style.left = box1.offsetLeft + self.position.level1.left + "px";}} else if ("vertical" == self.type) {
box2.style.top = box1.offsetTop + self.position.level1.top + "px";if (self.browser.ie5) {
box2.style.left = box1.offsetWidth + self.position.level1.left + "px";} else {
box2.style.left = box1.offsetLeft + box1.offsetWidth + self.position.level1.left + "px";}}
} else {
box2.style.top = box1.offsetTop + self.position.levelX.top + "px";box2.style.left = box1.offsetLeft + box1.offsetWidth + self.position.levelX.left + "px";}
self.sections.push(nodes[i].id);self.sectionsShowCnt.push(0);self.sectionsHideCnt.push(0);if (self.fixIeSelectBoxBug && self.browser.ie6) {
nodes[i].innerHTML = nodes[i].innerHTML + '<iframe id="'+nodes[i].id+'-iframe" src="javascript:false;" scrolling="no" frameborder="0" style="position: absolute; top: 0px; left: 0px; display: none; filter:alpha(opacity=0);"></iframe>';}
break;}
if (nodes[i].childNodes) {
if (/\bsection\b/.test(nodes[i].className)) {
parse(nodes[i].childNodes, tree[tree.length - 1], id + "-" + (tree.length - 1));} else {
parse(nodes[i].childNodes, tree, id);}}}}

function itemOver() {
self.itemShowCnt++;var id_section = this.id + "-section";if (self.visible.length) {
var el = new Element(self.visible.getLast());el = document.getElementById(el.getParent().id);if (/item\d-active/.test(el.className)) {
el.className = el.className.replace(/(item\d)-active/, "$1");}}
if (self.sections.contains(id_section)) {
clearTimers();self.sectionsHideCnt[self.sections.indexOf(id_section)]++;var cnt = self.sectionsShowCnt[self.sections.indexOf(id_section)];var timerId = setTimeout(function(a, b) { return function() { self.showSection(a, b); } } (id_section, cnt), self.delay.show);self.timers.push(timerId);} else {
if (self.visible.length) {
clearTimers();var timerId = setTimeout(function(a, b) { return function() { self.showItem(a, b); } } (this.id, self.itemShowCnt), self.delay.show);self.timers.push(timerId);}}
}

function itemOut() {
self.itemShowCnt++;var id_section = this.id + "-section";if (self.sections.contains(id_section)) {
self.sectionsShowCnt[self.sections.indexOf(id_section)]++;if (self.visible.contains(id_section)) {
var cnt = self.sectionsHideCnt[self.sections.indexOf(id_section)];var timerId = setTimeout(function(a, b) { return function() { self.hideSection(a, b); } }(id_section, cnt), self.delay.hide);self.timers.push(timerId);}}
}

function sectionOver() {
self.sectionsHideCnt[self.sections.indexOf(this.id)]++;var el = new Element(this.id);var parent = document.getElementById(el.getParent().id);if (!/item\d-active/.test(parent.className)) {
parent.className = parent.className.replace(/(item\d)/, "$1-active");}}

function sectionOut() {
self.sectionsShowCnt[self.sections.indexOf(this.id)]++;var cnt = self.sectionsHideCnt[self.sections.indexOf(this.id)];var timerId = setTimeout(function(a, b) { return function() { self.hideSection(a, b); } }(this.id, cnt), self.delay.hide);self.timers.push(timerId);}

this.showSection = function(id, cnt) {
if (typeof cnt != "undefined") {
if (cnt != this.sectionsShowCnt[this.sections.indexOf(id)]) { return; }}
this.sectionsShowCnt[this.sections.indexOf(id)]++;if (this.visible.length) {
if (id == this.visible.getLast()) { return; }
var el = new Element(id);var parents = el.getParentSections();for (var i = this.visible.length - 1; i >= 0; i--) {
if (parents.contains(this.visible[i])) {
break;} else {
this.hideSection(this.visible[i]);}}
}
var el = new Element(id);var parent = document.getElementById(el.getParent().id);if (!/item\d-active/.test(parent.className)) {
parent.className = parent.className.replace(/(item\d)/, "$1-active");}
if (document.all) { document.getElementById(id).style.display = "block"; }
document.getElementById(id).style.visibility = "visible";document.getElementById(id).style.zIndex = this.zIndex.visible;if (this.fixIeSelectBoxBug && this.browser.ie6) {
var div = document.getElementById(id);var iframe = document.getElementById(id+"-iframe");iframe.style.width = div.offsetWidth + parseInt(div.currentStyle.borderLeftWidth) + parseInt(div.currentStyle.borderRightWidth);iframe.style.height = div.offsetHeight + parseInt(div.currentStyle.borderTopWidth) + parseInt(div.currentStyle.borderBottomWidth);iframe.style.top = -parseInt(div.currentStyle.borderTopWidth);iframe.style.left = -parseInt(div.currentStyle.borderLeftWidth);iframe.style.zIndex = div.style.zIndex - 1;iframe.style.display = "block";}
this.visible.push(id);}

this.showItem = function(id, cnt) {
if (typeof cnt != "undefined") {
if (cnt != this.itemShowCnt) { return; }}
this.itemShowCnt++;if (this.visible.length) {
var el = new Element(id + "-section");var parents = el.getParentSections();for (var i = this.visible.length - 1; i >= 0; i--) {
if (parents.contains(this.visible[i])) {
break;} else {
this.hideSection(this.visible[i]);}}}}

this.hideSection = function(id, cnt) {
if (typeof cnt != "undefined") {
if (cnt != this.sectionsHideCnt[this.sections.indexOf(id)]) { return; }
if (id == this.visible.getLast()) {
for (var i = this.visible.length - 1; i >= 0; i--) {
this.hideSection(this.visible[i]);}
return;}}
var el = new Element(id);var parent = document.getElementById(el.getParent().id);if (/item\d-active/.test(parent.className)) {
parent.className = parent.className.replace(/(item\d)-active/, "$1");}
document.getElementById(id).style.zIndex = this.zIndex.hidden;document.getElementById(id).style.visibility = "hidden";if (document.all) { document.getElementById(id).style.display = "none"; }
if (this.fixIeSelectBoxBug && this.browser.ie6) {
var iframe = document.getElementById(id+"-iframe");iframe.style.display = "none";}
if (this.visible.contains(id)) {
if (id == this.visible.getLast()) {
this.visible.pop();} else {
return;}} else {
return;}
this.sectionsHideCnt[this.sections.indexOf(id)]++;}

function Element(id) {
this.menu = self;this.id = id;
this.getLevel = function() {
var s = this.id.substr(this.menu.id.length);return s.substrCount("-");}

this.getParent = function() {
var s = this.id.substr(this.menu.id.length);var a = s.split("-");a.pop();return new Element(this.menu.id + a.join("-"));}
 
this.hasParent = function() {
var s = this.id.substr(this.menu.id.length);var a = s.split("-");return a.length > 2;}

this.hasChilds = function() {
return Boolean(document.getElementById(this.id + "-section"));}

this.getParentSections = function() {
var s = this.id.substr(this.menu.id.length);s = s.substr(0, s.length - "-section".length);var a = s.split("-");a.shift();a.pop();var s = this.menu.id;var parents = [];for (var i = 0; i < a.length; i++) {
s += ("-" + a[i]);parents.push(s + "-section");}
return parents;}
this.level = this.getLevel();}

function clearTimers() {
for (var i = self.timers.length - 1; i >= 0; i--) {
clearTimeout(self.timers[i]);self.timers.pop();}}
var self = this;this.id = id; 
this.tree = []; 
this.sections = []; 
this.sectionsShowCnt = [];this.sectionsHideCnt = [];this.itemShowCnt = 0;this.timers = []; 
this.visible = []; 
}
if (typeof Array.prototype.indexOf == "undefined") {
Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i++) {
if (this[i] === item) {
return i;}}
return -1;}}
if (typeof Array.prototype.contains == "undefined") {
Array.prototype.contains = function(s) {
for (var i = 0; i < this.length; i++) {
if (this[i] === s) {
return true;}}
return false;}}
if (typeof String.prototype.substrCount == "undefined") {
String.prototype.substrCount = function(s) {
return this.split(s).length - 1;}}

if (typeof Array.prototype.getLast == "undefined") {
Array.prototype.getLast = function() {
return this[this.length-1];}}
