// KAPP JS: Windowing functionality
// Depends on: CINEMA.js, kapp.js
//

kapp.window = {}

kapp.window.getWindowHeight = function() {

	var y;
	if (self.innerHeight) y = self.innerHeight;
	else if (document.documentElement && document.documentElement.clientHeight) y = document.documentElement.clientHeight;
	else if ( _proxy_jslib_handle(document, 'body', '', 0, 0)) y =  _proxy_jslib_handle(document, 'body', '', 0, 0).clientHeight;
	return y;
}

kapp.window.getScrollHeight = function() {

	var y;
	if (self.pageYOffset) y = self.pageYOffset;
	else if (document.documentElement && document.documentElement.scrollTop) y = document.documentElement.scrollTop;
	else if ( _proxy_jslib_handle(document, 'body', '', 0, 0)) y =  _proxy_jslib_handle(document, 'body', '', 0, 0).scrollTop;
	return y;
}


kapp.window.fade = function(element, elementHeight, fromOpacity,toOpacity,duration) {
	//CINEMA.example.anim.init(element,elementHeight,element.scrollHeight,
	//						 fromOpacity,toOpacity,duration);
}

kapp.window.showDetailsBox = function (boxid, raquo1id, raquo2id) {
	var box =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(boxid);
	var raquo1 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(raquo1id);
	var raquo2 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(raquo2id);
	if (box != null)
		box.style.display='';
	if (raquo1 != null)
		raquo1.style.display='none';
	if (raquo2 != null)
		raquo2.style.display='';
}

kapp.window.hideDetailsBox = function (boxid, raquo1id, raquo2id) {
	var box =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(boxid);
	var raquo1 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(raquo1id);
	var raquo2 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(raquo2id);
	if (box != null)
		box.style.display='none';
	if (raquo1 != null)
		raquo1.style.display='';
	if (raquo2 != null)
		raquo2.style.display='none';
}

kapp.window.toggleShowBox1 = function (box1id, raquo1id, box2id, raquo2id) {
	var box1 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(box1id);
	var box2 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(box2id);
	var raquo1 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(raquo1id);
	var raquo2 =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(raquo2id);
	if (box1 != null)
		box1.style.display='';
	if (box2 != null)
		box2.style.display='none';
	if (raquo1 != null)
		raquo1.style.display='';
	if (raquo2 != null)
		raquo2.style.display='none';
}

/**
 * @param {Object} obj      : object to find position of
 * @return {Array} left,top : (obj != null) ? [left,top] : [0,0]
 */
kapp.window.findPos = function(obj, absolute) {
	var curleft = 0;
	var curtop  = 0;
	if ((obj != null) && obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		if (absolute) {  // absolute could be true/false or null
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			}
		}
	}
	return [curleft,curtop];
}


kapp.window.showDescription = function (baseid, contentid, displayatid, baseidprefix, count, classname, defclassname) {
	kapp.window.displayContentAt(contentid, displayatid);
	for (var i = 0; i < count; i++) {
		var divi =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseidprefix+i);
		if (divi != null) { if (classname != null) divi.className = (defclassname != null) ? defclassname : ' '; }
	}
	var base =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseid);
	if (base != null) { if (classname != null) base.className = classname; }
}

kapp.window.displayContentAt = function (contentid, atid) {
	var content =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(contentid);
	var at      =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(atid);
	if ((at != null) && ( _proxy_jslib_handle(null, 'content', content, 0, 0) != null))
		 _proxy_jslib_assign('', at, 'innerHTML', '=', (  _proxy_jslib_handle( _proxy_jslib_handle(null, 'content', content, 0, 0), 'innerHTML', '', 0, 0)));
}


kapp.window.hoverPopupObj = "";

kapp.window.showHoverPopup = function (baseid, hoverid, hoverleft, hovertop, moveto, contentid, url) {
	var base  =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseid);
	var hover =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(hoverid);

	if (hover != null) {
		hover.style.display = '';
		switch (moveto) {  // now that hover is visible, use its width/height to set position
			case 1: /* top */    hovertop -= hover.clientHeight; break;
			case 2: /* right */  hoverleft += base.clientWidth;   break;
			case 3: /* bottom */ hovertop += base.clientHeight;  break;
			case 4: /* left */   hoverleft -= hover.clientWidth;  break;
		}
		hover.style.position = 'absolute';
		hover.style.left = hoverleft+'px';
		 _proxy_jslib_assign('', hover.style, 'top', '=', ( hovertop+'px'));
		if(hover != kapp.window.hoverPopupObj && kapp.window.hoverPopupObj != ""){
			kapp.window.hoverPopupObj.style.display = 'none';
		}
		kapp.window.hoverPopupObj = hover;
		if (contentid != null && url!='') {
			kapp.ajax.filldiv(url, contentid, false);
		}
	}
}

