//Drag and Drop
var objekt = null;

var cmx_flyout = null;
var cmx_soll_left = 0;
var cmx_soll_top = 0;
var cmx_speed_x = 1;
var cmx_speed_y = 1;
var cmx_flyout_height = 0;
var cmx_flyout_width = 0;
var cmx_flyoutopacity = 0;
var cmx_flyout_speeddelay = 2;

var dragx = 0;
var dragy = 0;
var posx = 0;
var posy = 0;
var cmx_offsetleft = 0;
var cmx_offsettop = 0;
var dragging = false;
var picturedrag = false;
var flyoutdrag = false;
var pic_width = 100;
var pic_height = 100;
var dir;

    document.onmousemove = drag;
    document.onmouseup = dragstop;
function dragstart(ereignis, element, direction)
{
	dir = direction;
	dragging = true;
	objekt = element;
	//offset des objekts relativ zum dokument
	var tmpx, tmpy;
	var Eltern = objekt.offsetParent;
	if(window.event)
	{
		//für IE
		tmpx = window.event.offsetX;
		tmpy = window.event.offsetY;

		cmx_offsetleft = 0;
		cmx_offsettop = 0;
		while (Eltern)
		{
			cmx_offsetleft = cmx_offsetleft + Eltern.offsetLeft;
			cmx_offsettop = cmx_offsettop + Eltern.offsetTop;
			Eltern = Eltern.offsetParent;
		}
	}
	else
	{
		tmpx = ereignis.layerX;
		tmpy = ereignis.layerY;


		cmx_offsetleft = 0;
		cmx_offsettop = 0;
		while (Eltern)
		{
			cmx_offsetleft = cmx_offsetleft + Eltern.offsetLeft;
			cmx_offsettop = cmx_offsettop + Eltern.offsetTop;
			Eltern = Eltern.offsetParent;
		}
	}
	if(direction == "both")
	{
		dragx = tmpx;
		dragy = tmpy;
	}
	else if(direction == "vertical")
	{
		dragy = tmpy;
	}
	else if(direction == "horizontal")
	{
		dragx = tmpx;
	}
}

function dragstop()
{
    dragging = false;
    picturedrag = false;
  	flyoutdrag = false;
    objekt = null;
}

