/********************************************************
For more info & download: http://www.ibegin.com/blog/p_ibox.html
Created for iBegin.com - local search done right
MIT Licensed Style
*********************************************************/


function hide_title_picture()
{
    if (getElem('titleimage-alt')) {
        getElem('titleimage-alt').style.display='block';
        getElem('titleimage').style.display='none';
    }
}
function show_title_picture()
{
    if (getElem('titleimage-alt')) {
        getElem('titleimage-alt').style.display='none';
        getElem('titleimage').style.display='block';
    }
}

var imgPreloader = new Image(); // create an preloader object
function init_ibox() {
	var elem_wrapper = "ibox";
	
	createIbox(document.getElementsByTagName("body")[0]); //create our ibox

	//	elements here start the look up from the start non <a> tags
	//var docRoot = (document.all) ? document.all : document.getElementsByTagName("*");
	
	// Or make sure we only check <a> tags
	var docRoot = document.getElementsByTagName("a");

	var e;
	for (var i = 0; i < docRoot.length - 1; i++) {
			e = docRoot[i];
			if(e.getAttribute("rel")) {
				var t = e.getAttribute("rel");
				if ((t.indexOf("ibox") != -1)  ||  t.toLowerCase() == "ibox") { // check if this element is an iBox element
						e.onclick = function() { // rather assign an onclick event
							var t = this.getAttribute("rel");
							var params = parseQuery(t.substr(5,999));
							var url = this.href;
							if(this.target != "") {url = this.target} 
	
							var title = this.title;

							if(showIbox(url,title,params)) {
								showBG();
								window.onscroll = maintPos;
								window.onresize = maintPos;
							}
							return false;
						}; 
						
				}
			}
     }
}

showBG = function() {
	var box_w = getElem('ibox_w');
	
    hide_title_picture();

	box_w.style.display = "";
	var pagesize = new getPageSize();
	var scrollPos = new getScrollPos();
	var ua = navigator.userAgent;
	
	if(ua.indexOf("MSIE ") != -1) {box_w.style.width = pagesize.width+'px';} 
	/*else {box_w.style.width = pagesize.width-20+'px';}*/ // scrollbars removed! Hurray!
	box_w.style.height = pagesize.height+scrollPos.scrollY+'px';

}

hideBG = function() {
	var box_w = getElem('ibox_w');
	box_w.style.display = "none";
    show_title_picture();

}

var loadCancelled = false;

createIbox = function(elem) {
	// a trick on just creating an ibox wrapper then doing an innerHTML on our root ibox element
	var strHTML = "<div id=\"ibox_w\" style=\"display:none;\"></div>";
	strHTML +=	"<div id=\"ibox_wrapper\" style=\"display:none\">";
	strHTML +=	"<div id=\"ibox_content\"></div>";
	strHTML +=  "</div></div>";

	var docBody = document.getElementsByTagName("body")[0];
	var ibox = document.createElement("div");
	ibox.setAttribute("id","ibox");
	ibox.style.display = '';
	ibox.innerHTML = strHTML;
	elem.appendChild(ibox);
}

var ibox_w_height = 0;
showIbox = function(url,title,params) {
	
	var ibox = getElem('ibox_wrapper');
    var strHTML = "";

    if(params['height']) {ibox.style.height = params['height']+'px';} 
    else {ibox.style.height = '280px';}

    if(params['width']) {ibox.style.width = params['width']+'px';} 
    else {ibox.style.width = '450px';}


    ibox.style.display = "";
    ibox.style.visibility = "hidden";
    posToCenter(ibox); 	
    ibox.style.visibility = "visible";

    getElem('ibox_content').style.overflow = "auto";

    var elemSrcId = url.substr(url.indexOf("#") + 1,1000);

    var elemSrc = getElem(elemSrcId);

    if(elemSrc) {strHTML = elemSrc.innerHTML;}

    setIBoxContent(strHTML);


    ibox.onclick = null;
    getElem("ibox_wrapper").onclick = function() {hideIbox();}

    return true;
}

maintPos = function() {

    var ibox = getElem('ibox_wrapper');
    var box_w = getElem('ibox_w');
    var pagesize = new getPageSize();
    var scrollPos = new getScrollPos();
    var ua = navigator.userAgent;

    if(ua.indexOf("MSIE ") != -1) {box_w.style.width = pagesize.width+'px';} 
    /*else {box_w.style.width = pagesize.width-20+'px';}*/

    if(ua.indexOf("Opera/9") != -1) {box_w.style.height = document.body.scrollHeight+'px';}
    else {box_w.style.height = pagesize.height+scrollPos.scrollY+'px';}

    // alternative 1
    //box_w.style.height = document.body.scrollHeight+50+'px';	

    posToCenter(ibox);

}

hideIbox = function() {
    hideBG();
    var ibox = getElem('ibox_wrapper');
    ibox.style.display = "none";

    clearIboxContent();

    window.onscroll = null;
}

posToCenter = function(elem) {
    var scrollPos = new getScrollPos();
    var pageSize = new getPageSize();
    var emSize = new getElementSize(elem);
    var x = Math.round(pageSize.width/2) - (emSize.width /2) + scrollPos.scrollX;
    var y = Math.round(pageSize.height/2) - (emSize.height /2) + scrollPos.scrollY;	
    elem.style.left = x+'px';
    elem.style.top = y+'px';	
}

getScrollPos = function() {
    var docElem = document.documentElement;
    this.scrollX = self.pageXOffset || (docElem&&docElem.scrollLeft) || document.body.scrollLeft;
    this.scrollY = self.pageYOffset || (docElem&&docElem.scrollTop) || document.body.scrollTop;
}

getPageSize = function() {
    var docElem = document.documentElement
        this.width = self.innerWidth || (docElem&&docElem.clientWidth) || document.body.clientWidth;
    this.height = self.innerHeight || (docElem&&docElem.clientHeight) || document.body.clientHeight;
}

getElementSize = function(elem) {
    this.width = elem.offsetWidth ||  elem.style.pixelWidth;
    this.height = elem.offsetHeight || elem.style.pixelHeight;
}

setIBoxContent = function(str) {
    clearIboxContent();
    var e = getElem('ibox_content');
    e.style.overflow = "auto";
    e.innerHTML = str;

}
clearIboxContent = function() {
    var e = getElem('ibox_content');
    e.innerHTML = "";

}


getElem = function(elemId) {
    return document.getElementById(elemId);	
}

// parseQuery code borrowed from thickbox, Thanks Cody!
parseQuery = function(query) {
    var Params = new Object ();
    if (!query) return Params; 
    var Pairs = query.split(/[;&]/);
    for ( var i = 0; i < Pairs.length; i++ ) {
        var KeyVal = Pairs[i].split('=');
        if ( ! KeyVal || KeyVal.length != 2 ) continue;
        var key = unescape( KeyVal[0] );
        var val = unescape( KeyVal[1] );
        val = val.replace(/\+/g, ' ');
        Params[key] = val;

    }

    return Params;
}

function addEvent(obj, evType, fn){ 
    if (obj.addEventListener){ 
        obj.addEventListener(evType, fn, false); 
        return true; 
    } else if (obj.attachEvent){ 
        var r = obj.attachEvent("on"+evType, fn); 
        return r; 
    } else { 
        return false; 
    } 
}
addEvent(window, 'load', init_ibox);

