/*** dsv5-JS (C) Stefan Mateescu / Taurus IT GmbH <stm@taurus-it.de> ***/

var dsv_globalHideLayerTimeout = 250;

function dsv_initTabElement(rel) {
	jQuery('DIV.dsv_appcontent_reiter A.tab_'+rel+'').each(function(i) {
		jQuery(this).attr('dsvreiterpos', i);
		// IE6-Umbruch FIX
		var temp = jQuery(this).children("SPAN").html().replace(/\s+/g, "&nbsp;");
		jQuery(this).children("SPAN").html(temp);
	});
	jQuery('DIV.dsv_appcontent_reiter_unten A.tab_'+rel+'').each(function(i) {
		jQuery(this).attr('dsvreiterpos', i);
	});
	jQuery('DIV.dsv_appcontent_tabPane.blatt_'+rel+'').each(function(i) {
		jQuery(this).attr('dsvreiterpos', i);
		if (jQuery(this).attr('id')=="")
			jQuery(this).attr('id', "_autoId_dsv5reiterTool_pane_"+rel+"_"+i);
	});
	jQuery('DIV.dsv_appcontent_reiter A.tab_'+rel+', DIV.dsv_appcontent_reiter_unten A.tab_'+rel+'').bind('click', function() {
		var clickedTab = jQuery(this);
		var activeTab = false;
		var clickedLowtab = false;
		var activeLowtab = false;
		if (jQuery(clickedTab).is('DIV.dsv_appcontent_reiter A')) {
			activeTab = jQuery('DIV.dsv_appcontent_reiter A.tab_'+rel+'.aktiv');
			clickedLowtab = jQuery('DIV.dsv_appcontent_reiter_unten A[dsvreiterpos='+jQuery(clickedTab).attr('dsvreiterpos')+'].tab_'+rel+'');
			activeLowtab = jQuery('DIV.dsv_appcontent_reiter_unten A.tab_'+rel+'.aktiv');
		}
		else {
			clickedLowtab = clickedTab;
			activeLowtab = jQuery('DIV.dsv_appcontent_reiter_unten A.tab_'+rel+'.aktiv');
			clickedTab = jQuery('DIV.dsv_appcontent_reiter A[dsvreiterpos='+jQuery(clickedLowtab).attr('dsvreiterpos')+'].tab_'+rel+'');
			activeTab = jQuery('DIV.dsv_appcontent_reiter A.tab_'+rel+'.aktiv');
		}
		var clickedPane = jQuery('DIV[dsvreiterpos='+jQuery(clickedTab).attr('dsvreiterpos')+'].dsv_appcontent_tabPane.blatt_'+rel+'');
		var activePane = jQuery('DIV[dsvreiterpos='+jQuery(activeTab).attr('dsvreiterpos')+'].dsv_appcontent_tabPane.blatt_'+rel+'');
		jQuery(activeTab).removeClass('aktiv');
		jQuery(clickedTab).addClass('aktiv');
		jQuery(activeLowtab).removeClass('aktiv');
		jQuery(clickedLowtab).addClass('aktiv');
		jQuery(activePane).fadeOut(200, function() {
			jQuery(clickedPane).fadeIn(200, function() {});
		});
	});
}

function dsv_toggleNavigation() {
	var actStateBig = jQuery('#dsv_appmenu_navi_gross').css('display');
	if (actStateBig=="block") {
		document.cookie = 'dsv5NaviState=closed';
		jQuery('#dsv_appmenu_navi_gross').fadeOut('fast', function() {
			jQuery('#dsv_appmenu_navi_klein').fadeIn('fast', function() {
				jQuery('#dsv_appcontent_untererContent').animate({width: '985px'}, 'fast');
			});
		});
	}
	else {
		document.cookie = 'dsv5NaviState=open';
		if (jQuery('#dsv_appcontent_untererContent').length>0) {
			jQuery('#dsv_appcontent_untererContent').animate({width: '765px'}, 'fast', function() {
				jQuery('#dsv_appmenu_navi_klein').fadeOut('fast', function() {
					jQuery('#dsv_appmenu_navi_gross').fadeIn('fast');
				});
			});
		}
		else {
			jQuery('#dsv_appmenu_navi_klein').fadeOut('fast', function() {
				jQuery('#dsv_appmenu_navi_gross').fadeIn('fast');
			});
		}
	}
}

