var _HAS_DOM_IMPLEMENTATION = document.implementation && true;
var _HAS_DOM_CREATE_DOCUMENT = _HAS_DOM_IMPLEMENTATION && document.implementation.createDocument;
var _HAS_DOM_FEATURE = _HAS_DOM_IMPLEMENTATION && document.implementation.hasFeature;
var _IS_MOZ = _HAS_DOM_CREATE_DOCUMENT && _HAS_DOM_FEATURE;
var _IS_SAFARI = (navigator.userAgent && navigator.vendor && (navigator.userAgent.toLowerCase().indexOf("applewebkit") != -1 || navigator.vendor.indexOf("Apple") != -1));
var _IS_IE = document.all && window.ActiveXObject && navigator.userAgent.toLowerCase().indexOf("msie") > -1  && navigator.userAgent.toLowerCase().indexOf("opera") == -1;

var IframeDIV = null;
var LoadedXML = new Array();
var LoadedXSL = new Array();
MyAjax = function(Object) {
	this.Object = Object;
	this.TargetDIV = null;
	this.TargetXML = null;
	this.TargetXSL = null;
	this.AjaxObject = null;
}
MyAjax.prototype = {
	loadIframe: function(reload) {
		this.TargetXML = this.Object.getAttribute('turl');
		this.TargetXSL = this.Object.getAttribute('xsl');
		this.TargetDIV = $(this.Object.getAttribute('target'));
		this.TargetCON = $(this.Object.getAttribute('target')+'[content]');
		if(this.Object.getAttribute('status') != null) {
			if(this.Object.getAttribute('status').toString() == 'true' && reload != true) {
				changeImgDisplay(this.Object);
				return(false);
			}
			if(reload != true) {
				changeImgDisplay(this.Object);
			}
		}
		if(LoadedXML[this.TargetXML] && reload != true) {
			return(true);
		}
		else {
			this.AjaxObject = new Ajax.Request(this.TargetXML,
				{	method: 'get',
					onComplete:this.showResponse.bind(this),
					onLoading: this.showLoading()
				}
			);
		}
	},
	showResponse: function(myXML) {
		LoadedXML[this.TargetXML] = myXML;
		if(LoadedXSL[this.TargetXSL]) {
			var myXSL = LoadedXSL[this.TargetXSL];
		}
		else {
			var myXSL = new Ajax.Request(this.TargetXSL, {method: 'get', asynchronous: false});
			LoadedXSL[this.TargetXSL] = myXSL;
		}
		if(_IS_IE) {
			var xsltDoc = loadActiveXObject(Array("Msxml2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0"));
			var xsltTemplate = loadActiveXObject(Array("Msxml2.XSLTemplate.5.0", "Msxml2.XSLTemplate.4.0", "MSXML2.XSLTemplate.3.0"));
			xsltDoc.loadXML(myXSL.transport.responseText);
			xsltTemplate.stylesheet = xsltDoc;
			var xsltProcessor = xsltTemplate.createProcessor();
			xsltProcessor.input = myXML.responseXML;
			xsltProcessor.addParameter("oid", this.TargetDIV.id);
			xsltProcessor.addParameter("wwwdir", wwwDIR);
			xsltProcessor.transform;
			var NewHTML = xsltProcessor.output;
			//var NewHTML = myXML.responseXML.transformNode(myXSL.transport.responseXML);
		}
		else {
			xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(myXSL.transport.responseXML);
			xsltProcessor.setParameter(null, "oid", this.TargetDIV.id);
			xsltProcessor.setParameter(null, "wwwdir", wwwDIR);
			var NewHTML = (new XMLSerializer()).serializeToString(xsltProcessor.transformToDocument(myXML.responseXML));
		}

		if(this.TargetCON) {
			this.TargetCON.innerHTML = NewHTML;
			var onLoadFunction = this.TargetCON.firstChild.getAttribute('onload')
			if(onLoadFunction) {
				eval(onLoadFunction);
			}
		}
		else {
			this.TargetDIV.innerHTML = NewHTML;
			var onLoadFunction = this.TargetDIV.firstChild.getAttribute('onload')
			if(onLoadFunction) {
				eval(onLoadFunction);
			}
		}
	},
	showLoading: function() {
		changeDisplay(this.TargetDIV, 'block');
	},
	setSearchIframe: function(ObjectName) {
		var InpObj = ObjectName;
		var FrmObj = InpObj;
		while(FrmObj.tagName != 'FORM') {
			FrmObj = FrmObj.parentNode;
		}
		//FrmObj.setAttribute('onsubmit', 'alert(this);event.returnValue=false;');
		if(_IS_IE) {
			addEvent(FrmObj, 'submit', function nosubmit(event) { return false;});
			addEvent(InpObj, 'blur', function onblur(event) {removeEvent(FrmObj, 'submit', 'nosubmit');});
		}
		else {
			FrmObj.setAttribute('onsubmit', 'return false;');
			addEvent(InpObj, 'blur', function(){FrmObj.setAttribute('onsubmit', '');});
		}
		//addEvent(InpObj, 'blur', function(){removeEvent(FrmObj, 'submit', onsubmit);});
	},
	searchIframe: function(ObjectName, ImgObject) {
		InpObj = $(ObjectName+'[search]');
		if(! InpObj.getAttribute('durl')) {
			InpObj.setAttribute('durl', InpObj.getAttribute('turl'));
		}
		if(InpObj.value!="") {
			InpObj.setAttribute('turl', InpObj.getAttribute('durl')+InpObj.value);
			this.loadIframe(InpObj, true);
			InpObj.value = '';
		}
		if(ImgObject.getAttribute('status').toString() != 'true') {
			changeImgDisplay($(ObjectName+'[searchIcon]'));
			changeImgDisplay($(ObjectName+'[treeIcon]'));
		}
	}
}

