//Version: 1.2 <30.05.2011>
//Conf Load allready exists now in window scope.

function edAnalyticsWrapper (sDataObject)
{
    this.sDataObject=sDataObject

    this.index = function ()
    {
        this.oDataAll=this.loadConf();
        if(this.bError)
        {
            return false;
        }

        this.oData=this.oDataAll;

        this.aObjects = new Object();
        this.aRegFunctions = new Object();
        this.aRegObjects= new Array();

        //REG NEW ANALYTICS OBJECTS
        //this.aRegObjects = ["ga","wt"];
        /*this.aRegObjects = this.oData[childs];
        for(i=0;i<this.aRegObjects.length;i++)
        {
            var sObjectID=this.aRegObjects[i];
            this.aRegFunctions[sObjectID] = new Object();

            eval("this.aObjects['"+sObjectID+"'] = new "+this.oData[objects][sObjectID]+"(this);");
        }*/

        for(var sObjectID in this.oData["innerWrapper"])
        {
            //Eigenschaften setzen
            this.aRegObjects[this.aRegObjects.length]=sObjectID;
            this.aRegFunctions[sObjectID] = new Object();
            
            //Script Tag setzen
            /*
            var oChildScriptTag = document.createElement('script');
            oChildScriptTag.type = 'text/javascript';
            oChildScriptTag.async = false;
            oChildScriptTag.src = this.oData[sObjectID]["path"];
            var s = document.getElementsByTagName('script')[0];
            s.parentNode.insertBefore(oChildScriptTag, s);
            */

            try
            {
                eval("this.aObjects['"+sObjectID+"'] = new "+this.oData["innerWrapper"][sObjectID][0]+"(this,this.oDataAll['innerWrapper']['"+sObjectID+"'],'"+this.oData["innerWrapper"][sObjectID][1]+"');");
            }
            catch(e)
            {
                this.errorHandler("Inner Wrapper ("+sObjectID+") Initial Error",e);
                return false;
            }
        }

        //this.aObjects["ga"] = new myGoogle(this.aIds["ga"],this);
        //this.aObjects["wt"] = new myWebtrekk(this.aIds["wt"],this);
        //REG NEW ANALYTICS OBJECTS




    }

    this.loadConf = function()
    {

        //Create the XML request
        /*<-1.2
		xmlReq = null;
        if(window.XMLHttpRequest) xmlReq = new XMLHttpRequest();
        else if(window.ActiveXObject) xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
        if(xmlReq==null) return false; // Failed to create the request

        // Make the request
        xmlReq.open ('GET', this.sDataObject, false);
        xmlReq.send (null);

        //json Daten interpretieren
		
		
        try
        {
            eval("oData="+xmlReq.responseText+";");
            //Daten zurückgeben
            return oData;

        } 
        catch(e)
        {
            this.errorHandler("Wrapper Conf eval Error",e);
            
        }        
		-1.2>*/
		//<+1.2
		try
        {
            eval("oData="+this.sDataObject);
            //Daten zurückgeben
            return oData;

        } 
        catch(e)
        {
            this.errorHandler("Wrapper Conf not found",e);
            
        }
		//+>
/*
        var oFinalData=new Object();
        for(var Key in oData)
        {
            var aData = oData[Key].split(":");
            oFinalData[Key]= new Object();
            oFinalData[Key]["path"]=aData[0];
            oFinalData[Key]["object"]=aData[1];
        }
        */
    }

    this.registerFunctions = function (sObjectId,sFunctionName,oMyFunction)
    {
        this.aRegFunctions[sObjectId][sFunctionName]=oMyFunction;
    }

    //+++++++++++++++++++++++
    //+++Tracker Functions+++
    //+++++++++++++++++++++++
    this.trackPageView = function (sPageTitle,sPageGroup)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackPageView"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackPageView"].call(this.aObjects[sObjectID],sPageTitle,sPageGroup);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackPageView)",e);
                    return false;
                }
            }

        }

        return true;
    }

    this.submit = function ()
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["submit"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["submit"].call(this.aObjects[sObjectID]);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (submit)",e);
                    return false;
                }
            }

        }

        return true;
    }

    this.trackEvent = function (sGroup,aName,sValue,oPar)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackEvent"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackEvent"].call(this.aObjects[sObjectID],sGroup,aName,sValue,oPar);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackEvent)",e);
                    return false;
                }
            }

        }

        return true;
    }

    this.trackError = function (sError)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackError"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackError"].call(this.aObjects[sObjectID],sError);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackError)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackAddToCart = function(sProductId,sProductGroup,sProductName,iProductQuantity,sProductCost)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackAddToCart"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackAddToCart"].call(this.aObjects[sObjectID],sProductId,sProductGroup,sProductName,iProductQuantity,sProductCost);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackAddToCart)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackWatchList = function(sProductId,sProductGroup,sProductName,sProductCost)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackWatchList"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackWatchList"].call(this.aObjects[sObjectID],sProductId,sProductGroup,sProductName,sProductCost);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackWatchList)",e);
                    return false;
                }
            }
        }

        return true;
    }


    this.trackDeleteFromCart = function(sProductId,sProductGroup,sProductName,sProductQuantity,sProductCost)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackDeleteFromCart"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackDeleteFromCart"].call(this.aObjects[sObjectID],sProductId,sProductGroup,sProductName,sProductQuantity,sProductCost);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackDeleteFromCart)",e);
                    return false;
                }
            }
        }

        return true;
    }
	
	
    this.trackSaleProduct = function (sOrderID,sProductID,sProductName,oCategory,sProductCost,iProductQuantity,oProductBundles,oPar)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackSaleProduct"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackSaleProduct"].call(this.aObjects[sObjectID],sOrderID,sProductID,sProductName,oCategory,sProductCost,iProductQuantity,oProductBundles,oPar);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackSaleProduct)",e);
                    return false;
                }
            }
        }

        return true;
    }


    this.trackSale = function (sOrderID, sTotal, sShipping, sCity, sState, sCountry, oPar)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackSale"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackSale"].call(this.aObjects[sObjectID],sOrderID, sTotal, sShipping, sCity, sState, sCountry, oPar);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackSale)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackProductView = function(sProductID, sProductGroup, sProduktname, sProduktpreis)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackProductView"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackProductView"].call(this.aObjects[sObjectID],sProductID, sProductGroup, sProduktname, sProduktpreis);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackProductView)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackSearch = function (sSearchGroup, sSearchString, iSearchResult)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackSearch"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackSearch"].call(this.aObjects[sObjectID],sSearchGroup, sSearchString, iSearchResult);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackSearch)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackTeaserClick = function(sTeaserSite,sTeaserArea,sTeaserElement)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackTeaserClick"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackTeaserClick"].call(this.aObjects[sObjectID],sTeaserSite,sTeaserArea,sTeaserElement);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackTeaserClick)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackForm = function(sFormID)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackForm"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackForm"].call(this.aObjects[sObjectID],sFormID);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackForm)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackUserVar = function(sUserKey,sUserValue)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackUserVar"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackUserVar"].call(this.aObjects[sObjectID],sUserKey,sUserValue);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackUserVar)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackSessionVar = function(sSessionKey,sSessionValue)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackSessionVar"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackSessionVar"].call(this.aObjects[sObjectID],sSessionKey,sSessionValue);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackSessionVar)",e);
                    return false;
                }
            }
        }

        return true;
    }

    this.trackPageVar = function(sPageKey,sPageValue)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackPageVar"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackPageVar"].call(this.aObjects[sObjectID],sPageKey,sPageValue);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackPageVar)",e);
                    return false;
                }
            }
        }

        return true;
    }
	
	
    this.trackGoal = function(sGoalId)
    {
        if(this.bError)
        {
            return false;
        }

        for(i=0;i<this.aRegObjects.length;i++)
        {
            sObjectID=this.aRegObjects[i];
            if(typeof(this.aRegFunctions[sObjectID]["trackGoal"])=="function")
            {
                try
                {
                    this.aRegFunctions[sObjectID]["trackGoal"].call(this.aObjects[sObjectID],sGoalId);
                }
                catch(e)
                {
                    this.errorHandler("Inner Wrapper ("+sObjectID+") Function Error (trackGoal)",e);
                    return false;
                }
            }
        }

        return true;
    }
	

    this.errorHandler = function(sMessage,oError)
    {
        this.bError=true;
        var bNowDebug=false;
        if(bNowDebug==true || (this.oData!=null && this.oData["debug"]==true))
        {


            var oDiv=document.createElement("div");
            
            oDiv.innerHTML="FEHLER REPORT:"+sMessage;
            oDiv.innerHTML+="<br><br>System:"+oError.message;
            oDiv.innerHTML+="<br><br>File:"+oError.fileName;
            oDiv.innerHTML+="<br><br>Line:"+oError.lineNumber;
            oDiv.innerHTML+="<br><br>Stack:"+oError.stack;
            oDiv.style.backgroundColor="red";
            oDiv.style.display="none";
            oDiv.style.height="145px";
            oDiv.style.overflow="scroll";
            oDiv.style.color="#ffffff";
            oDiv.style.fontFamily="Arial";

            //Oben einfügen.
            document.getElementsByTagName("body")[0].insertBefore(oDiv, document.getElementsByTagName("body")[0].firstChild);
        }


    }
	

    this.index();
}

