// ===============================================================
// CBkort version 2.x, copyright Carl Bro GIS&IT, 2006
// ===============================================================
// $Archive: /Products/CBKort2/development/2.3/standard/wwwroot/js/standard/treemenu.js $ 
// $Date: 27-04-07 10:53 $
// $Revision: 1 $ 
// $Author: Nsm $
// =============================================================== 

function treeClick(elem,show)
{
   var elemName = elem.id.split('_')[1];
   var divId = "div_" + elemName;
   var imgId = "img_" + elemName;
   var divElem = getElement(divId);
   var imgElem = getElement(imgId);
   var str = document.mapserv.selectorgroups.value;
   //alert (document.mapserv.selectorgroups.value);

   var selectorGroups = str.split('!');
   if (isBlock(divElem) && !show)
   {
       hideBlock(divElem);
       if (imgElem){
	       var imgUrl = imgElem.src;
 	      imgUrl = imgUrl.replace(/minus/,'plus');
	       imgElem.src = imgUrl;
	     }
       var newStr = "";
       for (var i=0;i<selectorGroups.length;i++)
           //if (selectorGroups[i] != elemName && selectorGroups[i] != '*')
           if (selectorGroups[i] != elemName)
               newStr+= ((newStr.length>0) ? "!" : "") + selectorGroups[i];
       document.mapserv.selectorgroups.value = newStr;
   }
   else
   {
       showBlock(divElem);
       if (imgElem){
	       var imgUrl = imgElem.src;
	       imgUrl = imgUrl.replace(/plus/,'minus');
	       imgElem.src = imgUrl;
	     }
       document.mapserv.selectorgroups.value+= ((str.length>0) ? "!" : "")+elemName;
   }
   // if (notifyMenu)
   //    notifyMenu();
   //alert (document.mapserv.selectorgroups.value);
}

function getLayers(inputName)
{
    var layers = "";
    var layerBoxes = document.getElementsByName(inputName);
    for (var i=0;i<layerBoxes.length;i++)
    {
        if (layerBoxes[i].type=="hidden"||layerBoxes[i].checked)
            layers+= ((layers.length > 1) ? " " : "") +layerBoxes[i].value;
    }
    return layers;
}


function getAllLayers()
{
    var rblayers = getLayers("rblayer");
    var cblayers = getLayers("cblayer");
    return (cblayers.length > 1) ? cblayers+rblayers : rblayers;
}

function modLayer(obj, lag)
{
    var layers = "";
    var loc = document.location.href;
    
    for(var i=0;i<themegroups.length;i++)
    {
        if(themegroups[i].type == 'radiobutton')
        {
            var l = getLayers("rblayer"+(i+1));
            if(l!='')
                layers += " "+ l;
        }
    }
    var cblayers = getLayers("cblayer");
    if (cblayers.length > 1)
        layers += " " + cblayers;
    document.mapserv.layers.value = layers;
    document.mapserv.zoomdir.value = "0";
    document.mapserv.submit();
}

function updateLayers()
{
    var mapLayers = document.mapserv.layers.value+" ";
    var layerBoxes = document.getElementsByName('cblayer');
    for (var i=0;i<layerBoxes.length;i++)
    {
        var layerBox = layerBoxes[i];
        layerBox.checked = (mapLayers.indexOf(layerBox.value+" ")>=0);
    }
    for(var j=0;j<themegroups.length;j++)
    {
        var radioButtons = document.getElementsByName('rblayer'+(j+1));
        for (var i=0;i<radioButtons.length;i++)
        {
            var radioButton = radioButtons[i];
            radioButton.checked = (mapLayers.indexOf(radioButton.value+" ")>=0);
        }
    }
    var ml = mapLayers.split(' ');
    setAllThemesStatus(false);
    for (var i=0;i<ml.length;i++)
    {
        if(ml[i] && ml[i]!=' ')
            setThemeStatus(ml[i],true);
    }
    checkGroupStatus();
}

function addLayerToList(layername,currentlayers)
{
    if(!currentlayers || currentlayers=='')
        currentlayers = document.mapserv.layers.value+" ";
    if(currentlayers.lastIndexOf(' ')!=currentlayers.length-1)
        currentlayers+=' ';
    var layers = currentlayers.split(' ');
    var l = '';
    for (var i=0;i<layers.length;i++)
    {
        if(layers[i] && layers[i]!=' ')
        {
            if(layers[i] == layername)
                return currentlayers;
            l += layers[i] + ' ';
        }
    }
    return l+layername;
}

function removeLayerFromList(layername,currentlayers)
{
    if(!currentlayers || currentlayers=='')
        currentlayers = document.mapserv.layers.value+" ";
    if(currentlayers.lastIndexOf(' ')!=currentlayers.length-1)
        currentlayers+=' ';
    var layers = currentlayers.split(' ');
    var rl = '';
    for (var i=0;i<layers.length;i++)
    {
        if(layers[i] && layers[i]!=' ')
        {
            if(layers[i] != layername)
                rl += layers[i]+' ';
        }
    }
    return rl;
}

function addLayer(layername)
{
    setLayers(addLayerToList(layername));
}

