﻿function test()
{
    alert('Firefox');
}

//Firefox specific variables
//[For AjaxProxy]
var proxyArray = new Array();
var proxyArrayE = new Array();
var proxyCount = 0;


function preInitNuex()
{
    //Ajax Request Objekt austauschen / abfangen

    origRequest = window.frames[0].window.XMLHttpRequest;
    for (var i = 0; i < window.frames[0].frames.length; i++)
    {
        window.frames[0].frames[i].window.XMLHttpRequest = NuexRequestObject;
    }
}

//Überschriebenes XMLHttpRequestobjekt (http://ajaxpatterns.org/XMLHttpRequest_Call)
function NuexRequestObject()
{
	proxyArray[proxyCount] = this;
	this.oIndex = proxyCount;
	proxyCount++;
    this.url = "";
	this.readyState;
	this.method = "";
	this.postData = "";
	this.onreadystatechange = function(){};
	this.orgRequest = new origRequest();
	this.responseText;
	this.status = 0;
	this.statusText = "";
}

//Initialisiert alle Events etc. und soll bei onLoad aufgerufen werden, bzw. bei wechselndem Ajax Content
function initNuex()
{
    //document.getElementById('Panel_Loading').style.display = 'none';

    // JScript File
    inputFieldValues = "";

    //Scrollposition des IFrame Fensters
    scrollX = "";
    scrollY = "";

    inputs = new Array(); 
    
    //registerScrollEvent(); //Scrollhandler zum Übertragen der Scrollpositions
    registerOnKeyUp(); //Formchanges tracken, alle keypress catchen
    replaceHrefs(); //Hrefs anpassen
    replaceForms();
    nuidCount = 0;
    findAllEvents(window.frames[0].document.getElementsByTagName('body')[0].childNodes);
    for (var i = 0; i < window.frames[0].frames.length; i++)
    {
        findAllEvents(window.frames[0].frames[i].document.getElementsByTagName('body')[0].childNodes);
    }
}

NuexRequestObject.prototype.open = function(method, targetUrl, async) {
    this.url = targetUrl;
	this.method = method;
	try
	{
	    window.XMLHttpRequest = origRequest; // Mozilla, Safari, Opera
        var wrData = escape(this.method) + "nuUND" + escape(targetUrl);
        var wrapperUrl = configNuexRoot + "AjaxProxy.aspx?gid=" + gid + "&ajax=" + wrData;
        this.url = wrapperUrl;
	    this.orgRequest.open(method, wrapperUrl, async);
	    window.XMLHttpRequest = NuexRequestObject;
	}
	catch (e)
	{
		alert(e);
	}
}

NuexRequestObject.prototype.send = function(postData) {
	proxyArrayE[this.oIndex] = "if (proxyArray[" + this.oIndex + "].orgRequest.readyState != proxyArray[" + this.oIndex + "].readyState) { proxyArray[" + this.oIndex + "].readyState = proxyArray[" + this.oIndex + "].orgRequest.readyState;if (proxyArray[" + this.oIndex + "].orgRequest.readyState == 4) { proxyArray[" + this.oIndex + "].responseText = proxyArray[" + this.oIndex + "].orgRequest.responseText; } proxyArray[" + this.oIndex + "].onreadystatechange();  proxyArray[" + this.oIndex + "].status = proxyArray[" + this.oIndex + "].orgRequest.status; proxyArray[" + this.oIndex + "].statusText = proxyArray[" + this.oIndex + "].orgRequest.statusText; }";
		this.orgRequest.onreadystatechange = handleProxy;
		this.postData = postData;
		window.XMLHttpRequest = origRequest; // Mozilla, Safari, Opera
		this.orgRequest.send(postData);
		window.XMLHttpRequest = NuexRequestObject;
}

NuexRequestObject.prototype.abort = function() {
	this.orgRequest.abort();
}

NuexRequestObject.prototype.getAllResponseHeaders = function()
{
	//return this.orgRequest.getAllResponseHeaders();
	return "";
}

NuexRequestObject.prototype.getResponseHeader  = function(headerField)
{
	//return this.orgRequest.getResponseHeader(headerField);
	return "";
}

NuexRequestObject.prototype.setRequestHeader  = function(headerField, headerValue)
{
	this.orgRequest.setRequestHeader(headerField, headerValue);
}

function handleProxy()
{
	for (px in proxyArrayE)
	{
		eval(proxyArrayE[px]);
	}
}

function formSubmit()
{
    if (this.action.indexOf(coreDomain) == -1)
    {
        this.nuexAction.value = this.action;
    }
    this.action = coreDomain;    
    this._submit();
}

