/*
 * Smallbox CMS http://www.smallboxsoftware.net
 *
 * Copyright (C) 2000-2008 Kenneth Spencer
 *
 * This file is intended only for use withing Smallbox CMS.
 * Unauthorized use is strictly prohibited.
 *
 */
var menu_effect_interval;
var menu_effect_close_interval = new Array(null, null, null, null);
var menu_interval = null;
var sb_menu_element = new Array();
var sb_menu_object = new Array();
var sb_menu_button = new Object();
var sb_menu_sub    = new Object();
var sb_menu_count = 0;
//var sb_menu_image;
var sb_menu_node;
//var sb_menu_image_count;
var sb_menu_vertical = false;
var sb_menu_lock = true;
var max_right = 0;



function sb_menu_load(id, count, vertical) {
 var node;
 if (node = document.getElementById(id)) {
  if (node.nodeName == 'A') {
   node.style.display = 'block';
  }

  node.mouseOvers = new Array();
  node.mouseOuts  = new Array();
  if (node.onmouseover) {
   node.sbmouseover = node.onmouseover;
   node.mouseOvers.push(node);
  }

  if (node.onmouseout) {
   node.sbmouseout  = node.onmouseout;
   node.mouseOuts.push(node);
   node.onmouseout = null;
  }


  var items = node.getElementsByTagName('*');
  for (var i = 0; i < items.length; i++) {
   var item = items.item(i);
   if (item.onmouseover) {
    item.sbmouseover = item.onmouseover;
    item.onmouseover = null;
    node.mouseOvers.push(item);
   }
   if (item.onmouseout) {
    item.sbmouseout = item.onmouseout;
    item.onmouseout = null;
    node.mouseOuts.push(item);
   }
  }

  if (!node.className.match(/(^| )on( |$)/)) { 
   node.sbClassOver = function() {
    this.className = this.className ? this.className+' on' : 'on';
   }
   node.sbClassOut = function() {
    this.className = this.className.replace(/(^| )on( |$)/, '');
   }
  }

  node.onmouseover = function(e) {sb_menu_on(node, e ? e : event, count, vertical, 0, false) };
 }
}

function sb_menu_ref() {
 return function() {
 }
}

function sb_menu_activate() {
 sb_menu_lock = false;
}

