/* --- GLOBAL VARS & DEFAULTS --- */

var cpTooltip;
var cpTooltipSubcontainer;
var cpTooltipLoader;
var cpTooltipLoaderImage;
var cpTooltipPointer;
var cpTooltipBodyScrollTop;
var cpTooltipBrowserHeight;
var cpTooltipOrientation;
var cpTooltipFixedX;
var cpTooltipTimeoutId;
var cpTooltipBrowserBorderOffset;
var cpTooltipElement;
var cpTooltipElementReference;
var cpTooltipId;
var cpTooltipDelayTimeoutId;
var cpTooltipFlag = true;
var cpTooltipIsImageLoaded = false;
var cpTooltipBuffer = new Array();
var cpTooltipBaseDimensions = new Array();
var cpTooltipDimensions = new Array();
var cpTooltipLoaderDimensions = new Array();
var cpTooltipStartDimensions = new Array();
var cpTooltipStopDimensions = new Array();

/* --- FUNCTIONS --- */

function cpTooltipShowNoAJAX( element, picture, title, desc, hour, datetv  ){
		if(cpTooltipDelayTimeoutId) clearTimeout(cpTooltipDelayTimeoutId);
		
		cpTooltipBuffer['picture'] = picture;
		cpTooltipBuffer['title'] = title;
		cpTooltipBuffer['desc'] = desc;
		cpTooltipBuffer['hour'] = hour;
		cpTooltipBuffer['datetv'] = datetv;
	cpTooltipShow( element, 0 );
}

