Hashtable.prototype.hash 	 = null;
Hashtable.prototype.keys 	 = null;
Hashtable.prototype.location = null;

function Hashtable(){
	this.hash = new Array();
	this.keys = new Array();
	this.location = 0;
}

Hashtable.prototype.get = function (key){
	return this.hash[key];
};

Hashtable.prototype.put = function (key, value){
    if (value == null)
        return null;

    if (this.hash[key] == null)
        this.keys[this.keys.length] = key;

    this.hash[key] = value;
};

//******************* Modulnamn *************************
var moduleNames = new Hashtable();

// Norrort
moduleNames.put("jarfalla","JF:Järfälla");
moduleNames.put("ubro","UB:U-Bro");
moduleNames.put("vallingby","VB:Vällingby Hässelby");
moduleNames.put("spanga","SP:Spånga");
moduleNames.put("tensta","NTR:Tensta/Rinkeby");
moduleNames.put("bromma","NBR:Bromma");
moduleNames.put("upplv","NUV:Upplands V");
moduleNames.put("sollentuna","ST:Sollentuna");
moduleNames.put("kista","KI:Kista");
moduleNames.put("solna","NSO:Solna");
moduleNames.put("sundbyberg","NSU:Sundbyberg");
moduleNames.put("danderyd","NDA:Danderyd");
moduleNames.put("taby","NTA:Täby");
moduleNames.put("vallentuna","VA:Vallentuna");
moduleNames.put("sroslagen","NSR:Sö Roslagen");
moduleNames.put("lidingo","Lidingö Tisdag");
moduleNames.put("lidingofredag","Lidingö Tidning FRE");

//Innerstan
moduleNames.put("ostermalm","NIO:Östermalm");
moduleNames.put("vasastan","NIV:Vasastan");
moduleNames.put("katarina","16:Katarina P11");
moduleNames.put("hornstull","17:Hornstull P11");
moduleNames.put("sodermalm","Södermalm");
moduleNames.put("kungsholmen","NIK:Kungsholmen");

//Söderort
moduleNames.put("salemNorra","Salem Norra");
moduleNames.put("salemSodra","Salem Södra");
moduleNames.put("huddingeCentrala","Huddinge Centrala Västra");
moduleNames.put("huddingeOstra","Huddinge Östra");
moduleNames.put("nackaTi","NA:Nacka");
moduleNames.put("varmdoTi","VA:Värmdö");
moduleNames.put("nackaFr","NA:Nacka");
moduleNames.put("varmdoFr","VA:Värmdö");
moduleNames.put("haningeNorra","Haninge Norra");
moduleNames.put("tyreso","STY:Tyresö");
moduleNames.put("skarholmen","Skärholmen");
moduleNames.put("hagersten","Hägersten");
moduleNames.put("farsta","Farsta/Sköndal");
moduleNames.put("hammarby","Hammarby/Skarpnäck");
moduleNames.put("arsta","Årsta/Högdalen");


//******************* Modulpriser *************************
var modulePrices = new Hashtable();

//Norrort
modulePrices.put("jarfalla","626");
modulePrices.put("ubro","472");
modulePrices.put("vallingby","500");
modulePrices.put("spanga","438");
modulePrices.put("tensta","455");
modulePrices.put("bromma","652");
modulePrices.put("upplv","551");
modulePrices.put("sollentuna","587");
modulePrices.put("kista","494");
modulePrices.put("solna","725");
modulePrices.put("sundbyberg","547");
modulePrices.put("danderyd","469");
modulePrices.put("taby","592");
modulePrices.put("vallentuna","469");
modulePrices.put("sroslagen","556");
modulePrices.put("lidingo","720");
modulePrices.put("lidingofredag","675");

//Innerstan
modulePrices.put("ostermalm","546");
modulePrices.put("vasastan","525");
modulePrices.put("katarina","400");
modulePrices.put("hornstull","354");
modulePrices.put("sodermalm","727");
modulePrices.put("kungsholmen","561");

