/*
 +-----------------------------------------------------------------------+
 | js/ajax.js                                                            |
 |                                                                       |
 | This file is part of the Phusion Webengine                            |
 | Copyright (C) 2008-2009, Roman Gruber                                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Provides ajax functions                                             |
 |                                                                       |
 | TODO:                                                                 |
 |   - This part really needs a clean up                                 |
 |   - some functions should be coded again                              |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Roman Gruber <roman@phusion.ch>                               |
 +-----------------------------------------------------------------------+
*/

var loaded_containers = new Array();
var phpsessid = "";
var session_user = "";
var opened_menus = new Array();
var page_counter = 0;
var hist = new Array();
var hist_url = new Array();
var page_history = new Array();
var shared_content;

function ajaxFunction(url, id, animation, no_loading_animation, onload_function, onfinish_function, opts){

	var xmlHttp;

	function logout(animation, no_loading_animation){
		logout_user = session_user;
		ajaxFunction("func/logout.php?lang=de&session_user=" + logout_user, "logout_container");
		//ajaxFunction("func/nav_left.php?lang=de", "nav_left", animation, no_loading_animation);
		phpsessid = "";
		session_user = "";
		document.getElementById("nav_left").innerHTML = "";
	}

try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }


	//alert(url + " - " + id);

	var method;
	if(url.match(/^get\:/)){
		url = url.replace(/^get\:/, "");
		method = "GET";
	}else if(url.match(/^post\:/)){
		url = url.replace(/^post\:/, "");
		method = "POST";
		var pairs = [];
		var regexp = /%20/g;
		for (var name in opts){
			var value = opts[name].toString();
			var pair = encodeURIComponent(name).replace(regexp, "+") +  '=' + encodeURIComponent(value).replace(regexp, "+");
			pairs.push(pair);
		}
		var encoded_data = pairs.join('&');
	}else{
		//Backwardcompatibility
		method = "GET";
	}

	//clean the frontpage
	if(id == "main" && typeof hist["main"] != "undefined"){
		document.getElementById("div_info3").innerHTML = "";
		document.getElementById("div_info4").innerHTML = "";
	}

	if(url == "reload"){
		ajaxFunction(loaded_containers[id], id, animation, no_loading_animation, onload_function, onfinish_function);
		return;
	}

	if(url.match(/^mailto/)) {
		location.href = url;
		return;
	}

	if(id.match(/^new/)){
		if(id == "new"){
			newwindow = window.open(url);
			newwindow.focus();
		}else{
			var prefs = id.replace(/^new_/, "");
			newwindow = window.open(url, '', prefs);
			newwindow.focus();
		}
	}else if(id == "universe" || id == "rss") {
		window.open(url, "_self");
	}else if(id == "this") {
		if(phpsessid != ""){
			url = url + '&PHPSESSID=' + phpsessid;
			url = url + '&session_user=' + session_user;
		}
		window.open(url, "_self");
	}else if(id == ""){
		/* do nothing */	
		if(url.match(/^javascript\:/)){
			var jscode = url.replace(/^javascript\:/, "");
			var js = jscode.split("?");
			jscode = js[0];
			jscode = jscode.replace(/\+/g, " ");
			eval(jscode);
		}
	//}else if(id == "iframe"){
	}else if(id.match(/^iframe/)){
		loaded_containers[id] = url;
		if(phpsessid != ""){
			url = url + '&PHPSESSID=' + phpsessid;
			url = url + '&session_user=' + session_user;
		}
		page_counter = page_counter+1;
		document.getElementById(id).src = url;
		//alert(url);
	}else if(id == "logout"){
		logout(animation, no_loading_animation);
	}else{
		if(onload_function != ""){
			eval(onload_function);
		}

		if(hist[id]){}else{hist[id] = new Array();}
		if(document.getElementById("loading_module...")){
		}else{
			hist[id].push(document.getElementById(id).innerHTML);
		}
		if(hist_url[id]){}else{hist_url[id] = new Array();}
		hist_url[id].push(url);
		page_counter = page_counter+1;

		if(phpsessid != ""){
			url = url + '&PHPSESSID=' + phpsessid;
			url = url + '&session_user=' + session_user;
		}

		if(no_loading_animation != "1"){
			document.getElementById(id).innerHTML='<table id=\"loading_module...\" border=0 width=100% height=100%><tr><td width=100% height=100% valign=middle align=middle><img src=img/icons/load.gif> loading module...</td></tr></table>';
		}
		xmlHttp.onreadystatechange=function(){
			if(xmlHttp.readyState==4){
				div = document.createElement("div");
				div.style.visibility= "hidden";
				div.innerHTML = xmlHttp.responseText;
				document.body.appendChild(div);
				var sn = scriptname(url);
				if(document.getElementById("onload_"+sn)){
					if(onfinish_function){
						onfinish_function += " " + document.getElementById("onload_"+sn).value + " if(document.getElementById('onload_"+sn+"')){ this.remove = document.getElementById('onload_"+sn+"'); this.remove.parentNode.removeChild(this.remove); } ";
					}else{
						onfinish_function = document.getElementById("onload_"+sn).value + " if(document.getElementById('onload_"+sn+"')){ this.remove = document.getElementById('onload_"+sn+"'); this.remove.parentNode.removeChild(this.remove); } ";
					}
				}
				document.body.removeChild(div);
				//document.getElementById(id).appendChild(document.createTextNode(xmlHttp.responseText));
				//alert(xmlHttp.responseText);
				if(animation == "swap_down"){
					placeholder = "<div class='div_dummy' id='now'><div class='div_dummy' id='pre'>" + document.getElementById(id).innerHTML + "</div>" + xmlHttp.responseText + "</div>";
					//alert(placeholder);
					document.getElementById(id).innerHTML=placeholder;
					//document.getElementById("now").style.height = "0";
					document.getElementById("pre").style.visibility = "visible";
					document.getElementById("now").style.visibility = "visible";
					document.getElementById("pre").style.overflow = "hidden";
					document.getElementById("pre").style.verticalalign = "bottom";
					document.getElementById("now").style.overflow = "hidden";
					document.getElementById("now").style.height = document.getElementById("pre").offsetHeight;

					slide_close("pre", 20, "", 0);
					//alert("pause");
					//slide_open("now", 20, 150, 450);
				}else if(animation == "open_close"){
					var ocobj = new open_close(id, xmlHttp.responseText);
					ocobj.onfinish(onfinish_function);
					ocobj.start();
				}else if(animation == "scroll_down"){
					var scrollobj = new scroll("down", document.getElementById(id).innerHTML, xmlHttp.responseText, id);
					scrollobj.calc_pix_to_scroll();
					scrollobj.onfinish(onfinish_function);
					scrollobj.start();
				}else if(animation == "scroll_up"){
					var scrollobj = new scroll("up", document.getElementById(id).innerHTML, xmlHttp.responseText, id);
					scrollobj.calc_pix_to_scroll();
					scrollobj.onfinish(onfinish_function);
					scrollobj.start();
				}else if(animation == "scroll_left"){
					var scrollobj = new scroll("left", document.getElementById(id).innerHTML, xmlHttp.responseText, id);
					scrollobj.calc_pix_to_scroll();
					scrollobj.onfinish(onfinish_function);
					scrollobj.start()
				}else if(animation == "scroll_right"){
					var scrollobj = new scroll("right", document.getElementById(id).innerHTML, xmlHttp.responseText, id);
					scrollobj.calc_pix_to_scroll();
					scrollobj.onfinish(onfinish_function);
					scrollobj.start();
				}else if(animation == "fade"){
					var fadeobj = new fade(xmlHttp.responseText, id);
					fadeobj.onfinish(onfinish_function);
					fadeobj.out_in();
				}else if(animation == "morph"){
					morph_init(xmlHttp.responseText, id);
				}else{ // no special amination
					document.getElementById(id).innerHTML=xmlHttp.responseText;
					if(onfinish_function != ""){
						eval(onfinish_function);
					}
				}
	
				if(id == "main"){
					location.href = "#main=="+hist_url["main"][hist_url["main"].length-1];
					loaded_containers[id] = url;
				}else{
					loaded_containers[id] = url;
				}
			}
		}
	
	if(method == "GET"){
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null);
	}else if(method == "POST"){
		xmlHttp.open("POST",url);
		xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlHttp.send(encoded_data);
	}
	}

}



