/** \file
 * JavaScript-Klasse DataTable.
 * @author "$Author: rr@nci.ch $"
 * @version "$Id: cdbal.dev_rr01.cfg.php 773 2010-06-11 22:58:47Z rr@nci.ch $"
 */

var tmp_savevalue = new Object();
 
function DataTable(rootelemid)
{
	this.eRoot=document.getElementById(rootelemid);

	// Methoden
	this.writeText=dt_writeText;
	this.removeAllChildren=dt_removeAllChildren;
	this.showDataTable=dt_showDataTable;
	this.reload=dt_reload;
	this.reorder=dt_reorder;
	this.replaceInCart=dt_replaceInCart;
	this.einkauf_updateHtml=dt_einkauf_updateHtml;
	this.fav_updateHtml=dt_fav_updateHtml;
	this.doresize=dt_doresize;
	

	// Methoden (Kundenliste)
	this.doNotShow=dt_doNotShow;

	// Attribute
	this.sOrderby='';
	this.sOrderdir='';
	this.sURL='';

	// Events
	this.ev_mousedown_show_desc=dt_nop;
	this.ev_mousedown_hide_desc=dt_nop;


	// init
//	this.writeText('Hallo Welt');
	//this.reload('');


	this.eRoot.onmousedown=EH;
	this.eRoot.onmouseover=EH;
	this.eRoot.onchange=EH;

}


/**
 * Entfernt alle Kind-Elemente vom angegebenen Element.
 * @param e Element
 */
function dt_removeAllChildren(e)
{
	if(!e) e=this.eRoot;
	while(e.hasChildNodes()) {
		var child=e.firstChild;
		e.removeChild(child);
	}
}


/**
 * Schreibt einen Text ins Root-Element. Die Tabelle wird gelöscht.
 */
function dt_writeText(sTxt)
{
	this.eRoot.innerHTML=sTxt;
}


/**
 * Lädt die Daten neu vom Server.
 * @param sNewURL Server-URL
 */
function dt_reload(sNewURL)
{
	this.removeAllChildren();
	var sURL='';
	if(!sNewURL)
	{
		sURL=this.sURL;
	} else
	{
		this.sURL=sNewURL;
		sURL=this.sURL;
	}
	if(sURL == '') return
	this.writeText('<img src="design/res/loading.gif" />');
	//var sURL='index.php?page=katalog/plain_artikelliste&id=' + id;
	if(this.sOrderby != '') sURL=sURL + '&orderby=' + this.sOrderby;
	if(this.sOrderdir != '') sURL=sURL + '&orderdir=' + this.sOrderdir;
	var http=new HTTPRequest("GET", sURL);
	http.open();
	http.httpobj.setRequestHeader('Content-Type', 'text/html; charset=UTF-8')
	http.httpobj.setRequestHeader('Accept', 'text/html')
	http.cb4=this.showDataTable;
	http.caller=this;
	http.container=this.eRoot;
	http.send();
}


/**
 * Schreibt den responseText vom http Objekt ins Root-Element.
 * @param http http-Objekt
 */
function dt_showDataTable(http)
{
//	alert(http.httpobj.responseText);
	this.removeAllChildren();
	this.writeText(http.httpobj.responseText);
	this.doresize();
}


/**
 * Setzt eine neue Sortierung und lädt die Daten neu vom Server.
 * @param sBy Order By
 * @param sDir Sortierrichtung
 */
function dt_reorder(sBy, sDir)
{
	//alert(sBy + ' / ' + sDir);
	this.sOrderby=sBy;
	this.sOrderdir=sDir;
	this.reload();
}


/**
 * No Operation.
 */
function dt_nop(s)
{
//	alert(s);
}


/**
 * Ersetzt die Menge des Artikels im angegebenen Warenkorb.
 * @param cartname Name des Warenkorbs
 * @param lineid ID der Zeile (Artikelnummer)
 * @param qty Menge
 */
function dt_replaceInCart(cartname, lineid, qty, doUpdate) {
	//top.debug_output(cartname + '/' + lineid + '/' + qty);

	if(qty == "") qty="0";
	
	var sURL="index.php/REST/cart/" + cartname + '/' + lineid + '/' + qty;
	
	var http=new HTTPRequest("PUT", sURL);
	http.open();
	http.httpobj.setRequestHeader('Content-Type', 'text/plain; charset=UTF-8')
	http.httpobj.setRequestHeader('Accept', 'text/xml')
	if( cartname == '*fav*' )
	{
		http.cb4=this.fav_updateHtml;
	}
	if( (doUpdate == 1) && (cartname == '*einkauf*') )
	{
		http.cb4=this.einkauf_updateHtml;
	}
	http.caller=this;
	http.qty=qty;
	http.lineid=lineid;
	http.cartname=cartname;
	http.container=this.eRoot;
	http.send();
}

