 
 //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 resultTableID;
        
        var dummyMenuResultViewID;
        var menuResultViewID;
        var linkArray;
        var synligArray;
        var erfaringArray;
        
        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, resTable){
            regionDdID = regDD;
            resultTableID = resTable;
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args){
                jQuery(resultTableID).removeClass("hidden");
            });
        }
        
        function setMenyIdOgMenyData(dummyResultMenuID, resultMenuID, linkArr, synligArr, erfaringArr)
        {
            dummyMenuResultViewID = dummyResultMenuID;
            menuResultViewID = resultMenuID;
            linkArray = linkArr;
            synligArray = synligArr;
            erfaringArray = erfaringArr;
        }
                  
        //----------------- Handlers -----------------------
        
        function setHandleMenyAndLink(theInputs, IDbytteLink)
        {   
            theInputs.click(function(){
        
                jQuery(IDbytteLink).attr("href", linkArray[this.value]);
                
                var denneSynlig = synligArray[this.value];
                
                var dummyMenuView = jQuery(dummyMenuResultViewID);
                
                dummyMenuView.find("li").removeClass("hidden");
                dummyMenuView.find("li:last").children("a").html(erfaringArray[this.value]);
                
                var menuItem = dummyMenuView.find("li:first");
                for(var i in denneSynlig)
                {
                    if(!denneSynlig[i])
                    {
                        menuItem.addClass("hidden");
                    }
                    menuItem = menuItem.next("li");
                }   
            });
        }
        
        
        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();
                }
                
                jQuery(dummyMenuResultViewID).removeClass("hidden");
                jQuery(resultTableID).addClass("hidden");
                jQuery(menuResultViewID).addClass("hidden");
                
            });
        }
        
        
        //----------- Public funcitions -------------
        
        function start(firstDropDownID, bytteLinkID, hiddenProsField)
        {
            hiddenProsNavn = hiddenProsField;
            setHandleClickEvent(jQuery(firstDropDownID));
            setHandleMenyAndLink(jQuery(firstDropDownID).find("input"), bytteLinkID);
        }
        
        function setInitialValues(choiceArray)
        {
            if(choiceArray)
            {
                if(choiceArray.length > 1)
                {
                    var thisChoice = typer[choiceArray[0]];
                    for(var i = 1; 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");
                }
            }
        }
        
        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,
            setMenyIdOgMenyData: setMenyIdOgMenyData,
            setRegionIDandResultId: setRegionIDandResultId,
            start:start
        };
    
   }(); 