/*****************************************************************************/
// DOM: 
/*****************************************************************************/
// getElementX:
// getElementY:
// getClientHeight:
// getClientWidth:
// getElementHeight:
// getElementWidth:
// $: getElementById
// $n: getElementsByName
// $i: getElementById.innerHTML
// $v: getElementById.value
// $c: getElementById.checked
// $f: getElementById.focus
// isVisible:
// show:
// hide:
// setDiv:
// changeStatusInput:
// mouseLeaves:
// contains:
// getMousePosition:
// setDivPosition:
// setDivPositionScreen:
// showScrollBar:
// hideScrollBar:
// turnObjectDisplay:
// cancelEvent:
// setFocus:
// getFreeHeightPage:
/*****************************************************************************/


/*****************************************************************************/
function getElementX (id) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return 0;

   var x = 0;
   if (obj.offsetParent) x = getElementX (obj.offsetParent); 

   return x + obj.offsetLeft;
}//getElementX


/*****************************************************************************/
function getElementY (id, height) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return 0;

   var y = 0;
   if (obj.offsetParent) y = getElementY (obj.offsetParent, 0); 

   if (height) y += obj.offsetHeight;

   return y + obj.offsetTop;
}//getElementY


/*****************************************************************************/
function getClientHeight () {
   return document.body.clientHeight
}//getClientHeight


/*****************************************************************************/
function getClientWidth () {
   return document.body.clientWidth
}//getClientWidth


/*****************************************************************************/
function getElementHeight (id) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return 0;

   return obj.offsetHeight;
}//getElementHeight


/*****************************************************************************/
function getElementWidth (id) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return 0;

   return obj.offsetWidth;
}//getElementHeight


/*****************************************************************************/
function $(id) {
   return document.getElementById (id);
}//$


/*****************************************************************************/
function $n(id, tag) {
   if (browser.is_nav()) return document.getElementsByName (id);

   if (browser.is_ie()) {
      if (!defined (tag)) tag = 'input'; //Find default tag

      var elements = document.getElementsByTagName(tag);
      var objs = [];
      for(var i = 0; i < elements.length; i++) {
         att = elements[i].getAttribute("name");
         if(att == id)
            objs.push (elements[i]);
      }//Each element find

      return objs;
   }//Bug Fix IE
}//$n


/*****************************************************************************/
function $i(id, value) {
   var obj = document.getElementById (id);
   if (!obj) return '';

   if (defined (value)) obj.innerHTML = value;

   return obj.innerHTML;
}//$i


/*****************************************************************************/
function $v(id, value) {
   var obj = typeof (id) == 'string' ? document.getElementById (id) : id;
   if (!obj) return '';

   if (defined (value)) obj.value = value;

   return dropSpaces (obj.value);
}//$v


/*****************************************************************************/
function $c(id, checked) {
   var obj = typeof (id) == 'string' ? document.getElementById (id) : id;
   if (!obj) return false;

   if (defined (checked)) obj.checked = checked;

   return obj.checked;
}//$c


/*****************************************************************************/
function $f(id) {
   var obj = typeof (id) == 'string' ? document.getElementById (id) : id;
   if (!obj) return false;

   if (!obj.focus) return false;

   obj.focus();
   return true;
}//$f


/*****************************************************************************/
function isVisible (id) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return false;
   if (!obj.style) return false;

   return (obj.style.display == 'block' || !obj.style.display) ? true:false;
}//isVisible


/*****************************************************************************/
function show(id, vis) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return false;

   if (!defined (vis))
      obj.style.display = 'block';
   else
      obj.style.visibility = 'visible';
}//show


/*****************************************************************************/
function hide(id, vis) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return false;

   if (!defined (vis))
      obj.style.display = 'none';
   else
      obj.style.visibility = 'hidden';
}//hide


/*****************************************************************************/
function setDiv(msg, id, height, x, y, scroll) {
   height = height || 0;
   x = x || 0;
   y = y || 0;

   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return false;

   var x = getElementX (id) + x;
   var y = getElementY (id, height) + y - (scroll ? scroll.scrollTop : 0);

   var obj_msg = (typeof (msg) == 'string') ? $(msg):msg;

   obj_msg.style.visibility = 'hidden';
   show (obj_msg);
   setDivPositionScreen (obj_msg, x, y);
   obj_msg.style.visibility = '';
}//setDiv


/*****************************************************************************/
function changeStatusInput (id, status) {
   if (typeof (id) == 'string') id = $(id);
   if (!id) return false;

   if (!status) {
      id.className = 'disabled';
   }
   else {
      id.className = '';
   }

   id.disabled = !status;
}//changeStatusInput


/*****************************************************************************/
function mouseLeaves (obj, evt) {
   if (defined (evt.toElement) &&
       defined (obj.contains)) {
      return !obj.contains (evt.toElement);
   }//IE
   else if (defined (evt.relatedTarget) &&
            evt.relatedTarget) {
      return !contains (obj, evt.relatedTarget);
   }//Firefox
}//mouseLeaves


/*****************************************************************************/
function contains (obj, child) {
   while (child) {
      if (obj == child) return true;

      child = child.parentNode;
   }

   return false;
}//contains


/*****************************************************************************/
function getMousePosition (event) {
   var pos = {
      x : 0,
      y : 0
   };

   if (event.pageX || 
       event.pageY) {

      pos.x = event.pageX;
      pos.y = event.pageY;
   }//Property Page
   else if (event.clientX ||
            event.clientY) {
      pos.x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
      pos.y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
   }//Property Client

   return pos;
}//getMousePosition


/*****************************************************************************/
function setDivPosition (id, x, y) {
   if (typeof (id) == 'string') id = $(id);

   id.style.top = y + 'px';
   id.style.left = x + 'px';
}//setDivPosition


/*****************************************************************************/
function setDivPositionScreen (id, x, y) {
   if (typeof (id) == 'string') id = $(id);

   var total_height = (y + getElementHeight (id)) - getClientHeight();
   var total_width = (x + getElementWidth (id)) - getClientWidth();

   //Check for screen border
   if (total_height > 0) y = y - total_height;
   if (total_width > 0) x = x - total_width;

   id.style.top = y + 'px';
   id.style.left = x + 'px';
}//setDivPositionScreen


/*****************************************************************************/
function showScrollBar () {
   document.body.style.overflow='';
}//showScrollBar


/*****************************************************************************/
function hideScrollBar () {
   document.body.style.overflow='hidden';
}//hideScrollBar


/*****************************************************************************/
function turnObjectDisplay (id) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return null;

   obj.style.display = (obj.style.display == 'block' || !obj.style.display) ? 'none':'';

   return obj.style.display == 'none' ? false : true;
}//turnObjectDisplay


/*****************************************************************************/
function cancelEvent (e) {
   if (!e) e = window.event;
   e.cancelBubble = true;
   e.returnValue = false;
   if (e.stopPropagation) {
      e.stopPropagation();
      e.preventDefault();
   }

   return false;
}//cancelEvent


/*****************************************************************************/
function setFocus (id) {
   var obj = (typeof (id) == 'string') ? $(id):id;
   if (!obj) return false;

   if (obj.disabled || !isVisible (obj)) return false;

   obj.focus();
   return true;
}//setFocus


/*****************************************************************************/
function getFreeHeightPage (layer, bottom) {
   if (!defined (bottom)) bottom = 0;

   var height = getClientHeight () - getElementY (layer);    

   return height - bottom;
}//getFreeHeightPage
