/*
 * 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_image_count;
var sb_menu_vertical = false;
var sb_menu_lock = true;
var max_right = 0;


function sb_menu_activate() {
 sb_menu_lock = false;
}

function sb_menu_on(thisId, image_count,  menu_count, vertical, depth, fixed) {
 if(sb_menu_lock == true) {
  return false;
 }
 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_image_count = image_count;


   if(image_count != 'null' && sb_menu_image && preloads[image_count]) {
    image_list[image_count] = sb_menu_image.src;
    sb_menu_image.src = preloads[image_count];
   }

  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 && 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;
  }
  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);
}


