/**********************************
          GLOBAL VARIABLES
***********************************/
// pre-cache art files and sizes for widget styles and spacers
// (all images must have same height/width)
var collapsedWidget = new Image(20, 16);
collapsedWidget.src ="/danosa/recursos/comun/img/img_tree/oplus.gif";
var collapsedWidgetStart = new Image(20, 16);
collapsedWidgetStart.src = "/danosa/recursos/comun/img/img_tree/oplusStart.gif";
var collapsedWidgetEnd = new Image(20, 16);
collapsedWidgetEnd.src = "/danosa/recursos/comun/img/img_tree/oplusEnd.gif";
var expandedWidget = new Image(20, 16);
expandedWidget.src = "/danosa/recursos/comun/img/img_tree/ominus.gif";
var expandedWidgetStart = new Image(20, 16);
expandedWidgetStart.src = "/danosa/recursos/comun/img/img_tree/ominusStart.gif";
var expandedWidgetEnd = new Image(20, 16);
expandedWidgetEnd.src = "/danosa/recursos/comun/img/img_tree/ominusEnd.gif";
var nodeWidget = new Image(20, 16);
nodeWidget.src = "/danosa/recursos/comun/img/img_tree/onode.gif";
var nodeWidgetEnd = new Image(20, 16);
nodeWidgetEnd.src = "/danosa/recursos/comun/img/img_tree/onodeEnd.gif";
var emptySpace = new Image(20, 16);
emptySpace.src = "/danosa/recursos/comun/img/img_tree/oempty.gif";
var chainSpace = new Image(20, 16);
chainSpace.src = "/danosa/recursos/comun/img/img_tree/ochain.gif";

// miscellaneous globals
var widgetWidth = "20";
var widgetHeight = "16";
var currState = "";
var displayTarget = "contentFrame";

/*var olData= {childNodes:[{item:new outlineItem('Soluciones de Impermeabilizaci¾n'),
childNodes:[{item:new outlineItem('Cubierta plana'),
childNodes:[{item:new outlineItem('Transitable'),
childNodes:[{item:new outlineItem('Uso peatonal privado'),
childNodes:[{item:new outlineItem('Con baldosa cerßmica','/danosa/CMSServlet?node=IP1000&lng=1')},
{item:new outlineItem('Con pavimento flotante','/danosa/CMSServlet?node=IP1100&lng=1')},
{item:new outlineItem('Con losa filtrante','/danosa/CMSServlet?node=IP1200&lng=1')}]},
{item:new outlineItem(' Uso peatonalp·blico','/danosa/CMSServlet?node=IP2500&lng=1')}]},
{item:new outlineItem('ParavehÝculos'),
childNodes:[{item:new outlineItem('Protecci¾n de mortero','/danosa/CMSServlet?node=IP3000&lng=1')},
{item:new outlineItem('Sin protecci¾n','/danosa/CMSServlet?node=IP3500&lng=1')}]},
{item:new outlineItem('No transitable'),childNodes:[{item:new outlineItem('Forjado de hormig¾n'),
childNodes:[{item:new outlineItem('Terminaci¾n en grava','/danosa/CMSServlet?node=IP4000&lng=1')},
{item:new outlineItem('Autoprotegida','/danosa/CMSServlet?node=IP4100&lng=1')}]},
{item:new outlineItem('Chapa grecada','/danosa/CMSServlet?node=IP4500&lng=1')}]},
{item:newoutlineItem('Ajardinada'),
childNodes:[{item:new outlineItem('Tradicional'),
childNodes:[{item:new outlineItem('Con placa drenante','/danosa/CMSServlet?node=IP5000&lng=1')},
{item:new outlineItem('Con DranolÚn JardÝn','/danosa/CMSServlet?node=IP5100&lng=1')}]},
{item:new outlineItem('Ecol¾gica','/danosa/CMSServlet?node=IP5500&lng=1')}]}]},
{item:new outlineItem('Cubierta inclinada'),childNodes:[{item:new outlineItem('Autoprotegida'),
childNodes:[{item:new outlineItem('Con placa asfßltica','/danosa/CMSServlet?node=IT1000&lng=1')},
{item:new outlineItem('Con lßmina bituminosa','/danosa/CMSServlet?node=IT1100&lng=1')}]},
{item:new outlineItem('Con teja'),
childNodes:[{item:new outlineItem('Invertida','/danosa/CMSServlet?node=IT3000&lng=1')},
{item:new outlineItem('No aislada'),
childNodes:[{item:new outlineItem('Sin placa bajo teja'),
childNodes:[{item:new outlineItem('Teja sobre mortero','/danosa/CMSServlet?node=IT2000&lng=1')},
{item:new outlineItem('Teja sobre rastrel','/danosa/CMSServlet?node=IT2100&lng=1')}]},
{item:new outlineItem('Con placa BT mediterrßnea','/danosa/CMSServlet?node=IT2500&lng=1')},
{item:new outlineItem('Con placa BT','/danosa/CMSServlet?node=IT2600&lng=1')}]}]}]},
{item:new outlineItem('Elemento enterrado'),
childNodes:[{item:new outlineItem('Muro enterrado'),
childNodes:[{item:new outlineItem('Sobre el nivel freßtico'),
childNodes:[{item:new outlineItem('Muro de s¾tano','/danosa/CMSServlet?node=IM2000&lng=1')},
{item:new outlineItem('GalerÝa de servicio','/danosa/CMSServlet?node=IM2300&lng=1')}]},
{item:new outlineItem('Bajo el nivel freßtico','/danosa/CMSServlet?node=IM2100&lng=1')}]},
{item:new outlineItem('Solera sobre el terreno'),
childNodes:[{item:new outlineItem('Sobre el nivel freßtico','/danosa/CMSServlet?node=IM2200&lng=1')},
{item:new outlineItem('Bajo el nivel freßtico','/danosa/CMSServlet?node=IM1100&lng=1')}]},
{item:new outlineItem('Corte de capilaridad en muros','/danosa/CMSServlet?node=IM1000&lng=1')}]},
{item:new outlineItem('Otros'),childNodes:[{item:new outlineItem('Cuarto h·medo','/danosa/CMSServlet?node=IV1000&lng=1')},
{item:new outlineItem('Fachada'),childNodes:[{item:new outlineItem('Incolora','/danosa/CMSServlet?node=IV2000&lng=1')},
{item:new outlineItem('Color','/danosa/CMSServlet?node=IV2100&lng=1')}]},
{item:new outlineItem('Pavimentos'),
childNodes:[{item:new outlineItem('Para vehÝculos y zonas deportivas','/danosa/CMSServlet?node=IV3000&lng=1')},
{item:new outlineItem('Para terrazas y patios interiores','/danosa/CMSServlet?node=IV3100&lng=1')}]},
{item:new outlineItem('Jardinera','/danosa/CMSServlet?node=IV4000&lng=1')}]}]},
{item:new outlineItem('Soluciones de Ac·stica')},
{item:new outlineItem('Soluciones de Obra Civil')}]};
*/
/**********************************
           DATA COLLECTIONS
***********************************/
var expansionState = "";
// constructor for outline item objects
function outlineItem(text, uri) {
    this.text = text;
    this.uri = uri;
}