var MyIframe = {
	loadIframe: function(Object, reload) {
		if(Object.MyAJAX) {
			Object.MyAJAX.loadIframe(reload)
		}
		else {
			Object.MyAJAX = new MyAjax(Object);
			Object.MyAJAX.loadIframe(reload);
		}
	}
}


// POLAK 11102007 alte Methode -- sollte durch MyAjax ersetzt werden
// die Methode MyIframe dienst nur als WrapperFunction für (Iframe)
var Iframe = {
	Object: null,
	TargetDIV: null,
	TargetXML: null,
	TargetXSL: null,
	AjaxObject: null,
	loadIframe: function(Object, reload) {
		this.Object = Object;
		this.TargetXML = Object.getAttribute('turl');
		this.TargetXSL = Object.getAttribute('xsl');
		this.TargetDIV = $(Object.getAttribute('target'));
		this.TargetCON = $(Object.getAttribute('target')+'[content]');
		if(Object.getAttribute('statusactivated') != null) {
			if(Object.getAttribute('statusactivated').toString() == 'true' && reload != true) {
				changeImgDisplay(Object);
				return(false);
			}
		}
		if(Object.getAttribute('status') != null) {
			if(Object.getAttribute('status').toString() == 'true' && reload != true) {
				changeImgDisplay(Object);
				return(false);
			}
		}
		if(reload != true) {
			changeImgDisplay(Object);
		}
		if(LoadedXML[this.TargetXML] && reload != true) {
			//changeDisplay(this.TargetDIV, 'block');
			return(true);
			//var myXML = LoadedXML[this.TargetXML];
		}
		else {
			this.AjaxObject = new Ajax.Request(this.TargetXML,
				{	method: 'get',
					onComplete:this.showResponse.bind(this),
					onLoading: this.showLoading()
				}
			);
		}
	},
	showResponse: function(myXML) {
		LoadedXML[this.TargetXML] = myXML;
		if(LoadedXSL[this.TargetXSL]) {
			var myXSL = LoadedXSL[this.TargetXSL];
		}
		else {
			var myXSL = new Ajax.Request(this.TargetXSL, {method: 'get', asynchronous: false});
			LoadedXSL[this.TargetXSL] = myXSL;
		}
		if(_IS_IE) {
			var xsltDoc = loadActiveXObject(Array("Msxml2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0"));
			var xsltTemplate = loadActiveXObject(Array("Msxml2.XSLTemplate.5.0", "Msxml2.XSLTemplate.4.0", "MSXML2.XSLTemplate.3.0"));
			xsltDoc.loadXML(myXSL.transport.responseText);
			xsltTemplate.stylesheet = xsltDoc;
			var xsltProcessor = xsltTemplate.createProcessor();
			xsltProcessor.input = myXML.responseXML;
			xsltProcessor.addParameter("oid", this.TargetDIV.id);
			xsltProcessor.addParameter("wwwdir", wwwDIR);
			xsltProcessor.transform;
			var NewHTML = xsltProcessor.output;
			//var NewHTML = myXML.responseXML.transformNode(myXSL.transport.responseXML);
		}
		else {
			xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(myXSL.transport.responseXML);
			xsltProcessor.setParameter(null, "oid", this.TargetDIV.id);
			xsltProcessor.setParameter(null, "wwwdir", wwwDIR);
			var NewHTML = (new XMLSerializer()).serializeToString(xsltProcessor.transformToDocument(myXML.responseXML));
		}

		if(this.TargetCON) {
			this.TargetCON.innerHTML = NewHTML;
			var onLoadFunction = this.TargetCON.firstChild.getAttribute('onload')
			if(onLoadFunction) {
				eval(onLoadFunction);
			}
		}
		else {
			this.TargetDIV.innerHTML = NewHTML;
			var onLoadFunction = this.TargetDIV.firstChild.getAttribute('onload')
			if(onLoadFunction) {
				eval(onLoadFunction);
			}
		}
	},
	showLoading: function() {
		/*
		if(this.TargetCON) {
			this.TargetCON.innerHTML = "Daten werden geladen...";
		}
		else {
			this.TargetDIV.innerHTML = "Daten werden geladen...";
		}
		*/
		changeDisplay(this.TargetDIV, 'block');
	},
	setSearchIframe: function(ObjectName) {
		var InpObj = ObjectName;
		var FrmObj = InpObj;
		while(FrmObj.tagName != 'FORM') {
			FrmObj = FrmObj.parentNode;
		}
		//FrmObj.setAttribute('onsubmit', 'alert(this);event.returnValue=false;');
		if(_IS_IE) {
			addEvent(FrmObj, 'submit', function nosubmit(event) { return false;});
			addEvent(InpObj, 'blur', function onblur(event) {removeEvent(FrmObj, 'submit', 'nosubmit');});
		}
		else {
			FrmObj.setAttribute('onsubmit', 'return false;');
			addEvent(InpObj, 'blur', function(){FrmObj.setAttribute('onsubmit', '');});
		}
		//addEvent(InpObj, 'blur', function(){removeEvent(FrmObj, 'submit', onsubmit);});
	},
	searchIframe: function(ObjectName, ImgObject) {
		InpObj = $(ObjectName+'[search]');
		if(! InpObj.getAttribute('durl')) {
			InpObj.setAttribute('durl', InpObj.getAttribute('turl'));
		}
		if(InpObj.value!="") {
			InpObj.setAttribute('turl', InpObj.getAttribute('durl')+InpObj.value);
			this.loadIframe(InpObj, true);
			InpObj.value = '';
		}
		if(ImgObject.getAttribute('status').toString() != 'true') {
			changeImgDisplay($(ObjectName+'[searchIcon]'));
			changeImgDisplay($(ObjectName+'[treeIcon]'));
		}
	}
}