//Söderort
modulePrices.put("salemNorra","450");
modulePrices.put("salemSodra","480");
modulePrices.put("huddingeCentrala","541");
modulePrices.put("huddingeOstra","458");
modulePrices.put("nackaTi","618");
modulePrices.put("varmdoTi","460");
modulePrices.put("nackaFr","600");
modulePrices.put("varmdoFr","475");
modulePrices.put("haningeNorra","679");
modulePrices.put("tyreso","561");
modulePrices.put("skarholmen","460");
modulePrices.put("hagersten","752");
modulePrices.put("farsta","603");
modulePrices.put("hammarby","567");
modulePrices.put("arsta","742");


//******************* Modulpaketpriser *************************
var modulePacketPrices = new Hashtable();

//Norrort
modulePacketPrices.put("pris_norr_jarfallaUbro","712");
modulePacketPrices.put("pris_norr_sollentunaKista","732");
modulePacketPrices.put("pris_norr_taDaVa","780");
modulePacketPrices.put("pris_norr_vasterort","690");

//Innerstan
modulePacketPrices.put("pris_inner_sodermalm","727");
modulePacketPrices.put("pris_inner_alla","1432");

//Söderort
modulePacketPrices.put("pris_soder_bs","665");
modulePacketPrices.put("pris_soder_haninge","659");
modulePacketPrices.put("pris_soder_huddinge","742");
modulePacketPrices.put("pris_soder_nvTi","742");
modulePacketPrices.put("pris_soder_nvFr","699");
modulePacketPrices.put("pris_soder_soderA","568");
modulePacketPrices.put("pris_soder_soderB","546");
modulePacketPrices.put("pris_soder_soderC","658");
modulePacketPrices.put("pris_soder_soderD","685");
modulePacketPrices.put("pris_alla","7675");
modulePacketPrices.put("pris_allautomlidingofre","7690");

//******************* Upplagor *************************
var moduleEdition = new Hashtable();

//Norrort
moduleEdition.put("jarfalla","28800");
moduleEdition.put("ubro","10350");

//Västerort
moduleEdition.put("vallingby","30150");
moduleEdition.put("spanga","6350");
moduleEdition.put("tensta","11150");
moduleEdition.put("bromma","32000");
moduleEdition.put("upplv","17800");
moduleEdition.put("sollentuna","26500");
moduleEdition.put("kista","13700");
moduleEdition.put("solna","36800");
moduleEdition.put("sundbyberg","19900");
moduleEdition.put("danderyd","12900");
moduleEdition.put("taby","26700");
moduleEdition.put("vallentuna","13700");
moduleEdition.put("sroslagen","20900");
moduleEdition.put("lidingo","21000");
moduleEdition.put("lidingofredag","6700");

//Innerstan
moduleEdition.put("ostermalm","41500");
moduleEdition.put("vasastan","38500");
moduleEdition.put("katarina","28600");
moduleEdition.put("hornstull","15000");
moduleEdition.put("sodermalm","70900");
moduleEdition.put("kungsholmen","38900");

//Norrort
moduleEdition.put("salemNorra","14900");
moduleEdition.put("salemSodra","24400");
moduleEdition.put("huddingeCentrala","30500");
moduleEdition.put("huddingeOstra","10100");
moduleEdition.put("nackaTi","38400");
moduleEdition.put("varmdoTi","16250");
//moduleEdition.put("nackaFr","39500");
//moduleEdition.put("varmdoFr","20500");
moduleEdition.put("haningeNorra","35000");
moduleEdition.put("haninge","34700");
moduleEdition.put("tyreso","17800");

//Söderort
moduleEdition.put("skarholmen","14000");
moduleEdition.put("hagersten","49600");
moduleEdition.put("farsta","25000");
moduleEdition.put("hammarby","22000");
moduleEdition.put("arsta","46600");

function setModule(){
   document.bookingForm.modul.value = document.bookingForm.o_cbo_modul.options[document.forms.bookingForm.o_cbo_modul.selectedIndex].text;
}

function setStockholm(formObject) {
    formObject.pris_inner_inget_sodermalm.checked = true;
    formObject.pris_inner_inget_kungsholmen.checked = true;
    formObject.pris_inner_inget_vasastan.checked = true;
    formObject.pris_inner_inget_ostermalm.checked = true;
    formObject.pris_soder_inget_hammarby.checked = true;
    formObject.pris_soder_inget_skarholmen.checked = true;
    formObject.pris_soder_inget_arsta.checked = true;
    formObject.pris_soder_inget_farsta.checked = true;
    formObject.pris_soder_inget_hagersten.checked = true;
    formObject.pris_norr_inget_bromma.checked = true;
    formObject.pris_norr_vasterort_vallingby.checked = true;
    formObject.pris_norr_vasterort_spanga.checked = true;
    formObject.chk_norr_vasterort.checked = true;
    formObject.pris_norr_inget_tensta.checked = true;
    formObject.pris_norr_inget_tensta.checked = true;
    formObject.pris_norr_sollentunaKista_kista.checked = true;
}

