/*
 * KNOCKOUT GREYBOX
 * 
 * 	...based on Greybox Redux by John Resig & Benjamin Yu (http://foofiles.com/, http://badpopcorn.com/)
 * 	who in turn based it on code by 4mir Salihefendic (http://amix.dk)
 *
 * Written in 2008 by Keith Humm for TKO <keith@tko.co.nz>
 * Requires JQuery (tested and proven with version 1.0.2)
 */

/*
  Defaults, all configurable via options:
  {
    close_img: "close.gif",
    height: 400,
    width: 400,
    animation: false,
    overlay_clickable: true,
    overflow: "auto",
    callback: null,
    caption: ""
  }
*/
(function() {
  var settings = { };

  GB_getPageScrollTop = function(){
    var yScrolltop;
    var xScrollleft;
    if (self.pageYOffset || self.pageXOffset) {
      yScrolltop = self.pageYOffset;
      xScrollleft = self.pageXOffset;
    } else if(document.documentElement&& document.documentElement.scrollTop
      || document.documentElement.scrollLeft ){   // Explorer 6 Strict
      yScrolltop = document.documentElement.scrollTop;
      xScrollleft = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScrolltop = document.body.scrollTop;
      xScrollleft = document.body.scrollLeft;
    }
    arrayPageScroll = new Array(xScrollleft,yScrolltop);
    return arrayPageScroll;
  }

	GB_overlay_size = function()
	{
		try
		{
			var de = document.documentElement;
			var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
			var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;

			var wff = (document.documentElement && document.documentElement.clientWidth)
						|| document.body.clientWidth || window.innerWidth || self.innerWidth;
			w -= (window.innerWidth - wff);
			
			if (typeof document.height != 'undefined') {
				docHeight = document.height;
				docWidth = document.width;
			}
			else if (document.compatMode && document.compatMode != 'BackCompat') {
				docHeight = document.documentElement.scrollHeight;
				docWidth = document.documentElement.scrollWidth;
			}
			else if (document.body && typeof document.body.scrollHeight != 'undefined') {
				docHeight = document.body.scrollHeight;
				docWidth = document.body.scrollWidth;
			}

			if(docWidth > w) {
				w = docWidth - wff;
			}
			if(docHeight > h) h = docHeight;
		}
		catch(err)
		{
			w = jQuery(document.body).width();
			h = jQuery(document.body).height();
		}
		jQuery("#GB_overlay").css({"height":h+"px", "width":w +"px"});
	}

  GB_position = function() {
    var boxWidth = settings.width;
    var boxHeight = settings.height;
	var de = document.documentElement;
	var yoffset = self.pageYOffset || (de&&de.scrollTop) || document.body.scrollTop;
    jQuery('#GB_window').css({
      marginLeft: '-' + parseInt(boxWidth / 2) + 'px',
      width: boxWidth + 'px',
      height: settings.height+"px",
	  marginTop: '-' + parseInt(settings.height / 2) + 'px',
	  top: '50%', //parseInt(yoffset + 36)+"px"
	  left: '40%'
      })
    jQuery("#GB_frame"+settings.frameid).css({"height":settings.height-24+"px", "margin":0,"padding":0,"border":"none","width":"100%"});
  }

  jQuery.GB_hide = function() {
    if(settings.refreshmain) {
		parent.location.reload(true);
	}
	else
	{
		jQuery("#GB_window,#GB_overlay").remove();
	    if(settings.callback && typeof(settings.callback) == 'function') {
	      settings.callback.apply();
	    }
	}
  }

  jQuery.GB_show = function(url, options) {
    settings = jQuery.extend({
      close_img: "/includes/template/public/img/closegb.gif",
      height: 400,
      width: 400,
      animation: false,
      overlay_clickable: true,
      overflow: "auto",
      callback: null,
      caption: "",
	  refreshmain: false,
	  frameid: Math.floor(Math.random()*10001)
      }, options || {});

    jQuery(document.body)
      .append(
        "<div id='GB_overlay'></div>" +
        "<div id='GB_window' style='display:none'><div id='GB_caption'></div>" +
        "<img src='" + settings.close_img + "' alt='Close window'/></div>");
    jQuery("#GB_window img").click(jQuery.GB_hide);
    if(settings.overlay_clickable) {
      jQuery("#GB_overlay").click(jQuery.GB_hide);
    }

    jQuery("#GB_window")
      .append("<iframe id='GB_frame"+settings.frameid+"' src='"+url+"'></iframe>");
    jQuery("#GB_frame"+settings.frameid).overflow(settings.overflow);

    jQuery("#GB_caption").html(settings.caption);

    GB_overlay_size();
    jQuery(window).resize(GB_overlay_size);
    jQuery(window).scroll(GB_overlay_size);
    jQuery("#GB_overlay").show();

    GB_position();

    if(settings.animation) {
      jQuery("#GB_window").slideDown(450);
    } else {
      jQuery("#GB_window").show();
    }
  }

})();