kapp.window.hideHoverPopup = function (baseid, hoverid) {
	var base  =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseid);
	var hover =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(hoverid);
	
	if (hover != null)
		hover.style.display='none';
	if (base != null)
		base.style.display='';
}

kapp.window.adjacentPopupTimeout = "";
kapp.window.adjacentPopdownTimeout = "";

/**
 * @param timeout - timeout in seconds.
 */
kapp.window.showAdjacentPopupTimed = function (timeout, baseid, popupid, adjleft, adjtop, contentid, url, obj) {
	obj.style.position = "absolute";
	
	if(obj.offsetLeft < 450) { 
		adjleft += 450 +  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseid).offsetWidth;
		 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(popupid+'content').style.position = "relative";
		 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(popupid+'content').style.left = '33px';
		 _proxy_jslib_assign('',  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(popupid).style, 'background', '=', ( "url(/img/HoverExplore_flip.gif) repeat"));
	} else {
		 _proxy_jslib_assign('',  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(popupid).style, 'background', '=', ( "url(/img/HoverExplore.gif) repeat"));
	}
	
	obj.style.position = "relative";
	if ((timeout != null) && (timeout != 0)) {
		timeout = timeout * 1000;
		kapp.window.adjacentPopupTimeout
 =  _proxy_jslib_handle(null, 'setTimeout', setTimeout, 1, 0)("kapp.window.showAdjacentPopup('"+baseid+"','"+popupid+"',"+adjleft+","+
														adjtop+","+"'"+contentid+"','"+url+"')",
						timeout);
	}
}

kapp.window.hideAdjacentPopupTimed = function (timeout, baseid, popupid) {
	if (kapp.window.adjacentPopupTimeout != "") {
		clearTimeout(kapp.window.adjacentPopupTimeout );
		kapp.window.adjacentPopupTimeout = "";
	}
	if ((kapp.window.hoverPopupObj != "") && (timeout != null) && (timeout != 0)) {
		timeout = timeout * 1000;
		kapp.window.adjacentPopdownTimeout
 =  _proxy_jslib_handle(null, 'setTimeout', setTimeout, 1, 0)("kapp.window.hideAdjacentPopup('"+baseid+"','"+popupid+"')",
						timeout);
	}
}

kapp.window.retainAdjacentPopupTimed = function () {
	if (kapp.window.adjacentPopdownTimeout != "") {
		clearTimeout(kapp.window.adjacentPopdownTimeout );
		kapp.window.adjacentPopdownTimeout = "";
	}
}

kapp.window.showAdjacentPopup = function (baseid, popupid, adjleft, adjtop, contentid, url) {
	var base    =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseid);
	var pos     = kapp.window.findPos(base, true);
	var popup   =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(popupid);
	kapp.window.showHoverPopup(baseid, popupid, pos[0] + adjleft, pos[1] + adjtop, 4, contentid, url);
}

kapp.window.hideAdjacentPopup = function (baseid, popupid) {
	kapp.window.hideHoverPopup(baseid, popupid);
}

kapp.window.showOverlayDetails = function (baseid, overlayid,
										   overlayWidth, overlayHeight, absolute, noadjust) {
	var base    =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(baseid);
	var overlay =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(overlayid);
	var pos     = kapp.window.findPos(base, absolute);
	var newleft = pos[0];
	var newtop  = pos[1];
	var basew   = 0;
	var baseh   = 0;

	if (noadjust) {
		if (base != null) {
			newleft += base.clientWidth + 30;
		} else {
			newleft += 20;
		}
	} else {
		if (base != null) {
			newtop += (base.clientHeight - overlayHeight - 55); /* @TODO: why is "-55" needed? */
			newtop = (newtop < 0) ? 0 : newtop-10;
			newleft += base.clientWidth/2 - overlayWidth/2;
			newleft = (newleft < 0) ? 0 : newleft-20;
		}
	}
	
	kapp.window.showHoverPopup(baseid, overlayid, newleft, newtop);
}

kapp.window.hideOverlayDetails = function (baseid, overlayid) {
	kapp.window.hideHoverPopup(baseid, overlayid);
}

kapp.window.openWindow = function(url, width, height) {
	 _proxy_jslib_handle(window, 'open', '', 1, 0) (url, "_blank", "resizable=yes," + "width=" + width + ",height=" + height);
}



kapp.window.infoPop = {}

 _proxy_jslib_assign('', kapp.window.infoPop, 'close', '=', ( false));