function cpTooltipShow( element, id ){
		if(cpTooltipDelayTimeoutId) clearTimeout(cpTooltipDelayTimeoutId);
		
        cpTooltipElement = element;
        cpTooltipId = id;

	// browser border offset
	if(navigator.appVersion.search("MSIE 6") != -1 || navigator.appVersion.search("MSIE 7") != -1) cpTooltipBrowserBorderOffset = 0;
	else cpTooltipBrowserBorderOffset = 2;
	
	// flags and settings
	cpTooltipFlag = true;
	
	cpTooltipIsImageLoaded = false;

	// main elements
	cpTooltip = document.getElementById('cpTooltip');
	cpTooltipLoader = document.getElementById('cpTooltipLoader');
	cpTooltipLoaderImage = document.getElementById('cpTooltipLoaderImage');
	cpTooltipSubcontainer = document.getElementById('cpTooltipSubcontainer');
	cpTooltipPointer = document.getElementById('cpTooltipPointer');

	// set tooltip default position
	cpTooltip.style.top = "0";
	cpTooltip.style.left = "0";
	
	// set tooltip loader default dimensions
	if(cpTooltipLoaderDimensions['width']){
		cpTooltipLoader.style.width = (cpTooltipLoaderDimensions['width'] - 2) + "px"; // border
		cpTooltipLoader.style.height = (cpTooltipLoaderDimensions['height'] - 2) + "px"; // border
	}
	
	// body scroll
	cpTooltipBodyScrollTop = document.body.scrollTop;
	if (cpTooltipBodyScrollTop == 0){
	    if (window.pageYOffset) cpTooltipBodyScrollTop = window.pageYOffset;
	    else cpTooltipBodyScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
	}
	
	// browser window height
	if(window.innerHeight) cpTooltipBrowserHeight = window.innerHeight;
	else cpTooltipBrowserHeight = document.body.clientHeight;
		
	// get dimensions (base, tooltip loader)

	cpTooltipGetDimensions( element, cpTooltipBaseDimensions );
	cpTooltipGetDimensions( cpTooltipLoader, cpTooltipLoaderDimensions );
	
	// convert base y dimension if no ajax
	
	if(id==0 && cpTooltipConfig['TooltipVerticalCorrection']!=0){
		cpTooltipBaseDimensions['y'] = cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipVerticalCorrection'];
	}
	else if(id == 0){
		cpTooltipBaseDimensions['y'] = cpTooltipBaseDimensions['y'] + 115;
	}

	//alert(cpTooltipBaseDimensions['x'] + ", " + cpTooltipLoader.offsetTop + ", " +cpTooltipBaseDimensions['width'] + ", " +cpTooltipBaseDimensions['height']);

	// calculate tooltip orientation
	
	if(cpTooltipConfig['halfFlip'] == true){
		if ( (cpTooltipBaseDimensions['x']) > (document.body.offsetWidth / 2) - ( (id==0)?80:0 ) ) cpTooltipOrientation = 0;
		else cpTooltipOrientation = 1;
	}
	else{
		if ( (cpTooltipBaseDimensions['x'] + cpTooltipBaseDimensions['width'] + cpTooltip.offsetWidth + cpTooltipConfig['horizontalMargin']) > document.body.offsetWidth ) cpTooltipOrientation = 0;
		else cpTooltipOrientation = 1;
	}

	// calculate dimensions, position and show tooltip loader

		// calculate x
		if(cpTooltipOrientation>0){
			cpTooltipLoaderDimensions['x'] = cpTooltipBaseDimensions['x'] + cpTooltipBaseDimensions['width'] + cpTooltipConfig['horizontalMargin'];
		}
		else{
			cpTooltipLoaderDimensions['x'] = cpTooltipBaseDimensions['x'] - cpTooltipLoaderDimensions['width'] - cpTooltipConfig['horizontalMargin'] + cpTooltipConfig['flippedHorizontalMargin'];
		}
		
		// calculate y
		if(cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipLoaderVerticalOffset'] + cpTooltipLoaderDimensions['height'] > cpTooltipBodyScrollTop + cpTooltipBrowserHeight) cpTooltipLoaderDimensions['y'] = cpTooltipBodyScrollTop + cpTooltipBrowserHeight - cpTooltipLoaderDimensions['height'];
		else cpTooltipLoaderDimensions['y'] = cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipLoaderVerticalOffset'];
		if(cpTooltipLoaderDimensions['y'] < cpTooltipBodyScrollTop) cpTooltipLoaderDimensions['y'] = cpTooltipBodyScrollTop;
		
		// move tooltip pointer
		if(cpTooltipOrientation>0){
			cpTooltipPointer.src = cpTooltipConfig['TooltipPointerSrcLeft'];
			cpTooltipPointer.style.left = (cpTooltipLoaderDimensions['x'] - cpTooltipConfig['TooltipPointerWidth'] + cpTooltipConfig['TooltipPointerHorizontalOffset']) + "px";
		}
		else{
			cpTooltipPointer.src = cpTooltipConfig['TooltipPointerSrcRight'];
			cpTooltipPointer.style.left = (cpTooltipLoaderDimensions['x'] + cpTooltipLoaderDimensions['width'] - cpTooltipConfig['TooltipPointerHorizontalOffset']) + "px";			
		}
		
		if(cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipPointerHeight'] + cpTooltipConfig['TooltipPointerVerticalOffset'] > cpTooltipBodyScrollTop + cpTooltipBrowserHeight) cpTooltipPointer.style.top = (cpTooltipBodyScrollTop + cpTooltipBrowserHeight - cpTooltipConfig['TooltipPointerHeight']) + "px";
		else if (cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipPointerVerticalOffset'] < cpTooltipBodyScrollTop) cpTooltipPointer.style.top = cpTooltipBodyScrollTop + "px";
		else cpTooltipPointer.style.top = (cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipPointerVerticalOffset']) + "px";
		
		// move tooltip 
		cpTooltipLoader.style.left = cpTooltipLoaderDimensions['x'] + "px";
		cpTooltipLoader.style.top = cpTooltipLoaderDimensions['y'] + "px";
		
		// show tooltip loader and pointer
		cpTooltipLoader.style.visibility = "visible";
		cpTooltipLoaderImage.style.visibility = "visible";
		cpTooltipPointer.style.visibility = "visible";
		
	// get content (AJAX)
	//cpTooltipGetContent( element, id );
	cpTooltipElementReference = element;
	cpTooltipDelayTimeoutId = setTimeout("cpTooltipGetContent("+id+")", 800);
	
}

function cpTooltipShowContinue(){
        if(cpTooltipFlag == false) {cpTooltipHide();} // ---------------  ***
	if(document.getElementById("cpTooltipImg")){
		document.getElementById("cpTooltipImg").style.width = "40px";
		document.getElementById("cpTooltipImg").style.width = "100%";	
		document.getElementById("cpTooltipImg").style.height = "40px";
		document.getElementById("cpTooltipImg").style.height = "auto";
	}
		
	// get dimensions (tooltip)
	/*
	document.getElementById("dataDisplayerInfo2").innerHTML = "";
	document.getElementById("dataDisplayerInfo3").innerHTML = "";
	var tw, th;
	if(document.getElementById("cpTooltipImg")){
		tw = document.getElementById("cpTooltipImg").offsetWidth;
		th = document.getElementById("cpTooltipImg").offsetHeight;
		document.getElementById("dataDisplayerInfo2").innerHTML = "width: " + tw + "px; height: " + th + "px;";
	}
	*/
	
	cpTooltipGetDimensions( cpTooltip, cpTooltipDimensions );

	if (cpTooltipDimensions['height']<52){
		cpTooltipHide();
                cpTooltipShow( cpTooltipElement, cpTooltipId);
                //setTimeout("cpTooltipShow( "+cpTooltipElement+", "+cpTooltipId+" )", 100);
		return false;
	}

	// calculate tooltip dimensions and offset
	
		// calculate x
		if(cpTooltipOrientation>0){
			cpTooltipDimensions['x'] = cpTooltipBaseDimensions['x'] + cpTooltipBaseDimensions['width'] + cpTooltipConfig['horizontalMargin'];
		}
		else{
			cpTooltipDimensions['x'] = cpTooltipBaseDimensions['x'] - cpTooltipDimensions['width'] - cpTooltipConfig['horizontalMargin'] + cpTooltipConfig['flippedHorizontalMargin'];
		}	

		// calculate y
		if(cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipVerticalOffset'] > cpTooltipBodyScrollTop + cpTooltipBrowserHeight) cpTooltipDimensions['y'] = cpTooltipBodyScrollTop + cpTooltipBrowserHeight - cpTooltipDimensions['height'];
		else cpTooltipDimensions['y'] = cpTooltipBaseDimensions['y'] + cpTooltipConfig['TooltipVerticalOffset'] - cpTooltipDimensions['height'];
		if (cpTooltipDimensions['y'] < cpTooltipBodyScrollTop) cpTooltipDimensions['y'] = cpTooltipBodyScrollTop;

	// hide subcontainer and start animate tooltip
	cpTooltipSubcontainer.style.display = "none";
	//setTimeout("cpTooltipStartAnimate()", 10);
	cpTooltipStartAnimate();

}

function cpTooltipStartAnimate(){
        if(cpTooltipFlag == false) {cpTooltipHide();} // ---------------  ***
	// calculate tooltip fixed x
	if (cpTooltipOrientation>0) cpTooltipFixedX = cpTooltipLoaderDimensions['x'];
	else cpTooltipFixedX = cpTooltipLoaderDimensions['x'] + cpTooltipLoaderDimensions['width'];
	
	// animate
	cpTooltipLoaderImage.style.visibility = "hidden";
	cpTooltipAnimation();
}

function cpTooltipAnimation(){
        if(cpTooltipFlag == false) {cpTooltipHide();} // ---------------  ***

	var x, y, width, height;
	
	// height
	height = parseInt( cpTooltipDimensions['height'] -  ((cpTooltipDimensions['height'] - cpTooltipLoader.offsetHeight) * cpTooltipConfig['TooltipAnimationDelay']));
	
	// width
	width = parseInt( cpTooltipDimensions['width'] -  ((cpTooltipDimensions['width'] - cpTooltipLoader.offsetWidth) * cpTooltipConfig['TooltipAnimationDelay']) );

	// y
	y = parseInt(cpTooltipDimensions['y'] - ((cpTooltipDimensions['y'] - cpTooltipLoader.offsetTop) * cpTooltipConfig['TooltipAnimationDelay'] ));
	
	// x
	if(cpTooltipOrientation>0){
		x = cpTooltipFixedX;
	}
	else{
		x = cpTooltipFixedX - width - cpTooltipBrowserBorderOffset;
	}
	
	
	
	//height = y - parseInt(tempTooltipBottom + ( (tempTooltipBottom - tempTooltipLoaderBottom)*cpTooltipConfig['TooltipAnimationDelay'] ) );
	
	cpTooltipLoader.style.left = x + "px";
	cpTooltipLoader.style.top = y + "px"; 
	cpTooltipLoader.style.width = width + "px";
	cpTooltipLoader.style.height = height + "px";
		
	if(y != cpTooltipDimensions['y']){
		cpTooltipTimeoutId = setTimeout("cpTooltipAnimation()", 30);
	}
	else if(cpTooltipFlag == true){
		// show tooltip
		cpTooltipSubcontainer.style.display = "block";
		
		cpTooltip.style.left = cpTooltipDimensions['x'] + "px";
		cpTooltip.style.top = cpTooltipDimensions['y'] + "px";
		
		cpTooltip.style.visibility = "visible";
		cpTooltipLoaderImage.style.visibility = "hidden";
		cpTooltipLoader.style.visibility = "hidden";

		/*
		var tw, th;
		if(document.getElementById("cpTooltipImg")){
			tw = document.getElementById("cpTooltipImg").offsetWidth;
			th = document.getElementById("cpTooltipImg").offsetHeight;
			document.getElementById("dataDisplayerInfo3").innerHTML = "width: " + tw + "px; height: " + th + "px;";
		}	
		*/	
		
	}
}

function cpTooltipHide(){
	if(cpTooltipDelayTimeoutId) clearTimeout(cpTooltipDelayTimeoutId);
	clearTimeout(cpTooltipTimeoutId);
	cpTooltipFlag = false;
	cpTooltip.style.visibility = "hidden";
	cpTooltip.style.top = "0"; 
	cpTooltip.style.left = "0";
	cpTooltipLoader.style.visibility = "hidden";
	cpTooltipLoaderImage.style.visibility = "hidden";
	cpTooltipPointer.style.visibility = "hidden";
	cpTooltipLoader.style.top = "0"; 
	cpTooltipLoader.style.left = "0";
	cpTooltipPointer.style.top = "0"; 
	cpTooltipPointer.style.left = "0";	
	cpTooltipDimensions['x'] = cpTooltipDimensions['y'] = cpTooltipDimensions['width'] = cpTooltipDimensions['height'] = 0;
	cpTooltipBaseDimensions['x'] = cpTooltipBaseDimensions['y'] = cpTooltipBaseDimensions['width'] = cpTooltipBaseDimensions['height'] = 0;
}

//function cpTooltipGetContent( element, id ){
function cpTooltipGetContent( id ){
	element = cpTooltipElementReference;
	if(cpTooltipFlag == false) {cpTooltipHide();} // ---------------  ***
	// AJAX query and response
	
	// on success
	{
		cpTooltipSubcontainer.style.display = "block";
		
		var tempData = new Array();
		
		// AJAX or BUFFER
		if ( id > 0 ) tempData = chett.getValue(id);
		else tempData = cpTooltipBuffer;
		
		document.getElementById("cpTooltipTitle").innerHTML = tempData['title'];
		document.getElementById("cpTooltipDescription").innerHTML = tempData['desc'];
		document.getElementById("cpTooltipHour").innerHTML = tempData['hour'];
		document.getElementById("cpTooltipDate").innerHTML = tempData['datetv'];	

		if(tempData['picture'] == ""){
			document.getElementById("cpTooltipImage").style.display = "none";
			document.getElementById("cpTooltipImage").innerHTML = "";
			cpTooltipShowContinue();
		}
		else {
			var tempHtml = "<img src=\"" +tempData['picture']+ "\" onload=\"cpTooltipShowContinue()\" class=\"cpTooltipImage\" id=\"cpTooltipImg\">";
			document.getElementById("cpTooltipImage").style.display = "block";
			document.getElementById("cpTooltipImage").innerHTML = tempHtml;
		}
	}
	// on error 
	// {
	//		cpTooltipHide();
	// }
}


function cpTooltipGetDimensions( element, DimensionsArray ){
	DimensionsArray['x'] = cpTooltipfindPosX(element); //element.offsetLeft;
	DimensionsArray['y'] = cpTooltipfindPosY(element); //element.offsetTop;
	DimensionsArray['width'] = element.offsetWidth;
	DimensionsArray['height'] = element.offsetHeight;
}

function cpTooltipfindPosX(obj){
 var posLeft = 0;
 if(obj.offsetParent){
 while( true ){
 posLeft += obj.offsetLeft;
 if(!obj.offsetParent){
 break;
 }
 obj = obj.offsetParent;
 }
 }else if(obj.x){
 posLeft += obj.x;
 }

 return posLeft;
}

function cpTooltipfindPosY(obj){
 var cur = 0;
 if(obj.offsetParent)
 while( true ){
 cur += obj.offsetTop;
 if(!obj.offsetParent)
 break;
 obj = obj.offsetParent;
 }
 else if(obj.y)
 cur += obj.y;
 return cur;
}


function moveDisplayer(){
	var cpTooltipBodyScrollTop = document.body.scrollTop;
	if (cpTooltipBodyScrollTop == 0){
	    if (window.pageYOffset) cpTooltipBodyScrollTop = window.pageYOffset;
	    else cpTooltipBodyScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
	}
	document.getElementById("dataDisplayer").style.top = cpTooltipBodyScrollTop + "px";

	// main elements

	var h = "";
	
	h += "<strong>cpTooltipBodyScrollTop</strong><br>"
	h += "y: " + cpTooltipBodyScrollTop + "<br>";
	h += "<br>";

	h += "<strong>cpTooltipLoader (offset)</strong><br>"
	h += "x: " + cpTooltipLoader.offsetLeft + "<br>";
	h += "y: " + cpTooltipLoader.offsetTop + "<br>";
	h += "width: " + cpTooltipLoader.offsetWidth + "<br>";
	h += "height: " + cpTooltipLoader.offsetHeight + "<br>";
	h += "<br>";
	
	h += "<strong>cpTooltipLoader (measure dimensions)</strong><br>"
	h += "x: " + cpTooltipLoaderDimensions['x'] + "<br>";
	h += "y: " + cpTooltipLoaderDimensions['y'] + "<br>";
	h += "width: " + cpTooltipLoaderDimensions['width'] + "<br>";
	h += "height: " + cpTooltipLoaderDimensions['height'] + "<br>";
	h += "<br>";	
	
	
	h += "<strong>cpTooltip (offset)</strong><br>"
	h += "x: " + cpTooltip.offsetLeft + "<br>";
	h += "y: " + cpTooltip.offsetTop + "<br>";
	h += "width: " + cpTooltip.offsetWidth + "<br>";
	h += "height: " + cpTooltip.offsetHeight + "<br>";
	h += "<br>";	
	
	h += "<strong>cpTooltip (measure dimensions)</strong><br>"
	h += "x: " + cpTooltipDimensions['x'] + "<br>";
	h += "y: " + cpTooltipDimensions['y'] + "<br>";
	h += "width: " + cpTooltipDimensions['width'] + "<br>";
	h += "height: " + cpTooltipDimensions['height'] + "<br>";
	h += "<br>";		
	
	document.getElementById("dataDisplayerInfo1").innerHTML = h;
}