function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type] = fn;
      obj.attachEvent( "on"+type, fn);
   }
}

function removeEvent( obj, type, fn )
{
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   } else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type] );
      obj.detachEvent( "on"+type, obj["e"+type]);
      obj[type] = null;
      obj["e"+type] = null;
   }
}
/*
function addEvent (el, evname, func) {
	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		// http://developer.mozilla.org/en/docs/DOM:element.addEventListener
		el.addEventListener(evname, func, false);
	} else {
		el["on" + evname] = func;
	}
}
*/
function loadActiveXObject(idList) {
	var bFound = false;
	for(var i=0; i < idList.length && !bFound; i++){
		try{
			var xsltTemplate = new ActiveXObject(idList[i]);
			bFound = true;
		}
		catch (objException){
			//alert('Es konnte kein XSL Parser gefunden werden!');
			//return(false);
		};
	}
	if(! bFound){
		alert('Es konnte kein XSL Parser gefunden werden!');
		return(false);
	}
	return(xsltTemplate);
}

//!MOD 20080114 Hortschitz deactivate debug protocol
//window.onerror = logError;

function logError(msg, file, line) {
	try {
		// Internet Explorer
		Error = "&ErrorMsg="+msg+"&ErrorFile="+file+"&ErrorLine="+line+"&UserAgent="+navigator.userAgent;
		if(document.all) {
			var save_form = new ActiveXObject("Microsoft.XMLHTTP");
			save_form.open("GET","/xml/user/jserror/?"+Error,false);
			save_form.Send();
		}
		else {
			// MOZILLA
			var save_form = new XMLHttpRequest();
			save_form.open("GET","/xml/user/jserror/?"+Error,false);
			save_form.send(null);
		}
		//alert('Es ist ein unerwarteter Fehler eingetreten!\nWir möchten uns dafür entschuldigen,\nund werden so schnell wie möglich versuchen\ndiesen zu beheben!');
	}
	catch (e) {
		if (e instanceof RangeError)
			return false;
		return false;
		//throw e;
	}
}
