﻿
var timeScriptURL = "time.php";
var ZEITANZEIGE_ID="zeitanzeige";
var TRENNER_DATUM = "-";
var TRENNER_ZEIT  = ":";


var _win = !this._mac;
var _w3c = document.getElementById;
var _iex = document.all;
var _ns4 = document.layers;


/**
  * Klasse: CAjaxRequest 
  *
  */
function AjaxRequest(url, requestHandler, method, sync, headers){
	this.ID             = 123;
	this.url            = url;
	this.requestHandler = requestHandler;
	this.method         = method || "POST";
	this.sync           = sync || true;
//	this.xmlHttp        = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP"):( (window.XMLHttpRequest) ? new XMLHttpRequest() : false );
	this.xmlHttp        = (window.XMLHttpRequest) 
	                      ?
	                      new XMLHttpRequest()
	                      :
	                      ((window.ActiveXObject)
	                       ?
	                       new ActiveXObject("Msxml2.XMLHTTP.3.0")
	                       :
	                       false
	                       );
	                      
	this.headers        = headers || false;

	// Code nur einmal ausführen
	//
	if( typeof AjaxRequest._initialized == "undefined" ){
	
		// XMLHttpRequest readyStates
		//
		AjaxRequest.prototype.STATE_UNINIT   = 0; 
								 // Der Request wurde noch nicht durch open() 
		                         // ausgelöst
		
		AjaxRequest.prototype.STATE_LOADING  = 1; 
								 // Der Request wurde gestartet aber noch nicht 
		                         // abgeschickt
		                         
		AjaxRequest.prototype.STATE_LOADED   = 2; 
								 // Request wurde mit send() ausgeführt und die Antwort 
		                         // ist noch nicht eingetroffen
		                         
		AjaxRequest.prototype.STATE_ACTIVE 	= 3; 
								 // Die Übertragung der Antwort vom Server läuft 
		                         // und Teile sind schon mittels responseText bzw.
		                         // responseXML verfügbar
		                         
		AjaxRequest.prototype.STATE_COMPLETE = 4; 
								 // Der Request wurde vollständig ausgeführt
		                         
		
		// HTTP Serverstaties
		//
		AjaxRequest.prototype.HTTP_STATE_OK = 200; 
								 // Die Anfrage des Clients war erfolgreich
						
						
						
	    /**
	      * Methode: addHeader(headerName, headerValue)
	      * Fügt einen neuen header für den Request hinzu
	      *
	      * @param headerName Name des headers
	      * @param headerValue Inhalt des headers
	      */
		AjaxRequest.prototype.addHeader = function(name, value){
			if(!this.headers){
				this.headers = new Array();
			}
			this.headers[this.headers.length] = name;
			this.headers[this.headers.length] = value;
		}
		/**
		  *  Setzt die übertragungsmethode
		  */
		AjaxRequest.prototype.setMethod = function(method){
			this.method = method;
		}  

		/**
		  *  Setzt die url
		  */
		AjaxRequest.prototype.setUrl = function(url){
			this.url = url;
		}  
		
	    /**
	      * Methode: setHeader(headerName, headerValue)
	      * Löscht den Heder und fügt das eine neue Element ein
	      *
	      * @param headerName Name des headers
	      * @param headerValue Inhalt des headers
	      */
		AjaxRequest.prototype.setHeader = function(name, value){
			if(this.headers){
				delete this.headers;
			}
			this.headers = new Array();			
			this.headers[this.headers.length] = name;
			this.headers[this.headers.length] = value;
		}
		
					           
	    /**
	      * Methode: setBody(body)
	      * Setzt das body-Element für den Request
	      *
	      * @param body String mit dem Body der Anfrage
	      */
	    AjaxRequest.prototype.setBody = function(body){
	    	this.body = body;
	    }
		
	    /**
	      * Methode: setRequestHandler(reqh)
	      *
	      * @param reqh Zeiger auf die Methode/Funktion für
	      *        den RequestHandler.
		  */	
		AjaxRequest.prototype.setRequestHandler = function(reqh){
			this.requestHandler = reqh;
		}
					           
	    /**
	      * Methode: doRequest
	 	  * Beschr.: Baut alle nötigen zutaten für einen Request zusammen  
		  *          und stellt den Request an den Server.
		  *           
		  */				           	
		AjaxRequest.prototype.startRequest = function(){
			try{
				this.xmlHttp.open(this.method, this.url, this.sync);
				this.xmlHttp.onreadystatechange = this.requestHandler;
				if(this.headers){
					for(var i=0; i<this.headers.length; i+=2){
						this.xmlHttp.setRequestHeader(this.headers[i], 
						                              this.headers[i+1]);			
					}
				}
				this.xmlHttp.send(this.body);
			}catch(e){
				strError  = "Method=" + this.method + "\n";
				strError += "URL   =" + this.url + "\n";
				strError += "Sync  =" + this.sync + "\n";
				strError += "state =" + this.xmlHttp.readyState + "\n";
				strError += "status=" + this.xmlHttp.status + "\n";
				strError += "body  =" + this.body + "\n";
				//alert(strError);
				this.xmlHttp = (window.XMLHttpRequest) 
	                      ?
	                      new XMLHttpRequest()
	                      :
	                      ((window.ActiveXObject)
	                       ?
	                       new ActiveXObject("Msxml2.XMLHTTP.3.0")
	                       :
	                       false
	                       );
				setTimeout("ajaxRequest.startRequest()", 500);
			}
		}
		/**
	      * Methode: startBinaryRequest
	 	  * Beschr.: Baut alle nötigen zutaten für einen Request zusammen  
		  *          und stellt den Request an den Server.
		  *           
		  */	
		AjaxRequest.prototype.startBinaryRequest = function(body){
			this.xmlHttp.open(this.method, this.url, this.sync);
			this.xmlHttp.onreadystatechange = this.requestHandler;
			if(this.headers){
				for(var i=0; i<this.headers.length; i+=2){
					this.xmlHttp.setRequestHeader(this.headers[i], 
					                              this.headers[i+1]);			
				}
			}
			this.xmlHttp.send(body);
		}		
	AjaxRequest._initialized = true;
	}// END if(typeof CAjaxRequest._initialized == "undefined")
}// END AjaxRequest



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



