﻿var engine;

$(document).ready(function() {
    engine = new AawClientEngine();
    engine.process();

    engine.manageParameterAutoversicherung();

    var commonRoles = new AawCommonRoleManager();
    commonRoles.process();

    var elm = new AawExternalLinkManager(engine);
});


function AawClientEngine() {
    this.cookieValue = '';

    this.userRole = '';
    this.userID = null;
    this.zn = null;
    this.vtnr = null;
    this.autoversicherung = null;
    this.allianzvertretung = null;
    this.sessionId = null;
    this.referrer = null;

    this.vehicleId = null;
    this.fb_price = null;
    this.searchTyp = null;
    this.consumption = null;
    this.displacement = null;
    this.power = null;
    this.hsn = null;
    this.tsn = null;
    this.firstreg = null;
    this.emission = null;
    this.weight = null;
    this.emissclass = null;
    this.envsticker = null;
    this.fuel = null;
    this.mileage = null;
    this.userMail = null;

    this.manager = null;

    this.readCookie();
}

AawClientEngine.prototype.readCookie = function() {
    this.cookieValue = $.cookie('aawParams2');

    if (this.cookieValue != null && this.cookieValue.length > 0) {
        var values = this.cookieValue.split('|');

        for (i = 0; i < values.length; i++) {
            var item = values[i];
            var tmpKeyValue = item.split('=');

            switch (tmpKeyValue[0]) {
                case 'role':
                    this.userRole = tmpKeyValue[1];
                    break;
                case 'zn':
                    this.zn = tmpKeyValue[1];
                    break;
                case 'vtnr':
                    this.vtnr = tmpKeyValue[1];
                    break;
                case 'autoversicherung':
                    this.autoversicherung = tmpKeyValue[1];
                    break;
                case 'allianzvertretung':
                    this.allianzvertretung = tmpKeyValue[1];
                    break;
                case 'session_id':
                    this.sessionId = tmpKeyValue[1];
                    break;
                case 'referrer':
                    this.referrer = tmpKeyValue[1];
                    break;
                case 'userID':
                    this.userID = tmpKeyValue[1];
                    break;
                case 'as24id':
                    this.vehicleId = tmpKeyValue[1];
                    break;
                case 'price':
                    this.fb_price = tmpKeyValue[1];
                    break;
                case 'searchTyp':
                    this.searchTyp = tmpKeyValue[1];
                    break;
                case 'consumption':
                    this.consumption = tmpKeyValue[1];
                    break;
                case 'displacement':
                    this.displacement = tmpKeyValue[1];
                    break;
                case 'power':
                    this.power = tmpKeyValue[1];
                    break;
                case 'hsn':
                    this.hsn = tmpKeyValue[1];
                    break;
                case 'tsn':
                    this.tsn = tmpKeyValue[1];
                    break;
                case 'firstreg':
                    this.firstreg = tmpKeyValue[1];
                    break;
                case 'emission':
                    this.emission = tmpKeyValue[1];
                    break;
                case 'weight':
                    this.weight = tmpKeyValue[1];
                    break;
                case 'emissclas':
                    this.emissclass = tmpKeyValue[1];
                    break;
                case 'envsticker':
                    this.envsticker = tmpKeyValue[1];
                    break;
                case 'fuel':
                    this.fuel = tmpKeyValue[1];
                    break;
                case 'mileage':
                    this.mileage = tmpKeyValue[1];
                    break;
                case 'userMail':
                    this.userMail = tmpKeyValue[1];
                    break; 
            }
        }
    }
}

AawClientEngine.prototype.process = function() {
    if (this.userRole != null) {
        switch (this.userRole) {
            case 'agent':
                this.roleManager = new AawAgentRoleManager();
                break;
            case 'private':
                this.roleManager = new AawPrivateRoleManager();
                break;
            default:
                this.roleManager = new AawPrivateRoleManager();
                break;
        }
    }

    if (this.roleManager != null) {
        this.roleManager.process();
    }
}

