﻿/// <reference path="Common.js" />
var postfix = "__ctl0_selectProduct";
var panelFactoryWheelsId = prefix + "factoryWheels";
var panelCustomWheelsId = prefix + "customWheels";
var logic = new PageLogic();

$(document).ready(function() {
    InitGroup();
});

function InitGroup() {
    logic.appRoot = pageLogic.appRoot;
    logic.buildId = pageLogic.buildId;
    logic.styleCode = pageLogic.styleCode;
    logic.imagePath = "/DBImages/81x70/";
    logic.prefix = "#ctl00_pageContentRegion_";  //"#masterPage_pageContentRegion_";
    logic.controlSuffix = "__ctl0_selectProduct";
    logic.imageSuffix = "__ctl0_productImage";
    logic.containerSuffix = "__ctl0_container";
    
    InitScrollControl(summaryBoxPanel);
    InitSummaryBox(logic);
    InitButtons();

    var forksItem = logic.CreateItem("GetForks", "AddForkToBuild", "forkSelector");
    var crankLengthsItem = logic.CreateItem("GetCrankLengths", "SetCrankLength", "selectCrankLength");
    var cranksItem = logic.CreateItem("GetCranks", "AddCrankToBuild", "crankSelector");
    var crankArmsItem = logic.CreateItem("GetCrankArms", "AddCrankArmToBuild", "crankArmSelector");
    var chainringItem = logic.CreateItem("GetChainrings", "AddChainringToBuild", "chainringSelector");
    var bottomBracketsItem = logic.CreateItem("GetBottomBrackets", "AddBottomBracketToBuild", "bottomBracketSelector");
    var frontDerailleursItem = logic.CreateItem("GetFrontDerailleurs", "AddFrontDerailleurToBuild", "frontDerailleurSelector");
    var cassettesItem = logic.CreateItem("GetCassettes", "AddCassetteToBuild", "cassetteSelector");
    var trackCogItem = logic.CreateItem("GetTrackCogs", "AddTrackCogToBuild", "trackCogSelector");
    var freeWheelItem = logic.CreateItem("GetFreeWheels", "AddFreeWheelToBuild", "freeWheelSelector");
    var lockringItem = logic.CreateItem("GetLockrings", "AddLockringToBuild", "lockringSelector");
    var rearDerailleursItem = logic.CreateItem("GetRearDerailleurs", "AddRearDerailleurToBuild", "rearDerailleurSelector");
    var chainsItem = logic.CreateItem("GetChains", "AddChainToBuild", "chainSelector");
    var wheelTypesItem = logic.CreateItem("GetWheelTypes", "AddWheelsToBuild", "wheelTypeSelect");
    var rearSkewersItem = logic.CreateItem("GetRearSkewers", "AddSkewerToBuild", "rearSkewerSelector");
    
    forksItem.updateParameters = { forkId: forksItem.SelectedValue };

    crankLengthsItem.containerName = "";
    crankLengthsItem.controlSuffix = "";
    crankLengthsItem.imageName = "";
    crankLengthsItem.updateParameters = { crankLength: crankLengthsItem.SelectedValue };
    crankLengthsItem.dependentItems = { cranks: cranksItem };

    cranksItem.updateParameters = { crankId: cranksItem.SelectedValue };
    cranksItem.dependentItems = { bottomBrackets: bottomBracketsItem, frontDerailleurs: frontDerailleursItem };

    crankArmsItem.updateParameters = { crankArmId: crankArmsItem.SelectedValue };
    crankArmsItem.dependentItems = { chainring: chainringItem, bottomBrackets: bottomBracketsItem };

    chainringItem.updateParameters = { chainringId: chainringItem.SelectedValue };
    chainringItem.dependentItems = { trackCog: trackCogItem, freeWheel: freeWheelItem };

    bottomBracketsItem.updateParameters = { bottomBracketId: bottomBracketsItem.SelectedValue };

    frontDerailleursItem.updateParameters = { frontDerailleurId: frontDerailleursItem.SelectedValue };

    cassettesItem.updateParameters = { cassetteId: cassettesItem.SelectedValue };

    trackCogItem.updateParameters = { trackCogId: trackCogItem.SelectedValue };

    freeWheelItem.updateParameters = { freeWheelId: freeWheelItem.SelectedValue };

    lockringItem.updateParameters = { lockringId: lockringItem.SelectedValue };
    
    rearDerailleursItem.updateParameters = { rearDerailleurId: rearDerailleursItem.SelectedValue };

    chainsItem.updateParameters = { chainId: chainsItem.SelectedValue };

    wheelTypesItem.containerName = "";
    wheelTypesItem.controlSuffix = "";
    wheelTypesItem.imageName = "";
    wheelTypesItem.updateParameters = { wheelType: wheelTypesItem.SelectedValue };

    rearSkewersItem.updateParameters = { skewerId: rearSkewersItem.SelectedValue, frontOrRear: "R" };

    InitBrakes();
    InitFactoryWheels();
    InitCustomWheels();

    logic.Init();

    forksItem.Load();
    crankLengthsItem.Load();
    crankArmsItem.Load();
    cassettesItem.Load();
    trackCogItem.Load();
    freeWheelItem.Load();
    lockringItem.Load();
    rearDerailleursItem.Load();
    chainsItem.Load();
    wheelTypesItem.Load();

    $(wheelTypesItem.dropDownName).bind("change", ShowWheels);
    $(wheelTypesItem.dropDownName).bind("LoadComplete", ShowWheels);
}

