//globals
var tipContent = '';
var tipHeading = '';
var tipPopUp = '';
var commentID = '';
thisLastLink=new Object();
thisLastLink.lang = 0; 
// add event handlers
function addEvent( obj, type, fn ){
    if (obj.addEventListener){
        obj.addEventListener( type, fn, false );
    }else if (obj.attachEvent){
        obj["e"+type+fn] = fn;
        obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
        obj.attachEvent( "on"+type, obj[type+fn] );
    }
}  
// add the tooltip to the doc and event handlers
function setCommentTips(){
    //create the comment tool tip div and add to document
    var commentToolTip = document.createElement("DIV");
    commentToolTip.id = "commentTipPopUp";
    commentToolTip.style.display ='none';
    commentToolTip.innerHTML = "<div id='tiptip'></div><div id='commentTipHeading'>&raquo; laden...</div>";
	addEvent(commentToolTip, 'mouseout', hideTip);
    //create a div to hold the content
    var tipContentArea = document.createElement("DIV");
    tipContentArea.id = "commentTipContent";
	tipContentArea.style.display ='none';
    commentToolTip.appendChild(tipContentArea);
    //add to the body
    var bodyRef = document.getElementsByTagName("BODY")[0];
	//bodyRef.parentNode.insertBefore(commentToolTip, bodyRef.firstSibling);
	bodyRef.appendChild(commentToolTip);
    //add events to all spans with class "commentTipWrapper"
    var allA = document.getElementsByTagName("SPAN");
    for(var i=0; i<allA.length; i++){
        if(allA[i].className=="commentTipWrapper"){
            addEvent(allA[i], 'mouseover', showTip);
            addEvent(allA[i], 'mouseout', hideTip);
        }
    }
	tipPopUp = document.getElementById("commentTipPopUp");
	tipHeading = document.getElementById('commentTipHeading');
	tipContent = document.getElementById("commentTipContent");
}   
//get the position of the element
//offsetTop and offsetLeft properties tell you the distance between the top of an element and the top of its offsetParent
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return [curleft,curtop];
	}
} 
//showtip
function showTip(event){
	// get/set commentID
	commentID = this.lang;

	//check to see if we are a new link or same one
	if(thisLastLink.lang != commentID)
	{ 
		//reset the text from the last load
		tipHeading.innerHTML = "&raquo; lade...";
		tipContent.innerHTML = "";
		tipContent.style.display ='none';
		// make ajax call
    	var requestURL = "/wp-content/plugins/comment-info-tip/get-comment-info-tip.php?commentID="+commentID;
		
		oAjaxInterface.mInit( "GET", requestURL,
							function( response ) {
								ajaxSuccessResults( response );
							}
						);
	}
	
	thisLastLink = this;
	//move tip into position and show
    var xPos = findPos(this);
    var linkWidth =(xPos[0]) + this.offsetWidth+10 +'px';
    tipPopUp.style.left =linkWidth;
    tipPopUp.style.top =(xPos[1]) +'px';
    tipPopUp.style.display ='block';
}
function hideTip(e){
	//http://www.quirksmode.org/js/events_mouse.html
	if (!e) var e = window.event;
	var relTarg = e.relatedTarget || e.toElement;
	//mka look at below
  	while (relTarg.parentNode) {
    	if (relTarg.id === 'commentTipPopUp')
		{ 
			return;
		} else {
			relTarg = relTarg.parentNode;
		}
  	}
    tipPopUp.style.display ='none';
}
 
addEvent(window, 'load', setCommentTips);

// from dustindiaz
// http://www.dustindiaz.com/faster-ajax/
var oAjaxInterface = {
	mInit : function ( method, uri, callback, postData, formular ) {
		var http = oAjaxInterface.mGetXHR();
		http.open( method, uri, true );
		if(formular)
			http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		oAjaxInterface.mHandleReadyState( http, callback );
		http.send( postData || null );
		return http;
	},
	mHandleReadyState : function ( http, callback ) {
		http.onreadystatechange = function(){
			if ( http && http.readyState == 4 && http.status == 200 ) {
				if ( callback ) {
					callback( http );
				}
			}
		};
	},
	mGetXHR : function () {
		var http;
		try {
			http = new XMLHttpRequest;
			oAjaxInterface.mGetXHR = function() {
				return new XMLHttpRequest;
			}
		} catch(e) {
			var msxml = [
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP"
			];
			for ( var i=0, len = msxml.length; i < len;   i ) {
				try {
					http = new ActiveXObject( msxml[i] );
					oAjaxInterface.mGetXHR = function() {
						return new ActiveXObject( msxml[i] );
					}
					break;
				} catch(e) {}
			}
		}
		return http;
	}
}

//ajax success
function ajaxSuccessResults(o){
	var responseTxt = o.responseText;
	var splitResponse = responseTxt.split("~|~");
	var displayResponse = "";
	
	if(splitResponse[0]=="pingback")
	{
		displayResponse = "&raquo; Dies ist ein Pingback";	 
		tipContent.innerHTML =  "";
	} else if (splitResponse[0]=="trackback") {
		displayResponse = "&raquo; Dies ist ein Trackback";	 
		tipContent.innerHTML =  "";	
	} else {
		if(splitResponse[1]==1)
		{
			displayResponse = "&raquo; hat bisher <strong> ein </strong> Kommentar verfasst.";	 
		} else {
			displayResponse = "&raquo; hat bisher <strong>"+ splitResponse[1] +"</strong> Kommentare verfassst.";
			tipContent.innerHTML =  splitResponse[0];
			tipContent.style.display = 'block';
		}
	}
	tipHeading.innerHTML = displayResponse;	
}