

var oCM = null;
var ajaxRequest = null;
var ajaxPollRequest = null;
var _time = 0;
var POLLTIMEOUT = 1000*10;
var REQUESTTIMEOUT = 500;


function nop(){}

function requestHandler(){
	RespStat = ajaxRequest.xmlHttp.readyState;
	if (RespStat == ajaxRequest.STATE_COMPLETE) {
		//---
		var d2 = new Date();
		timeDif = d2.getTime() - _time;
  		oCM.setDebugMsg("STATE_COMPLETE (" + timeDif + " ms)");
  	    //---
		HTTPStat = ajaxRequest.xmlHttp.status;
		if (HTTPStat == ajaxRequest.HTTP_STATE_OK) {
			var rh = ajaxRequest.xmlHttp.getResponseHeader("Content-Type");
			var response;
			if(rh.indexOf("xml") > 1){
				response = ajaxRequest.xmlHttp.responseXML;
				if(oCM._waitState){
					oCM.stopWaitAnimation();
				}	
				//oCM.dumpXML(response);								
				oCM.handleXMLResponse(response);
			}else{
				response = ajaxRequest.xmlHttp.responseText;
				alert(response);
			}
		}else{
			alert('Serverproblem! CODE:' + ajaxRequest.xmlHttp.status);
		}
	}else if(RespStat == ajaxRequest.STATE_LOADING){
		oCM.setDebugMsg("STATE_LOADING <img src=\"imgs/icons/wait03.gif\">");
		var d1 = new Date();
		_time = d1.getTime();
		
	}else if(RespStat == ajaxRequest.STATE_ACTIVE){
		oCM.setDebugMsg("STATE_ACTIVE");
	}else if(RespStat == ajaxRequest.STATE_LOADED){
		oCM.setDebugMsg("STATE_LOADED ");
	}
}

function pollRequestHandler(){
	RespStat = ajaxPollRequest.xmlHttp.readyState;
	if (RespStat == ajaxPollRequest.STATE_COMPLETE) {
		HTTPStat = ajaxPollRequest.xmlHttp.status;
		if (HTTPStat == ajaxPollRequest.HTTP_STATE_OK) {
			var rh = ajaxPollRequest.xmlHttp.getResponseHeader("Content-Type");
			var response;
			if(rh.indexOf("xml") > 1){
				response = ajaxPollRequest.xmlHttp.responseXML;
				oCM.handleXMLResponse(response);
			}else{
				response = ajaxPollRequest.xmlHttp.responseText;
				alert(response);
			}
		}else{
			alert('Serverproblem! CODE:' + ajaxPollRequest.xmlHttp.status);
		}
	}else if(RespStat == ajaxPollRequest.STATE_LOADING){
		
	}else if(RespStat == ajaxPollRequest.STATE_ACTIVE){

	}else if(RespStat == ajaxPollRequest.STATE_LOADED){
		
	}
}

function startApplication(){
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=MediaControle.start");
	ajaxRequest.startRequest();
}

function startLanguageControle(){
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=LanguageControle.start");
	ajaxRequest.startRequest();
}

function test(){
	ajaxRequest.setUrl('./ajax');
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=test");
	ajaxRequest.startRequest();
}



/** initApplication window.onload
  *
  * Hier wird die onload-Funktion definiert, die nach 
  * dem Laden der HTML-Seite vom Browser automatisch 
  * aufgerufen wird. Sie dient hier als Initialisierung
  * der Anwendung.
  */

function initApplication(){
	// AjaxRequest Instanz
	ajaxRequest = new AjaxRequest('./ajax', requestHandler, 'POST');         
	ajaxPollRequest = new AjaxRequest('./ajax', pollRequestHandler, 'POST');         
	// Instanz des ContentManagers
	oCM = new ContentManager(); 
	sendMessage("PageControl", "start");
	
	//document.designMode="on";
	
	// Event Handler registrieren
	if(oCM._ns4)
		document.captureEvents(Event.MOUSEDOWN);// | Event.MOUSEMOVE | Event.MOUSEUP);
	document.onmousedown   = onMouseDown;
	document.oncontextmenu = onMouseDown;   
	//startPollMechanismus();
}
window.onload = initApplication;
  

