//	window.alert = function() {
//		
//	}

	function logException(msg) {
		//alert('logging exception...');
	}
	
	function logDebug(msg) {
		//alert('logging depug...');
	}
	
	function logInfo(msg) {
		
	}

	function urlToObject() {
		var url = window.location.href;
		return url.toQueryParams();
	}

	function JSONcallFuncs(obj) {
		//alert('start json');
		if(obj.call) {
			var vals = obj.call;
			var keys = Object.keys(obj.call);
			for(var i=0; i<keys.length; i++) {
				//alert('call '+keys[i]+' mit '+Object.toJSON(vals[keys[i]]));
				window[keys[i]](vals[keys[i]]);
			}
		}
	};
	
	function UpdateRow(params) {
		//alert('start updateing... ' + params);
		var prefix = params.prefix;
		//alert('prefix: '+prefix);
		var id = params.data.id;
		//alert('id: ' + id);
		var data = params.data;
		//alert('data: ' + Object.toJSON(data));
		//alert($(prefix+'-listing').tagName);
		//alert('start update row... p: '+prefix+'...i: '+id+'...d: '+data+'...');
		if($(prefix+'-listing').tagName != "TABLE") {
			//alert('no table');
			/*** element isn't a table ***/
			//alert($(prefix+'-listing').tagName);
			return false;
		} else {
			//alert('doch ne table');
		}
		//alert('res: '+$(prefix+'-listing').getElementsByClassName('item'+id)[0].innerHTML);
		var row = $(prefix+'-listing').getElementsByClassName('item'+id)[0];
		//alert('Row-TagName: '+row.tagName);
		var cols = $(prefix+'-listing').getRows();
		//alert('cols '+cols);
		/*** walk the cols ***/
		for(var i=0; i<cols; i++) {
			var key = $(prefix+'-listing').down('th').up().childElements()[i].readAttribute('abbr');
			var newVal = data[key];
			//alert('key: '+key+' - val: '+newVal);
			if(newVal != null && key != null) {
				//alert(row.childElements()[i].tagName);
				row.childElements()[i].update(newVal);
			}
		}
		//alert(i);
	}
	
	function RemoveRow(params) {
		//alert('removing row...');
		var prefix = params.prefix;
		var id = params.id;
		//alert('en');
		$(prefix+'-listing').getElementsByClassName('item'+id)[0].remove();
		//var elId = $(prefix+'-listing').getElementsByClassName('item'+id)[0].identify();
		//Effect.Fade(elId, {duration: 5.0});
		//$(prefix+'-listing').getElementsByClassName('item'+id)[0].fade();
		//alert('ende');
	}
	
	function AddRow(params) {
		logInfo('AddRow...');
		var prefix = params.prefix;
		var id = params.data.id;
		var data = params.data;
		logInfo('data: ' + Object.toJSON(data));
		var cols = $(prefix+'-listing').getRows();
		/*** create row ***/
		var tr = new Element('tr',{"class": 'item' + id});
		//alert(tr);
		//alert(tr.id);
		/*** create and add fields ***/
		for(var i=0; i<cols; i++) {
			var key = $(prefix+'-listing').down('th').up().childElements()[i].readAttribute('abbr');
			var newVal = data[key];
			//alert('key: '+key+' - val: '+newVal);
			var td_ = new Element('td');
			if(newVal != null) {
				td_.update(newVal);
			}
			tr.appendChild(td_);
		}
		//tr.childElements()[(cols-1)].update('optionen');
		/*** add row ***/
		tableAddFirstRow(prefix+'-listing', tr);
		//alert('peter');
		var popup = new PopUp();
		popup.prepare();
	}
	
	function changeForm(id) {
		
		var formaction = $(id).action;
		var elSubmitLink = new Element('a', {
										href: '#',
										id: 'ersatzlink'
									}).update('Absenden').observe('click', mach.curry(formaction, $(id)));
		Element.replace($(id).down('input[type=submit]'), elSubmitLink);
		Event.observe(id, 'submit', function() { return false;});
		$(id).action = '#';
		logInfo('Formular aendern: '+id);
	}
	function mach(url, formEl) {
			logInfo(url+' - '+formEl.serialize());
	}
	
	function tableAddFirstRow(table, rowEl) {
		if($(table).down().tagName == 'TBODY' && $(table).down(2).tagName == 'TH') {
			$(table).down(1).next().insert({before: rowEl});
		} else if($(table).down().tagName == 'THEAD') {
			$(table).down().next().down().insert({before: rowEl});
		} else {
			$(table).down().insert({top: rowEl});
		}
	}
	
	function tableDeleteRow(table, id) {
		//alert(table+': '+id);
		$(table).down('.item'+id).remove();
		var popup = new PopUp();
		popup.close();
	}
	
	function loadScriptFile(file) {
		//alert('reloading ' + file);
		var script = new Element('script', {
    		type: 'text/javascript',
    		src: 'js/' + file
    	});
		//alert('reloaded...');
    	$$('head')[0].appendChild(script);
		//alert('reloading...2...');
    }
    
    function updateListing(params) {
    	//alert(params);
    	$(params.id + '-listing').replace(params.value);
    }
    
    function dmyToTimestamp(dmyName) {
    	//alert('dmy...');
    	var d = $$('body')[0].getElementsBySelector('span.dmy select[name*='+dmyName+'_d]')[0];
    	var m = d.next('select');
    	var y = m.next('select');
    	var obj = new Date(y.value, m.value, d.value);
    	return obj;
    }
    
    function timestampToAlter(timestamp) {
    	var heute = new Date();
    	var alter = heute.getYear() - timestamp.getYear();
    	var md_heute = heute.getMonth() + "" + (heute.getDate() < 10 ? "0" + heute.getDate() : heute.getDate());
    	var md_timestamp = timestamp.getMonth() + "" + (timestamp.getDate() < 10 ? "0" + timestamp.getDate() : timestamp.getDate());
    	if(md_heute > md_timestamp) {
    		alter--;
    	}
    	return alter;
    }