AawClientEngine.prototype.manageParameterAutoversicherung = function() {
    var linkVersichern = $('a:contains("Versichern")');
    var linkFinanzieren = $('a:contains("Finanzieren")');

    if (this.autoversicherung != null && this.autoversicherung != '') {
        switch (this.autoversicherung) {
            case 'allianz':
                $(linkVersichern).attr('href', '/versichern-vtnr/index.html');
                if (this.allianzvertretung != null && this.allianzvertretung != '')
                    $('a[href^="http://vertretung.allianz.de/as24-name-vertretung-as24/"]').attr('href', 'http://vertretung.allianz.de/' + this.allianzvertretung + '/');
                break;
            case 'avd':
                $(linkVersichern).attr('href', '/versichern-avd-kfz-versicherung/index.html');
                break;
            case 'az24':
                $(linkVersichern).attr('href', '/versichern-allianz24/index.html');
                break;
            case 'geno':
                $(linkVersichern).attr('href', '/versichern-geno/index.html');
                $(linkFinanzieren).attr('href', '/finanzieren-geno/index.html');
                break;
            case 'vd':
                $(linkVersichern).attr('href', '/versichern-vd/kfz-produkte-vd.html');
                $(linkFinanzieren).attr('href', '/finanzieren-vd/kfz-finanzieren-dienste.html');
                break;
        }
    }
}

function AawExternalLinkManager(aawClientEngine) {
    this.aawClientEngine = aawClientEngine;

    this.process();
}

AawExternalLinkManager.prototype.process = function() {
    //alert(this.aawClientEngine.autoversicherung);
}

function AawAgentRoleManager() {
}

AawAgentRoleManager.prototype.process = function() {
    // link main menu
    var mainMenu = $('a:contains("Meine Autowelt")');

    $(mainMenu).html('Fachmann-Bereich');
    $(mainMenu).attr('href', '/autowelt_vertreter/fachmann_bereich/index.html');

    var myCars = $('a[href$="MeineAutos.aspx"]');
    $(myCars).attr('href', '/autowelt_vertreter/fachmann_bereich/inserate/index.html');

    var password = $('a[href$="/Login/Passwortändern.aspx"]');
    $(password).attr('href', '/Login/Fachmann/Passwort.aspx');

    var userdata = $('a[href$="/allianz/ger/editpasswordaddresse.asp"]');
    $(userdata).attr('href', '/Login/Fachmann/Benutzerdaten.aspx');

    $('a[href^="/finanzieren/index.html"]').attr('href', '/autowelt_vertreter/finanzierung/index.html');
}

function AawPrivateRoleManager() {
}

AawPrivateRoleManager.prototype.process = function() {
    var myCars = $('a[href$="MeineAutos.aspx"]');
    $(myCars).attr('href', '/meine_autowelt/inserate/meine-autos-uebersicht.html');

    var password = $('a[href$="/Login/Passwortändern.aspx"]');
    $(password).attr('href', '/Login/Privat/Passwort.aspx');

    var userdata = $('a[href$="/allianz/ger/editpasswordaddresse.asp"]');
    $(userdata).attr('href', '/Login/Privat/Benutzerdaten.aspx');
}

function AawCommonRoleManager() {
}