function onMouseDown(e){
	if(!e) e = window.event;
	oCM._mouseDownX = e.clientX;
	oCM._mouseDownY = e.clientY;
}


function sendWaitMessage(cls, message, slotID, value){
	
	oCM.showWaitAnimation(slotID);
	sendMessage(cls, message, value);
}

function submitWaitForm(cls, methode, slotID, regex){

	if(ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_COMPLETE){
		var l = oCM.getElementsByName(regex);
		strBody = "act="+cls+"."+methode;
		for(var i=0; i<l.length; i++){
		    var value = oCM.getFormElementValue(l[i]);
		   	strBody += "&" + l[i].name + "=" + value; 
		}
		oCM.showWaitAnimation(slotID);			
		ajaxRequest.setUrl('./ajax');
		ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
		ajaxRequest.setBody(strBody);
		ajaxRequest.startRequest();
		
	}else{
		setTimeout('submitWaitForm(\"'+cls+'\",\"'+methode+'\",\"'+slotID + '\", '+regex+')', REQUESTTIMEOUT);
	}
}

/** sendMessage
  *
  * Funktion zum Versenden von Client-Nachrichten an den Server.
  * 
  * @param cls   - Name der Klasse, an die die Nachricht gesendet wird
  * @param message - Name der Methode, die die Nachricht darstellt
  * @param value   - Optionaler String, der als Argument an die message-
  *                  Methode übergeben wird.
  *  
  */
function sendMessage(cls, message, value){

	try{
		var e = window.event;
		oCM._mouseX= e.clientX;
		oCM._mouseY= e.clientY;
	}catch(e){
	
	}
	if(ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_COMPLETE ||
	   ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_UNINIT){
		ajaxRequest.setUrl('./ajax');
		ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
		if(value){
			body = "act=" + cls + "." + message + "&PD:String=" + value;
		}else{
			body = "act=" + cls + "." + message;
		}
		ajaxRequest.setBody(body);
		ajaxRequest.startRequest();	
	}else{
		window.status = "sendMessage:"+_time;
		setTimeout('sendMessage(\"'+cls+'\",\"'+message+'\",\"'+value+'\")', REQUESTTIMEOUT);
	}
}

/** submitForm
  *
  * Funktion zur Übermittlung von Formulardaten an den Server
  *
  * @param class   - Name der Klasse, die die Formulardaten empfangen und
  *                  verarbeiten soll.
  * @param methode - Name der Methode innerhalb der Klasse, die die 
  *                  Formulardaten empfangen und verarbeiten soll. 
  * @param regex   - Regulärer Ausdruck zur spezifizierung der Formulardaten,
  *                  die übermittelt werden sollen. 
  *
  */
function submitForm(cls, methode, regex){
	if(ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_COMPLETE){
		var l = oCM.getElementsByName(regex);
		strBody = "act="+cls+"."+methode;
		for(var i=0; i<l.length; i++){
		    var value = oCM.getFormElementValue(l[i]);
		   	strBody += "&" + l[i].name + "=" + value; 
		}
		ajaxRequest.setUrl('./ajax');
		ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
		ajaxRequest.setBody(strBody);
		ajaxRequest.startRequest();
	}else{
		setTimeout('submitForm(\"'+cls+'\",\"'+methode+'\",'+regex+')', REQUESTTIMEOUT);
	}
}


/** sendFormelement
  *
  * Funktion zur Übermittlung von einem einzelnen Formularelement an den Server.
  * Die Daten werden als String an die methode übergeben.
  *
  * @param class   - Name der Klasse, die die Formulardaten empfangen und
  *                  verarbeiten soll.
  * @param methode - Name der Methode innerhalb der Klasse, die die 
  *                  Formulardaten empfangen und verarbeiten soll. 
  * @param id      - Die Id des Formularelements
  *
  */