function sb_menu_on(thisId, evt, menu_count, vertical, depth) {
 /** Temporary remove image_count if possible */
 //image_count = 'null'

 if(sb_menu_lock == true) {
  return false;
 }

 if (!sb_isTarget(evt, thisId)) {
  return;
 }

 sb_menu_end(depth + 1);

 if(sb_menu_object[depth] && menu_count == sb_menu_object[depth].count) {
  return;
 }

 if(depth >= 1 && menu_effect_close_interval[depth - 1] != null) {
  return;
 }

 if(sb_menu_element.length) {
  sb_menu_end(depth);
 }
 if(menu_effect_count > 0) {
  return;
 }
 sb_menu_object[depth] = new Object();

 pos = getPos(thisId);
 sb_menu_vertical = vertical;
 switch(depth) {
  case 0:
   var Clip = document.getElementById('sb_menu_clip'+menu_count);
   Menu = document.getElementById('pop_menu'+menu_count);

   sb_menu_button = pos;
   //sb_menu_image = thisId.nodeName == "IMG" ? thisId : thisId.getElementsByTagName("img").item(0);
   sb_menu_node  = thisId;
//   sb_menu_image_count = image_count;


   if (thisId.sbmouseover) {
    thisId.sbmouseover();
   }
   var items = thisId.getElementsByTagName('*');
   if (items.length) {
    for (var s = 0; s < items.length; s++) {
     var item = items.item(s); 
     if (item.sbmouseover) {
      item.sbmouseover();
     }
    }
   }

   if (thisId.sbClassOver) {
    thisId.sbClassOver();
   }
/*
   if (thisId.img && thisId.img.sbmouseover) {
    thisId.img.sbmouseover();
   }
*/
  break;
  case 1:
   sb_menu_object[depth].node = thisId;
   var Clip = document.getElementById('sb_sub_menu_clip'+menu_count);
   Menu = document.getElementById('sub_pop_menu'+menu_count);
   if(!thisId.className.match(/[ ]*on$/)) {
    thisId.className += (thisId.className.length ? ' ' : '')+ 'on';
   }
  break;
 }

 sb_menu_count = menu_count;
 Clip.style.display = 'block';

 sb_menu_object[depth].count = menu_count;
 if(vertical == true) {
  var cont;
  if(cont = document.getElementById("container")) {
   var cont_pos = getPos(cont);
   max_right = cont_pos.right;
  }
  else {
   max_right = 980;
  }

  if (max_right == 0 || (pos.left + Clip.offsetWidth) < max_right)
   var left = pos.left  
  else
   var left = max_right - Clip.offsetWidth;

  Clip.style.top = (thisId.offsetHeight + pos.top)+'px'; 
  Clip.style.left = left +'px'; 
  
  sb_menu_object[0].top    = pos.top + thisId.offsetHeight;
  sb_menu_object[0].bottom = sb_menu_object[0].top + Clip.offsetHeight;
  sb_menu_object[0].left   = left;
  sb_menu_object[0].right  = sb_menu_object[0].left + Clip.offsetWidth;
 }
 else {
  Clip.style.left = (thisId.offsetWidth + pos.left) +'px'; 
  Clip.style.top = pos.top+'px'; 
  sb_menu_object[depth].top    = pos.top;
  sb_menu_object[depth].bottom = pos.top + Clip.offsetHeight;
  sb_menu_object[depth].left   = thisId.offsetWidth + pos.left;
  sb_menu_object[depth].right  = sb_menu_object[depth].left + Clip.offsetWidth;
 }
 var UL = Menu;

 UL.style.position = 'absolute';
 var ul_height = UL.offsetHeight;
 sb_menu_object[depth].UL = UL;
 sb_menu_object[depth].height = ul_height;
 sb_menu_object[depth].width = UL.offsetWidth;
 sb_menu_object[depth].vertical = vertical;


 Clip.style.height = UL.offsetHeight+'px';
 Clip.style.width  = (sb_menu_object[depth].right - sb_menu_object[depth].left)+"px";



 if(vertical == true) { 
  UL.style.top = "-"+UL.offsetHeight + "px";
  UL.style.left = 0;
 }
 else {
  UL.style.left = "-"+UL.offsetWidth + "px";
  UL.style.top = 0;
 }

 var width = sb_menu_object[depth].width;
 menu_effect_interval = setInterval(function() {sb_menu_effect(UL,width, ul_height, vertical);}, 40);
 sb_menu_element[depth] = Clip;
 if(menu_interval == null) { 
  menu_interval = setInterval("sb_menu_interval()", 250);
 }
}

