// ----------------- INITIALIZATION
var pop_up_width = 300;
var mousex = 0;
var mousey = 0;
var xoffset = 0;
var yoffset = 13;
var xheaderoffset = 15;
var yheaderoffset = 5;

var need_hide = false;

// ----------------- call to layer "HintID"
var hintlayer = layer("HintID");
var hinttextlayer = layer("hinttextID");
var headerlayer = layer("headerID");

// ----------------- IMPLEMENTATION
function hint(e, ref, hint_id, lwidth, position) {
	hideHintID();

	//input vars check
	if( hint_id < 0 ) return false;
	if( position == null || position == '' ) position = 0;
	if( lwidth == null || lwidth == '' ) lwidth = pop_up_width;

	//resizing headerlayer, mainlayer
	document.headerimage.style.width = (lwidth-75);
	headerlayer.setClip(0, (lwidth-75), 17, 0);
	hintlayer.style.width = lwidth;

	//setting offset:
	if ( typeof position == "string") {
		if ( position == 'center' ) position = ref.offsetWidth / 2 - hintlayer.getWidth() / 2;
		else if ( position == 'right' ) position = ref.offsetWidth - hintlayer.getWidth();
		else position = 0;
	}

	//calculationg new position of layer
	var xpos = getObjX(ref)+xoffset+position;
	var ypos = getObjY(ref)+yoffset;
	if ( (getWindowWidth()-lwidth)<xpos ) xpos = getWindowWidth()-lwidth-50;

	//on document click stuff (IE only)
	need_hide = false;
	if ( isMSIE ) {
		HintID.onclick = function() {
			need_hide = false;
		}
	}
	document.onclick = function() {
		if ( need_hide ) hideHintID();
		need_hide = true;
	}

	//displaying hint
	showHintID(xpos,ypos,hints[hint_id]);
}

function showHintID(x,y,text){
	hintlayer.moveTo(x,y);
	headerlayer.moveTo(x+xheaderoffset,y+yheaderoffset);

//adding text to layer
	hinttextlayer.write(text);
	hintlayer.show();
	headerlayer.show();
}

function hideHintID(){
	document.onclick = function(){};
	headerlayer.hide();
	hintlayer.hide();
	need_hide = false;
}

function getObjX(ref){
	temp = getElementPosition(ref);
	return temp['left'];
}

function getObjY(ref){
	temp = getElementPosition(ref);
	return temp['top'];

	return ref.offsetTop;
}

function getElementPosition(elemID) {
	//var offsetTrail = document.getElementById(elemID);
	var offsetTrail = elemID;
	var offsetLeft = 0;
	var offsetTop = 0;
	while (offsetTrail) {
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if (navigator.userAgent.indexOf("Mac") != -1 &&
		typeof document.body.leftMargin != "undefined") {
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	return {left:offsetLeft, top:offsetTop};
}

function dumpProp(obj, parent, level){
	if(!level) level = 0;
	//alert(level);
	var msg = '';
	for(var i in obj){
		var color = "black";
		if(typeof obj[i] == "object") var color = "red";
		if(typeof obj[i] == "string") var color = "green";
		if(typeof obj[i] == "number") var color = "blue";
		if(parent){
			msg += parent + "." + i + "=>" + obj[i]+ '<br>';
		}else{
			msg += i + '=>' + '<font color="'+color+'">' + obj[i] + '; ' + typeof obj[i] + '<br>';
		}
		msg += '</font>';
		// If this property (i) is an object, then recursively process the object
		/* if(typeof obj[i] == "object" && i.search('parent')<0){
			//document.write('<b>'+i+'</b>'+i.search('parent')+'<br>');
			if (parent){
				dumpProp(obj[i], '<b>' + parent + "." + i + '</b>', level+1);
			}else{
				dumpProp(obj[i], '<b>' + i + '</b>', level+1);
			}
		} */
	}
	document.writeln(msg);
}