AawCommonRoleManager.prototype.process = function() {
    /* 
    *   Parameter auf AllianzAutowelt, Kap. 2.3.1.2
    */
    $('a[href*="/allianz/ger/finanzieren.asp"]').each(function(index) {
        var href = new HrefString();
        href.addParam('id', engine.vehicleId);
        href.addParam('fb_price', engine.fb_price);
        href.addLastParam('searchtyp', engine.searchTyp);

        var link = LinkModifier($(this).attr('href'), "/allianz/ger/finanzieren.asp", href.string);

        $(this).attr('href', link);
    });

    /* 
    *   Parameter auf AllianzAutowelt, Kap. 2.3.1.4
    */
    // a
    $('a[href*="https://kfz-aaos.allianz.de/tarifrechner/kfz-versicherung.html?AZMEDID=AAOS_AUTOWELT"]').each(function(index) {
        var href = new HrefString();
        href.addParam('hsn', engine.hsn);
        href.addParam('tsn', engine.tsn);
        href.addParam('referer', engine.referrer);
        href.addLastParam('referrer', 'Allianz-Autowelt');

        var link = LinkModifier($(this).attr('href'), "kfz-aaos.allianz.de", href.string);

        $(this).attr('href', link);
    });
    // b
    $('a[href*="https://kfz.allianz.de"]').each(function(index) {
        var href = new HrefString();
        href.addParam('hsn', engine.hsn);
        href.addParam('tsn', engine.tsn);
        href.addParam('kfzversicherung', "JA");
        href.addParam('referer', engine.referrer);
        href.addLastParam('referrer', 'Allianz-Autowelt');

        var link = LinkModifier($(this).attr('href'), "kfz.allianz.de", href.string);

        $(this).attr('href', link);
    });

    /* 
    *   Parameter auf der AllianzAutowelt, Kap. 3.1
    */
    $('a[href*="://www.allianz.de"]').each(function(index) {
        var href = new HrefString();
        href.addParam('session_id', engine.sessionId);
        href.addParam('referer', engine.referrer);
        href.addParam('zn', engine.zn);
        href.addParam('vtnr', engine.vtnr);
        href.addLastParam('referrer', 'Allianz-Autowelt');

        var link = LinkModifier($(this).attr('href'), "vertretung.allianz.de", href.string);

        $(this).attr('href', link);
    });

    /*
    *   Parameter auf der AllianzAutowelt, Kap. 3.3
    */
    $('a[href*="https://vertretung.allianz.de"]').each(function(index) {
        var href = new HrefString();

        if (engine.allianzvertretung != null) {
            href.addParam("allianzvertretung", engine.allianzvertretung);
        }
        href.addParam('session_id', engine.sessionId);
        href.addLastParam('referrer', 'Allianz-Autowelt');

        var link = LinkModifier($(this).attr('href'), "vertretung.allianz.de", href.string);

        $(this).attr('href', link);
    });

    /*
    *   Parameter auf der AllianzAutowelt, Kap. 3.4
    */
    $('a[href*="://fachmann.allianz.de"]').each(function(index) {
        var href = new HrefString();

        if (engine.vtnr != null) {
            href.addParam('vtnr', engine.vtnr);
        }

        if (engine.zn != null) {
            href.addParam("zn", engine.zn);
            href.addParam("vtnr_zn", engine.zn);
        }

        if (engine.referrer != null) {
            href.addParam('referer', engine.referrer);
        }

        href.addLastParam('referrer', 'Allianz-Autowelt');

        var link = LinkModifier($(this).attr('href'), "fachmann.allianz.de", href.string);

        $(this).attr('href', link);
    });

    /*
    *   Parameter auf der AllianzAutowelt, Kap. 3.5
    */
    $('a[href^="http://www.kfz-steuercheck.de/berechnung-mit-hsn-tsn/"]').each(function(index) {
        var href = new HrefString();

        href.addParam('searchTyp', engine.searchTyp);
        href.addParam('consumption', engine.consumption);
        href.addParam('displacement', engine.displacement);
        href.addParam('power', engine.power);
        href.addParam('hsn', engine.hsn);
        href.addParam('tsn', engine.tsn);
        href.addParam('firstreg', engine.firstreg);
        href.addParam('emission', engine.emission);
        href.addParam('weight', engine.weight);
        href.addParam('emissclass', engine.emissclass);
        href.addParam('envsticker', engine.envsticker);
        href.addLastParam('fuel', engine.fuel);

        var link = LinkModifier($(this).attr('href'), "www.kfz-steuercheck.de/berechnung-mit-hsn-tsn/", href.string);

        $(this).attr('href', link);
    });

    /*
    *   Ticket #1329 iframe
    */
    $('iframe[src^="http://ldr-wli-de.eurotax.com/entry/allianz-fachmann"]').each(function(index) {
        var link = LinkModifier($(this).attr('src'), "ldr-wli-de.eurotax.com/entry/allianz-fachmann", getTicket1329href().string);

        window.frames['FBW-Fachmann'].location = link;
    });

    /*
    *   Ticket #1329 a
    */
    $('a[href^="http://ldr-wli-de.eurotax.com/entry/allianz-fachmann"]').each(function(index) {
        var link = LinkModifier($(this).attr('href'), "ldr-wli-de.eurotax.com/entry/allianz-fachmann", getTicket1329href().string);

        $(this).attr('href', link);
    });
}