function doFormReplace(forms, startDocument)
{
    for (var i=0; i<forms.length; i++)
    {
        if (forms[i]._submit == undefined)
        {
            try
            {
                forms[i]._submit = forms[i].submit;
                forms[i].submit = formSubmit;
            }
            catch(e) {}
        }
        
        if (forms[i].nuexAction != undefined)
            continue;
            
        formAction = forms[i].action;
        formMethod = forms[i].method;
        
        var inputHiddenAction = startDocument.document.createElement("input");
        inputHiddenAction.setAttribute("type", "hidden");
        inputHiddenAction.setAttribute("name", "nuexAction");
        inputHiddenAction.setAttribute("id", "nuexAction");
        inputHiddenAction.setAttribute("value", formAction);
        
        var inputHiddenMethod = startDocument.document.createElement("input");
        inputHiddenMethod.setAttribute("type", "hidden");
        inputHiddenMethod.setAttribute("name", "nuexMethod");
        inputHiddenMethod.setAttribute("value", formMethod);
        
        var inputHiddenSessionName = startDocument.document.createElement("input");
        inputHiddenSessionName.setAttribute("type", "hidden");
        inputHiddenSessionName.setAttribute("name", "nuexSessionName");
        inputHiddenSessionName.setAttribute("value", nsName);
        
        var inputHiddenSessionUserId = startDocument.document.createElement("input");
        inputHiddenSessionUserId.setAttribute("type", "hidden");
        inputHiddenSessionUserId.setAttribute("name", "nuexSessionUserId");
        inputHiddenSessionUserId.setAttribute("value", nsUid);
        
        forms[i].appendChild(inputHiddenAction);
        forms[i].appendChild(inputHiddenMethod);        
        forms[i].appendChild(inputHiddenSessionName);
        forms[i].appendChild(inputHiddenSessionUserId);
        
        forms[i].action = coreDomain + "?gid=" + gid;
        forms[i].method = "POST";
        forms[i].setAttribute("target", "_self");
        
        //if (!form.getAttribute("onsubmit") || form.getAttribute("onsubmit") != "")
        //{
        //    form.setAttribute("onsubmit", generateFormFunc(form, formAction, formMethod), 0);
        //}
        //addEvent(aHref, "click", function() {ExecuteWebRequest(aHrefTarget); return false;} );        
    }
}

function findAllEvents(cNodes)
{
    for (var i = 0;i < cNodes.length; i++)
    {
        var nuidG = false;
    	if (cNodes[i].oldonclick == undefined  && cNodes[i].onclick != null && cNodes[i].onclick != undefined && cNodes[i].onclick != "" && cNodes[i].nuid == undefined)
        {
                nuidG = true;
                cNodes[i].oldonclick = cNodes[i].onclick;
				cNodes[i].onclick = function() { NuexNoticeEvent('onclick', this.nuid);this.oldonclick();return false; };
        }
		
		if (cNodes[i].oldonmouseover == undefined && cNodes[i].onmouseover != null && cNodes[i].onmouseover != undefined && cNodes[i].onmouseover != "" && cNodes[i].nuid == undefined)
        {       
                nuidG = true;
                cNodes[i].oldonmouseover = cNodes[i].onmouseover;
				cNodes[i].onmouseover = function() { NuexNoticeEvent('onmouseover', this.nuid);this.oldonmouseover();return false; };
        }
        
        if (cNodes[i].oldonmouseout == undefined && cNodes[i].onmouseout != null && cNodes[i].onmouseout != undefined && cNodes[i].onmouseout != "" && cNodes[i].nuid == undefined)
        {       
                nuidG = true;
                cNodes[i].oldonmouseout = cNodes[i].onmouseout;
				cNodes[i].onmouseout = function() { NuexNoticeEvent('onmouseout', this.nuid);this.oldonmouseout();return false; };
        }
        
        if (cNodes[i].oldonchange == undefined && cNodes[i].onchange != null && cNodes[i].onchange != undefined && cNodes[i].onchange != "" && cNodes[i].nuid == undefined)
        {       
                nuidG = true;
                cNodes[i].oldonchange = cNodes[i].onchange;
				cNodes[i].onchange = function() { NuexNoticeEvent('onchange', this.nuid);this.oldonchange();return false; };
        }
        
        try
        {
            if (cNodes[i].nodeType == 1 && cNodes[i].tagName.substring(0,1) != "/")
            {
    	        cNodes[i].nuid = nuidCount;
                nuidCount++;
            }
    	}
    	catch(e){}
				
        if (cNodes[i].childNodes != null)
        {
            findAllEvents(cNodes[i].childNodes);
        }
    }
}

function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[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+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}

//Event registrieren, dass beim Scrollen die Position ausgelesen wird
//function registerScrollEvent()
//{
//    if (window.frames[0].document.compatMode != 'BackCompat')
//    {
//        iFrame.documentElement.onscroll = readScrollPosition;
//    }
//    else
//    {
//        var scrollEvent = window.setInterval("readScrollPosition()", 1000);
//    }
//    readScrollPosition();
//}
//Event registrieren, dass Änderungen von Froms getrackt werden
function registerOnKeyUp()
{
    window.frames[0].document.onkeyup = getFieldValues;
}