function removeLayer(layername)
{
    setLayers(removeLayerFromList(layername));
}

function setLayers(layers)
{
    setHelperframeSrc();
    var zd = document.mapserv.zoomdir.value;
    document.mapserv.layers.value = layers;
    document.mapserv.zoomdir.value = "0";
    document.mapserv.submit();
    document.mapserv.zoomdir.value = zd;
    updateLayers();
    showWaitingBox();
}


//addLayerToList(layername,currentlayers)
//removeLayerFromList(layername,currentlayers)

function treeClickSimple(elem)
{
   var elemName = elem.id.split('_')[1];
   var divId = "div_" + elemName;
   var imgId = "img_" + elemName;
   var divElem = getElement(divId);
   var imgElem = getElement(imgId);

   if (isBlock(divElem))
   {
       hideBlock(divElem);
       if (imgElem)
       {
           var imgUrl = imgElem.src;
           imgUrl = imgUrl.replace(/minus/,'plus');
           imgElem.src = imgUrl;
       }
   }
   else
   {
       showBlock(divElem);
       if (imgElem)
       {
           var imgUrl = imgElem.src;
           imgUrl = imgUrl.replace(/plus/,'minus');
           imgElem.src = imgUrl;
       }
   }
}



//Funktioner til temagrupper
function ThemeGroup(groupname)
{
    this.groupname = groupname;
    this.type = null;
    this.themes = new Array();
    this.groupstatus = 0;
}

ThemeGroup.prototype.addTheme = function(themename,minscale,maxscale)
{
    this.themes[this.themes.length] = new Theme(themename,minscale,maxscale);
}

ThemeGroup.prototype.getThemes = function()
{
    return this.themes;
}

ThemeGroup.prototype.getTheme = function(themename)
{
    for(var i=0;i<this.themes.length;i++)
    {
        if(this.themes[i].name == themename)
            return this.themes[i];
    }
}

/*
ThemeGroup.prototype.getThemeList = function()
{
    var list = '';
    for(var i=0;i<this.themes.length;i++)
    {
        list += this.themes[i].name+' ';
    }
    list = list.substring(0,list.length-1);
    return list;
}
*/
ThemeGroup.prototype.getThemeStatusList = function(status)
{
    var list = '';
    for(var i=0;i<this.themes.length;i++)
    {
        if(this.themes[i].status == status)
            list = addLayerToList(this.themes[i].name,list);
        else
            list = removeLayerFromList(this.themes[i].name,list);
    }
    if(list.lastIndexOf(' ')==list.length-1)
        list = list.substring(0,list.length-1);
    return list;
}

ThemeGroup.prototype.themeStatusCount = function(status)
{
    var n = 0;
    for(var i=0;i<this.themes.length;i++)
    {
        if(this.themes[i].status == status)
            n++;
    }
    return n;
}

ThemeGroup.prototype.checkGroupType = function()
{
    if(this.type=='radiobutton')
    {
        var e = getElement('groupcheckbox_'+this.groupname);
        if(e)
            hideElement(e);
    }
}

ThemeGroup.prototype.checkStatus = function()
{
    var ct = this.themeStatusCount(true);
//    alert(ct+' - '+this.themes.length);
    var from2 = false;
    if(ct==0)
        this.groupstatus = 0;
    else if(ct==this.themes.length)
        this.groupstatus = 2;
    else
    {
        if(this.groupstatus==2)
            from2 = true;
        this.groupstatus = 1;
    }

    var img = getElement('groupcheckbox_'+this.groupname);
    if(img)
    {
        var stat = this.groupstatus;
        if(stat==0)
        {
            img.src = img.src.replace(/[du][in]___.*gif/,"___ch.gif");
            img.src = img.src.replace(/___.*gif/,"un___ch.gif");
        }
        else if(stat==1)
        {
            var image = img.src.replace(/[du][in]___.*gif/,"di___ch.gif");
            if(from2)
                image = img.src.replace(/___.*gif/,"di___ch.gif");
            img.src = image;
        }
        else
            img.src = img.src.replace(/[du][in]___.*gif/,"___ch.gif");
    }
    return;
}

ThemeGroup.prototype.setAllThemesStatus = function(status)
{
    for(var j=0;j<this.themes.length;j++)
    {
        this.themes[j].status = status;
    }
}

ThemeGroup.prototype.setGroupStatus = function(status)
{
    if(this.groupstatus!=status)
    {
        // sæt groupcheckbox_GROUPNAME til det relevante!
        this.groupstatus = status;
    }
}

ThemeGroup.prototype.showAllThemes = function()
{
    this.setAllThemesStatus(true);
    var tl = getThemeStatusList(true);
    //alert(tl);
}

ThemeGroup.prototype.hideAllThemes = function()
{
    this.setAllThemesStatus(false);
    var tl = getThemeStatusList(true);
    //alert(tl);
}