function setRegionInner(formObject) {
    formObject.pris_inner_inget_ostermalm.checked = true;
    formObject.pris_inner_inget_vasastan.checked = true;
    formObject.pris_inner_inget_sodermalm.checked = true;
    formObject.pris_inner_inget_kungsholmen.checked = true;
}

function setRegion(formObject, region) {
    for(var i = 0; i < formObject.length; i++) {
        var formControl = formObject[i];
        var formName = formControl.name;

        if(getPaper(formName) != "" || getPaper2(formName) != "") {
            if(region == getRegion(formName) || region == getRegion2(formName) || region == "")
            {
                if(region == "" && formName != "pris_norr_inget_lidingofredag")
                    formControl.checked = true;
            }
            else
                formControl.checked = false;
        }
    }
}

function togglePaper(formObject, paperPackage, paper) {
    booking(true);
    for(var i = 0; i < formObject.length; i++) {
        var formControl = formObject[i];
        var formName = formControl.name;

        if(getPacket(formName) != "") {
            if(paperPackage=='inget'){
                if(paper==getPaper(formName)){
                    formControl.checked = document.getElementsByName('chk_' + getRegion(formName) + '_' + paper)[0].checked;
                }
            }
            else if(paperPackage == getPacket(formName)){
               formControl.checked = document.getElementsByName('chk_' + getRegion(formName) + '_' + paperPackage)[0].checked;
            }
        }
    }
}

function getEditions(formObject){
    var editions = 0;
    for(var i = 0; i < formObject.length; i++) {
        var formControl = formObject[i];
        var formName = formControl.name;
        if(getPaper(formName) != "") {
            if(formControl.checked){
                var editionsEval = eval(moduleEdition.get(getPaper(formName)));
                editions -= - editionsEval;
            }
        }
    }
    return editions;
}

function getModulePrice(formObject) {

    // Summera alla pris_<region>_<paket>_....
    // Om alla checkade, använd paketpris pris_<region>_<paket>

    // Lägg in i array 1 {region_paket}
    // Lägg in i array 2 {modulpris, summerat}
    // Lägg in i array 3 {true} om alla satta hittills, false annars

    var paperArray = new Array();
    var priceArray = new Array();
    var checkedArray = new Array();

    var checkedInnerstad = true;
    var checkedAllautomlidingofre = true;
    var checkedAll = true;

    for(var i = 0; i < formObject.length; i++) {
        var formControl = formObject[i];
        var formValue = formControl.value;
        var formName = formControl.name;


        if(getPaper(formName) != "") {

            if(getRegion(formName) == "inner" && !formControl.checked)
                checkedInnerstad = false;
            if(!formControl.checked)
                checkedAll = false;

            if(checkedAllautomlidingofre)
            {
                if(formName == "pris_norr_inget_lidingofredag")
                {
                    if(formControl.checked)
                    {
                        checkedAllautomlidingofre = false;
                    }
                }
                else
                {
                    if(!formControl.checked)
                        checkedAllautomlidingofre = false;
                }
            }


            var regionPacket = getRegion(formName) + "_" + getPacket(formName);

            var arrayIndex = -1;
            for(var j = 0; j < paperArray.length && arrayIndex == -1; j++) {
                if(regionPacket == paperArray[j])
                    arrayIndex = j;
            }

            if(arrayIndex == -1) {
                paperArray.push(regionPacket);
                if(formControl.checked)
                    priceArray.push(modulePrices.get(formValue));
                else
                    priceArray.push(0);

                if(getPacket(formName) == "inget") {
                    checkedArray.push(false);
                }
                else {
                    checkedArray.push(formControl.checked);
                }

            }
            else {
                if(formControl.checked){
                    priceArray[arrayIndex] -= -modulePrices.get(formValue);
                }
                if(!formControl.checked)
                    checkedArray[arrayIndex] = false;
            }
        }
    }

    var pricedInnerstad = false;
    var modPrice = 0;

    for(var i = 0; i < paperArray.length; i++) {
        if(checkedInnerstad && getRegion("pris_" + paperArray[i]) == "inner") {
            if(!pricedInnerstad) {
                modPrice -= -modulePacketPrices.get("pris_inner_alla");
                pricedInnerstad = true;
            }
        }
        else if(checkedArray[i] == false) {
            modPrice -= -priceArray[i];
        }
        else {
            var packetObject = modulePacketPrices.get("pris_" + paperArray[i]);
            modPrice -= -packetObject;
        }
    }

    if(checkedAll)
        modPrice = - (-modulePacketPrices.get("pris_alla"));
    else if(checkedAllautomlidingofre)
        modPrice = - (-modulePacketPrices.get("pris_allautomlidingofre"));

    return modPrice;
}

