
//©2010 Erobo Software
//Visit http://www.erobosoftware.com for free scripts and libraries
//1-05-2010 - added drag capabilities.
//1-22-2010 - added option for fade in effect.

//Credits:
//http://www.xul.fr/javascript/ ->style sheet, gradient function, main method logic
//http://www.webreference.com/programming/javascript/mk/column2/ [Mark Kahn] ->drag drop functions

//fade in global
var undoGradient = false;

function gradient(id, level){
  var box = document.getElementById(id);
  box.style.opacity = level;
  box.style.MozOpacity = level;
  box.style.KhtmlOpacity = level;
  box.style.filter = "alpha(opacity=" + level * 100 + ")";
  if(undoGradient == false){
    box.style.display="block";
  }
  return;
}

function fadein(id){
  var level = 0;
  while(level <= 1)
  {
    setTimeout( "gradient('" + id + "'," + level + ")", (level* 100) + 10);
    level += 0.01;
  }
}

// Open the lightbox
function openbox(formtitle, fadin, boxwidth, boxheight, boxtitlewidth, boxtitleheight){

  var screenWidthSpaceAvail, iniHeight, screenHeightSpaceAvail, alt_ua_ie;
  var currHeight, disableSelections, yScroll, windowHeight;

  if(navigator.userAgent.toLowerCase().indexOf("msie")!=-1) {
    screenWidthSpaceAvail = document.body.clientWidth;
    iniHeight = document.body.clientHeight;
    currHeight = document.body.scrollTop;
    alt_ua_ie = true;
  }else if(navigator.userAgent.toLowerCase().indexOf("firefox")!=-1) {
    screenWidthSpaceAvail = window.innerWidth;
    iniHeight = window.innerHeight;
    currHeight = window.pageYOffset;
    alt_ua_ie = false;
  }else if(navigator.userAgent.toLowerCase().indexOf("chrome")!=-1) {
    screenWidthSpaceAvail = window.innerWidth;
    iniHeight = window.innerHeight;
    currHeight = window.pageYOffset;
    alt_ua_ie = false;
  }else if(navigator.userAgent.toLowerCase().indexOf("safari")!=-1) {
    screenWidthSpaceAvail = window.innerWidth;
    iniHeight = window.innerHeight;
    currHeight = window.pageYOffset;
    alt_ua_ie = false;
  }else if(navigator.userAgent.toLowerCase().indexOf("opera")!=-1) {
    screenWidthSpaceAvail = window.innerWidth;
    iniHeight = window.innerHeight;
    currHeight = window.pageYOffset;
    alt_ua_ie = true;
  }else {
    screenWidthSpaceAvail = document.body.clientWidth;
    iniHeight = document.body.clientHeight;
    currHeight = document.body.scrollTop;
    alt_ua_ie = true;
  }

  //determining the height code from quirksmode.org
  if (window.innerHeight && window.scrollMaxY) {
    yScroll = window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
    yScroll = document.body.scrollHeight;
  } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
    yScroll = document.body.offsetHeight;
  }

  if (self.innerHeight) {        // all except Explorer
    windowHeight = self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
    windowHeight = document.documentElement.clientHeight;
  } else if (document.body) { // other Explorers
    windowHeight = document.body.clientHeight;
  }

  // for small pages with total height less then height of the viewport
  if(yScroll < windowHeight){
    screenHeightSpaceAvail = windowHeight;
  } else {
    screenHeightSpaceAvail = yScroll;
  }
  //end of quirksmode.org code for determining height

  undoGradient = false; //reset global for gradient

  var box = document.getElementById('box');

  box.style.width = boxwidth + "px";
  box.style.height = boxheight + "px";

  box.style.top = currHeight + (iniHeight / 2) - (boxheight / 2) + "px";
  box.style.left = (screenWidthSpaceAvail / 2) - (boxwidth / 2) + "px";

  document.getElementById('filter').style.display='block';
  document.getElementById('filter').style.width= screenWidthSpaceAvail + "px";
  document.getElementById('filter').style.height= screenHeightSpaceAvail + "px";
  document.getElementById('filter').style.opacity =  0.5;
  document.getElementById('filter').style.filter =  "alpha(opacity=50)";

  var btitle = document.getElementById('boxtitle');

  btitle.style.width = boxtitlewidth + (90) + "px";
  btitle.style.height = boxtitleheight + "px";
  btitle.innerHTML = formtitle;

  btitle.style.cursor = "move";

  document.onmousemove = mouseMove;
  document.onmouseup   = mouseUp;

  var dragObject  = null;
  var mouseOffset = null;

  function getMouseOffset(target, ev){
    ev = ev || window.event;

    var docPos    = getPosition(target);
    var mousePos  = mouseCoords(ev);
    return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
  }

  function getPosition(e){
    var left = 0;
    var top  = 0;

    while (e.offsetParent){
      left += e.offsetLeft;
      top  += e.offsetTop;
      e     = e.offsetParent;
    }

    left += e.offsetLeft;
    top  += e.offsetTop;

    return {x:left, y:top};
  }

  function mouseCoords(ev){
    if(ev.pageX || ev.pageY){
      return {x:ev.pageX, y:ev.pageY};
    }
    return {
      x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
      y:ev.clientY + document.body.scrollTop  - document.body.clientTop
        };
  }

  function mouseMove(ev){
    ev           = ev || window.event;
    var mousePos = mouseCoords(ev);

    if(dragObject){
      dragObject.style.position = 'absolute';
      dragObject.style.top      = mousePos.y - mouseOffset.y;
      dragObject.style.left     = mousePos.x - mouseOffset.x;

      return false;
    }
  }
  function mouseUp(){
    dragObject = null;
    if (typeof box.onselectstart!="undefined"){
          box.onselectstart=null;
        } else if (typeof box.style.MozUserSelect!="undefined"){
          box.style.MozUserSelect="text"
        }

        disableSelections = false
  }

  function makeDraggable(item){
    if(!item) return;
    item.onmousedown = function(ev){
      dragObject  = this;
      mouseOffset = getMouseOffset(this, ev);
      return false;
    }
  }

  btitle.onmousedown = function (){

    if(disableSelections == false){
      if (typeof box.onselectstart!="undefined"){
            box.onselectstart=function(){return false}
          } else if (typeof box.style.MozUserSelect!="undefined"){
            box.style.MozUserSelect="none"
          }
    }

    makeDraggable(box)

    disableSelections = true;

  }

  if(fadin)
  {
   gradient("box", 0);
   fadein("box");
  }
  else
  {
    box.style.display='block';
  }
}

function dragBoxBody(){
  var box1 = document.getElementById('box');
  box1.style.left = 1  + "px";
}

// Close the lightbox
function closebox(){
   undoGradient = true;
   document.getElementById('box').style.display='none';
   document.getElementById('filter').style.display='none';
}