ThemeGroup.prototype.showHideAllThemes = function(img)
{
    var gs = this.groupstatus;
    if(gs==2)
    {
        this.setAllThemesStatus(false);
        this.groupstatus = 0;
        if(img)
            img.src = img.src.replace(/___.*gif/,"un___ch.gif");
    }
    else if(gs==1)
    {
        this.setAllThemesStatus(true);
        this.groupstatus = 2;
        if(img)
            img.src = img.src.replace(/[du][in]___.*gif/,"___ch.gif");
    }
    else
    {
        this.setAllThemesStatus(true);
        this.groupstatus = 2;
        if(img)
            img.src = img.src.replace(/[du][in]___.*gif/,"___ch.gif");
    }
    
    var tl = this.getThemeStatusList(true);
    tl = tl.replace(/    /g,' ');
    tl = tl.replace(/   /g,' ');
    tl = tl.replace(/  /g,' ');
    setLayers(tl);
}

//Funktioner til temaer
function Theme(themename,minscale,maxscale)
{
    this.name = themename;
    this.status = false;
    this.minscale = (minscale=='') ? -1 : minscale-0;
    this.maxscale = (maxscale=='') ? 99999999999 : maxscale-0;
}



//Temavælger
var themegroups = new Array();

function addThemeGroup(groupname)
{
    for(var i=0;i<themegroups.length;i++)
    {
        if(themegroups[i].groupname == groupname)
            return;
    }
    themegroups[themegroups.length] = new ThemeGroup(groupname);
}

function setThemeGroupType(groupname,type)
{
    getThemeGroup(groupname).type = type;
}

function getThemeGroup(groupname)
{
    for(var i=0;i<themegroups.length;i++)
    {
        if(themegroups[i].groupname == groupname)
            return themegroups[i];
    }
    return null;
}

function getThemeGroupByThemename(themename)
{
    for(var i=0;i<themegroups.length;i++)
    {
        for(var j=0;j<themegroups[i].themes.length;j++)
        {
            if(themegroups[i].themes[j].name == themename)
                return themegroups[i];
        }
    }
    return null;
}

function setAllThemesStatus(status,groupname)
{
    if(groupname==undefined)
    {
        for(var i=0;i<themegroups.length;i++)
            themegroups[i].setAllThemesStatus(status);
    }
    else
    {
        var group = getThemeGroup(groupname);
        if(group)
            group.setAllThemesStatus(status);
    }
}


function addTheme(groupname,themename,minscale,maxscale)
{
    for(var i=0;i<themegroups.length;i++)
    {
        if(themegroups[i].groupname == groupname)
            themegroups[i].addTheme(themename,minscale,maxscale);
    }
}

function getTheme(groupname,themename)
{
    for(var i=0;i<themegroups.length;i++)
    {
        if(themegroups[i].groupname == groupname)
            return themegroups[i].getTheme(themename);
    }
    return null;
}


function setThemeStatus(themename,status)
{
    var group = getThemeGroupByThemename(themename);
    if(group)
    {
        var theme = group.getTheme(themename);
        if(status==undefined)
            theme.status = !theme.status;
        else
            theme.status = status;
        
        group.checkStatus();
    }
}

function checkGroupStatus()
{
    for(var i=0;i<themegroups.length;i++)
    {
        var group = themegroups[i];
        if(group)
        {
            group.checkStatus();
            group.checkGroupType();
        }
    }
}

function getThemeStatusList(status)
{
    var list = '';
    for(var i=0;i<themegroups.length;i++)
    {
        //alert('list: '+list);
        list += themegroups[i].getThemeStatusList(status)+' ';
    }
    if(list.lastIndexOf(' ')==list.length-1)
        list = list.substring(0,list.length-1);
    return list;
}

function themeChanged(groupname,themename)
{
    setThemeStatus(themename);
}

function themeGroupChanged(groupname,img)
{
    var tg = getThemeGroup(groupname);
    if(tg)
        tg.showHideAllThemes(img);

    // Show selectorgroup
    if(tg.groupstatus==2)
    {
        var id = 'lbl_'+groupname;
        treeClick(getElement(id),true);
    }
}

function setThemeMinScale(themename,minscale)
{
    var group = getThemeGroupByThemename(themename);
    if(group)
        group.getTheme(themename).minscale = minscale;
}
function setThemeMaxScale(themename,maxscale)
{
    var group = getThemeGroupByThemename(themename);
    if(group)
        group.getTheme(themename).maxscale = maxscale;
}

function checkThemeMinMacScale()
{
    var current = cbKort.getCurrentScale();
    current = current - 0;
    if(themegroups.length > 0)
    {
        for(i=0;i<themegroups.length;i++)
        {
            var themegroup = themegroups[i];
            for(j=0;j<themegroup.themes.length;j++)
            {
                var theme = themegroup.themes[j];
                if(theme.minscale>current || theme.maxscale<current)
                    getElement('chk'+theme.name).disabled = true;
                else
                    getElement('chk'+theme.name).disabled = false;
            }            
        }
    }
}





function themeGroupMouseOver(img)
{
    img.src = img.src.replace(/___.*gif/,"___ch_mo.gif");
}
function themeGroupMouseDown(img)
{
    img.src = img.src.replace(/___.*gif/,"___ch_md.gif");
}
function themeGroupMouseOut(img)
{
    img.src = img.src.replace(/___.*gif/,"___ch.gif");
}