function drag(ereignis)
{
    if(dragging)
    {
  		if(picturedrag)
  		{
  			if(window.event)
  			{
  				//für IE
	          	posx = window.event.x;
	          	posy = window.event.y;
	          	if(posx < 0 || posy < 0)
	              	return;

				var winposx = document.documentElement.clientWidth;
	            var winposy = document.documentElement.clientHeight;
	            if(winposx == 0)
	            {
	            	winposx = document.body.clientWidth;
	            }

	            if(winposy == 0)
	            {
	            	winposy = document.body.clientHeight;
	            }
	            var winmousex = window.event.clientX;
	            var winmousey = window.event.clientY;
	           	if(parseInt(objekt.offsetWidth) + parseInt(winmousex) + 40 > winposx)
	           	{
	           		objekt.style.left = (posx - parseInt(objekt.offsetWidth) - 0) + "px";
	           	}
	           	else
	           	{
	           		objekt.style.left = (posx + 40) + "px";
	           	}

	           	if(parseInt(objekt.offsetHeight) + parseInt(winmousey) + 40 > winposy)
	           	{
	            	objekt.style.top = (posy - parseInt(objekt.offsetHeight) - 0) + "px";
	           	}
	           	else
	           	{
	            	objekt.style.top = (posy + 40) + "px";
	           	}
  			}
  			else
  			{
  				//für FF
	          	posx = ereignis.layerX;
	          	posy = ereignis.layerY;
	          	if(posx < 0 || posy < 0)
	              	return;

	            var winposx = window.innerWidth;
	            var winposy = window.innerHeight;
	            var winmousex = ereignis.pageX;
	            var winmousey = ereignis.pageY;

	           	if(parseInt(objekt.offsetWidth) + parseInt(winmousex) + 15 > winposx)
	           	{
	           		objekt.style.left = (posx - parseInt(objekt.offsetWidth) - 15) + "px";
	           	}
	           	else
	           	{
	           		objekt.style.left = (posx + 15) + "px";
	           	}

	           	if(parseInt(objekt.offsetHeight) + parseInt(winmousey) + 15 > winposy)
	           	{
	            	objekt.style.top = (posy - parseInt(objekt.offsetHeight) - 15) + "px";
	           	}
	           	else
	           	{
	            	objekt.style.top = (posy + 15) + "px";
	           	}
  			}
  		}
  		else if(flyoutdrag)
  		{
  			if(cmx_flyout.offsetHeight != 0)
  			{
  				cmx_flyout_height = parseInt(cmx_flyout.offsetHeight);
  			}
  			if(cmx_flyout.offsetWidth != 0)
  			{
  				cmx_flyout_width = parseInt(cmx_flyout.offsetWidth);
  			}

  			if(window.event)
  			{
  				//für IE

				var winposx = document.documentElement.clientWidth;
	            var winposy = document.documentElement.clientHeight;
	           	cmx_soll_top = (window.event.clientY + document.documentElement.scrollTop - parseInt(cmx_flyout.offsetHeight) - 15) + "px";
	           	cmx_soll_left = (window.event.clientX  + document.documentElement.scrollLeft + 15) + "px";
	           	posy = window.event.clientY;
  			}
  			else
  			{
  				//für FF
	           	cmx_soll_top = (ereignis.pageY - cmx_flyout_height - 15) + "px";
	           	cmx_soll_left = (ereignis.pageX + 15) + "px";
	           	//document.getElementById("output").innerHTML = cmx_soll_top;
	           	posy = ereignis.clientY;
  			}

	        cmx_flyout.style.display = "block";
  		}
  		else
  		{
  			var newposX;
  			var newposY;
  			if(window.event)
  			{
  				//für IE
	          	newposX = window.event.x - dragx;
	          	newposY = window.event.y - dragy;
  			}
  			else
  			{
  				//für FF
  				if(ereignis.pageX < 0 || ereignis.pageY < 0)
		              return;
	            newposX = ereignis.pageX - dragx - cmx_offsetleft;
	            newposY = ereignis.pageY - dragy - cmx_offsettop;
  			}
			if(dir == "both")
			{
				objekt.style.left = (newposX) + "px";
				objekt.style.top = (newposY) + "px";
			}
			else if(dir == "vertical")
			{
				objekt.style.top = (newposY) + "px";
			}
			else if(dir == "horizontal")
			{
				objekt.style.left = (newposX) + "px";
			}
  		}
 	}
}