/**********************************
  TOGGLE DISPLAY AND ICONS
***********************************/
// invert item state (expanded to/from collapsed)
function swapState(currState, currVal, n) {
    var newState = currState.substring(0,n);
    newState += currVal ^ 1 // Bitwise XOR item n;
    newState += currState.substring(n+1,currState.length);
    return newState;
}

// retrieve matching version of 'minus' images
function getExpandedWidgetState(imgURL) {
    if (imgURL.indexOf("Start") != -1) {
        return expandedWidgetStart.src;
    }
    if (imgURL.indexOf("End") != -1) {
        return expandedWidgetEnd.src;
    }
    return expandedWidget.src;
}

// retrieve matching version of 'plus' images
function getCollapsedWidgetState(imgURL) {
    if (imgURL.indexOf("Start") != -1) {
        return collapsedWidgetStart.src;
    }
    if (imgURL.indexOf("End") != -1) {
        return collapsedWidgetEnd.src;
    }
    return collapsedWidget.src;
}

// toggle an outline mother entry, storing new state value;
// invoked by onclick event handlers of widget image elements
function toggle(img, blockNum) {
    var newString = "";
    var expanded, n;
    // modify state string based on parameters from IMG
    expanded = currState.charAt(blockNum);
    currState = swapState(currState, expanded, blockNum);
    // dynamically change display style
    if (expanded == "0") {
        document.getElementById("OLBlock" + blockNum).style.display = "block";
        img.src = getExpandedWidgetState(img.src);
    } else {
        document.getElementById("OLBlock" + blockNum).style.display = "none";
        img.src = getCollapsedWidgetState(img.src);
    }
}

function expandAll() {
    var newState = "";
    while (newState.length < currState.length) {
        newState += "1";
    }
    currState = newState;
    initExpand();
}