/*
*   Ticket #1329
*/
function getTicket1329href() {
    var href = new HrefString();

    if (engine) {
        if (engine.hsn && engine.tsn) {
            href.addParam('hsntsn', engine.hsn + ',' + engine.tsn);
        }
    }
    if (engine.firstreg) {
        href.addParam('mm', engine.firstreg.substring(4, 6));
        href.addParam('yyyy', engine.firstreg.substring(0, 4));
    }
    if (engine.mileage)
        href.addParam('mileage', engine.mileage);
    if (engine.userMail)
        href.addParam('valresult_email', engine.userMail);

    if (engine.zn != null) {
        href.addParam('zn', engine.zn);
    }
    if (engine.vtnr != null) {
        href.addParam('vtnr', engine.vtnr);
    }
    if (engine.allianzvertretung != null) {
        href.addParam("allianzvertretung", engine.allianzvertretung);
    }
    if (href.string.length > 1) {
        href.string = href.string.substring(0, href.string.length - 1);
    }
    return href;
}

/*
* Builds and holds a query string
*/
function HrefString() {
    this.string = '?';
}

/*
* Adds a new key,value pair for the query string.
*/
HrefString.prototype.addParam = function(key, value) {
    this.string += key + '=' + value + '&';
}

/*
* Adds a new key,value pair for the query string,
* omitting the trailing ampersand.
*/
HrefString.prototype.addLastParam = function(key, value) {
    this.string += key + '=' + value;
}

/*
* Modifies the link by adding parameters to it.
* param link: the whole link from the href content (including javascript if exists)
* param domain: the domain which append the parameter 
* param parameters: the parameters which should append to the link
* return: the modified link with the appended parameters.
*/
function LinkModifier(link, domain, parameters) {
    var startString = "";
    var endString = "";

    var positionDomain = link.indexOf(domain);

    if (positionDomain > -1) {
        var stringToDomain = link.substring(0, positionDomain);
        var domainStringToEnd = link.substring(positionDomain);

        var positionOfFirstQuote = domainStringToEnd.indexOf("'");

        if (positionOfFirstQuote > -1) {
            var positionOfQuestionmark = domainStringToEnd.indexOf("?");
            if (positionOfQuestionmark > -1) {
                startString = domainStringToEnd.substring(0, positionOfQuestionmark);
                endString = domainStringToEnd.substring(positionOfQuestionmark + 1);

                return stringToDomain + startString + parameters + "&" + endString;
            } else {
                if (domainStringToEnd.substring(positionOfFirstQuote - 1, positionOfFirstQuote) != "\\") {
                    return stringToDomain + domainStringToEnd.substring(0, positionOfFirstQuote)
                                    + parameters + domainStringToEnd.substring(positionOfFirstQuote);
                } else {
                    return stringToDomain + domainStringToEnd.substring(0, positionOfFirstQuote - 1)
                                    + parameters + domainStringToEnd.substring(positionOfFirstQuote - 1);
                }
            }
        } else {
            var positionOfQuestionmark = domainStringToEnd.indexOf("?");
            if (positionOfQuestionmark > -1) {
                startString = domainStringToEnd.substring(0, positionOfQuestionmark);
                endString = domainStringToEnd.substring(positionOfQuestionmark + 1);

                return stringToDomain + startString + parameters + "&" + endString;
            } else {
                return link + parameters;
            }
        }
    }
}