function CMX_DynamicMovement()
{
	if(cmx_flyout.style.left == "")
	{
		cmx_flyout.style.left = cmx_soll_left;
	}
	if(cmx_flyout.style.top == "")
	{
		cmx_flyout.style.top = cmx_soll_top;
	}
	CMX_ValidateFlyoutposition();
	if(cmx_flyout.style.left != cmx_soll_left)
	{
		if(parseInt(cmx_flyout.style.left) - parseInt(cmx_soll_left) > - 3 && parseInt(cmx_flyout.style.left) - parseInt(cmx_soll_left) < 3)
		{
			cmx_flyout.style.left = cmx_soll_left;
		}
		else if(parseInt(cmx_flyout.style.left) > parseInt(cmx_soll_left))
		{
			cmx_speed_x = parseInt((parseInt(cmx_flyout.style.left) - parseInt(cmx_soll_left)) / cmx_flyout_speeddelay);
			cmx_flyout.style.left = (parseInt(cmx_flyout.style.left) - cmx_speed_x) + "px";
		}
		else
		{
			cmx_speed_x = parseInt((parseInt(cmx_soll_left) - parseInt(cmx_flyout.style.left)) / cmx_flyout_speeddelay);
			cmx_flyout.style.left = (parseInt(cmx_flyout.style.left) + cmx_speed_x) + "px";
		}
	}
	if(cmx_flyout.style.top != cmx_soll_top)
	{
		if(parseInt(cmx_flyout.style.top) - parseInt(cmx_soll_top) > - 3 && parseInt(cmx_flyout.style.top) - parseInt(cmx_soll_top) < 3)
		{
			cmx_flyout.style.top = cmx_soll_top;
		}
		else if(parseInt(cmx_flyout.style.top) > parseInt(cmx_soll_top))
		{
			cmx_speed_y = parseInt((parseInt(cmx_flyout.style.top) - parseInt(cmx_soll_top)) / cmx_flyout_speeddelay);
			cmx_flyout.style.top = (parseInt(cmx_flyout.style.top) - cmx_speed_y) + "px";
		}
		else
		{
			cmx_speed_y = parseInt((parseInt(cmx_soll_top) - parseInt(cmx_flyout.style.top)) / cmx_flyout_speeddelay);
			cmx_flyout.style.top = (parseInt(cmx_flyout.style.top) + cmx_speed_y) + "px";
		}
	}
	CMX_Flyout_SetOpacity();
	if(flyoutdrag)
	{
		CMX_Flyout_SetOpacity();
		setTimeout("CMX_DynamicMovement()",50);
	}
}

function CMX_Flyout_SetOpacity()
{
	if(parseInt(cmx_flyout.style.left) - parseInt(cmx_soll_left) < 50)
	{
		cmx_flyoutopacity = 100 - ((parseInt(cmx_flyout.style.left) - parseInt(cmx_soll_left)) * 2);
		if(cmx_flyoutopacity > 100)
		{
			cmx_flyoutopacity = 100;
		}
	}
	else if(parseInt(cmx_flyout.style.left) == parseInt(cmx_soll_left))
	{
		cmx_flyoutopacity = 100
	}
	else
	{
		return;
	}

	if(document.all)
  	{
		cmx_flyout.filters.alpha.opacity = cmx_flyoutopacity;
  	}
  	else
  	{
  		cmx_flyout.style.MozOpacity = cmx_flyoutopacity / 100;
  	}
}

function CMX_ValidateFlyoutposition()
{
	if(document.documentElement.scrollTop)
	{
		if(parseInt(cmx_soll_top) < document.documentElement.scrollTop)
		{
			//document.getElementById("output").innerHTML += "<br><br>cmx_soll_top: " + cmx_soll_top + "<br>window.pageYOffset: " + window.pageYOffset;
			posy = cmx_soll_top = document.documentElement.scrollTop;
		}
	}
	else
	{
		if(parseInt(cmx_soll_top) < window.pageYOffset)
		{
			//document.getElementById("output").innerHTML += "<br><br>cmx_soll_top: " + cmx_soll_top + "<br>window.pageYOffset: " + window.pageYOffset;
			posy = cmx_soll_top = window.pageYOffset;
		}
	}

}

function flyoutdragstart(element)
{
 	dragging = true;
    cmx_flyout = element;
    cmx_flyout.style.top = parseInt(cmx_flyout.style.top) - 100 + "px";
    cmx_flyout.style.left = parseInt(cmx_flyout.style.left) + 100 + "px";
    flyoutdrag = true;
/*
	if(document.all)
  	{
		cmx_flyout.filters.alpha.opacity = 20;
  	}
  	else
  	{
  		cmx_flyout.style.MozOpacity = 0.2;
  	}
*/
	CMX_Flyout_SetOpacity();
    CMX_DynamicMovement();
}

