/*
------------------------------------------
|    Script by Cybersystems GmbH 2004    |
| technical contact dl@cybersystems.ch	 |
------------------------------------------
*/

/* BROWSER CHECK START */
var IE = new Boolean();
var DOMVer = new Boolean();
if (document.all && document.getElementById && (navigator.userAgent.search(/MSIE/) != -1) && (navigator.userAgent.search(/Opera/) == -1)) { IE = true; DOMVer = true; }
/*  BROWSER CHECK END  */

if (IE && DOMVer)
{
	/*object check begin*/
	var xmlhttp; var xmldoc;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
		try {
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
		xmldoc=new ActiveXObject("Msxml2.DOMDocument");
	} catch (e) {
		try {
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
		xmlhttp=false;
		}
	}
	@else
	xmlhttp=false;
	@end @*/
	if (!xmlhttp) {
	try {
		xmlhttp = new XMLHttpRequest();
	} catch (e) {
		xmlhttp=false;
	}
	}
	/*object check end*/
}

/* Variablendeklaration */
var strxml = ''; var resultarray = new Array();
var clear = false;
var firstcall = true;

/* Funktion setCookie: Speichert die Werte in das ensprechende Cookie ab. */
function setCookie(VarName,VarValue)
{
	/* Überprüfung der Cookie Eigenschaften (aktiviert) */
	if (navigator.cookieEnabled)
	{
		/* Erstellung des Gültigkeitsdatum */
		var expTime = new Date()
		/* 365 Tage * 24 Stunden * 60 Minuten * 60 Sekunden * 1000 Millisekunden = 1 Jahr */
		var ms			= expTime.getTime() + (365 * 24 * 60 * 60 * 1000); 
		expTime.setTime(ms);
		if(VarName != "expires")
		{
			/* Variable VarName wird aktualisiert / erstellt */
			document.cookie = VarName + '=' + VarValue + '; expires=' + expTime.toGMTString();
		}
		else
		{
			/* Gültigkeitsdatum wird aktualisiert / erstellt */	
			document.cookie = 'expires=' + expTime.toGMTString();
		}
	}
}

/* Funktion getCookie: Holt Daten aus dem Cookie heraus. */
function getCookie(VarName)
{
	/* Überprüfung der Cookie Eigenschaften (aktiviert) */
	if (navigator.cookieEnabled)
	{
		/* Überprüfung ob Variablennamen vorhanden im Cookie */
		if (document.cookie.indexOf(VarName) > -1)
		{	
			/* Teilstring mit Variablennamen und dessen Wert wird erzeugt */
			var strcookie = document.cookie.substring(document.cookie.indexOf(VarName),document.cookie.length);
			if (strcookie.indexOf(';') > -1) { strcookie = strcookie.substring(0,strcookie.indexOf(';'));	}
			/* Daten werden zurückgegeben */
			return strcookie.substring(strcookie.indexOf('=')+1,strcookie.length);
		}
		else
		{
			/* Leerer Rückgabewert */
			return '';
		}
	}
}

/* Funktion addBebugMsg: Gibt Debug Nachrichten im HTML Fenster aus */
function addDebugMsg(strMsg)
{
	//document.getElementById('wnddebug').innerHTML = strMsg + '<br>' + document.getElementById('wnddebug').innerHTML;
}

function addMsg(strName,strMsg,TX)
{
	/* show chat wnd */
	document.getElementById('MsgWnd').style.visibility = 'visible';	
	document.getElementById('txtTX').focus();
	/* start adding */
  var actDate = new Date();
  var strHours = new String(actDate.getHours());
  var strMinutes = new String(actDate.getMinutes());
  var strSeconds = new String(actDate.getSeconds());

  if (strHours.length < 2) { strHours = '0' + strHours; }
  if (strMinutes.length < 2) { strMinutes = '0' + strMinutes; }
  if (strSeconds.length < 2) { strSeconds = '0' + strSeconds; }
  var strDate = strHours + ':' + strMinutes + ':' + strSeconds;

  if (TX)
  {
		document.getElementById('txtRX').innerHTML += '<b>' + strName + '</b><span style="font:8pt Verdana;"> (' + strDate + ')</span><br>' + strMsg + '<br>';
	}
	else
	{
		document.getElementById('txtRX').innerHTML += '<span style="color:#7A96DF;"><b>' + strName + '</b><span style="font:8pt Verdana;"> (' + strDate + ')</span><br>' + strMsg + '</span><br>';
	}
	//scroll to bottom
	scroll2bottom();
}