function getPacket(value) {
    var re = /pris\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+).*/;
    return value.replace(re, "$2");
}

function getRegion(value) {
    var re = /pris\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+).*/;
    return value.replace(re, "$1");
}

function getRegion2(value) {
    var re = /chk\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+).*/;
    return value.replace(re, "$1");
}
function getPaper2(value) {
    var re = /chk\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+).*/;
    var ret = value.replace(re, "$2");
    if(ret == value) return "";
    return ret;
}

function getPaper(value) {
    var re = /pris\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)\_([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]+)/;
    var ret = value.replace(re, "$3");
    if(ret == value) return "";
    return ret;
}

function getControlName(packet, region, paper) {
    var temp = "pris_" + packet + "_" + region;
    if(paper != "") temp += "_" + paper;
    return temp;
}

function calculatePrice(formObject) {
    // Calculate price
    var modulePrice = getModulePrice(formObject);
    var editions = getEditions(formObject);
    var totalDiscountFactor = 1;

    // Modulrabatt (hel/halvsida)
    var numModules = formObject.o_cbo_modul.options[formObject.o_cbo_modul.selectedIndex].value;
    var idNrTemp = formObject.o_cbo_modul.options[formObject.o_cbo_modul.selectedIndex].id;
    var module = idNrTemp.substring(0,idNrTemp.indexOf('('));

    if(module == "x38") totalDiscountFactor = totalDiscountFactor * 0.92;
    else if(module == "x64") totalDiscountFactor = totalDiscountFactor * 0.92;
    else if(module == "x68") totalDiscountFactor = totalDiscountFactor * 0.85;

    modulePrice = modulePrice * numModules;

    // Pris utan kundrabatt
    formObject.o_txt_priceEx.value =  Math.round(modulePrice * totalDiscountFactor);

    // Kundrabatt
    var clientDiscount = formObject.o_txt_rabatt.value;
    if(clientDiscount != "")
        totalDiscountFactor = totalDiscountFactor * (100 - clientDiscount) / 100;

    // Sätt total rabatt (fältet) och pris samt sätt Boka till enable
    if (idNrTemp != ''){
        booking(false);
        formObject.o_txt_totalrabatt.value =  Math.round((1 - totalDiscountFactor) * 100);
        formObject.o_txt_price.value =  Math.round(modulePrice * totalDiscountFactor);
        formObject.o_txt_editions.value =  editions;
    }
    else {
        alert('Vänligen välj modul!');
    }
}

function booking(value){
    document.forms['bookingForm'].button_boka.disabled = value;
}

function submitMail(){
    var formObject = document.forms['bookingForm'];
    var body = "Hej, vänligen kontakta mig angående följande förfrågan: \n\n ";

    for(var i = 0; i < formObject.length; i++) {
        var formControl = formObject[i];
        if(formControl.checked){
            if(moduleNames.get(formControl.value)!=null){
                body = body + moduleNames.get(formControl.value)+"\n";
            }
        }
    }

    body = body + "\nFormat:\tFärg";
    body = body + "\nModul:" + formObject.o_cbo_modul.options[formObject.o_cbo_modul.selectedIndex].text;
    body = body + "\n\nUpplaga:" + formObject.o_txt_editions.value;
    body = body + "\nBeräknat nettopris:" + formObject.o_txt_price.value;

    document.location="mailto:thomas.nyhlen@mitti.net?subject=Internetbeställning&body="+escape(body);
}