function sendFormElement(cls, methode, id){
	if(ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_COMPLETE){
		var elem = oCM.getElementById(id);
		var strBody = "act="+cls+"."+methode;
		var value = oCM.getFormElementValue(elem);
	  	strBody += "&" + "PD:String" + "=" + value; 
		ajaxRequest.setUrl('./ajax');
		ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
		ajaxRequest.setBody(strBody);
		ajaxRequest.startRequest();
	}else{
		setTimeout('sendFormElement(\"'+cls+'\",\"'+methode+'\",\"'+id+'\")', REQUESTTIMEOUT);
	}
}

function removePopup(popupId){
	oCM.removePopup(popupId);
}

function sleep(numberMillis) {
        var now = new Date();
        var exitTime = now.getTime() + numberMillis;
        while (true) {
            now = new Date();
            if (now.getTime() > exitTime)
                return;
        }
}


/**
 * Alle 10 Sekunde wird geprüft, ob von Seiten der Applikation irgendwelche
 * Änderungen an den Komponenten zu machen sind
 */
  function startPollMechanismus(){
  	if(ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_COMPLETE){
	    ajaxRequest.setUrl('./ajax');
		ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
		ajaxRequest.setBody("act=PollControl.actNop");
		try{
			ajaxRequest.startRequest();
		}catch(e){
		 	setTimeout('startPollMechanismus()', POLLTIMEOUT);		
		}
	}
 	setTimeout('startPollMechanismus()', POLLTIMEOUT);
 }
 
 
 // ==================================================0
 
tinyMCE.init({
                theme : "advanced",
                mode: "exact",
                elements : "",
                language : "de",
                plugins: "save",
                entity_encoding : "raw",
                save_onsavecallback: "sendTinyMCEEditMessage",
                auto_reset_designmode : true,
                add_form_submit_trigger : true,
                theme_advanced_toolbar_location : "top",
                theme_advanced_buttons1_add_before: "save,separator",
                theme_advanced_buttons1 : "bold,italic,underline,fontsizeselect,forecolor,backcolor,strikethrough,separator,"
                                        + "justifyleft,justifycenter,justifyright,justifyfull",
                theme_advanced_buttons2 : ",formatselect,"
                                        + "bullist,numlist,outdent,indent,separator,link,unlink,image,code",
                theme_advanced_buttons3 : "",
                file_browser_callback : 'fileBrowser'
//                height:"200px",
//                width:"350px"
});

function editHTMLContent(controlId, act, nodeId){
        tinyMCE.execCommand( 'mceRemoveControl', true, nodeId );
        tinyMCE.execCommand( 'mceAddControl', true, nodeId );
        tinyMCE._AFMControlId = controlId;
        tinyMCE._AFMAction = act;
        tinyMCE._AFMNodeId = nodeId;
}
function cancelEditHTMLContent(nodeId){
	    tinyMCE.execCommand( 'mceRemoveControl', true, nodeId );
}
function sendTinyMCEEditMessage(object){
//	var value = encodeURI(tinyMCE.getContent())
	var value = encodeURIComponent(tinyMCE.getContent())
//	alert(value);
	
	sendMessage(tinyMCE._AFMControlId, tinyMCE._AFMAction, value);
    tinyMCE.execCommand( 'mceRemoveControl', true, tinyMCE._AFMNodeId );	
}

function fileBrowser(field_name, url, type, win){
	var cmsURL = window.location.pathname;      // script URL
    var searchString = window.location.search;  // possible parameters
    if (searchString.length < 1) {
        // add "?" to the URL to include parameters (in other words: create a search string because there wasn't one before)
        searchString = "?";
    }

    // newer writing style of the TinyMCE developers for tinyMCE.openWindow

    tinyMCE.openWindow({
        file : cmsURL + "public_files/"+searchString + "&type=" + type, // PHP session ID is now included if there is one at all
        title : "File Browser",
        width : 420,  // Your dimensions may differ - toy around with them!
        height : 400,
        close_previous : "no"
    }, {
        window : win,
        input : field_name,
        resizable : "yes",
        inline : "yes",  // This parameter only has an effect if you use the inlinepopups plugin!
        editor_id : tinyMCE.getWindowArg("editor_id")
    });
    return false;
}
 // ===================================================