function dsv_showAppnamebox(id, opener) {
	jQuery(id).appendTo(document);
	// determine position
	var GRACE = 5;
	var oPos = jQuery(opener).offset();
	var oWidth = jQuery(opener).outerWidth();
	var oHeight = jQuery(opener).outerHeight();
	var boxWidth = jQuery('#'+id).outerWidth();
	var boxHeight = jQuery('#'+id).outerHeight();
	var idealX = 0;
	var idealY = jQuery("#dsv_apphead_breadcrumbAussen").position().top + 35;
	jQuery('#'+id).appendTo('body');
	// iefixclass
	if (jQuery.browser.msie) {
		jQuery('#'+id).addClass('dsv_general_floatingbox_iefix');
	}
	// show
	jQuery('#'+id).css({
		position: 'absolute',
		top: idealY+'px',
		left: idealX+'px',
		zIndex: 9999,
		width: 220+'px',
		height: 70+'px',
		opacity: 0.01,
		display: 'block',
		overflow: 'hidden',
		zoom: 1
	});
	jQuery('#'+id).animate({
		width: boxWidth,
		height: boxHeight,
		opacity: 1
	}, 'fast', function() {
		if (jQuery.browser.msie) {
			jQuery('#'+id).css('opacity', 'auto')
			jQuery('#'+id).removeClass('dsv_general_floatingbox_iefix');
		}
	});
}

function dsv_showFloatingbox(id, opener) {
	// hide all others
	jQuery('DIV.dsv_general_floatingbox_outer').hide();
	// determine position
	var GRACE = 5;
	var oPos = jQuery(opener).offset();
	var oWidth = jQuery(opener).outerWidth();
	var oHeight = jQuery(opener).outerHeight();
	var boxWidth = jQuery('#'+id).outerWidth();
	var boxHeight = jQuery('#'+id).outerHeight();
	var idealX = parseInt(oPos.left + oWidth/2 - boxWidth/2);
	var idealY = parseInt(oPos.top + oHeight/2 - boxHeight/2) - 120;
	var windowWidth = jQuery(window).width();
	var windowHeight = jQuery(window).height();
	// fix determined position
	if (idealX<GRACE)
		idealX = GRACE;
	if (idealX+boxWidth+GRACE>windowWidth)
		idealX = windowWidth-boxWidth-GRACE;
	if (idealY<GRACE)
		idealY = GRACE;
	if (idealY+boxHeight+GRACE>windowHeight-120+jQuery(document).scrollTop())
		idealY = windowHeight-120+jQuery(document).scrollTop()-boxHeight-GRACE;
	// iefixclass
	if (jQuery.browser.msie) {
		jQuery('#'+id).addClass('dsv_general_floatingbox_iefix');
	}
	// moving
	jQuery('#'+id).attr('moving', '1');
	// show
	jQuery('#'+id).css({
		top: idealY+'px',
		left: idealX+'px'
	});
	jQuery('#'+id).fadeIn(function() {
		if (jQuery.browser.msie) {
			jQuery('#'+id).removeClass('dsv_general_floatingbox_iefix');
		}
		jQuery('#'+id).attr('moving', '0');
	});
}

function dsv_mouseoverFloatingbox(boxElement) {
	if (jQuery(boxElement).attr('moving')=="1")
		return;
	if (typeof jQuery(boxElement).attr('hidetimeout') == "undefined")
		jQuery(boxElement).attr('hidetimeout', '-1');
	if (jQuery(boxElement).attr('hidetimeout')!='-1') {
		clearTimeout(jQuery(boxElement).attr('hidetimeout'));
		jQuery(boxElement).attr('hidetimeout', '-1');
	}
}

function dsv_mouseoutFloatingbox(boxElement) {
	if (jQuery(boxElement).attr('moving')=="1")
		return;
	if (typeof jQuery(boxElement).attr('hidetimeout') == "undefined")
		jQuery(boxElement).attr('hidetimeout', '-1');
	if (jQuery(boxElement).attr('hidetimeout')!='-1')
		return;
	jQuery(boxElement).attr('hidetimeout', setTimeout(function() { dsv_hideFloatingbox(boxElement); }, dsv_globalHideLayerTimeout));
}

function dsv_hideFloatingbox(boxElement) {
	if (jQuery(boxElement).attr('moving')=="1")
		return;
	jQuery(boxElement).attr('hidetimeout', '-1');
	jQuery(boxElement).attr('moving', '1');
	// iefixclass
	if (jQuery.browser.msie) {
		jQuery(boxElement).addClass('dsv_general_floatingbox_iefix');
	}
	jQuery(boxElement).fadeOut(function() {
		if (jQuery.browser.msie) {
			jQuery(boxElement).removeClass('dsv_general_floatingbox_iefix');
		}
		jQuery(boxElement).attr('moving', '0');
	});
}