function readScrollPosition()
{
    try
    {
        if (document.getElementById('Iframe_NUEX').contentDocument.compatMode != 'BackCompat')
        {
            scrollY = document.getElementById('Iframe_NUEX').contentDocument.documentElement.scrollTop;
            scrollX = document.getElementById('Iframe_NUEX').contentDocument.documentElement.scrollLeft;
        }
        else
        {
            if (document.getElementById('Iframe_NUEX').contentDocument.body != null)
            {
                scrollY = document.getElementById('Iframe_NUEX').contentDocument.body.scrollTop;
                scrollX = document.getElementById('Iframe_NUEX').contentDocument.body.scrollLeft;
            }
        }
        document.getElementById('nuex_spos').value = scrollX + "," + scrollY;
    }
    catch(e)
    {
        document.getElementById('nuex_spos').value = "lost";
    }
}

function setScrollPosition(POSx,POSy)
{    
    if (POSx != scrollXold || POSy != scrollYold)
    {
        window.clearInterval(scrollAnimation);
        animateScrollCount = 0;
        readScrollPosition();
        deltaX = POSx - scrollX;
        deltaY = POSy - scrollY;
        scrollAnimation = window.setInterval("animateScroll()", 25);
        
        //window.frames[0].scrollTo(POSx,POSy);
        scrollXold = POSx;
        scrollYold = POSy;
    }
}

function animateScroll()
{
    animateScrollCount++;
    if (animateScrollCount <= 40)
    {
        targetX = scrollX + Math.round(Math.sqrt(Math.sqrt(animateScrollCount / 40)) * deltaX);
        targetY = scrollY + Math.round(Math.sqrt(Math.sqrt(animateScrollCount / 40)) * deltaY);
        window.frames[0].scrollTo(targetX,targetY);
    }
    else
    {        
        window.clearInterval(scrollAnimation);
        animateScrollCount = 0;
    }    
}

//Im Javascript alle Inputfields durchgehen und aus deren Value einen String bauen
function getFieldValues()
{
    //Textboxen
    inputFieldValues = "";
    checkRadioValues = "";
    textAreasValues = "";
    selectValues = "";
    inputs = window.frames[0].document.getElementsByTagName("input");
    for (var i=0; i<inputs.length; i++)
    {
        var inputField = inputs[i];
        if(inputField.getAttribute("type") == "text")
        {
             inputFieldValues += inputField.value + ":-:#:";
        }
        else
        {
            inputFieldValues += "-:-:#:";
        }
        
        if (inputField.getAttribute("type") == "checkbox" || inputField.getAttribute("type") == "radio")
        {
            if (inputField.checked)
            {
                checkRadioValues += "1,";
            }
            else
            {
                checkRadioValues += "0,";
            }
        }
        else
        {
            checkRadioValues += "-,";
        }        
    }
    
    //Textareas
    textareas = window.frames[0].document.getElementsByTagName("textarea");
    for (var i=0; i<textareas.length; i++)
    {
        textAreasValues += textareas[i].value + ":-:#:";
    }
    
    //Select Fields
    selectFields = window.frames[0].document.getElementsByTagName("option");
    for (var i=0; i<selectFields.length; i++)
    {
        if (selectFields[i].selected == true)
        {
            selectValues += "1,";
        }
        else
        {
            selectValues += "0,";
        }
    }
    
    document.getElementById("nuex_forminputs").value = inputFieldValues;
    document.getElementById("nuex_formboxes").value = checkRadioValues;
    document.getElementById("nuex_formareas").value = textAreasValues;
    document.getElementById("nuex_formselects").value = selectValues;
}

//Den von getFielValues() erstellten String wieder auf die Inputfields verteilen und deren Value setzen
function setFieldValues(inputFieldValues, checkRadioValues, textAreasValues, selectValues)
{
    inputs = window.frames[0].document.getElementsByTagName("input");
    var inputFieldValuesArray = new Array();
    inputFieldValuesArray = inputFieldValues.split(":-:#:");
    
    var checkRadioValuesArray = new Array();
    checkRadioValuesArray = checkRadioValues.split(",");
    
    for (var i=0; i<inputs.length; i++)
    {
        if(inputs[i].getAttribute("type") == "text")
        {
             inputs[i].value = inputFieldValuesArray[i];
        }
        
        if (inputs[i].getAttribute("type") == "checkbox" || inputs[i].getAttribute("type") == "radio")
        {
            if (checkRadioValuesArray[i] == "1")
            {
                inputs[i].checked = true;
            }
            else
            {
                inputs[i].checked = false;
            }
        }        
    }
    
    //Textareas
    var textAreasValuesArray = new Array();
    textAreasValuesArray = textAreasValues.split(":-:#:");
    textareas = window.frames[0].document.getElementsByTagName("textarea");
    for (var i=0; i<textareas.length; i++)
    {
        textareas[i].value = textAreasValuesArray[i];
    }
    
    //Select Fields
    var selectValuesArray = new Array();
    selectValuesArray = selectValues.split(",");
    selectFields = window.frames[0].document.getElementsByTagName("option");
    for (var i=0; i<selectFields.length; i++)
    {
        if (selectValuesArray[i] == "1")
        {
            selectFields[i].selected = true;
        }
        else
        {
            selectFields[i].selected = false;
        }
    }
}

function hideFlash()
{
    try
    {
        removeTags("embed");
    }
    catch(e){}
}
