/*
* semanticTable-Script von pfirsichmelba.de // Alexander Farkas <a.farkas@pfirsichmelba.de>
*
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
* 
* Bei guten Verbesserungen/öffentlichem Einsatz wäre ich für eine kurze Mail mit Link dankbar.
*/
/**
 * @param {string} _semTableselector CSS-Selektor der Tabelle
 * @param {string} $settings Optionen nach dem Muster Option:"Wert";
*/
function semanticTable (_semTableselector,$settings) {
	var $settings = $settings || this;
	this.showsTip = $settings.showsTip || "1";
	this.colorizecol = $settings.colorizecol || "2";
	this.comparehead = $settings.comparehead || "Zum Vergleich: ";
	this.calc = $settings.calc || "1";
	this.calcmethode = $settings.calcmethode || "dif";
	this.calctext = $settings.calctext || "Differenz: ";
	var _semtable = _semTableselector;
	var $objname = this;
	var _pf = parseFloat;
  	$(_semtable+' td').hover( function(e) { 
		if(this.getAttribute('headers')) {
			hovertipMouseUpdate(e);
			$objname.$show(this);
		}			
	}, function() { 
		$objname.$hide();
	} );
	this.$HeaderInfos = function($headerid){
		var _headertext = "";
			($($headerid).attr("abbr") != null && $($headerid).attr("abbr") != "") ? _headertext += $($headerid).attr("abbr")+' ' : _headertext += $($headerid).text()+' ';
		return _headertext;
	};
	this.$idIsNthChildof = function($cssid,$parentsel) {
		var $nth = "";
		$('#'+$cssid).parent($parentsel).addClass('parentcol');
		$('tr.parentcol > *').each(function(i){	
			if(this.getAttribute('id') == $cssid)		
				$nth = i+1;
		});
		$('tr.parentcol').removeClass('parentcol');
		return $nth;
	};
	this.$calcCompare = function(_comparetext,_hoverText) {
		$calccomparetext = _pf(_comparetext.replace(/\./g, "").replace(",", "."));
		$hovercomparetext = _pf(_hoverText.replace(/\./g, "").replace(",", "."));
		if(!isNaN($calccomparetext) && !isNaN($hovercomparetext) && $objname.calc != "0") {
			($objname.calcmethode == "dif") ? _calcresult = $calccomparetext - $hovercomparetext : _calcresult = Math.round(100 / $calccomparetext * $hovercomparetext)+' %';
			_calcresult = '<div class="sTcalc">'+$objname.calctext+'<strong>'+_calcresult+'</strong></div>';
		}
		else
			_calcresult = false;
		return _calcresult;	
	};
	this.$show = function(_tdobj){
		var $tooltiptext,_compareheader,_compareheadertext,comparetext;
		var $header = _tdobj.getAttribute('headers');
		var _hoverText = $(_tdobj).text();
		$tooltiptext = "";
		_comparetext = "";
		$.each($header.split(" "), function(i){
			if($objname.showsTip == "1"){
				$tooltiptext += $objname.$HeaderInfos('#'+this);
				_compareheader = $('#'+this).attr("class");
				if(typeof _compareheader != "undefined" && _compareheader.indexOf("cw") == 0) {
					_compareheader = _compareheader.substr(2).split(" ")[0];
					if($header.indexOf(_compareheader) == "-1") {
						_compareheadertext = $objname.$HeaderInfos('#'+_compareheader);
						_comparetext = $("td[@headers="+$header.replace(this, _compareheader)+"]").text();
						_calcresult = $objname.$calcCompare(_comparetext,_hoverText);
						(_calcresult) ? _comparetext = '<div class="compare"><em>'+$objname.comparehead+'</em>'+_compareheadertext+': <strong>'+_comparetext+'</strong>'+_calcresult+'</div>' : _comparetext = "";				
					}
				}
			}
			if($objname.colorizecol > 0) {
				if($('#'+this).attr("scope") == "row")
					$('#'+this).parents("tr").addClass('rowover');
				else if($('#'+this).attr("scope") == "col" && $objname.colorizecol == "2") {
					$('#'+this).addClass('colover');
					$(_semtable+' td:nth-child('+$objname.$idIsNthChildof(this,'tr')+')').addClass('colover');
				} else {
					$('#'+this).addClass('colover');
					$(_tdobj).addClass('colover');
				}
			}
		});
		hovertipMouseY += 10;
		if($objname.showsTip == "1")
			$('body').append('<div id="TableTIP" style="position:absolute; top:'+hovertipMouseY+'px; left:'+hovertipMouseX+'px;">'+$tooltiptext+': <strong>'+_hoverText+'</strong> '+_comparetext+'</div>')
	};
	this.$hide = function(){
		$('tr.rowover').removeClass('rowover');
		$('#TableTIP').remove();
		$(_semtable+' .colover').removeClass('colover');
	};
};