function nop(){}

function requestHandler(){
	RespStat = ajaxRequest.xmlHttp.readyState;
	if (RespStat == ajaxRequest.STATE_COMPLETE) {
		//---
		var d2 = new Date();
		timeDif = d2.getTime() - _time;
  	    //---
		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;
				var node = document.getElementById('zeitanzeige');
				node.innerHTML=response;
			}else{
				response = ajaxRequest.xmlHttp.responseText;
		        Serverzeit = eval(response);//new Date(response);
				showTime();
			}
		}else{
			alert('Serverproblem! CODE:' + ajaxRequest.xmlHttp.status);
		}
	}else if(RespStat == ajaxRequest.STATE_LOADING){
		var d1 = new Date();
		_time = d1.getTime();
		
	}else if(RespStat == ajaxRequest.STATE_ACTIVE){
		
	}else if(RespStat == ajaxRequest.STATE_LOADED){

	}
}

function startApplication(){
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=MediaControle.start");
	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(timeScriptURL, requestHandler, 'POST');         
	//ajaxPollRequest = new AjaxRequest(timeScriptURL, pollRequestHandler, 'POST');         
	sendMessage("PageControl", "start");
}

window.onload = initApplication;
  

/** 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){

	if(ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_COMPLETE ||
	   ajaxRequest.xmlHttp.readyState == ajaxRequest.STATE_UNINIT){
		ajaxRequest.setUrl(timeScriptURL);
		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);
	}
}

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(timeScriptURL);
		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);
 }
 
function showTime()
{
    if(!document.all && !document.getElementById)
    {
        return;
    }

    var Stunden  = Serverzeit.getHours();
    var Minuten  = Serverzeit.getMinutes();
    var Sekunden = Serverzeit.getSeconds();
	var Tag      = Serverzeit.getDate();
	var Monat    = Serverzeit.getMonth()+1;
	if(_iex)
		var Jahr     = Serverzeit.getYear();
	else
		var Jahr     = Serverzeit.getYear()-100+2000;
    Serverzeit.setSeconds(Sekunden+1);

	Stunden = Stunden <= 9 ? "0" + Stunden : Stunden;
	Minuten = Minuten <= 9 ? "0" + Minuten : Minuten;
	Sekunden = Sekunden <=9 ? "0" + Sekunden : Sekunden;
	Monat = Monat <= 9 ? "0" +Monat : Monat;
    Tag = Tag <= 9 ? "0" + Tag : Tag;

    Uhrzeitanzeige = " " + Jahr + TRENNER_DATUM + Monat + TRENNER_DATUM + Tag + " ";
    Uhrzeitanzeige += Stunden + TRENNER_ZEIT + Minuten + TRENNER_ZEIT + Sekunden;

    if(document.getElementById)
    {
        document.getElementById(ZEITANZEIGE_ID).innerHTML = Uhrzeitanzeige
    }
    else if(document.all)
    {
        Uhrzeit.innerHTML = Uhrzeitanzeige;
    }

    setTimeout("showTime()", 1000);
}


