//edYwaWtBridge:START++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Version: 1.5.1

//Initial Variable fuer WT Tracking Objekt
var wt;

//edBridge - Basis Funktion
function edBridgeCls()
{

}

//loader Funktion welche die Basisklasse ladet
function loadBridge()
{


    //gibt das veränderter Trackerobjekt zurueck
    this.getTracker = function(sYwaId,sWebtrekkId,sDataFile)
    {

        //WT laden
        this.loadWt(sWebtrekkId);

        //YWA laden
        var oYwaTracker = this.loadYwa(sYwaId,sDataFile);

        //YWA Objekt zurueckgeben
        return oYwaTracker;

    }

    this.loadWt = function(sWebtrekkId)
    {
        //neue Instanz von Webrekk V3 erzeugen
        wt = new webtrekkV3();
        if(sWebtrekkId!=false)
        {
            //Wenn eine Webtrekk ID übergeben wurde dann diese schreiben, sonst wurde diese bereits im conf gesetzt.
            wt.trackid=sWebtrekkId;
        }
    }

    this.loadYwa = function (sYwaId,sDataFile)
    {
        //YWA.isNewYWATEnabled muss auf true gesetzt sein um new ausführen zu koennen
        YWA.isNewYWATEnabled=true;
        edBridgeCls.prototype = new YWAT(sYwaId)
        YWA.isNewYWATEnabled=false;

        //Parent eigenschaft setzen um später in den überschriebenen Funktionen auf die Elternklassen zugreifen zu koennen.
        edBridgeCls.parent = YWAT.prototype;
        //Tranlsate Daten laden.
        edBridgeCls.oTransTable=this.loadTranslateTable(sDataFile);



        //Alle Funktionen welche die original YWA überschreiben sollen laden
        this.loadFunctions();

        //neues Objekt von der Basisklasse erzeugen
        var myTracker = new edBridgeCls();

        //Bridge Tracker zurückgeben
        return myTracker;
    }

    this.loadTranslateTable = function (sDataFile)
    {
        //Create the XML request
        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', sDataFile, false);
        xmlReq.send (null);

        //json Daten interpretieren
        eval("oData="+xmlReq.responseText+";");

        //Daten zurueckgeben
        return oData;
    }

    this.loadFunctions = function()
    {

        edBridgeCls.prototype.setDocumentName = function (sName)
        {

            //YWA #########################
            edBridgeCls.parent.setDocumentName.call(this,sName);

            //WT ##########################
            if(sName!="")
            {
                    wt.contentId=sName;
            }

        }

        edBridgeCls.prototype.setDocumentGroup = function (sName)
        {

            //YWA #########################
            edBridgeCls.parent.setDocumentGroup.call(this,sName);

            //WT ##########################
            //<x1.1

            sDokumentGroupID=edBridgeCls.oTransTable["CFHierarchy"]["DOCUMENTGROUP"]
            if(wt.contentGroup==false)
            {
                    wt.contentGroup = new Object();
            }
            wt.contentGroup[sDokumentGroupID]=sName;
            //x>
        }

        edBridgeCls.prototype.submit = function ()
        {

            //YWA #########################
            edBridgeCls.parent.submit.call(this);

            //WT ##########################
            //Wenn noch eine Action offen ist diese abschicken.
            if(edBridgeCls.sCurrentActionID!=null)
            {

                //1.4 Mehr Actionids erwarten
                aSplitActionId=edBridgeCls.sCurrentActionID.split(";");

                for(var i=0;i<aSplitActionId.length;i++)
                {

                
                    var sWtActionName=edBridgeCls.oTransTable["Action"][aSplitActionId[i]];
                    //1.5: Prüfen ob die ActionId existiert. Bei ECommerce z.B. existiert keine KlickId
					if(sWtActionName!=null)
					{
						if(edBridgeCls.customClickParameter==null || edBridgeCls.customClickParameter[sWtActionName]==null)
						{
							//keine Klickparameter
							//<x1.2: Da bei einem JSON String keine Variablen Werte sondern der Variablen Name als String Wert interpretiert wird, muss der Umweg ober [] Notation gegangen werden.
							var oClickPar= new Object();
							oClickPar["linkId"]=sWtActionName;
							wt.sendinfo(oClickPar);
							//x>
						}
						else
						{
							var oClickPar= new Object();
							oClickPar["customClickParameter"]=edBridgeCls.customClickParameter[sWtActionName];
							oClickPar["linkId"]=sWtActionName;
							//Klickparameter
							wt.sendinfo(oClickPar);
						}
					}
                }
                //1.4: Werte immer auf null setzen
                edBridgeCls.sCurrentActionID=null;
                edBridgeCls.customClickParameter=null;

            }


            wt.sendinfo();
            

        }

        edBridgeCls.prototype.setAction = function (sActionId)
        {

            //YWA #########################
            edBridgeCls.parent.setAction.call(this,sActionId);

            //WT ##########################
            edBridgeCls.sCurrentActionID=sActionId;

            //<+1.2Wenn Parameter im Action Scope gesetzt wurden aber noch keine Action gesetzt wurde dann jetzt setzen.
			//1.3:Zuerst Abfragen ob customClickParameter null ist bevor Eigenschaften abgefragt werden.
            if(edBridgeCls.customClickParameter!=null && edBridgeCls.customClickParameter[undefined]!=null)
            {
                //1.4: Auch mehr ActionsIDs in einem String berücksichtigen.
                var aSplitActionId=sActionId.split(";");

                for(var i=0;i<aSplitActionId.length;i++)
                {
                    var sWtActionName=edBridgeCls.oTransTable["Action"][aSplitActionId[i]];

                    edBridgeCls.customClickParameter[sWtActionName]=edBridgeCls.customClickParameter[undefined];
                    edBridgeCls.customClickParameter[undefined]=null;


                }

            }
            //+>

            //<+1.1
            //1.1:Wenn wt.productStatus false ist dann wird es jetzt gesetzt.
            //1.4: Mehr ale eine Actino in sActionID erwarten
            if(wt.productStatus==false)
            {
                aSplitActionId=sActionId.split(";");
                
                for(i=0;i<aSplitActionId.length;i++)
                {
                    if(aSplitActionId[i]=="PRODUCT_VIEW")
                    {
                        wt.productStatus = "view";
                    }
                    else if(aSplitActionId[i]=="ADD_TO_CART")
                    {
                        wt.productStatus = "add";
                    }
                    else if(aSplitActionId[i]=="01")
                    {
                        //sale
                        wt.productStatus = "conf";
                    }
                }
            }
            //1.1>

        }

        edBridgeCls.prototype.submit_action = function ()
        {

            //YWA #########################
            edBridgeCls.parent.submit_action.call(this);

            //WT ##########################

            //1.4 Mehr Actionids erwarten
            aSplitActionId=edBridgeCls.sCurrentActionID.split(";");

            for(var i=0;i<aSplitActionId.length;i++)
            {
                var sWtActionName=edBridgeCls.oTransTable["Action"][aSplitActionId[i]];

                //1.5: Prüfen ob die ActionId existiert. Bei ECommerce z.B. existiert keine KlickId
                if(sWtActionName!=null)
                {

                    if(edBridgeCls.customClickParameter==null || edBridgeCls.customClickParameter[sWtActionName]==null)
                    {
                        //keine Klickparameter
                        wt.sendinfo({linkId:sWtActionName});
                    }
                    else
                    {
                        var oClickPar= new Object();
                        oClickPar["customClickParameter"]=edBridgeCls.customClickParameter[sWtActionName];
                        oClickPar["linkId"]=sWtActionName;
                        //Klickparameter
                        wt.sendinfo(oClickPar);


                    }
                }
            }
            //1.4 Werte immer auf null setzen.
            edBridgeCls.sCurrentActionID=null;
            edBridgeCls.customClickParameter=null;

        }

        edBridgeCls.prototype.setCF = function (sCfId,sCfVal)
        {

            //YWA #########################
            edBridgeCls.parent.setCF.call(this,sCfId,sCfVal);

            //WT ##########################

            //<+1.1
            //Hierachy Daten lesen
            if(edBridgeCls.oTransTable["CFHierarchy"][sCfId]==null)
            {
            //+>
                //KEIN CF für die Hierachy

                //Daten aus der Tabelle lesen
                var sCfScope=edBridgeCls.oTransTable["CfScopes"][sCfId];
                var sWkId=edBridgeCls.oTransTable["CF"][sCfId];



                //Je nach scope andere WT Funktionen nutzen
                if(sCfScope=="Pageview")
                {
                    if(wt.customParameter==false)
                    {
                        wt.customParameter={};
                    }
                    wt.customParameter[sWkId]=sCfVal;
                }
                else if(sCfScope=="Session")
                {
                    if(wt.customSessionParameter==false)
                    {
                        wt.customSessionParameter={};
                    }
                    wt.customSessionParameter[sWkId]=sCfVal;
                }
                else if(sCfScope=="Action")
                {
                    //1.4 Mehr Actionids erwarten
                    if(edBridgeCls.sCurrentActionID==null)
                    {
                        aSplitActionId= new Array(undefined);
                    }
                    else
                    {
                        aSplitActionId=edBridgeCls.sCurrentActionID.split(";");
                    }


                    for(var i=0;i<aSplitActionId.length;i++)
                    {

                        var sWtActionName=edBridgeCls.oTransTable["Action"][aSplitActionId[i]];


                        if(edBridgeCls.customClickParameter==null)
                        {
                            edBridgeCls.customClickParameter={};
                        }

                        if(edBridgeCls.customClickParameter[sWtActionName]==null)
                        {
                            edBridgeCls.customClickParameter[sWtActionName]={};
                        }

                        edBridgeCls.customClickParameter[sWtActionName][sWkId]=sCfVal;
                    }



                }
                //<+1.1
                else if(sCfScope=="ECommerce")
                {
                    if(wt.customEcommerceParameter==false)
                    {
                        wt.customEcommerceParameter={};
                    }
                    wt.customEcommerceParameter[sWkId]=sCfVal;

                }
                //+>
                else if(sCfScope=="Campaign")
                {
                    if(wt.customCampaignParameter==false)
                    {
                        wt.customCampaignParameter={};
                    }
                    wt.customCampaignParameter[sWkId]=sCfVal;
                }
            //<+1.1
            }
            else
            {
                //Dieses CF wird als Hierachy verwendet.
                iDokumentGroupID=edBridgeCls.oTransTable["CFHierarchy"][sCfId]
                if(wt.contentGroup==false)
                {
                        wt.contentGroup = new Object();
                }
                wt.contentGroup[iDokumentGroupID]=sCfVal;
            }
            //+>


        }

        edBridgeCls.prototype.setSKU = function (sSKU)
        {
            //YWA #########################
            edBridgeCls.parent.setSKU.call(this,sSKU);

            //WT ##########################
            wt.product=sSKU;

            //Prüfen welche Action zuvor gesetzt wurde und entsprechend die WT Funktionen ansprechen
            if(edBridgeCls.sCurrentActionID=="PRODUCT_VIEW")
            {
                wt.productStatus = "view";
            }
            else if(edBridgeCls.sCurrentActionID=="ADD_TO_CART")
            {
                wt.productStatus = "add";
            }
            else if(edBridgeCls.sCurrentActionID=="01")
            {
                //sale
                wt.productStatus = "conf";
            }

            //1.1:Wenn noch keine Aktion gesetzt wurde ist productStatus immer noch false, das wird dann bei setAction nachträglich gesetzt.
        }

        edBridgeCls.prototype.setUnits = function (sUntis)
        {

            //YWA #########################
            edBridgeCls.parent.setUnits.call(this,sUntis);

            //WT ##########################
            wt.productQuantity = sUntis;

        }

        edBridgeCls.prototype.setAmounts = function (sAmounts)
        {

            //YWA #########################
            edBridgeCls.parent.setAmounts.call(this,sAmounts);

            //WT ##########################
            wt.productCost = sAmounts;

        }

        //Gesamtbestellwert
        edBridgeCls.prototype.setAmount = function (sAmount)
        {

            //YWA #########################
            edBridgeCls.parent.setAmount.call(this,sAmount);

            //WT ##########################
            //1.3:Currency vor dem Preis loeschen (EUR300.00 -> 300-00)
            wt.orderValue = sAmount.match(/[0-9]*\.{0,1}[0-9]+/);

        }

        edBridgeCls.prototype.setOrderId = function (sOrderId)
        {
            //YWA #########################
            edBridgeCls.parent.setOrderId.call(this,sOrderId);


            //WT ##########################
            wt.orderId = sOrderId;

        }


        edBridgeCls.prototype.setDiscount = function (sDiscount)
        {

            //YWA #########################
            edBridgeCls.parent.setDiscount.call(this,sDiscount);

            //WT ##########################
            var sEcomerceBridgePar=edBridgeCls.oTransTable["ECommerce"]["discount"];

            //Wenn ein bride CF angegeben wurde in diese schreiben
            if(sEcomerceBridgePar!=false)
            {
                if(wt.customEcommerceParameter==false)
                {
                    wt.customEcommerceParameter={};
                }
                
                wt.customEcommerceParameter[sEcomerceBridgePar] = sDiscount;
            }


        }

        edBridgeCls.prototype.setTax = function (sTax)
        {
            //YWA #########################
            edBridgeCls.parent.setTax.call(this,sTax);

            //WT ##########################
            var sEcomerceBridgePar=edBridgeCls.oTransTable["ECommerce"]["tax"];

            //Wenn ein bride CF angegeben wurde in diese schreiben
            if(sEcomerceBridgePar!=false)
            {
                if(wt.customEcommerceParameter==false)
                {
                    wt.customEcommerceParameter={};
                }

                wt.customEcommerceParameter[sEcomerceBridgePar] = sTax;
            }


        }

        edBridgeCls.prototype.setShipping = function (sShipping)
        {
            //YWA #########################
            edBridgeCls.parent.setShipping.call(this,sShipping);

            //WT ##########################
            var sEcomerceBridgePar=edBridgeCls.oTransTable["ECommerce"]["shipping"];

            //Wenn ein bride CF angegeben wurde in diese schreiben
            if(sEcomerceBridgePar!=false)
            {
                if(wt.customEcommerceParameter==false)
                {
                    wt.customEcommerceParameter={};
                }

                wt.customEcommerceParameter[sEcomerceBridgePar] = sShipping;
            }

        }
    }
}

var edBridge = new loadBridge();
//edYwaWtBridge:END++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

