$(document).ready(pntPropsExtraInfoInit);

//overload deze functie om de tooltips wel altijd te tonen
function pntShouldShowToolTipsOnFormElems() {
	return false;	
}

function pntPropsExtraInfoInit() {
	$("*[title*='header']").bind('focus mouseover', pntCreateToolTipForFormElement);
	$("*[title*='header']").bind('blur mouseout', pntRemoveAllToolTips);	
}

function pntCreateToolTipForFormElement(event) {		
	
	if (!pntShouldShowToolTipOnElement(this)) return;	
	if (pntIsDefined(this.title)) var extraInfoRec = pntGetExtraInfoArrayFromTitle(this.title);	
	if (!pntIsDefined(extraInfoRec)) var extraInfoRec = this.extraInfoRec;
	if (!pntIsDefined(extraInfoRec)) return;
	this.title='';
	this.extraInfoRec = extraInfoRec;
	var label = extraInfoRec.label;
	var info = extraInfoRec.info;
	var tooltipClass = extraInfoRec.tooltipClass;
	if (pntIsDefined(extraInfoRec.target)) {
		var target = $('#'+extraInfoRec.target).get(0);		
		if (!pntIsDefined(target)) var target = $("*[name='"+extraInfoRec.target+"']").get(0);		
	} else {
		var target = event.target;
	}
	var x,y;
	if (pntIsDefined(target)) {
		var pos = pntFindElementPosition(target);
		if (!pntIsDefined(pos)) {
			x = event.pageX;
			y = event.pageY;
		} else {
			x = pos[0];
			y = pos[1];
		}
	} else {
		x = event.pageX;
		y = event.pageY;
	}		
	pntCreateToolTip(label, info, x, y, tooltipClass);	
}

function pntShouldShowToolTipOnElement(elem) {
	
	if (pntShouldShowToolTipsOnFormElems()) return true;	
	var should = (!pntIsFormElementOrWidget(elem));	
	if (!should) pntToolTipCleanTitleTag(elem);		
	return should;	
}

function pntToolTipCleanTitleTag(elem) {
	var str = elem.title;
	if (str.length==0) return;
	elem.title = pntGetToolTipParam('body', str);
}

function pntIsFormElementOrWidget(elem) {
	var formElems = new Array('input', 'select', 'textarea');	
	var widgetClassParts = new Array('widget', 'select');	
	if (pntInArray(formElems,elem.tagName.toLowerCase())) return true;
	
	for (var i=0; i<widgetClassParts.length; i++) {
		var needle = widgetClassParts[i];		
		if (elem.className.toLowerCase().indexOf(needle)!=-1) return true;	
	}
	
	return false;
}

function pntGetExtraInfoArrayFromTitle(title) {
	var label = pntGetToolTipParam('header', title);
	var target = pntGetToolTipParam('target', title);
		
	if (label.length==0) return;
	var extraInfoRec = new Object()
	extraInfoRec.label = label;
	extraInfoRec.info = pntGetToolTipParam('body', title);
	extraInfoRec.tooltipClass = pntGetToolTipParam('tooltipClass', title);
	if (target.length>0) extraInfoRec.target = target;
	return extraInfoRec;
}

function pntGetToolTipParam(param,list) {
	var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
	var res = reg.exec(list);
	var returnvar;
	if(res)
		return res[2].replace('[[','[').replace(']]',']');
	else
		return '';
}

function pntCreateToolTip(caption, content, x, y, tooltipClass) {
	pntRemoveAllToolTips();
	var toolTipDiv = document.createElement('div');
	var captionDiv = document.createElement('div');
	var contentDiv = document.createElement('div');
	
	
	contentDiv.innerHTML = content;
	contentDiv.className = 'pntToolTipDivContent';
	captionDiv.innerHTML = caption;
	captionDiv.className = 'pntToolTipDivCaption';
	toolTipDiv.className = (tooltipClass.length==0) ? 'pntToolTipDiv' : tooltipClass;
	
	toolTipDiv.appendChild(captionDiv);
	toolTipDiv.appendChild(contentDiv);
	toolTipDiv.id = 'pntToolTipDiv';
	document.body.appendChild(toolTipDiv);
	var height = $('#pntToolTipDiv').height();
	var newY = y-height-10;	
	$('#pntToolTipDiv').css('left', x);
	$('#pntToolTipDiv').css('top', newY);
	
}

function pntRemoveAllToolTips() {	
	$('#pntToolTipDiv').remove();
}
	