function collapseAll() {
    var newState = "";
    while (newState.length < currState.length) {
        newState += "0";
    }
    currState = newState;
    initExpand();
}

/*********************************
   OUTLINE HTML GENERATION
**********************************/
// apply default expansion state from outline's header
// info to the expanded state for one element to help
// initialize currState variable
function calcBlockState(n) {
    // get default expansionState data
    var expandedData = (expansionState.length > 0) ? expansionState.split(",") : null;
    if (expandedData) {
        for (var j = 0; j < expandedData.length; j++) {
            if (n == expandedData[j] - 1) {
                return "1";
            }
        }
    }
    return "0";
}

// counters for reflexive calls to drawOutline()
var currID = 0;
var blockID = 0;
// generate HTML for outline
function drawOutline(ol, prefix) {
    var output = "";
    var nestCount, link, nestPrefix, lastInnerNode;
    prefix = (prefix) ? prefix : "";
    for (var i = 0; i < ol.childNodes.length ; i++) {
        nestCount = (ol.childNodes[i].childNodes) ? ol.childNodes[i].childNodes.length : 0;
        output += "<div class='OLRow' id='line" + currID++ + "'>\n";
        if (nestCount > 0) {
            output += prefix;
            output += "<img id='widget" + (currID-1) + "' src='" + ((i == ol.childNodes.length-1 && blockID != 0) ? collapsedWidgetEnd.src : (blockID == 0) ? collapsedWidgetStart.src : collapsedWidget.src);
            output += "' height=" + widgetHeight + " width=" + widgetWidth;
            output += " title='Click to expand/collapse nested items.' onClick='toggle(this," + blockID + ")'>&nbsp;";
            link =  (ol.childNodes[i].item.uri) ? ol.childNodes[i].item.uri : "";
            if (link) {
                output += "<a href=\"" + link + "\" class='itemTitle' title='" +
                link + "'>" ;
            } else {
                output += "<a class='itemTitle' title='" + link + "'>";
            }
            output += "<span style='position:relative; top:-3px; height:11px'>" + ol.childNodes[i].item.text + "</span></a>";
            currState += calcBlockState(currID-1);
            output += "<span class='OLBlock' blocknum='" + blockID + "' id='OLBlock" + blockID++ + "'>";
            nestPrefix = prefix;
            nestPrefix += (i == ol.childNodes.length - 1) ?
                       "<img src='" + emptySpace.src + "' height=" + widgetHeight + " width=" + widgetWidth + ">" :
                       "<img src='" + chainSpace.src + "' height=" + widgetHeight + " width=" + widgetWidth + ">"
            output += drawOutline(ol.childNodes[i], nestPrefix);
            output += "</span></div>\n";
        } else {
            output += prefix;
            output += "<img id='widget" + (currID-1) + "' src='" + ((i == ol.childNodes.length - 1) ? nodeWidgetEnd.src : nodeWidget.src);
            output += "' height=" + widgetHeight + " width=" + widgetWidth + ">";
            link =  (ol.childNodes[i].item.uri) ? ol.childNodes[i].item.uri : "";
            if (link) {
                output += "&nbsp;<a href=\"" + link + "\" class='itemTitle' title='" +
                link +"'>";
            } else {
                output += "&nbsp;<a class='itemTitle' title='" + link + "'>";
            }
            output += "<span style='position:relative; top:-3px; height:11px'>" + ol.childNodes[i].item.text + "</span></a>";
            output += "</div>\n";
        }
    }
    return output;
}

/*********************************
     OUTLINE INITIALIZATIONS
**********************************/
// expand items set in expansionState var, if any
function initExpand() {
    for (var i = 0; i < currState.length; i++) {
        if (currState.charAt(i) == 1) {
            document.getElementById("OLBlock" + i).style.display = "block";
        } else {
            document.getElementById("OLBlock" + i).style.display = "none";
        }
    }
}

// initialize first time -- invoked onload
function initExpMenu(xFile) {
    // wrap whole outline HTML in a span

    //olData: es la variable que le pasamos de java, es un string que contiene
    //	      lo necesario para contruir el menu

    var olHTML = "<span id='renderedOL'>" + drawOutline(olData) + "</span>";
    // throw HTML into 'content' div for display
    document.getElementById("content").innerHTML = olHTML;
   // initExpand();
}

function cerrarPop(id_sol,descrip)
{
   if (confirm("¿Desea añadir la solución: "+descrip+"?"))
   {
     window.opener.document.proyecto.idsolucion.value=id_sol;
     window.close();
     addToBasket();

    }

}