function picdragstart(element,x,y)
{
 	dragging = true;
    objekt = element;
    picturedrag = true;
	pic_width = x;
	pic_height = y;
    dragx = posx - objekt.offsetLeft;
    dragy =  posy - objekt.offsetTop;
}
//AJAX--start
function CMX_CreateRequestObject()
{
    CMX_http_request = false;
    if(window.XMLHttpRequest)
    { // Mozilla, Safari, ...
        CMX_http_request = new XMLHttpRequest();
        if (CMX_http_request.overrideMimeType)
        {
            CMX_http_request.overrideMimeType('text/plain');
     	}
    }
    else
    {
     	CMX_http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(!CMX_http_request)
    {
        alert('Fehler: XMLHTTP-Instanz konnte nicht erzeugt werden');
    }
   	CMX_http_request.onreadystatechange = CMX_GetStatechanges;
}

function CMX_GetStatechanges()
{
	if(CMX_http_request.readyState == 0)
	{
		//uninitialized
	}
	else if(CMX_http_request.readyState == 1)
	{
		//loading
	}
	else if(CMX_http_request.readyState == 2)
	{
		//loaded
	}
	else if(CMX_http_request.readyState == 3)
	{
		//interactive
	}
	else if(CMX_http_request.readyState == 4)
	{
		//complete
       	if(CMX_http_request.status == 200)
       	{
       		if(cmx_ajaxidarea.seite)
       		{
				document.getElementById('CMX_AJAXIDAREA_' + cmx_ajaxidarea.elementid).innerHTML = CMX_http_request.responseText;
				cmx_search_and_execute(CMX_http_request.responseText);
				if(cmx_ajaxidarea.load_one_time == "true")
				{
					cmx_ajaxidareas[cmx_ajaxidarea.elementid] = null;
				}
				//cmx_ajaxidarea = null;
       		}
       		else if(cmx_ajaxdestination != "")
       		{
				document.getElementById(cmx_ajaxdestination).innerHTML = CMX_http_request.responseText;
				cmx_search_and_execute(CMX_http_request.responseText);
				cmx_ajaxdestination = "";
       		}
       		else
       		{
				document.getElementById('POSTLOADAREA_' + cmx_postloadarea.elementid).innerHTML = CMX_http_request.responseText;
				cmx_search_and_execute(CMX_http_request.responseText);
				if(cmx_postloadareas.length > 0)
				{

					CMX_GetPostloadAreas();
				}
       		}
       	}
       	else
       	{
           alert('Es gab ein Problem mit der Serververbindung, bitte versuchen Sie es noch einmal.');
       	}
	}
}

function cmx_search_and_execute(cmx_string)
{
	while(cmx_string.indexOf("<script") != -1)
	{
		var cmx_scriptpos = cmx_string.indexOf("<script");
		cmx_string = cmx_string.substring(cmx_scriptpos);

		cmx_scriptpos = cmx_string.indexOf(">") + 1;
		cmx_string = cmx_string.substring(cmx_scriptpos);


		cmx_scriptpos = cmx_string.indexOf("</script");
		var cmx_js = cmx_string.substring(0, cmx_scriptpos);
		eval(cmx_js);
	}
}

function cmx_load_ajaxarea(ajaxid)
{
	if(cmx_ajaxidareas[ajaxid] == null)
	{
		return;
	}
	if(document.getElementById('PRELOADER_' + ajaxid))
	{
		document.getElementById('CMX_AJAXIDAREA_' + ajaxid).innerHTML = document.getElementById('PRELOADER_' + ajaxid).innerHTML;
	}
	CMX_CreateRequestObject();
	cmx_ajaxidarea = cmx_ajaxidareas[ajaxid];
	var query = cmx_ajaxidarea.indexfile + '?seite=' + cmx_ajaxidarea.seite
	+ '&seitenart=' + cmx_ajaxidarea.seitenart
	+ '&cmx_startpunkt=' + cmx_ajaxidarea.startpunkt
	+ '&cmx_elementid=' + cmx_ajaxidarea.elementid;
    CMX_http_request.open('GET', query, true);
    CMX_http_request.send(null);
}


function cmx_load_ajaxuri(query,destinationarea)
{
	if(query != "")
	{
		if(document.getElementById('PRELOADER_' + destinationarea))
		{
			document.getElementById(destinationarea).innerHTML = document.getElementById('PRELOADER_' + destinationarea).innerHTML;
		}
		cmx_ajaxdestination = destinationarea;
		CMX_CreateRequestObject();
	    CMX_http_request.open('GET', query, true);
	    CMX_http_request.send(null);
	}
}

function CMX_GetPostLoadArea()
{
	CMX_CreateRequestObject();
	if(document.getElementById('PRELOADER_' + cmx_postloadarea.elementid))
	{
		document.getElementById('POSTLOADAREA_' + cmx_postloadarea.elementid).innerHTML = document.getElementById('PRELOADER_' + cmx_postloadarea.elementid).innerHTML;
	}
	var query = cmx_postloadarea.indexfile + '?seite=' + cmx_postloadarea.seite
	+ '&seitenart=' + cmx_postloadarea.seitenart
	+ '&cmx_startpunkt=' + cmx_postloadarea.startpunkt
	+ '&cmx_elementid=' + cmx_postloadarea.elementid;
    CMX_http_request.open('GET', query, true);
    CMX_http_request.send(null);
}

function CMX_GetPostloadAreas()
{
	cmx_postloadarea = cmx_postloadareas.pop();
	//window.setTimeout("CMX_GetPostLoadArea()", 2500);
	CMX_GetPostLoadArea();
}

function CMX_Flyout_Hide(flyoutid)
{
	var cmx_fo = document.getElementById(flyoutid);
	cmx_fo.style.display = "none";
	dragstop();
	if(window.event)
  	{
		cmx_flyout.filters.alpha.opacity = 0;
  	}
  	else
  	{
  		cmx_flyout.style.MozOpacity = 0;
  	}
}


function CMX_Flyout_Show(flyoutid)
{
	var cmx_fo = document.getElementById(flyoutid);
	flyoutdragstart(cmx_fo);
}


function KontainerFadeIn(obj, strength, delay)
{
    var b2 = document.getElementById(obj);
    if(b2.style.MozOpacity)
    {
    	b2.style.MozOpacity = strength / 100;
    }
    else if (b2.filters)
    {
    	b2.filters.alpha.opacity = strength;
    }
    strength = strength + 4;
    if(strength < 100)
    {
        setTimeout("KontainerFadeIn('" + obj + "' ," + strength + ", " + delay + ")",delay);
    }
    else if(strength == 100)
    {
        setTimeout("KontainerFadeIn('" + obj + "' ,100, " + delay + ")",delay);
    }
    else
    {
        setTimeout("KontainerFadeIn('" + obj + "' ,100, " + delay + ")",delay);
    }
}

var CMX_http_request;
var cmx_postloadareas = new Array();
var cmx_postloadarea;
var cmx_ajaxidareas = new Array();
var cmx_ajaxidarea = new Object();
var cmx_ajaxdestination = "";
//AJAX--ende

//Scrolling
var scrolling = false;
var px = 0;
var py = 0;
var x;
var y;

function scrollstart(ereignis)
{
    if (!ereignis)
        ereignis = window.event;
    px = ereignis.clientX;
    py = ereignis.clientY;
    scrolling = true;
}

function scrollstop()
{
    scrolling = false;
}

function scroll(ereignis)
{
    if (!ereignis)
        ereignis = window.event;
    if(scrolling)
    {
        scrollx = ereignis.clientX;
        scrolly = ereignis.clientY;
        x =  px - scrollx;
        y =  py -  scrolly;

        if(x == 0 && y == 0)
            return;
        if(x != 0)
            window.scrollBy(x, 0);
        if(y != 0)
            window.scrollBy(0, y);
        px = scrollx;
        py = scrolly;
    }
}