kapp.window.infoPop.keepOpen = false;

kapp.window.infoPop.object = "";

kapp.window.infoPop.width = "";

//Delay Parameters

kapp.window.infoPop.timeoutObj = "";
kapp.window.infoPop.timeoutTask = "";
kapp.window.infoPop.timeoutText = "";
kapp.window.infoPop.timeoutWidth = "";
kapp.window.infoPop.timeoutUrl = "";
kapp.window.infoPop.timeout = "";

kapp.window.infoPop = function(obj, task, text, width, url, delay) {
	
	var popup =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop');
	if(!popup) return;
	
	if(task.match("open")){
		
		clearTimeout(kapp.window.infoPop.timeout);
		
		if(delay != 0){
			kapp.window.infoPop.timeoutObj = obj;
			kapp.window.infoPop.timeoutTask = task;
			kapp.window.infoPop.timeoutText = text;
			kapp.window.infoPop.timeoutWidth = width;
			kapp.window.infoPop.timeoutUrl = url;
			 _proxy_jslib_assign('', kapp.window.infoPop, 'close', '=', ( false));
			kapp.window.infoPop.timeout =
				 _proxy_jslib_handle(null, 'setTimeout', setTimeout, 1, 0)("if(!kapp.window.infoPop.close) kapp.window.infoPop(kapp.window.infoPop.timeoutObj, kapp.window.infoPop.timeoutTask, kapp.window.infoPop.timeoutText, kapp.window.infoPop.timeoutWidth, kapp.window.infoPop.timeoutUrl, 0)",delay);
			return;
		}
		
		obj.style.position = "absolute";
		var xpos = obj.offsetLeft; var ypos = obj.offsetTop;
		obj.style.position = "relative";
		
			if(!navigator.appName.match("Microsoft")) popup.style.visibility = 'hidden';
			popup.style.display = 'block';
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPopFill').style.paddingTop = '0px';
			
			if(!task.match("recall")) {
				 _proxy_jslib_assign('',  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPopFill'), 'innerHTML', '=', ( unescape(text)));
				kapp.window.infoPop.object = obj;
				kapp.window.infoPop.width = width;
			}
			
			popup.style.width = width + 'px';
			var topScroll = window.pageYOffset ||  _proxy_jslib_handle(document, 'body', '', 0, 0).scrollTop || document.documentElement.scrollTop;
		
	
		if(task.match("vertical")){
			
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowLeft').style.display = 'none';
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowRight').style.display = 'none';
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowRight_wrap').style.display = 'none';
			
			if(topScroll < ypos - popup.offsetHeight + 50){
				 _proxy_jslib_assign('', popup.style, 'top', '=', ( (ypos - popup.offsetHeight - 2) + 'px'));
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowTop').className = 'infoPop_tdTop';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdTop').className = 'infoPop_tdTop';
			
				if(xpos <  _proxy_jslib_handle(document, 'body', '', 0, 0).offsetWidth - popup.offsetWidth) {
					popup.style.left = xpos - 40 + 'px';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowBottom').className = 'infoPop_arrowBottom';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdBottom').className = 'infoPop_tdBottom';
					
				} else {
					popup.style.left = xpos - popup.offsetWidth + 85 + 'px';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowBottom').className = 'infoPop_tdBottom';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdBottom').className = 'infoPop_arrowBottom';
					
				}
			
			} else {
				 _proxy_jslib_assign('', popup.style, 'top', '=', ( (ypos + obj.offsetHeight + 2) + 'px'));
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowBottom').className = 'infoPop_tdBottom';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdBottom').className = 'infoPop_tdBottom';
				
				if(xpos <  _proxy_jslib_handle(document, 'body', '', 0, 0).offsetWidth - popup.offsetWidth){
					popup.style.left = xpos - 40 + 'px';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowTop').className = 'infoPop_arrowTop';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdTop').className = 'infoPop_tdTop';
				
				} else {
					popup.style.left = xpos - popup.offsetWidth + 85 + 'px';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowTop').className = 'infoPop_tdTop';
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdTop').className = 'infoPop_arrowTop';
					
				}
			}
		
		}
		
		if(task.match("horizontal")){
			
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowTop').className = 'infoPop_tdTop';
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdTop').className = 'infoPop_tdTop';
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowBottom').className = 'infoPop_tdBottom';
			 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_tdBottom').className = 'infoPop_tdBottom';
			
			if(xpos < popup.offsetWidth){
				popup.style.left = (xpos + obj.offsetWidth) + 'px';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowLeft').style.display = 'block';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowRight').style.display = 'none';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowRight_wrap').style.display = 'none';
				
				if(topScroll <  ypos - popup.offsetHeight + 120){
					 _proxy_jslib_assign('', popup.style, 'top', '=', ( (ypos - popup.offsetHeight + 96) + 'px'));
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_mid_1').style.verticalAlign = 'bottom';
					
				} else {
					 _proxy_jslib_assign('', popup.style, 'top', '=', ( (ypos - 72) + 'px'));
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_mid_1').style.verticalAlign = 'top';
					
				}
				
			}else{
				popup.style.left = (xpos - popup.offsetWidth) + 'px';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowRight').style.display = 'block';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowRight_wrap').style.display = 'block';
				 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_arrowLeft').style.display = 'none';
				
				if(topScroll <  ypos - popup.offsetHeight + 120){
					 _proxy_jslib_assign('', popup.style, 'top', '=', ( (ypos - popup.offsetHeight + 96) + 'px'));
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_mid_3').style.verticalAlign = 'bottom';
					
				} else {
					 _proxy_jslib_assign('', popup.style, 'top', '=', ( (ypos - 72) + 'px'));
					 _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPop_mid_3').style.verticalAlign = 'top';
					
				}
				

			}
			
			if((popup.offsetTop + 60) < topScroll)  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)('infoPopFill').style.paddingTop = (topScroll - popup.offsetTop - 60) + 'px';
			
		}
		
		if(task.match("loading")){ 
			
			kapp.window.infoPop.keepOpen = true;
			
			if(!task.match("recall") && url!='' && url!='none' ) kapp.ajax.filldiv(url, 'infoPopFill', false);
			
		} else if(task.match("hover")){
			
			kapp.window.infoPop.keepOpen = false;
			
		}
		
		 _proxy_jslib_assign('', kapp.window.infoPop, 'close', '=', ( false));
		
		popup.style.visibility = 'visible';
		
	
	} else if(task.match("close")){
		
		var closeDelay = 0;
		
		if(task.match("loading")) closeDelay = 300;
		else if(task.match("hover")) closeDelay = 30;
		
			 _proxy_jslib_assign('', kapp.window.infoPop, 'close', '=', ( true));
			 _proxy_jslib_handle(null, 'setTimeout', setTimeout, 1, 0)("if(kapp.window.infoPop.close) {document.getElementById('infoPop').style.display = 'none'; }"
 , closeDelay);
		
	}
}