function dsv_toggleSitemapElement(id, stopRecursion) {
	if (typeof stopRecursion == "undefined")
		stopRecursion = false;
	var lth = lts = "";
	if (jQuery("#dsv5sitemap__"+id+"__closed").css("display")=="block") {
		lth = "dsv5sitemap__"+id+"__closed";
		lts = "dsv5sitemap__"+id+"__open";
	}
	else {
		lth = "dsv5sitemap__"+id+"__open";
		lts = "dsv5sitemap__"+id+"__closed";
	}
	dsv_switchLayersJQ(lth, lts, 200, false, true, function () {
		jQuery('#'+lth).css('display', 'none');
		// hide another one?
		if (!stopRecursion && jQuery('#'+lts).is('DIV.dsv_appcontent_sitemap_leafElement')) {
			jQuery("DIV.dsv_appcontent_sitemap_leafElement:visible").each(function() {
				var localid = jQuery(this).children('.sitemapid').html();
				if (parseInt(localid)!=parseInt(id))
					dsv_toggleSitemapElement(localid, true);
			});
		}
	});
}

var dsv_globalScrollToTimeout = -1;
var dsv_globalScrollNoChange = 0;

function dsv_switchLayersJQ(layerToHideName, layerToShowName, duration, overflowParent, repairWidthHeightAfterAnim, callbackWhenDone) {
	// default params
	if (typeof duration == "undefined" || duration==false)
		duration = 300;
	if (typeof callbackWhenDone == "undefined")
		callbackWhenDone = false;
	if (typeof overflowParent == "undefined" || overflowParent==false)
		overflowParent = window;
	else if	(typeof overflowParent == "string")
		overflowParent = document.getElementById(overflowParent);
	if (typeof repairWidthHeightAfterAnim == "undefined")
		repairWidthHeightAfterAnim = true;
	// check+set avtivity
	if (jQuery("#"+layerToHideName).attr("stmShowHideActive")==1 || jQuery("#"+layerToShowName).attr("stmShowHideActive")==1) {
		setTimeout(function () { dsv_switchLayersJQ(layerToHideName, layerToShowName, duration, overflowParent, repairWidthHeightAfterAnim, callbackWhenDone); }, 500);
		return;
	}
	if (jQuery("#"+layerToShowName).css("display")!="none" || jQuery("#"+layerToHideName).css("display")=="none") {
		return false;
	}
	jQuery("#"+layerToHideName).attr("stmShowHideActive", "1");
	jQuery("#"+layerToShowName).attr("stmShowHideActive", "1");
	// change order in DOM
	var copyOfToShow = jQuery("#"+layerToShowName).clone();
	jQuery("#"+layerToShowName).remove()
	copyOfToShow.insertAfter(jQuery("#"+layerToHideName));
	// get all relevant sizes
	var lthWidth = jQuery("#"+layerToHideName).width();
	var lthHeight = Math.max(1, jQuery("#"+layerToHideName).height());
	var lthTempPos = jQuery('#'+layerToHideName).position();
	var lthPosX = lthTempPos.left;
	var lthPosY = lthTempPos.top;
	if (overflowParent != window) {
		lthPosX = document.getElementById(layerToHideName).offsetLeft;
		lthPosY = document.getElementById(layerToHideName).offsetTop;
	}
	var lthOverflow = jQuery("#"+layerToHideName).css("overflow");
	// prepare lts
	jQuery("#"+layerToShowName).css({
		'width': lthWidth+'px',
		'display': 'block',
		'opacity': 0.1,
		'position': 'absolute',
		'top': lthPosY+'px',
		'left': lthPosX+'px'
	});
	var ltsWidth = jQuery("#"+layerToShowName).width();
	var ltsHeight = Math.max(1, jQuery("#"+layerToShowName).height());
	var ltsOverflow = jQuery("#"+layerToShowName).css("overflow");
	dsv_initiateScrollingJQ(layerToShowName, overflowParent);
	// do the anims
	jQuery("#"+layerToHideName).css({
		'height': lthHeight+'px',
		'width': lthWidth+'px',
		'display': 'block',
		'overflow': 'hidden'
	});
	jQuery("#"+layerToShowName).css({
		'width': ltsWidth+'px',
		'height': lthHeight+'px',
		'overflow': 'hidden'
	});
	jQuery("#"+layerToHideName).animate({
		'height':ltsHeight,
		'opacity':0
	}, duration * 0.99, "linear");
	jQuery("#"+layerToShowName).animate({
		'height':ltsHeight,
		'opacity':0.99
	}, duration, "linear", function () {
		jQuery("#"+layerToHideName).css({
			'height': lthHeight+'px',
			'display': 'none',
			'overflow': lthOverflow
		});
		jQuery("#"+layerToShowName).css({
			'position': 'static',
			'display': 'block',
			'overflow': ltsOverflow,
			'opacity': 1.0
		});
		if (repairWidthHeightAfterAnim)
			dsv_repairWidthAndHeightJQ(layerToShowName);
		jQuery("#"+layerToHideName).attr("stmShowHideActive", "0");
		jQuery("#"+layerToShowName).attr("stmShowHideActive", "0");
		if (typeof callbackWhenDone == "function") {
			callbackWhenDone();
		}
	});
	return true;
}