function sb_menu_end(depth) {
 var UL;
 var height;
 var elements = sb_menu_element;
 if(!elements[depth]) {
  return false;
 }

 for(var level = elements.length - 1; level >= depth; level--) { 
  var element = elements[level];


  if (level == 0) {
   if (sb_menu_node.sbmouseout) {
    sb_menu_node.sbmouseout();
   }
   var items = sb_menu_node.getElementsByTagName('*');
   if (items.length) {
    for (var s = 0; s < items.length; s++) {
     var item = items.item(s); 
     if (item.sbmouseout) {
      item.sbmouseout();
     }
    }
   }




   if (sb_menu_node.sbClassOut) {
    sb_menu_node.sbClassOut();
   }
/*
   if (sb_menu_node.img && sb_menu_node.img.sbmouseout) {
    sb_menu_node.img.sbmouseout();
   }
*/
  }
/*
  if(level == 0 && sb_menu_image_count != 'null' && image_list[sb_menu_image_count]) {
   sb_menu_image.src = image_list[sb_menu_image_count];
  }
*/
  if(level == 0 && menu_interval) {
   clearInterval(menu_interval);
   menu_interval = null;
  }

  if(menu_effect_close_interval[level]) {
   menu_effect_close_count[level] = 5;
   element.style.display = 'none';
   if(sb_menu_object[level].node) {
    sb_menu_object[level].node.className =  sb_menu_object[level].node.className.replace(/[ ]*on$/, "");
   }
   sb_menu_object[level] = new Object();
  }

  if(UL = sb_menu_object[level].UL) {
   height = sb_menu_object[level].height;
   width = sb_menu_object[level].width;
   vertical = sb_menu_object[level].vertical;
   sb_menu_close_effect(UL, width, height,element, vertical, level);
   if(sb_menu_object[level].node) {
    sb_menu_object[level].node.className =  sb_menu_object[level].node.className.replace(/[ ]*on$/, "");
   }
  }

  if(menu_effect_interval) {
   clearInterval(menu_effect_interval);
   menu_effect_count = 0;
   menu_effect_interval = null;
  }
  sb_menu_object.splice(level, 1);
/*
  delete sb_menu_object[level];
  sb_menu_object.length = level;
*/
  delete sb_menu_element[level]
  sb_menu_element.length = level;
 }

}

function sb_menu_interval() {
 if(
    (
     sb_menu_object[0]
     && mouseY >= sb_menu_object[0].top - 1
     && mouseY <= sb_menu_object[0].bottom +1
     && mouseX <= sb_menu_object[0].right +1
     && mouseX >= sb_menu_object[0].left -1
    )
  || 
    (
     mouseY  >= sb_menu_button.top -1
     && mouseY <= sb_menu_button.bottom +1
     && mouseX <= sb_menu_button.right +1
     && mouseX >= sb_menu_button.left -1
    )
  || 
    (
     sb_menu_object[1]
     && mouseY >= sb_menu_object[1].top - 1
     && mouseY <= sb_menu_object[1].bottom +1
     && mouseX <= sb_menu_object[1].right +1
     && mouseX >= sb_menu_object[1].left -1
    )
   ) {
  /* do menu */
 }
 else {
  sb_menu_end(0);
 }
}

var menu_effect_count = 0;
function sb_menu_effect(UL, width,  height, vertical) {
 menu_effect_count++;
 if(vertical == true) {
  var step   = height / 5;
  var top = (height - Math.ceil(menu_effect_count * step));
  UL.style.top = (top  ? "-"+top : 0)+"px";
 }
 else {
  var step   = width / 5;
  UL.style.left = "-"+(width - Math.ceil(menu_effect_count * step))+"px";
 }
 if(menu_effect_count >= 5) {
  clearInterval(menu_effect_interval);
  menu_effect_interval = null;
  menu_effect_count = 0;
 }
}

var menu_effect_close_count = new Array(5, 5, 5, 5);

function sb_menu_close_effect(UL, width, height, element, vertical, level) {
 var close_menu_count = sb_menu_object[level].count
 var ref = function() {
  /** Ensure effect does not happen simultaneously **/
  if(menu_effect_close_count[level + 1] != 5) {
   return;
  }

  menu_effect_close_count[level]--;
  if(vertical) {
   var step   = height / 5;
   UL.style.marginTop = "-"+(height - Math.ceil(menu_effect_close_count[level] * step))+"px";
  }
  else {
   var step   = width / 5;
   UL.style.marginLeft = "-"+(width - Math.ceil(menu_effect_close_count[level] * step))+"px";
  }

  if(menu_effect_close_count[level] <= 0) {
   menu_effect_close_count[level] = 5;
   clearInterval(menu_effect_close_interval[level]);
   menu_effect_close_interval[level] = null;
   if(!menu_effect_interval || close_menu_count != sb_menu_count) {
    element.style.display = 'none';
   }
   UL.style.margin = '';
  }
 }
 menu_effect_close_interval[level] = setInterval(ref, 40);
}