function InitButtons() {
    $(prefix + "nextPage").bind("click", function(event) {
        logic.LoadUrl("/WSLogic/Kit.aspx");
        return false;
    });

    $(prefix + "nextPageBottom").bind("click", function(event) {
        logic.LoadUrl("/WSLogic/Kit.aspx");
        return false;
    });
}

function InitBrakes() {
    if (logic.styleCode == "R") {
        InitRoadBrakes(logic);
    }
    else {
        InitMountainBrakes(logic);
    }
}

function InitRoadBrakes() {
    var brakesItem = logic.CreateItem("GetBrakes", "AddBrakeToBuild", "brakesetSelector");
    var brakeShiftsItem = logic.CreateItem("GetBrakeShifts", "AddBrakeShiftToBuild", "brakeShiftSelector");

    brakesItem.getParameters = { frontOrRear: "S", brakeType: "" };
    brakesItem.updateParameters = { brakeId: brakesItem.SelectedValue, frontOrRear: "S" };

    brakeShiftsItem.updateParameters = { brakeShiftId: brakeShiftsItem.SelectedValue };

    logic.items["forkSelector"].dependentItems = { brakes: brakesItem, brakeShifts: brakeShiftsItem, wheelTypes: logic.items["wheelTypeSelect"] };
}

function InitMountainBrakes() {
    var discTypesItem = logic.CreateItem("GetDiscTypes", "", "selectDiscType");
    var frontBrakesItem = logic.CreateItem("GetBrakes", "AddBrakeToBuild", "frontBrakeSelector");
    var rearBrakesItem = logic.CreateItem("GetBrakes", "AddBrakeToBuild", "rearBrakeSelector");
    var brakeLeversItem = logic.CreateItem("GetBrakeLevers", "AddBrakeLeverToBuild", "brakeLeverSelector");
    var shiftersItem = logic.CreateItem("GetShifters", "AddShifterToBuild", "shifterSelector");

    discTypesItem.containerName = "";
    discTypesItem.controlSuffix = "";
    discTypesItem.imageName = "";
    discTypesItem.dependentItems = { frontBrakes: frontBrakesItem, rearBrakes: rearBrakesItem };

    frontBrakesItem.getParameters = { frontOrRear: "F", brakeType: discTypesItem.SelectedValue };
    frontBrakesItem.updateParameters = { brakeId: frontBrakesItem.SelectedValue, frontOrRear: "F" };
    frontBrakesItem.dependentItems = { brakeLevers: brakeLeversItem };

    rearBrakesItem.getParameters = { frontOrRear: "R", brakeType: discTypesItem.SelectedValue };
    rearBrakesItem.updateParameters = { brakeId: rearBrakesItem.SelectedValue, frontOrRear: "R" };

    brakeLeversItem.updateParameters = { brakeLeverId: brakeLeversItem.SelectedValue };

    shiftersItem.updateParameters = { shifterId: shiftersItem.SelectedValue, frontOrRear: "S" };

    logic.items["forkSelector"].dependentItems = { discTypes: discTypesItem, wheelTypes: logic.items["wheelTypeSelect"] };

    shiftersItem.Load();
}

function InitFactoryWheels() {
    var wheelsetsItem = new Item("GetWheelsets", "AddWheelsetToBuild", "wheelSetSelector");
    var skewersetsItem = new Item("GetSkewers", "AddSkewerToBuild", "skewerSelector");

    wheelsetsItem.updateParameters = { wheelsetId: wheelsetsItem.SelectedValue };
    wheelsetsItem.dependentItems = { skewersets: skewersetsItem, rearSkewers: logic.items["rearSkewerSelector"] };

    skewersetsItem.updateParameters = { skewerId: skewersetsItem.SelectedValue, frontOrRear: "S" };

    logic.factoryWheels.wheelsets = wheelsetsItem;
    logic.factoryWheels.skewersets = skewersetsItem;
}