//Event onReadyStateChange
function parseXML(obj)
{
	if (obj.hasChildNodes())
	{
		strxml += '<b>' + obj.tagName + '</b>' + '<br>';
		for(var i=0;i<obj.childNodes.length;i++)
		{
			parseXML(obj.childNodes[i]);
		}
	}
	else
	{
		strxml += obj.text + '<br>';
	}
}

/*
Funktion XMLReceive: 
Überprüft Status der erhaltenen Werte (4 = in Ordnung)
Überprüft den Inhalt auf mögliche Befehls Tag --> Speicherung in Cookie
Ausgabe der Nachricht
Beim ersten Aufruf werden Besucherdaten gesendet
*/
function XMLReceive()
{
	if (xmlhttp.readyState==4) 
	{
		//alert(xmlhttp.responseText); //DEBUGGING
		xmldoc.load(xmlhttp.responseXML);
		resultarray = null;
		resultarray = xmldoc.getElementsByTagName('ReceiveMessagesResult')[0].childNodes;
		for(var i=0;i<resultarray.length;i++)
		{
			/* Überprüfung der Nachricht auf ein Befehls Tag */
			if (resultarray[i].text.substr(0,9) == '<SetData>')
			{
				/* Inhalte zwischen dem Befehls Tag werden in einen Array gespeichert */
				var SetData = resultarray[i].text.substring(9,resultarray[i].text.lastIndexOf('</'));
				var SetDataVars = new Array('Name','Email','Address','Ort','Telefon');
				SetData = SetData.split("#");
				/* Schlaufe zur Speicherung aller Werte ins Cookie */
				for (var j=0;j<SetData.length;j++)
				{
					setCookie(SetDataVars[j],SetData[j]);
				}
				/* Aktualisierung des Gültigkeitsdatum im Cookie */
				setCookie('expires','');
				//addDebugMsg('[cmd] New Data received: "' + SetData + '"');				
			}
			else
			{
				//addDebugMsg(resultarray[i].text);
				/* Einkommende Nachricht ausgeben */
				if ((resultarray[i].text.split("#").length > 1) && (resultarray[i].text.split("#")[0] == "visitor"))
				{
				    addMsg('Besucher',resultarray[i].text.split("#")[1],true);
				}
				else
				{
				
				    addMsg('Support',resultarray[i].text,false);
				}
			}
		}
		
				/* Wird nur beim ersten Aufruf ablaufen */
		if (firstcall)
		{
			firstcall = false;
	
			/* Variablendeklaration [aktuelles Datum] */
			var now = new Date();
			var day = now.getDate();
			/* Überprüfung des Datum im Cookie mit dem aktuellen Datum */
			if(getCookie('Datum') != day)	
			{
				/* Wird neu gesetzt, 1. Besuch am heutigen Tag */
				setCookie('Datum',day);
				setCookie('Besuch','1');
			}
			else
			{
				/* Die Variable für die Besuche wird inkrementiert und gespeichert */
				var besuche = getCookie('Besuch');
				besuche++;
				setCookie('Besuch',String(besuche));
			}
			/* Besucherinformationen werden übermittelt */
			sendData(getCookie('Email'),getCookie('Address'),getCookie('Ort'),getCookie('Telefon'),document.URL,navigator.appName,navigator.userLanguage,getCookie('Besuch'));
		}

		//parseXML(xmldoc.documentElement);
	}
}

function getMessages(history)
{
  if (xmlhttp)
  {
		//addDebugMsg('[cmd] Check Messages');
		xmlhttp.open("POST", "http://www.cybersystems.ch/websitedlg/index.asmx",true);
		xmlhttp.onreadystatechange = XMLReceive;
		
		xmlhttp.setRequestHeader("Man", "POST http://www.cybersystems.ch/websitedlg/index.asmx HTTP/1.1");
		xmlhttp.setRequestHeader("MessageType", "CALL");
		xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
		xmlhttp.setRequestHeader("SOAPAction", "http://www.cybersystems.ch/websitedlg/ReceiveMessages");

		xmlhttp.send('<?xml version="1.0" encoding="utf-8"?>'+
									'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+
									'<soap:Body>'+
									'<ReceiveMessages xmlns="http://www.cybersystems.ch/websitedlg">'+
									'<Name>' + getCookie('Name') + '</Name>'+
									'<History>' + history + '</History>'+
									'</ReceiveMessages>'+
									'</soap:Body>'+
									'</soap:Envelope>');
									
  }
}

