
var jc_td = new Object; // strorage object for tarif-details

function get_element_dimensions(obj_or_id) { // input: object   or   id as string  (for window -> 'window' as string!)

	var el;
	var dim = new Object;
		dim['width'] = 0;
		dim['height'] = 0;
	if(typeof(obj_or_id) == 'string') {
		if(obj_or_id == 'window') {
			var w = window;
			var dde = document.documentElement;
			var db = document.body;
			if(typeof( w.innerWidth ) == 'number' ) {
				dim.width = w.innerWidth;
				dim.height = w.innerHeight;
			} else if( dde && ( dde.clientWidth || dde.clientHeight ) ) {
				dim.width = dde.clientWidth;
				dim.height = dde.clientHeight;
			} else if( db && ( db.clientWidth || db.clientHeight ) ) {
				dim.width = db.clientWidth;
				dim.height = db.clientHeight;
			}
			return dim;
		}else {
			el = document.getElementById(obj_or_id);
		}
	}else {
		el = obj_or_id;
	}
	dim.width = el.offsetWidth;
	dim.height = el.offsetHeight;
	return dim;
}
function get_window_scroll_pos() {

	var dde = document.documentElement;
	var db = document.body;
	var w = window;
	var pos = new Object;
	pos['left'] = 0;
	pos['top'] = 0;
	if(typeof(w.pageXOffset) == 'number') {
		pos.left = w.pageXOffset;
		pos.top = w.pageYOffset;
	}else if(db && (db.scrollLeft || db.scrollTop)) {
		pos.left = db.scrollLeft;
		pos.top = db.scrollTop;
	}else if(dde && (dde.scrollLeft || dde.scrollTop)) {
		pos.left = dde.scrollLeft;
		pos.top = dde.scrollTop;
	}
	return pos;
}
function center_element(obj_or_id) {

	var el;
	var win_dim;
	var win_scroll_pos;
	if(typeof(obj_or_id) == 'string') {
		el = document.getElementById(obj_or_id);
	}else {
		el = obj_or_id;
	}
	win_dim = get_element_dimensions('window');
	win_scroll_pos = get_window_scroll_pos();
	el_dim = get_element_dimensions(el);
	el.style.left = parseInt(win_scroll_pos.left + (win_dim.width/2 - el_dim.width/2)) + 'px';
	el.style.top = parseInt(win_scroll_pos.top + (win_dim.height/2 - el_dim.height/2)) + 'px';
}
function add_to_container_absolute(html) {

	var cont_abs = document.getElementById('cont_absolute');
	cont_abs.innerHTML += html;
}
function jc_store(id,data) {

	if(!jc_td[id]) {
		jc_td[id] = data;
		return true;
	}
	return false;
}
function jc_get(id) {

	if(jc_td[id]) {
		return jc_td[id];
	}
	return false;
}
function show_dt(link_obj,id) {
	
	var d = document;
	var html;
	if(!d.getElementById('dt_layer')) {
		add_to_container_absolute('<div id="dt_layer" style="left:0px; top:0px;"></div>');
	}
	if(html = jc_get(id)) {
		show_progress();
		setTimeout(function() {write_dt(html,id);},400);
		return false;
	}else {
		var args = String(link_obj.href.match(/[^\/]+\/[^\/]+\/$/)); // args = last 2 arguments of href (aaa/bbb/)
		var url = link_obj.href.substr(0,link_obj.href.length - args.length) + 'Plain/' + args;
		if(httpRequest(url,null,write_dt,id)) {
			show_progress();
			return false;
		}
	}
	return true;
}
function write_dt(html,id) {

	jc_store(id,html);
	
	var dtl = document.getElementById('dt_layer');
	if(dtl.innerHTML != '') { // if dt not closed meanwhile
		dtl.innerHTML = html;
		// activate mouseweel-listener
		var tdti = document.getElementById('tarif_dt_i');
		if (tdti.addEventListener) {
			tdti.addEventListener('DOMMouseScroll',prevent_scroll_bubbling,false);
		}
		tdti.onmousewheel = prevent_scroll_bubbling;
	}
}
function close_dt() {

	document.getElementById('dt_layer').innerHTML = '';
}
function prevent_scroll_bubbling(e){

    var delta = 0;
    if (!e) e = window.event;

    if (e.wheelDelta) {
		delta = e.wheelDelta/120;
		if (window.opera) {
			delta = -delta;
		}
    }else if (e.detail) {
        delta = -e.detail/3;
    }
    if (delta) {
		//prevent default action & stop bubbling;
		if (e.preventDefault) {
			e.preventDefault();
		}
		if (e.stopPropagation) {
			e.stopPropagation();
		}
		e.returnValue = false;
		// scroll element (preserve default action for element)
		var border_tdti = 1;
		var speed = 40;
		var tdti = document.getElementById('tarif_dt_i');
			if(delta > 0 && delta > speed) { delta = speed } //limit delta to speed
			if(delta < 0 && delta < -speed) { delta = -speed }
		var move = speed*delta;
		if(move > 0 && move < 1) { move = 1 } //prevent small positive changes from rounding down to 0
		if(move > -1 && move < 0) { move = -1 } //prevent small  negative changes from rounding up to 0
		var new_scroll_top = tdti.scrollTop -= parseInt(move);
		//prevent out of range values
	//	if(new_scroll_top < 0) { new_scroll_top = 0; }
	//	if(new_scroll_top > tdti.scrollHeight - (tdti.offsetHeight-2*border_tdti)) { new_scroll_top = tdti.scrollHeight - (tdti.offsetHeight-2*border_tdti); }
		// scroll 
		if(tdti.scrollTop != new_scroll_top) { tdti.scrollTop = new_scroll_top; }
	}
}

function show_progress() {
	
	var dtl = document.getElementById('dt_layer');
	var html = '';
		html += '<div id="tarif_dt_o">';
		html += '<div style="text-align:right; padding-bottom:4px;"><span id="test_delta" style="border:1px solid black; font-weight:bold; background:white; cursor:pointer;" onclick="close_dt()">&nbsp;&nbsp;Fenster schliessen X&nbsp;&nbsp;</span></div>';
		html += '<div id="tarif_dt_i" style="background:white;">';
		html += '<table style="width:100%; height:100%"><tr><td style="text-align:center; vertical-align:middle;">Tarif-Details werden geladen...<br /><br /><img src="/images/loading.gif" alt=""></td></tr></table>';
		html += '</div>';
		html += '</div>';
		
	// activate onresize center dt
	window.onresize = function() { center_element('dt_layer') };
	
	dtl.style.visibility = 'hidden';
	dtl.innerHTML = html;
	center_element(dtl);
	dtl.style.visibility = 'visible';
}