function InitCustomWheels() {
    var tireMountTypesItem = new Item("GetTireMountTypes", "", "tireMountType");
    var frontHubsItem = new Item("GetFrontHubs", "AddFrontHubToBuild", "frontHubSelector");
    var rearHubsItem = new Item("GetRearHubs", "AddRearHubToBuild", "rearHubSelector");
    var frontRimsItem = new Item("GetFrontRims", "AddRimToBuild", "frontRimSelector");
    var rearRimsItem = new Item("GetRearRims", "AddRimToBuild", "rearRimSelector");
    var frontCrossPatternsItem = new Item("GetFrontCrossPatterns", "SetFrontCrossPattern", "selectFrontCrossPattern");
    var rearCrossPatternsItem = new Item("GetRearCrossPatterns", "SetRearCrossPattern", "selectRearCrossPattern");
    var frontSpokesItem = new Item("GetFrontSpokes", "AddSpokeToBuild", "frontSpokeSelector");
    var rearSpokesItem = new Item("GetRearSpokes", "AddSpokeToBuild", "rearSpokeSelector");
    var nipplesItem = new Item("GetNipples", "AddNipplesToBuild", "nippleSelector");
    var frontSkewersItem = new Item("GetFrontSkewers", "AddSkewerToBuild", "frontSkewerSelector");

    tireMountTypesItem.containerName = "";
    tireMountTypesItem.controlSuffix = "";
    tireMountTypesItem.imageName = "";
    tireMountTypesItem.dependentItems = { frontHubs: frontHubsItem, rearHubs: rearHubsItem };

    frontHubsItem.updateParameters = { frontHubId: frontHubsItem.SelectedValue };
    frontHubsItem.dependentItems = { frontRims: frontRimsItem, frontSpokes: frontSpokesItem, frontSkewers: frontSkewersItem };

    rearHubsItem.updateParameters = { rearHubId: rearHubsItem.SelectedValue };
    rearHubsItem.dependentItems = { rearRims: rearRimsItem, rearSpokes: rearSpokesItem, rearSkewers: logic.items["rearSkewerSelector"] };

    frontRimsItem.getParameters = { tireMountType: tireMountTypesItem.SelectedValue };
    frontRimsItem.updateParameters = { rimId: frontRimsItem.SelectedValue, frontOrRear: "F" };

    rearRimsItem.getParameters = { tireMountType: tireMountTypesItem.SelectedValue };
    rearRimsItem.updateParameters = { rimId: rearRimsItem.SelectedValue, frontOrRear: "R" };

    frontCrossPatternsItem.containerName = "";
    frontCrossPatternsItem.controlSuffix = "";
    frontCrossPatternsItem.imageName = "";
    frontCrossPatternsItem.updateParameters = { frontCrossPattern: frontCrossPatternsItem.SelectedValue };

    rearCrossPatternsItem.containerName = "";
    rearCrossPatternsItem.controlSuffix = "";
    rearCrossPatternsItem.imageName = "";
    rearCrossPatternsItem.updateParameters = { rearCrossPattern: rearCrossPatternsItem.SelectedValue };

    frontSpokesItem.updateParameters = { spokeId: frontSpokesItem.SelectedValue, frontOrRear: "F" };

    rearSpokesItem.updateParameters = { spokeId: rearSpokesItem.SelectedValue, frontOrRear: "R" };

    nipplesItem.updateParameters = { nippleId: nipplesItem.SelectedValue, frontOrRear: "F" };

    frontSkewersItem.updateParameters = { skewerId: frontSkewersItem.SelectedValue, frontOrRear: "F" };

    logic.customWheels.tireMountTypes = tireMountTypesItem;
    logic.customWheels.frontHubs = frontHubsItem;
    logic.customWheels.rearHubs = rearHubsItem;
    logic.customWheels.frontRims = frontRimsItem;
    logic.customWheels.rearRims = rearRimsItem;
    logic.customWheels.frontCrossPatterns = frontCrossPatternsItem;
    logic.customWheels.rearCrossPatterns = rearCrossPatternsItem;
    logic.customWheels.frontSpokes = frontSpokesItem;
    logic.customWheels.rearSpokes = rearSpokesItem;
    logic.customWheels.nipples = nipplesItem;
    logic.customWheels.frontSkewers = frontSkewersItem;
}

function ShowWheels() {
    wheelTypesItem = logic.items["wheelTypeSelect"];
    
    if (wheelTypesItem.SelectedValue() == "custom") {
        $(panelFactoryWheelsId).hide();
        $(panelCustomWheelsId).show();
        wheelTypesItem.ClearDependentItems();
        wheelTypesItem.AddDependentItem("tireMountTypes", logic.customWheels.tireMountTypes);
        wheelTypesItem.AddDependentItem("frontCrossPatterns", logic.customWheels.frontCrossPatterns);
        wheelTypesItem.AddDependentItem("rearCrossPatterns", logic.customWheels.rearCrossPatterns);
        wheelTypesItem.AddDependentItem("nipples", logic.customWheels.nipples);
    }
    else {
        $(panelCustomWheelsId).hide();
        $(panelFactoryWheelsId).show();
        wheelTypesItem.ClearDependentItems();
        wheelTypesItem.AddDependentItem("wheelsets", logic.factoryWheels.wheelsets);
    }
}