/*
kapp.window.fadeIn = {}

kapp.window.fadeIn.opacity = 0;

kapp.window.fadeIn.obj = null;

kapp.window.fadeIn = function(obj, opacity){
	
	if(!opacity){
		kapp.window.fadeIn.obj = obj;
		kapp.window.fadeIn.opacity = 0;
		var opc = 0.0;
		try{ obj.style.MozOpacity = opc; }catch(err) {}
		try{obj.filters.alpha.opacity = kapp.window.fadeIn.opacity; }catch(err) {}
		setTimeout("kapp.window.fadeIn(kapp.window.fadeIn.obj, true);",20);
	}  else if(kapp.window.fadeIn.opacity < 100 ){
		
		kapp.window.fadeIn.opacity += 5;
		var opc = kapp.window.fadeIn.opacity/100;
		try{ obj.style.MozOpacity = opc; }catch(err) {}
		try{ obj.filters.alpha.opacity = kapp.window.fadeIn.opacity; }catch(err) {}
		setTimeout("kapp.window.fadeIn(kapp.window.fadeIn.obj, true);",20);
	}
}
*/

kapp.window.feedup = {}
kapp.window.feedup.timer = 0;
kapp.window.feedup.elem = 0;

kapp.window.feedup.showOptions = function (id) {
	kapp.window.feedup.cancelTimer();
	if(kapp.window.feedup.elem) kapp.window.feedup.elem.style.visibility = 'hidden';
	kapp.window.feedup.elem =  _proxy_jslib_handle(document, 'getElementById', '', 1, 0)(id);
	kapp.window.feedup.elem.style.visibility = 'visible';

}
kapp.window.feedup.hideOptions = function () {
	if(kapp.window.feedup.elem) kapp.window.feedup.elem.style.visibility = 'hidden';
}

kapp.window.feedup.setTimer = function () {
	kapp.window.feedup.timer =  _proxy_jslib_handle(window, 'setTimeout', '', 1, 0)(kapp.window.feedup.hideOptions, 250);
}

kapp.window.feedup.cancelTimer = function () {
	if(kapp.window.feedup.timer) {
		window.clearTimeout(kapp.window.feedup.timer);
		kapp.window.feedup.timer = null;
	}
}
 ;
_proxy_jslib_flush_write_buffers() ;