/*
 * @author: Nathanael Koch
 */
var dragObject = null; // Das Objekt was "gedraggt" wird
var moveObject = null;
var start = [];
var iMyWidth = null;
var showFly = true;
var showLoading = false;

function GetXmlHttpObject() {
	var xmlHttp=null;
	try {
 		// Firefox, Opera 8.0+, Safari
 		xmlHttp=new XMLHttpRequest();
 	} catch (e) {
 		//Internet Explorer
 		try {
  		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  	} catch (e) {
  		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  	}
	}
	return xmlHttp;
}

function makeGETRequest(url, showFly) { 
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Browser does not support HTTP Request");
		return;
	}
	this.showFly = showFly;
	xmlHttp.onreadystatechange=openFlywindow; 
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}
function makeUploadRequest(url) {
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Browser does not support HTTP Request");
		return;
	}
	xmlHttp.onreadystatechange=showUpload;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}
function makePOSTRequest(url, htmlform) {
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Browser does not support HTTP Request");
		return;
	}
	var form = document.getElementById( htmlform )
  var elements = form.elements
  var querystring = ""
 
  for (i=0; i < elements.length; i++)
  {
   	var el_name  = elements[i].name;
 		var el_value = elements[i].value;

 		// Quick fix to prevent & and = from being passed
   	el_value = el_value.replace( /\&/g,'#AND#');
   	el_value = el_value.replace( /\=/g,'#EQ#');
  	if(elements[i].type == "radio") {
    	if(elements[i].checked) {
    		querystring += el_name + "=" + escape( el_value ) + "&";
    	}
    } else {
    	querystring += el_name + "=" + escape( el_value ) + "&";
    }
  }
	xmlHttp.onreadystatechange = alertContents;
	xmlHttp.open('POST', url, true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", querystring.length);
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(querystring);
}
function makeLoadingPOSTRequest(url, htmlform) {
	showLoading = true;
	makePOSTRequest(url, htmlform);
}

function centerWindow() {
	iMyWidth = (window.screen.width/2) - 300;
	moveObject = document.getElementById("fly_window");
	moveObject.style.left = iMyWidth + 'px';
	dragObject = document.getElementById("draggable");
	dragObject.onmousedown = drag_start;
	dragObject.style.cursor = 'move';
}

function openFlywindow() {
	if (xmlHttp.readyState==0 || xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3) {
		
	}
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
		document.getElementById("content").innerHTML=xmlHttp.responseText;
		if(document.getElementById("fly_window").style.display == "none") {
			Effect.Appear("fly_window", {duration: 0.5}, arguments[2] || {});
			centerWindow();
		}
	}
}
function showUpload() {
	if (xmlHttp.readyState==0 || xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3) {
		
	}
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
		if(document.getElementById("upload_section").style.display == "none") {
			document.getElementById("upload_section").innerHTML=xmlHttp.responseText;
			Effect.Appear("upload_section", {duration: 0.5}, arguments[2] || {});
		} else {
			Effect.Fade("upload_section", {duration: 0.5}, arguments[2] || {});
			setTimeout("appearUpload();", 500);
		}
	}
}
function appearUpload() {
	document.getElementById("upload_section").innerHTML=xmlHttp.responseText;
	Effect.Appear("upload_section", {duration: 0.5}, arguments[2] || {});
}
function closeHandling() {
	moveObject = null;
	dragObject = null;
	Effect.Fade('fly_window', {duration: 0.5}, arguments[2] || {});
}

function alertContents() {
	if (xmlHttp.readyState==0 || xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3) {
		document.getElementById("loading").innerHTML='<img src="templates/images/loader.gif" class="loader" alt="Loading"/>';
	} else if (xmlHttp.readyState == 4 || xmlHttp.readyState=="complete") {
		if (xmlHttp.status == 200) {
			if(showLoading) {
				setTimeout("fadeLoading()", 500);
			} else {
				document.getElementById("content").innerHTML=xmlHttp.responseText;
				centerWindow();
				if(!showFly) {
					closeHandling();
				}
				if(document.getElementById("confirm")) {
					setTimeout("closeHandling()", 1000);
				}
			}
		} else {
			alert('There was a problem with the request.');
		}
	}
	showLoading = false;
}


function uploadBusy(element) {
	document.getElementById("loading").innerHTML='<img src="templates/images/loader.gif" class="loader" alt="Loading"/>';
	document.getElementById(element).submit();
}
function uploadDone(url) {
	makeUploadRequest(url);
	document.getElementById("loading").innerHTML='';
}

function fadeLoading() {
	Effect.Fade("loading", {duration: 0.5}, arguments[2] || {});
	document.getElementById("content").innerHTML=xmlHttp.responseText;
	centerWindow();
	if(!showFly) {
		closeHandling();
	}
}

function drag_start(e) {
	// Position des Elements
	start = getPos(moveObject);
	// Position des Events
	var evt_pos = getEvtPos(e);
	// Die realative Startposition
	start[0] -= evt_pos[0];
	start[1] -= evt_pos[1];
	// Die Dragfunktion aktivieren
	dragObject = this;
	document.onmouseup = end_drag;
	document.onmousemove = do_drag;
	// ist wichtig, da ansonsten FF nicht draggt.
	return false;
}

function do_drag(e) {
	if(!dragObject) return;
	// Position des Events
	var pos = getEvtPos(e);
	moveObject.style.top = (pos[0] + start[0]) + 'px';
	moveObject.style.left = (pos[1] + start[1]) + 'px';
	return false;
}

function end_drag(e) {
	document.onmouseup = null;
	document.onmousemove = null;
	dragObject = null;
	return false;
}

// Hilfsfunktionen:
function getPos(o) // R�ckgabewert: [top, left]
{
	var t = l = 0;
	if(typeof o.offsetTop != 'undefined') {
		t += o.offsetTop;
		l += o.offsetLeft;
	}
	return [t, l];
}

function getEvtPos(e) {
	if(!e) e = window.event;
	var t = e.pageY ? e.pageY : e.clientY + window.document.body.scrollTop;
	var l = e.pageX ? e.pageX : e.clientX + window.document.body.scrollLeft;
	return [t, l];
}