/**
 * Aendert die HTML-Anzeige (grüne Flagge) nach erfolgtem Update der Menge
 * im Warenkorb.
 * @param http http-Objekt
 */
function dt_einkauf_updateHtml(http) {

	var lineid=http.lineid;
	var qty=http.qty;
	var target=null;

	targetrow=document.getElementById('line_' + lineid);
	//targetcell=targetrow.getElementsByTagName('TD')[1];
	target=targetrow.getElementsByTagName('INPUT')[0];
	target.value=qty;
}

/**
 * Aendert die HTML-Anzeige (grüne Flagge) nach erfolgtem Update des Fav-Status.
 * @param http http-Objekt
 */
function dt_fav_updateHtml(http) {

	var lineid=http.lineid;
	var qty=http.qty;

	if(qty == 1) { // Favorit gesetzt
		target=document.getElementById('line_' + lineid + '_favoff');
		target.src='module/katalog/img/flag_yel.png';
		target.setAttribute('id', 'line_' + lineid + '_favon');
	}
	if(qty == 0) { // Favorit geloescht
		target=document.getElementById('line_' + lineid + '_favon');
		target.src='module/katalog/img/flag_transparent.png';
		target.setAttribute('id', 'line_' + lineid + '_favoff');
	}
}


/**
 * Kunde in der Manuellen History nicht anzeigen.
 * @param kundennummer Kundennummer
 */
function dt_doNotShow(kundennummer)
{
	var sURL="index.php/REST/kunde/" + kundennummer + '/histman_del.do';
	var http=new HTTPRequest("PUT", sURL);
	http.open();
	http.httpobj.setRequestHeader('Content-Type', 'text/plain; charset=UTF-8')
	http.httpobj.setRequestHeader('Accept', 'text/xml')
	http.caller=this;
	http.lineid=kundennummer;
	http.container=this.eRoot;
	http.send();
}



/**
 * Beschreibung ausblenden.
 */
function delDescription(lineid) {
	var el_desc=document.getElementById('line_' + lineid + '_desc');
	var el_img_div=document.getElementById('line_' + lineid + '_imagediv');
	
	// Img-Element entfernen
	if(el_img_div)
	{
		eP=el_img_div.parentNode;
		eP.removeChild(el_img_div);
	}

	// Alle Child-Objekte der Beschreibung entfernen
	while(el_desc.hasChildNodes()) {
		var child=el_desc.firstChild;
		el_desc.removeChild(child);
	}
}

/**
 * Grösse (in Pixel) der Tabelle berechnen und setzen.
 */
function dt_doresize()
{
	
	var hoehe=400;
	if (window.innerHeight)
	{
		hoehe=window.innerHeight;
	} else
	if (document.body && document.body.offsetHeight)
	{
		hoehe=document.body.offsetHeight;
	}
	if(hoehe < 650){hoehe = 650;}
		
	var spalte2=document.getElementById('spalte2');
	var content=document.getElementById('content');
	var spalte2zeile2=document.getElementById('spalte2zeile2');
	
	var artikelliste=document.getElementById('artikelliste');
	var orderliste=document.getElementById('orderliste');
	var kategorienbaum=document.getElementById('kategorienbaum');
	var warenkorb=document.getElementById('warenkorb');
	
	if(warenkorb){		
		hoehe = hoehe - warenkorb.offsetTop - warenkorb.offsetHeight; 
		//alert(warenkorb.offsetHeight);
	}

	if(artikelliste && spalte2zeile2 && content) artikelliste.style.height=(hoehe - spalte2zeile2.offsetTop - content.offsetTop - 70) + "px";
	if(orderliste && spalte2zeile2 && content) orderliste.style.height=(hoehe - spalte2zeile2.offsetTop - content.offsetTop - 70) + "px";
	if(kategorienbaum && content) kategorienbaum.style.height=(hoehe - content.offsetTop - 73) + "px";
}

function hidedesc()
{
	var hide_desc_button=document.getElementById('hide_desc_button');
	if(hide_desc_button) hide_desc_button.style.display='none';
	var verstecktezeile=document.getElementById('spalte2zeile1');
	if(verstecktezeile) verstecktezeile.style.display='none';
	dt_doresize();
}



/**
 * Event Handler.
 * @param e Event Objekt
 * @returns {Boolean}
 */