function dsv_initiateScrollingJQ(layername, overflowParent) {
	if (typeof overflowParent == "undefined" || overflowParent==false)
		overflowParent = window;
	else if	(typeof overflowParent == "string")
		overflowParent = document.getElementById(overflowParent);
	var tmp = jQuery('#'+layername).offset();
	var divTop = tmp.top;
	var divLeft = tmp.left;

	var divHeight = jQuery("#"+layername).height();
	var wndHeight = jQuery(overflowParent).height();
	var wndOffsetY = jQuery(overflowParent).scrollTop();
	var divWidth = jQuery("#"+layername).width();
	var wndWidth = jQuery(overflowParent).width();
	var wndOffsetX = jQuery(overflowParent).scrollLeft();

	var newScrollTop = wndOffsetY;
	var newScrollLeft = wndOffsetX;

	if (divHeight > wndHeight-20) {
		newScrollTop = divTop - 10;
	}
	else if (divTop < wndOffsetY-10) {
		newScrollTop = wndOffsetY - 10;
	}
	else if (divTop-wndOffsetY+divHeight > wndHeight) {
		var offOffset = divTop-wndOffsetY+divHeight - wndHeight + 10;
		newScrollTop = wndOffsetY+offOffset;
	}

	if (divWidth > wndWidth-20) {
		newScrollLeft = divLeft - 10;
	}
	else if (divLeft < wndOffsetX-10) {
		newScrollLeft = wndOffsetX - 10;
	}
	else if (divLeft-wndOffsetX+divWidth > wndWidth) {
		var offOffset = divLeft-wndOffsetX+divWidth - wndWidth + 10;
		newScrollLeft = wndOffsetX+offOffset;
	}

	if (newScrollTop!=wndOffsetY || newScrollLeft!=wndOffsetX) {
		dsv_scrollToJQ(newScrollLeft, newScrollTop, overflowParent);
	}
}

function dsv_scrollToJQ(x, y, overflowParent, oldX, oldY) {
	if (dsv_globalScrollToTimeout != -1) {
		clearTimeout(dsv_globalScrollToTimeout);
		dsv_globalScrollToTimeout = -1;
	}
	if (typeof overflowParent == "undefined" || overflowParent==false)
		overflowParent = window;
	else if	(typeof overflowParent == "string")
		overflowParent = document.getElementById(overflowParent);
	var wndStartX = jQuery(overflowParent).scrollLeft();
	var wndStartY = jQuery(overflowParent).scrollTop();
	var diffX = x-wndStartX;
	var diffY = y-wndStartY;
	if (typeof oldX != "undefined" && typeof oldY != "undefined") {
		if (oldX==wndStartX && oldY==wndStartY) {
			dsv_globalScrollNoChange++;
		}
	}
	if (dsv_globalScrollNoChange>20 || (diffX==0 && diffY==0)) {
		dsv_globalScrollNoChange = 0;
		dsv_globalScrollToTimeout = -1;
		return;
	}
	var stepX = dsv_getScrollStep(diffX);
	var stepY = dsv_getScrollStep(diffY);
	if (diffX!=0)
		jQuery(overflowParent).scrollLeft(wndStartX+stepX);
	if (diffY!=0)
		jQuery(overflowParent).scrollTop(wndStartY+stepY);

	if (dsv_globalScrollToTimeout != -1)
		clearTimeout(dsv_globalScrollToTimeout);
	dsv_globalScrollToTimeout = setTimeout(function() { dsv_scrollToJQ(x, y, overflowParent, wndStartX, wndStartY); }, 30);
}

function dsv_repairWidthAndHeightJQ(layername) {
	jQuery("#"+layername).css({
		'width': 'auto',
		'height': 'auto'
	});
}

function dsv_getScrollStep(diff) {
	var negative = (diff<0)?-1:1;
	if (diff==0)
		return 0;
	if (Math.abs(diff)<4)
		return 1*negative;
	if (Math.abs(diff)<8)
		return 2*negative;
	if (Math.abs(diff)<12)
		return 4*negative;
	if (Math.abs(diff)<25)
		return 6*negative;
	if (Math.abs(diff)<50)
		return 10*negative;
	return 20*negative;
}

function dsv_readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function dsv_initApplicationNavigation() {
	if (dsv_readCookie("dsv5NaviState")=="closed") {
		document.getElementById('dsv_appmenu_navi_gross').style.display = 'none';
		document.getElementById('dsv_appmenu_navi_klein').style.display = 'block';
		document.getElementById('dsv_appcontent_untererContent').style.width = '985px';
	}
	else {
		document.getElementById('dsv_appmenu_navi_gross').style.display = 'block';
		document.getElementById('dsv_appmenu_navi_klein').style.display = 'none';
		document.getElementById('dsv_appcontent_untererContent').style.width = '765px';
	}

}

