 
 //module pattern: http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/
myDDF = function() {

    var typer;
    var omraader; // egentlig kroppsdel-område-kombo
    var behandlinger;
    var holdere; // holder på hvilken av arrayene en nå jobber på.
    var map; // mapper div-id -> index i holder array

    var regionDdID;

    var hiddenProsNavn;

    //-------------- Constructors ----------------------

    function infoHolder(theText, theArray, theName) {
        this.text = theText; // når ingenting er valgt
        this.array = theArray;  // arrayen f.eks. kroppsdeler
        this.name = theName;  // navnet som blir brukt i id'ene
    }

    function type(id, navn, mapIdx) {
        this.ID = id;
        this.text = navn;
        this.list = [];
        this.mapIdx = mapIdx;
    }

    function omraade(id, navn, mapIdx) {
        this.ID = id;
        this.text = navn;
        this.list = [];
        this.mapIdx = mapIdx;
    }

    function behandling(id, navn) {
        this.ID = id;
        this.text = navn;
    }

    //----------- Setters -------------------------------

    function setData(typeA, omraA, behA, holdA, mapA) {
        typer = typeA;
        omraader = omraA;
        behandlinger = behA;
        holdere = holdA;
        map = mapA;
    }

    function setRegionIDandResultId(regDD) {
        regionDdID = regDD;
    }

    //----------------- Handlers -----------------------


    function setHandleClickEvent(theItems) {
        theItems.find("input").click(function() {
            var theItemsSpan = jQuery(this).parent("span.item").parent("span.items");
            theItemsSpan.find("input").removeAttr("checked");
            jQuery(this).attr("checked", "checked");

            var thisHolder = holdere[map[theItemsSpan.attr('id')]];
            var thisChoice = thisHolder.array[this.value];

            if (thisChoice.mapIdx)                                               // altså ikke den siste (aka behandling)
            {
                jQuery(hiddenProsNavn).val('');
                theItemsSpan.parent("div").nextAll("div.radioDropdownList").addClass("hidden").not(regionDdID).clearRadioDropdownList();
                jQuery(".regionMap").addClass("hidden");
                populateDiv(thisChoice.list, holdere[thisChoice.mapIdx]);
            } else {                                                              //behandling blir valgt
                jQuery(hiddenProsNavn).val(thisChoice.text);
                jQuery(regionDdID).find(".item").removeClass("selected").find("input").removeAttr("checked").end().end()
                        .find("h3 span").html("Velg region").end()
                        .removeClass("hidden");
                jQuery(".regionMap").removeClass("hidden").find("div.selectedAreas img").hide();
                FSN.clearSelectedAreas();
            }
        });
    }


    //----------- Public funcitions -------------

    function start(firstDropDownID, hiddenProsField) {
        hiddenProsNavn = hiddenProsField;
        setHandleClickEvent(jQuery(firstDropDownID));
    }

    function setInitialValues(choiceArray) {
        if (choiceArray) {
            if (choiceArray.length > 1) {
                var thisChoice = { mapIdx: 0, list: new Array(1,2,3,4) };
                for (var i = 0; i < choiceArray.length; i = i + 1) {
                    var theDiv = jQuery('#' + holdere[thisChoice.mapIdx].name + '_containerDiv');
                    theDiv.clearRadioDropdownList();
                    populateDiv(thisChoice.list, holdere[thisChoice.mapIdx]);

                    var thisHolder = holdere[thisChoice.mapIdx];
                    thisChoice = thisHolder.array[choiceArray[i]];

                    theDiv.find("h3 span").html(thisChoice.text);
                    theDiv.find("span input[value=\'" + thisChoice.ID + "\']").attr("checked", "checked").parent("span").addClass("selected");
                }

                var regionDropDown = jQuery(regionDdID).removeClass("hidden");
                if (regionDropDown.find("span span input[checked]").length < 1) {
                    regionDropDown.find("h3 span").html("Velg region");
                }
                jQuery(".regionMap").removeClass("hidden");
            }
            jQuery("#opplysninger").refreshTabs();
        }
    }

    function populateDiv(idList, theHolder) {
        var theDiv = jQuery('#' + theHolder.name + '_containerDiv').removeClass("hidden");

        var theItems = theDiv
                .append('<h3><span>' + theHolder.text + '</span></h3>')
                .append('<span></span>')
                .children("span")
                    .attr('id', theHolder.name)
                    .addClass('items')
                    .width('31ex');

        var teller = 0;
        for (var i in idList) {
            var inputId = theHolder.name + '_' + teller;

            var theInput = jQuery('<input type="radio" name="' + theHolder.name.replace(/\_/g, '$') + '"/>')
                    .attr('id', inputId)
                    .attr('value', theHolder.array[idList[i]].ID);

            var theLabel = jQuery('<label>' + theHolder.array[idList[i]].text + '</label>')
                    .attr('for', inputId);

            var toAdd = jQuery('<span></span>')
                    .addClass('item')
                    .append(theInput)
                    .append(theLabel);

            theItems.append(toAdd);
            teller++;
        }
        setHandleClickEvent(theItems);
        jQuery(theDiv).initRadioDropdownList();
    }

    return {
        setInitialValues: setInitialValues,
        type: type,
        omraade: omraade,
        behandling: behandling,
        infoHolder: infoHolder,
        setData: setData,
        setRegionIDandResultId: setRegionIDandResultId,
        start: start
    };

} (); 