function EH(e) {
	// event-Object holen

	if(!e) var e=window.event || arguments.callee.caller.arguments[0];

	// target-Element holen
	var target;
	if (e.target) target = e.target;
	else if (e.srcElement) target = e.srcElement;
	if (target.nodeType == 3) // defeat Safari bug
		target = target.parentNode;


	// Artikelnummer herausfinden
	var lineid='';
	var elem=target;
	while( (elem.tagName) && (lineid == '') ) {
		if(elem.tagName == 'TR') lineid=elem.id;
		elem=elem.parentNode;
	}
	
	lineid=isNaN(parseInt(lineid))?lineid:parseInt(lineid);

	if( typeof(lineid) == 'string' ) {
		var s=lineid.split("_");
		lineid=parseInt(s[1]);
	} else {
		lineid=parseInt(lineid);
	}
	var command=e.type + '_' + target.getAttribute('name');
	

	//alert(target.tagName);

	// Line-ID und Command herauslesen (NEW)
	if(target.id) {
		var id=target.id
		var arr=id.split('_');
		if( (arr.length >= 3) && (arr[0]=='line') ) {
			lineid=parseInt(arr[1]);
			command=e.type;
			for(i=2; i < arr.length; i++) {
				command=command + '_' + arr[i];
			}
		}
	}
	
	if( (typeof(lineid) != 'number') || isNaN(lineid) ) {
		return false;
	}
	
	//if( e.type != 'mouseover' ) alert('event\n' + 'command: ' + command + '\nlineid: ' + lineid);
	//if( e.type != 'mouseover' ) alert(target.tagName + ' / ' + target.id);;
	
	switch(command) {
		case 'mouseover_show_desc':
			target.setAttribute('title', EH_txt.msg.moreinfo);
			break;
		case 'mouseover_hide_desc':
			target.setAttribute('title', EH_txt.msg.lessinfo);
			break;
		case 'mousedown_show_desc':
			var verstecktezeile=document.getElementById('spalte2zeile1');
			if(verstecktezeile) verstecktezeile.style.display='';
			var hide_desc_button=document.getElementById('hide_desc_button');
			if(hide_desc_button) hide_desc_button.style.display='inline';

			if(cartikeldetail)
				cartikeldetail.reload('index.php/REST/artikel/artikelnummer/' + lineid + '/detail.html');
			if(coptiontable)
				coptiontable.reload('index.php/REST/artikel/artikelnummer/' + lineid + '/optionen.html');
			break;
		case 'mousedown_hide_desc':
			hidedesc();
			break;
		case 'mouseover_favon':
			target.setAttribute('title', EH_txt.msg.clicktoremfav);
			break;
		case 'mouseover_favoff':
			target.setAttribute('title', EH_txt.msg.clicktoaddfav);
			break;
		case 'mousedown_favon':
			cdatatable.replaceInCart('*fav*', lineid, 0);
			break;
		case 'mousedown_favoff':
			cdatatable.replaceInCart('*fav*', lineid, 1);
			break;
		case 'mouseover_histoff':
			target.setAttribute('title', EH_txt.msg.nohist);
			break;
		case 'click_mengeplus':
//		case 'mousedown_mengeplus':
			if(target.nextSibling.value < 1){
				document.getElementById('cartrows').innerHTML = parseInt(document.getElementById('cartrows').innerHTML) + 1;
			}
			cdatatable.replaceInCart('*einkauf*', lineid, ++target.nextSibling.value);
			break;
		case 'click_mengeminus':
//		case 'mousedown_mengeminus':
			if(target.previousSibling.value == 1){
				document.getElementById('cartrows').innerHTML = parseInt(document.getElementById('cartrows').innerHTML) - 1;
			}
			if(target.previousSibling.value > 0)
				cdatatable.replaceInCart('*einkauf*', lineid, --target.previousSibling.value);
			break;
		case 'mousedown_menge':
			tmp_savevalue[lineid] = target.value;
			break;
		case 'change_menge':
			//alert(target.value);
			//alert(tmp_savevalue[lineid]);
			if(tmp_savevalue[lineid] < 1 && target.value > 0){
				document.getElementById('cartrows').innerHTML = parseInt(document.getElementById('cartrows').innerHTML) + 1;
			}
			if(tmp_savevalue[lineid] > 0 && target.value < 1){
				document.getElementById('cartrows').innerHTML = parseInt(document.getElementById('cartrows').innerHTML) - 1;
			}
			tmp_savevalue[lineid] = target.value;
			cdatatable.replaceInCart('*einkauf*', lineid, target.value, 1);
			break;
		case 'mousedown_deleterow':
			if(document.getElementById('line_'+lineid).getElementsByTagName('input')[0].value > 0){
				document.getElementById('cartrows').innerHTML = parseInt(document.getElementById('cartrows').innerHTML) - 1;
			}
			cdatatable.replaceInCart('*einkauf*', lineid, "0", 1);
			break;
		case 'mouseover_deleterow':
			target.setAttribute('title', EH_txt.msg.loeschen);
			break;


		// EVENTS fuer Kundenliste
		case 'mousedown_histman_del':
			ckundentable.doNotShow(lineid);
			ckundentable.reload();
			break;
	
		default:
			return true;
			break;
	}
}
window.onresize=dt_doresize;