function sendMessage(strMsg)
{
  if (xmlhttp)
  {
		xmlhttp.open("POST", "http://www.cybersystems.ch/websitedlg/index.asmx",true);
		//onreadystatechange Event
		xmlhttp.onreadystatechange = function()
		{
			if (xmlhttp.readyState==4)
			{
				xmldoc.load(xmlhttp.responseXML);
				if (xmldoc.getElementsByTagName('SendMessageResult')[0].text.substr(0,9) == 'delivered')
				{
					document.getElementById('txtTX').value = ''; //sender feld clearen
					var resMsg = xmldoc.getElementsByTagName('SendMessageResult')[0].text;
					//addDebugMsg('message delivered! [' + resMsg.substr(11,resMsg.length) + ']');
					if (resMsg.substr(11,5) != 'cmd: ')
					{
						addMsg('Besucher',resMsg.substr(11,resMsg.length),true);
					}
				}
				else
				{
					//addDebugMsg('an error occured!');
				}
			}
		}
		xmlhttp.setRequestHeader("Man", "POST http://www.cybersystems.ch/websitedlg/index.asmx HTTP/1.1");
		xmlhttp.setRequestHeader("MessageType", "CALL");
		xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
		xmlhttp.setRequestHeader("SOAPAction", "http://www.cybersystems.ch/websitedlg/SendMessage");

		xmlhttp.send('<?xml version="1.0" encoding="utf-8"?>'+
									'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+
									'<soap:Body>'+
									'<SendMessage xmlns="http://www.cybersystems.ch/websitedlg">'+
									'<strMsg>' + strMsg + '</strMsg>'+
									'</SendMessage>'+
									'</soap:Body>'+
									'</soap:Envelope>');				
		
	}
}

/*
Funktion sendData: Sendet Besucherdaten an den Webservice. 
Übergebene Parameter werden aus dem Cookie gelesen
*/
function sendData(strEmail,strAddress,strOrt,strTelefon,strURL,strBrowser,strSprache,strBesuche)
{
	/* Überprüfung ob Objekt vorhanden */
  if (xmlhttp)
  {
		/* Verbindung mit Webservice wird geöffnet */
		xmlhttp.open("POST", "http://www.cybersystems.ch/websitedlg/index.asmx",true);		
		
		/* Erstellung des XML Header */
		xmlhttp.setRequestHeader("Man", "POST http://www.cybersystems.ch/websitedlg/index.asmx HTTP/1.1");
		xmlhttp.setRequestHeader("MessageType", "CALL");
		xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
		xmlhttp.setRequestHeader("SOAPAction", "http://www.cybersystems.ch/websitedlg/SendData");
		
		/* Senden der Daten */
		xmlhttp.send('<?xml version="1.0" encoding="utf-8"?>'+
									'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+
									'<soap:Body>'+
									'<SendData xmlns="http://www.cybersystems.ch/websitedlg">'+
									'<strEmail>'	+	strEmail + '</strEmail>'+
									'<strAddress>'	+	strAddress + '</strAddress>'+
									'<strOrt>'	+	strOrt + '</strOrt>'+
									'<strPhone>'	+	strTelefon + '</strPhone>'+
									'<strURL>'	+	strURL + '</strURL>'+
									'<strBrowser>'	+	strBrowser + '</strBrowser>'+
									'<strSprache>'	+	strSprache + '</strSprache>'+
									'<strBesuche>'	+	strBesuche + '</strBesuche>'+
									'</SendData>'+
									'</soap:Body>'+
									'</soap:Envelope>');
		/* Verbindung wird geschlossen */
		xmlhttp.close;
	}
}


function startInterval(timeInterval)
{
	if (IE && DOMVer)
	{
		//init begin
		document.getElementById('txtTX').onkeydown = txtTXonkeydown;
		document.getElementById('txtTX').onkeyup   = txtTXonkeyup;
		//init end	
				
		getMessages('True');
		window.setInterval('getMessages(\'False\')',timeInterval);
	}
}

function txtTXonkeydown()
{
  var code = event.keyCode;
  if (code == 13)
  {
		sendMessage(document.getElementById('txtTX').value);
		clear = true;
  }
}

function txtTXonkeyup()
{
	if (clear)
	{
		clear = false;
		document.getElementById('txtTX').value = '';
	}
}

function scroll2bottom()
{
	document.getElementById('txtRX').lastChild.scrollIntoView('false');
}


     function PrePairAndShowInfoBox(x, y)
      {
            document.getElementById("InfoBox").style.visibility ="visible";  
              document.getElementById("InfoBox").style.left = y-400; 
              document.getElementById("InfoBox").style.top = x+50; 
      }
      
      function HideInfoBox()
      {
              document.getElementById("InfoBox").style.visibility ="hidden";
      }