function getxml(url, opts){
	var method;
	if(url.match(/^get\:/)){
		url = url.replace(/^get\:/, "");
		method = "GET";
	}else if(url.match(/^post\:/)){
		url = url.replace(/^post\:/, "");
		method = "POST";
		var pairs = [];
		var regexp = /%20/g;
		for (var name in opts){
			var value = opts[name].toString();
			var pair = encodeURIComponent(name).replace(regexp, "+") +  '=' + encodeURIComponent(value).replace(regexp, "+");
			pairs.push(pair);
		}
		var encoded_data = pairs.join('&');
	}else{
		//Backwardcompatibility
		method = "GET";
	}

	var xmlHttp;
	try{// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	}
	
	catch (e){
		try{ // Internet Explorer
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch (e){
			try{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch (e){
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}

	if(phpsessid != ""){
		url = url + '&PHPSESSID=' + phpsessid;
		url = url + '&session_user=' + session_user;
	}

	if(method == "GET"){
		xmlHttp.open("GET",url,false);
		xmlHttp.send(null);
	}else if(method == "POST"){
		xmlHttp.open("POST",url,false);
		xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlHttp.send(encoded_data);
	}
	return xmlHttp.responseText;
}


function xmltoarr(xmldoc){

}


//function xmlajaxFunction(url, id, function_name){
//	var xmlHttp;
//
//	try{
//		// Firefox, Opera 8.0+, Safari
//		xmlHttp=new XMLHttpRequest();
//	}
//	
//	catch (e){
//		// Internet Explorer
//		try{
//			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
//		}
//		catch (e){
//			try{
//				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
//			}
//			catch (e){
//				alert("Your browser does not support AJAX!");
//				return false;
//			}
//		}
//	}
//
//	//alert(url + " - " + id);
//
//	if(url == "reload"){
//		xmlajaxFunction(loaded_containers[id], id, animation, no_loading_animation);
//		return;
//	}
//
//	if(id == ""){
//		/* do nothing */	
//	//}else if(id == "iframe"){
//	}else{
//		if(hist[id]){}else{hist[id] = new Array();}
//		hist[id].push(document.getElementById(id).innerHTML);
//		page_counter = page_counter+1;
//
//		if(phpsessid != ""){
//			url = url + '&PHPSESSID=' + phpsessid;
//			url = url + '&session_user=' + session_user;
//		}
//
//		xmlHttp.onreadystatechange=function(){
//			if(xmlHttp.readyState==4){
//				var xmldoc = xmlHttp.responseText;
//				//alert(xmlHttp.responseText);
//				var xotree = new XML.ObjTree();
//				var tree = xotree.parseXML( xmldoc );
//
//				eval(function_name+"(tree);");
//			}
//
//			if(id == "main"){
//				delete(loaded_containers['news']);
//				delete(loaded_containers['prod']);
//				delete(loaded_containers['dl']);
//				loaded_containers[id] = url;
//			}else{
//				loaded_containers[id] = url;
//			}
//		}
//	}
//	
//	xmlHttp.open("GET",url,true);
//	xmlHttp.send(null);
//	
//}




function jback(id){
	if(hist[id]){
		var len = hist[id].length;
		document.getElementById(id).innerHTML = hist[id][(len-1)];
		hist[id].pop();
		page_counter = page_counter-1;
	}else{
		history.back();
	}
}


function change_lang(lang){
	var la = "lang=" + lang;
	
	for (var Eigenschaft in loaded_containers){
		match = Eigenschaft.match(/^\d*$/);
		if (match == null) { 
			loaded_containers[Eigenschaft] = loaded_containers[Eigenschaft].replace(/lang\=../g, la);
			ajaxFunction(loaded_containers[Eigenschaft], Eigenschaft);
			//alert(loaded_containers[Eigenschaft] + " - " + Eigenschaft);
		}
	}

	
}


function open_new_window(addr) {
	mywindow = window.open(addr, "Files", "width=930,height=600,dependent=yes,location=no,menubar=no,scrollbars=no,status=no,toolbar=no");
	mywindow.focus();
}


function open_new_order_window(addr) {
	mywindow = window.open(addr, "Reihenfolge", "width=350,height=600,dependent=yes,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no");
	mywindow.focus();
}


