function init()
{
  initCommon();

  cssjsmenu('headernav-menu');

  if (isIE() && document.getElementById("moz.applet"))
  {
    // Hide and Disable the Mozilla Applet for IE
    var obj = document.getElementById("moz.applet");
    obj.style.visibility = "hidden";
    obj.removeAttribute("archive");
    obj.removeAttribute("classid");
  }
}


function showSelects(selected)
{
  var dynDivId;
  var optgroupEle;
  var grplabel;
  var selectOptions = selected.options;
  var selectAll;
  var	DivId = selected.parentNode.getAttribute('id');

  for(var i=0; i < selectOptions.length; i++){
    optgroupEle = selectOptions[i].parentNode;
    grplabel = optgroupEle.getAttribute('label');
    dynDivId = DivId+':'+selectOptions[i].text;
    if(document.getElementById(dynDivId)) {
      if(selectOptions[i].selected){
        document.getElementById(dynDivId).style.visibility='visible';
        if(DivId=='home'){
          document.getElementById(dynDivId).style.display='block';
        } else {
          document.getElementById(dynDivId).style.margin='0 0 0 10px';
          document.getElementById(dynDivId).style.display='inline';
        }
      } else if(selectOptions[i].text != grplabel) {
        document.getElementById(dynDivId).style.visibility='hidden';
        document.getElementById(dynDivId).style.display='none';
        var divSelect = document.getElementById(dynDivId).firstChild;
        for(var j=0; j < (divSelect.options.length); j++) {
          divSelect.options[j].selected = false;
        }
      }
    }
  }
}

function clearSelects()
{
  var selectEle = document.getElementsByTagName('select');
  var divEle;
  for(var j=1; j < (selectEle.length); j++) {
    divEle = selectEle[j].parentNode;
    if(divEle.className == "selectSubset"){
      divEle.style.cssText = 'visibility: hidden;';
      divEle.style.cssText = 'display: none;';
    }
    for(var i=0; i < (selectEle[j].options.length); i++) {
      selectEle[j].options[i].selected = false;
    }
  }
}

function distParams2(dist,spanId){
  var param = dist.name;
  var distribution = dist.options[dist.selectedIndex].value;
  var distXMLref = '/gisdt/data/distributions.gml';
  var distXML = loadXML(distXMLref);
  if(isIE()){
    var distNode = distXML.nodeFromID(distribution);
  }else{
    var distNode = distXML.getElementById(distribution);
  }
  var paramsNode = distNode.getElementsByTagName('parameter');
  document.getElementById(spanId+'.param1').firstChild.data = paramsNode[0].firstChild.data; /*getAttribute('name');*/
  if(paramsNode[1]!=undefined){
    document.getElementById(spanId+'.param2').firstChild.nodeValue = paramsNode[1].firstChild.data; /*getAttribute('name');*/
    document.getElementById(spanId+'.param2').style.cssText='visibility: visible; display: inline;';
    document.getElementById(spanId+'.param2.input').style.cssText='visibility: visible; display: inline;';
    document.getElementById(spanId+'.param2.input').setAttribute('value','');
  }else{
    document.getElementById(spanId+'.param2').firstChild.nodeValue = ' ';
    document.getElementById(spanId+'.param2').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param2.input').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param2.input').setAttribute('value','NA');
  }
  if(paramsNode[2]!=undefined){
    document.getElementById(spanId+'.param3').firstChild.nodeValue = paramsNode[2].firstChild.data; /*getAttribute('name');*/
    document.getElementById(spanId+'.param3').style.cssText='visibility: visible; display: inline;';
    document.getElementById(spanId+'.param3.input').style.cssText='visibility: visible; display: inline;';
    document.getElementById(spanId+'.param3.input').setAttribute('value','');
  }else{
    document.getElementById(spanId+'.param3').firstChild.nodeValue = ' ';
    document.getElementById(spanId+'.param3').style.cssText='visibility: hidden; display: none;';
    document.getElementById(spanId+'.param3.input').style.cssText='visibility: hidden; display: none;';
    document.getElementById(spanId+'.param3.input').setAttribute('value','NA');
  }
  //history.go(0);
}

function distParams(dist,spanId,cocoonHome){
  var param = dist.name;
  var distribution = dist.options[dist.selectedIndex].value;
  var distXMLref = '/gisdt/data/distributionML.gml';
  var distXML = loadXML(distXMLref);
  if(isIE()){
    var distNode = distXML.nodeFromID(distribution);
  }else{
    var distNode = distXML.getElementById(distribution);
  }
  var paramsNode = distNode.getElementsByTagName('parameter');
  document.getElementById(spanId+'.param1').firstChild.data = paramsNode[0].getAttribute('name');
  if(paramsNode[1]!=undefined){
    document.getElementById(spanId+'.param2').firstChild.nodeValue = paramsNode[1].getAttribute('name');
    document.getElementById(spanId+'.param2').style.cssText='visibility: visible;';
    document.getElementById(spanId+'.param2.input').style.cssText='visibility: visible;';
    document.getElementById(spanId+'.param2.input').setAttribute('value','');
  }else{
    document.getElementById(spanId+'.param2').firstChild.nodeValue = ' ';
    document.getElementById(spanId+'.param2').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param2.input').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param2.input').setAttribute('value','NA');
  }
  if(paramsNode[2]!=undefined){
    document.getElementById(spanId+'.param3').firstChild.nodeValue = paramsNode[2].getAttribute('name');
    document.getElementById(spanId+'.param3').style.cssText='visibility: visible;';
    document.getElementById(spanId+'.param3.input').style.cssText='visibility: visible;';
    document.getElementById(spanId+'.param3.input').setAttribute('value','');
  }else{
    document.getElementById(spanId+'.param3').firstChild.nodeValue = ' ';
    document.getElementById(spanId+'.param3').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param3.input').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param3.input').setAttribute('value','NA');
  }
  if(paramsNode[3]!=undefined){
    document.getElementById(spanId+'.param4').firstChild.nodeValue = paramsNode[3].getAttribute('name');
    document.getElementById(spanId+'.param4').style.cssText='visibility: visible;';
    document.getElementById(spanId+'.param4.input').style.cssText='visibility: visible;';
    document.getElementById(spanId+'.param4.input').setAttribute('value','');
  }else{
    document.getElementById(spanId+'.param4').firstChild.nodeValue = ' ';
    document.getElementById(spanId+'.param4').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param4.input').style.cssText='visibility: hidden;';
    document.getElementById(spanId+'.param4.input').setAttribute('value','NA');
  }
  //history.go(0);
}

function dataSelect(uri)
{
  var selected = parseInt(document.uiform.dataset.options.selectedIndex)+1;
  var uri = uri+'&dataset-id='+selected;
  window.open(uri,'_top');
}

function tableSelect(uri,selectNode)
{
  var selectedIdx = selectNode.options.selectedIndex;
  var selected = selectNode.options[selectedIdx].value;
  var uri = uri+'&tablename='+selected;
  window.open(uri,'_top');
}


function submitForm(areaIn)
{
  window.open("",'Results','menubar=no,location=no,resizable=yes,scrollbars=yes,status=no').focus();
  document.uiform.map.value = areaIn;
  document.uiform.submit();
  document.close()
}

function makeVisible(selectName,selectNext)
{
  var selectedInd = document.uiform[selectName].selectedIndex;
  var selectedParam = document.uiform[selectName][selectedInd].value;
  selectedParam = selectNext;
  document.getElementById(selectNext).innerHTML="";
  var varLevels;
  var optionEl;
  var varObj = document.getElementsByTagName('variable');
  for(i=0;i<(varObj.length-1);i++){
    if(varObj[i].firstChild.nodeValue.indexOf(selectedParam)>-1){
        varLevels = varObj[i].getAttribute('levels').split(' ! ');
        for(j=0;j<(varLevels.length-1);j++){
          optionEl = document.createElement("option");
          optionEl.appendChild(document.createTextNode(varLevels[j]));
          document.getElementById(selectNext).appendChild(optionEl);
      }
    }
  }

  document.getElementById('div'+selectNext).style.display = "block";
  document.getElementById('div'+selectNext).style.visibility = "visible";
  document.getElementById('div'+selectNext).style.height = "auto";

}

function updateFormulaButton(param){
  var selectName = param;
  var selectedParam = document.uiform[selectName].value;
  var formula = document.getElementById("formula").value
  document.getElementById("formula").value = document.getElementById("formula").value+selectedParam;
}
function updateFormula(param){
  var selectName = param;
  var selectedInd = document.uiform[selectName].selectedIndex;
  var selectedParam = document.uiform[selectName][selectedInd].value;
  var formula = document.getElementById("formula").value

  document.getElementById("formula").value = document.getElementById("formula").value+selectedParam;

//	var formulaLength = formula.length;
//	var last_char = formula.charAt(formulaLength-1);
//	if(last_char.indexOf('~')>-1){
//		document.getElementById("formula").value = document.getElementById("formula").value+selectedParam;
//	}else{
//		document.getElementById("formula").value = document.getElementById("formula").value+"+"+selectedParam;
//	}
}

function buildFormula(param,dataXMLref){

  var selectName = param;
  var dynselectId = param+'.indies';
  var divName = 'div'+param;
  var selectedInd = document.uiform[selectName].selectedIndex;
  var selectedParam = document.uiform[selectName][selectedInd].value;
  document.getElementById(dynselectId).innerHTML="";
  var dataXML = loadXML(dataXMLref);
  var varName;
  var optionEl;
  var varObj = dataXML.getElementsByTagName('variable');
  for(i=0;i<(varObj.length);i++){
    varName = varObj[i].firstChild.nodeValue;
    if(varName != selectedParam){
      optionEl = document.createElement("option");
      optionEl.appendChild(document.createTextNode(varName));
        document.getElementById(dynselectId).appendChild(optionEl);
      }
  }
  if(selectedParam.toLowerCase().indexOf('none')>-1){
    document.getElementById(divName).style.display = "none";
    document.getElementById(divName).style.visibility = "collapse";
    document.getElementById(divName).style.height = "0";
  }else{
    document.getElementById(divName).style.display = "block";
    document.getElementById(divName).style.visibility = "visible";
    document.getElementById(divName).style.height = "auto";
  }
  document.getElementById("formula").value = selectedParam+"~";
}

function dynamicFormSDML(param,dataXMLref){

  var selectName = param;
  var dynselectId = param+'.subset';
  var divName = 'div'+param;
  var selectedInd = document.uiform[selectName].selectedIndex;
  var selectedParam = document.uiform[selectName][selectedInd].value;

  document.getElementById(dynselectId).innerHTML="";

// hide the subset select for parameter = 'none'
  if(selectedParam.toLowerCase().indexOf('none')>-1){
    document.getElementById(divName).style.display = "none";
    document.getElementById(divName).style.visibility = "collapse";
    document.getElementById(divName).style.height = "0";
    return;
  }

// get the sdml
  var dataXML = loadXML(dataXMLref);

// find the position of the selected parameter in the sdml
  var dimObj = dataXML.getElementsByTagName('dim');
  var varsObj = dimObj[0].getElementsByTagName('e');
  var ind;
  for(i=0;i<(varsObj.length);i++){
    if(varsObj[i].firstChild.nodeValue.indexOf(selectedParam)>-1){
      ind = i;
    }
  }
// based on the parameter position find the unique values from the sdml
  var varLevel;
  var optionEl;
  var listdataObj = dataXML.getElementsByTagName('listdata');
  var typeObj = listdataObj[0].getElementsByTagName('type');
  var labelObj = typeObj[ind].getElementsByTagName('label');
  for(j=0;j<(labelObj.length);j++){
    varLevel = labelObj[j].firstChild.nodeValue;
    optionEl = document.createElement("option");
    optionEl.appendChild(document.createTextNode(varLevel));
    document.getElementById(dynselectId).appendChild(optionEl);
  }

// display the subset select
  document.getElementById(divName).style.display = "block";
  document.getElementById(divName).style.visibility = "visible";
  document.getElementById(divName).style.height = "auto";

}

function dynamicForm(param,dataXMLref){

  var selectName = param;
  var dynselectId = param+'.subset';
  var divName = 'div'+param;
  var selectedInd = document.uiform[selectName].selectedIndex;
  var selectedParam = document.uiform[selectName][selectedInd].value;
  document.getElementById(dynselectId).innerHTML="";
//	var selectEl = document.createElement("select");
//	selectEl.setAttribute("multiple","multiple");
//	selectEl.setAttribute("size","4");
  var dataXML = loadXML(dataXMLref);
  var varLevels;
  var optionEl;
  var varObj = dataXML.getElementsByTagName('variable');
  for(i=0;i<(varObj.length);i++){
    if(varObj[i].firstChild.nodeValue.indexOf(selectedParam)>-1){
        varLevels = varObj[i].getAttribute('levels').split(' ! ');
        for(j=0;j<(varLevels.length);j++){
          optionEl = document.createElement("option");
          optionEl.appendChild(document.createTextNode(varLevels[j]));
//  				selectEl.appendChild(optionEl);
          document.getElementById(dynselectId).appendChild(optionEl);
      }
    }
  }
//	document.getElementById(divName).appendChild(selectEl);
  if(selectedParam.toLowerCase().indexOf('none')>-1){
    document.getElementById(divName).style.display = "none";
    document.getElementById(divName).style.visibility = "collapse";
    document.getElementById(divName).style.height = "0";
  }else{
    document.getElementById(divName).style.display = "block";
    document.getElementById(divName).style.visibility = "visible";
    document.getElementById(divName).style.height = "auto";
  }

}

function loadXML(file){
  var xmlDoc;
  if(isIE()){
    xmlDoc = ieDocFromFile(file);
  }else{
    xmlDoc = getXMLDocument(file);
  }
  return(xmlDoc);
}

function toggleBox(szDivID, iState)
// 1 visible, 0 hidden
{
  var obj = document.getElementsByName(szDivID);
  for(j=0;j<obj.length;j++){
/*
    document.getElementsByName(szDivID)[j].style.display = iState ?
      "block" : "none";
    document.getElementsByName(szDivID)[j].style.visibility = iState ?
      "visible" : "collapse";
    document.getElementsByName(szDivID)[j].style.height = iState ?
      "auto" : "0";
*/
    document.getElementsByName(szDivID)[j].style.cssText = iState ?
      "display:block; visibility:visible; height:auto" : "display:none; visibility:collapse; height:0";

  }
}

function toggleBoxById(szDivID, iState)
// 1 visible, 0 hidden
{
  var obj = document.getElementById(szDivID);
  document.getElementById(szDivID).style.cssText = iState ?
    "display:block; visibility:visible; height:auto" : "display:none; visibility:collapse; height:0";
}
function toggleBoxByIdChildren(thisObj,szDivID)
{
  var obj = document.getElementById(szDivID).childNodes;
  for(j=0;j<obj.length;j++){
    document.getElementById(szDivID).childNodes[j].style.visibility='visible';
    document.getElementById(szDivID).childNodes[j].style.display='inline';
    document.getElementById(szDivID).childNodes[j].style.margin='0 0 0 10px';
  }
  thisObj.parentNode.style.visibility='hidden';
  thisObj.parentNode.style.display='none';
}

function toggleAddUncertainty(thisObj,szDivID)
{
  var obj = document.getElementById(szDivID).childNodes;
  for(j=0;j<2;j++){
    document.getElementById(szDivID).childNodes[j].style.visibility='visible';
    document.getElementById(szDivID).childNodes[j].style.display='inline';
    document.getElementById(szDivID).childNodes[j].style.margin='0 0 0 10px';
  }
  thisObj.parentNode.style.visibility='hidden';
  thisObj.parentNode.style.display='none';
}

function mozTransform(xmlRef, xslFile, parameters)
{
  var outputDoc;
  var xsltProcessor = new XSLTProcessor();
  var xslStylesheet = getXMLDocument(xslFile);
  xsltProcessor.importStylesheet(xslStylesheet);

  for(var i = 0, n = parameters.length; i < n; ++i){
    xsltProcessor.setParameter(null, parameters[i][0], parameters[i][1]);
  }

  if(xmlRef.search("\\.") < 0){
    var xmlDoc = document.implementation.createDocument("", "", null);
    var myNode = document.getElementById(xmlRef);
    var clonedNode = xmlDoc.importNode(myNode, true);
    xmlDoc.appendChild(clonedNode);
    outputDoc = xsltProcessor.transformToFragment(xmlDoc, document);
  }else{
    var xmlDoc = getXMLDocument(xmlRef);
    outputDoc = xsltProcessor.transformToFragment(xmlDoc, document);
  }
  return(outputDoc);
}




function getXMLDocument(file)
{
  var xmlHTTPRequest = new XMLHttpRequest();
  xmlHTTPRequest.open("GET", file, false);
  xmlHTTPRequest.send(null);
  return(xmlHTTPRequest.responseXML);
}

function ieTransform(xmlDoc, xslFile, parameters)
{
  var objSrcTree, ObjXSLT, objCache;
  var output, outputDoc;

  objSrcTree = xmlDoc;

  objXSLT = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
  objXSLT.async = false;
  objXSLT.load(xslFile);

  objCache = new ActiveXObject("MSXML2.XSLTemplate");
  objCache.stylesheet = objXSLT;

  var objXSLTProc = objCache.createProcessor();
  objXSLTProc.input = objSrcTree;

  for(var i = 0, n = parameters.length; i < n; ++i)
  {
    objXSLTProc.addParameter(parameters[i][0], parameters[i][1]);
  }

  objXSLTProc.transform();
  output = objXSLTProc.output;

  // Remove DOCTYPE
  var doctypeIndex = output.search("<!");
  if(doctypeIndex != -1)
  {
    output = output.substr(doctypeIndex);
    output = output.substr(output.indexOf(">") + 1);
  }

  outputDoc = new ActiveXObject('MSXML2.DOMDocument');
  outputDoc.async = false;
  outputDoc.loadXML(output);

  return(outputDoc);
}

/*
 * Generates an XMLDocument from file.
 *
 * Argument(s):
 *
 * file - Path to XML file
 *
 * Output:
 *
 * ActiveXObject('MSXML2.DOMDocument') generated from file
 */
function ieDocFromFile(file)
{
  var xmlDoc = new ActiveXObject('MSXML2.DOMDocument');
  xmlDoc.async = false;
  xmlDoc.load(file);

  return(xmlDoc);
}
function isMozilla()
{
   return(navigator.appName == "Netscape");
}

function isIE()
{
   return(navigator.appName == "Microsoft Internet Explorer");
}


var openImg = new Image();
openImg.src = "/commons/icons/neptune/folderOpenNoMore.gif";
var closedMoreImg = new Image();
closedMoreImg.src = "/commons/icons/neptune/folderClosedMore.gif";
var closedNoMoreImg = new Image();
closedNoMoreImg.src = "/commons/icons/neptune/folderClosedNoMore.gif";

function showBranch(branch){
  var objBranch = document.getElementById(branch).style;

  if(objBranch.display=="block")
    objBranch.display="none";
  else
    objBranch.display="block";
  swapFolder('I' + branch,branch);
}

function swapFolder(img,branch){
  objImg = document.getElementById(img);
  if(objImg.src.indexOf('/commons/icons/neptune/folderClosedMore.gif')>-1)
    objImg.src = openImg.src;
  else if(objImg.src.indexOf('/commons/icons/neptune/folderClosedNoMore.gif')>-1)
    objImg.src = openImg.src;
  else
    objImg.src = closedMoreImg.src;
}

function svgZoomOnload(scale){
  var svgDoc = document.getElementById("getsmart").getSVGDocument();
  var zoomNodes = svgDoc.getElementById("zoomNodes");
  zoomNodes.setAttribute("transform","scale("+scale+")");
}

function svgZoomOut(){
  var svgDoc = document.getElementById("getsmart").getSVGDocument();
  var zoomNodes = svgDoc.getElementById("zoomNodes");
  var scale = zoomNodes.getAttribute("transform");
  scale = scale.substring(scale.lastIndexOf("(")+1);
  scale = parseFloat(scale.substring(0,scale.length-1)) + 0.25;
  zoomNodes.setAttribute("transform","scale("+scale+")");
}
function svgZoomIn(){
  var svgDoc = document.getElementById("getsmart").getSVGDocument();
  var gutsDoc = svgDoc.getElementById("zoomNodes");
  var scale = gutsDoc.getAttribute("transform");
  scale = scale.substring(scale.lastIndexOf("(")+1);
  scale = parseFloat(scale.substring(0,scale.length-1)) - 0.25;
  alert(scale);
  gutsDoc.setAttribute("transform","scale("+scale+")");
}

function CollectionPoint(id)
{
  var svgDoc = document.getElementById("getsmart").getSVGDocument();
  var flowlayer = svgDoc.getElementById('layer-flow');
  var outputlayer = svgDoc.getElementById('layer-outputs');
  var inputlayer = svgDoc.getElementById('layer-inputs');
  var paths = flowlayer.getElementsByTagName('path');
  var gs = flowlayer.getElementsByTagName('g');
  var outputs = outputlayer.getElementsByTagName('g');
  var inputs = inputlayer.getElementsByTagName('g');
  var inputPaths = inputlayer.getElementsByTagName('path');


  var connections = new Array();
  var pathids = new Array();
  var found;
  var visibility;

  for(i=0;i<paths.length;i++) {
    visibility = paths.item(i).getAttributeNS(null,'style');
    if(paths.item(i).getAttributeNS(null,'class').indexOf('connector-input')>-1){
      if(paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-end').indexOf(id)>-1){
        if(visibility.indexOf('hidden') == -1){
          paths.item(i).setAttributeNS(null,'style','visibility: hidden;');
        }else{
          paths.item(i).setAttributeNS(null,'style','visibility: visible;');
        }
      }else{
        paths.item(i).setAttributeNS(null,'style','visibility: hidden;');
      }
    }else if(paths.item(i).getAttributeNS(null,'class').indexOf('connector-collection')>-1){
      if(paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-start').indexOf(id)<0 &&
         paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-end').indexOf(id)<0){
        if(visibility.indexOf('hidden') == -1){
          paths.item(i).setAttributeNS(null,'style','visibility: hidden;');
        }else{
          paths.item(i).setAttributeNS(null,'style','visibility: visible;');
        }
      }
    }
    if(paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-end').indexOf(id)>-1){
      connections = connections.concat(paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-start'));
      pathids = pathids.concat(paths.item(i).getAttributeNS(null,'id'));
    }
     if(paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-start').indexOf(id)>-1){
       connections =  connections.concat(paths.item(i).getAttributeNS('http://www.inkscape.org/namespaces/inkscape','connection-end'));
       pathids = pathids.concat(paths.item(i).getAttributeNS(null,'id'));
    }
  }

  for(i=0;i<gs.length;i++) {
    found = false;
    if(gs.item(i).getAttribute('id').indexOf('collection-') > -1){
      for(j=0;j<connections.length;j++) {
        if(connections[j].indexOf(gs.item(i).getAttribute('id'))>-1 && !found) {
          found = true;
        }
      }
      if(!found && gs.item(i).getAttribute('id').indexOf(id)<0){
        visibility = gs.item(i).getAttributeNS(null,'style');
        if(visibility.indexOf('hidden') < 0){
          gs.item(i).setAttribute('style','visibility: hidden;');
        }else{
         gs.item(i).setAttribute('style','visibility: visible;');
        }
      }
    }
  }

  for(i=0;i<outputs.length;i++) {
    found = false;
    visibility = outputs.item(i).getAttributeNS(null,'style');
    for(j=0;j<pathids.length;j++){
      if(outputs.item(i).getAttributeNS(null,'path').indexOf(pathids[j])>-1 && !found){
        if(visibility.indexOf('hidden') == -1 ){
          outputs.item(i).setAttributeNS(null,'style','visibility: hidden;');
        }else{
          outputs.item(i).setAttributeNS(null,'style','visibility: visible;');
        }
        found = true;
      }else if(outputs.item(i).getAttributeNS(null,'path').indexOf(pathids[j])==-1 && !found){
        outputs.item(i).setAttribute('style','visibility: hidden;');
      }
    }
  }

  for(i=0;i<inputs.length;i++) {
    found = false;
    visibility = inputs.item(i).getAttributeNS(null,'style');
    for(j=0;j<pathids.length;j++){
      if(inputs.item(i).getAttributeNS(null,'path').indexOf(pathids[j])>-1 && !found){
        if(visibility.indexOf('visible') > -1 ){
          inputs.item(i).setAttributeNS(null,'style','visibility: hidden;');
        }else{
          inputs.item(i).setAttributeNS(null,'style','visibility: visible;');
        }
        found = true;
      }else if(inputs.item(i).getAttributeNS(null,'path').indexOf(pathids[j])==-1 && !found){
        inputs.item(i).setAttribute('style','visibility: hidden;');
      }
    }
  }


}
/*******************************************************************************************
** Support functions from JPainter from www.izhuk.com
**
**
*******************************************************************************************/
function Applet() {
    this.attr  = new Object(); // applet tag attributes
    this.param = new Object(); // applet parameters
}

Applet.prototype.write = function() {

    document.write('<applet ');

    // write attributes of the applet tag
    for (name in this.attr) {
        var value = this.attr[name];
  document.write(name+'="'+value+'" ');
    }
    document.write('>');

    // write applet parameters
    for (name in this.param) {
        var value = this.param[name];
        // this is a workaround to deal with the fact that "default" is a reserved word
        if (name == 'default_tool')
        {
          alert ("default workaround");
          name = "default";
        }
  document.write('<param name="'+name+'" value="'+value+'">');
    }
    document.write(' Your browser doesn\'t support Java ');
    document.write('</applet>');
}

/*
 * By Igor Zhukovsky. www.izhuk.com , April 2006.
 *
 * This code allows to prepare and output J-Painter's GUI.
 * It allow to release the HTML page from many applet definitions,
 * and resolve the IE7 security issue (see http://izhuk.com/docs/ie7fix.html)
 *
 * Note: this code uses applet.js which can be found in the applet's directory.
 */

/* Constructs javascript Painter object */
function Painter(codebase) {
    this.codebase = codebase; // location of the applet files (relative to the HTML file)
    this.archive = '/commons/resources/jpainter/jpainter.jar';
    this.bgcolor = '#FFFFFF'; // background of the GUI
    this.icondir = 'icons/';  // location of icons (relative to the applet's directory - codebase)
    this.init();
}

/* Initializes Painter components */
Painter.prototype.init = function() {

    this.canvas = new Canvas( this, 640, 480 );
    this.canvas.noJava = 'Your browser does not support Java. Download Java now <a href="http://www.java.com">www.java.com</a>';

    this.systemPanel = new SystemPanel(this,new Array(101,102,103),1,3);
    this.systemPanel.param.progresstext = 'Saving the image ....';

    var tools = new Array(0, 1, 2, 4, 19, 21, 18, 3, 5, 20, 11, 9, 7, 8, 23, 14, 15);
    this.toolPanel = new ToolPanel(this, tools , 2, 8);

    var pens = new Array(200,211,202,213, 270,271, 263,253,223,233);
    this.penPanel = new PenPanel(this, pens, 1, pens.length);

    var fontFaces = null; // new Array('Serif','SansSerif','Monospaced','Dialog');
    var fontSizes = new Array(10,12,16,24,36,48,96);
    this.fontPanel = new FontPanel(this, fontFaces, fontSizes);

    var colors = new Array(
  0x000000,0x404040,0x808080,0xff0000,0xff3300,0xff6600,0xff9900,0xffcc00,0xffff00,0xccff00,0x99ff00,0x66ff00,0x33ff00,0x00ff00,0x00ff33,0x00ff66,0x00ff99,
  0x00ffcc,0x00ffff,0x00ccff,0x0099ff,0x0066ff,0x0033ff,0x0000ff,0x3300ff,0x6600ff,0x9900ff,0xcc00ff,0xff00ff,0xff00cc,0xff0099,0xff0066,0xff0033,

  0xffffff,0xe0e0e0,0xc0c0c0,0x800000,0x801a00,0x803300,0x804d00,0x806600,0x808000,0x668000,0x4d8000,0x338000,0x198000,0x008000,0x00801a,0x008033,0x00804c,
  0x008066,0x008080,0x006680,0x004c80,0x003380,0x001a80,0x000080,0x190080,0x330080,0x4c0080,0x660080,0x800080,0x800066,0x80004d,0x800033,0x80001a
    );
    this.colorPanel = new ColorPanel(this, colors, 3, colors.length/3);

    var cliparts = new Array( 'sky.gif', 'grass.gif', 'hardwood-tree.gif','pine-tree.gif','bushs.gif','house.gif','building-block-east.gif','building-block-front.gif', 'building-block-west.gif');
    this.clipartPanel = new ClipartPanel(this,cliparts,cliparts.length,1,35,35);

    this.clipartPanel.param.icondir = '/smarte/tools/VisionToAction/applet/clipart/'; // clipart dir (relative to the applet)
    //this.clipartPanel.param.clips = 'sky.gif, grass.gif, hardwood-tree.gif,pine-tree.gif,bushs.gif,house.gif,building-block-east.gif,building-block-front.gif, building-block-west.gif';
    this.clipartPanel.param.hints = 'sky, grass, hardwood tree, pine tree,bushes,'+
                             'house,'+
                             'building block, building block, building block';
    this.clipartPanel.param.insertat = '50,50';
}

/* Outputs Painter components */
Painter.prototype.write = function() {

    var canvas_align  = (parseInt(this.canvas.attr.width)  < 100) ? 'left' : 'center';
    var canvas_valign = (parseInt(this.canvas.attr.height) < 100) ? 'top'  : 'middle';

    document.write('<table bgcolor="'+this.bgcolor+'" border="1" cellspacing="0" cellspadding="0">');

    // top panel
    document.write('<tr><td>');
        writeHelp(this.codebase);
      document.write('&nbsp;');
      this.systemPanel.write();
      document.write('&nbsp;&nbsp;');
      this.fontPanel.write();
      document.write('&nbsp;&nbsp;');
      this.penPanel.write();
      document.write('<br/>');
      this.toolPanel.write();
      document.write('&nbsp;&nbsp;');
      this.colorPanel.write();
    document.write('</td></tr>');

    document.write('<tr><td>');
        document.write('<table width="100%" border="0" cellpadding="1"><tr>');
          document.write('<td valign="top">');
          //this.toolPanel.write();
          document.write('<br/><br/>');
          this.clipartPanel.write();
          document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
          document.write('</td>');

          document.write('<td align="'+canvas_align+'" valign="'+canvas_valign+'">');
             document.write('<table border="0" cellpadding="1"><tr><td bgcolor="#000000">');
             this.canvas.write();
             document.write('</td></tr></table>');
          document.write('</td>');

      document.write('</tr></table>');
    document.write('</td></tr>');

    // bottom panel
    /*document.write('<tr><td align="center">');
      document.write('&nbsp;');
      //this.colorPanel.write();
    document.write('</td></tr>');*/

    document.write('</table>');

}

function writeHelp(applet_dir) {
    document.write('<a href="javascript:void(0);" ');
    document.write('onclick="window.open(\''+applet_dir+'/help.htm\',\'help\',\'width=350, height=475\');" > ');
    document.write('<img border="0" src="'+applet_dir+'/help.gif" width="28" height="28" alt="Help"></a>');
}

function Canvas(painter, width, height) {
    var applet = new Applet();
    applet.attr.codebase = painter.codebase;
    applet.attr.archive = painter.archive;
    applet.attr.code = 'DrawCanvas.class';
    applet.attr.name = 'canvas';
    applet.attr.width = width;
    applet.attr.height = height;
    return applet;
}

function ToolPanel(painter, actions, rows, cols) {
    var applet = new ControlPanel(painter,'tools',actions,rows,cols,28,28);
    return applet;
}

function ColorPanel(painter, colors, rows, cols) {
    var applet = new ControlPanel(painter,'colors',colors,rows,cols,19,19);
    delete applet.icondir;
    return applet;
}

function PenPanel(painter, pens, rows, cols) {
    var applet = new ControlPanel(painter,'pens',pens,rows,cols,19,19);
    return applet;
}

function ClipartPanel(painter,cliparts, rows, cols, clip_width, clip_height) {
    var applet = new ControlPanel(painter,'clips',cliparts, rows,cols, clip_width, clip_height);
    return applet;
}

function SystemPanel(painter, items, rows, cols) {
    var applet = new ControlPanel(painter,'system',items,rows,cols,28,28);
    return applet;
}

function ControlPanel(painter, type, items, rows, cols, item_width, item_height) {
    var applet = new Applet();
    applet.attr.codebase = painter.codebase;
    applet.attr.archive = painter.archive;
    applet.attr.code = 'ControlPanel.class';
    applet.param.icondir = painter.icondir;
    applet.param.bgcolor = painter.bgcolor;

    applet.param[type] = '';
    for(i=0; i < items.length; i++) {
      if (i > 0) applet.param[type] += ',';
      applet.param[type] += items[i];
    }
    applet.param.rows = rows;
    applet.param.columns = cols;
    applet.attr.width  = item_width * cols;
    applet.attr.height = item_height * rows;

    return applet;
}

function FontPanel(painter, font_faces, font_sizes) {
    var applet = new Applet();
    applet.attr.codebase = painter.codebase;
    applet.attr.archive = painter.archive;
    applet.attr.code = 'FontPanel.class';
    applet.attr.width  = 330;
    applet.attr.height = 20;
    applet.param.bgcolor = painter.bgcolor;
    applet.param.icondir = painter.icondir;

    if (font_faces != null && font_faces.length > 0) {
      applet.param.font_faces = '';
      for(i=0; i < font_faces.length; i++) {
      if (i > 0) applet.param.font_faces += ',';
      applet.param.font_faces += font_faces[i];
      }
    }

    if (font_sizes != null && font_sizes.length > 0) {
      applet.param.font_sizes = '';
      for(i=0; i < font_sizes.length; i++) {
      if (i > 0) applet.param.font_sizes += ',';
      applet.param.font_sizes += font_sizes[i];
      }
    }
    else
        applet.param.font_sizes = '12,16,24';

    applet.param.text_alignment = 'left';

    return applet;
}

/*
 * This method allows to retrieve the image data in JavaScript
 */
Painter.prototype.getImage = function(format) {
    return document.applets[canvas.name].GetImage(format);
}

function createPainter()
{
  var codebase = './applet';
  painter = new Painter(codebase);
  return painter;
}

function drawPainter(painter)
{
  painter.canvas.width  = 640;
  painter.canvas.height = 480;
  var myimage = getQueryVariable('image');
  var option = getQueryVariable('where');
  var user = getQueryVariable('user');
  var imagepath = '/workspace/users/' + user + '/' + option + '/' + 'FutureLandUse/' + myimage + '?time=' + new Date();
  painter.canvas.param.load = imagepath; // specify image to load at startup
  // painter.param.save = 'save.php';    // specify the server-side script to save the image.
  painter.write();
}

// This function is called when the user presses the button "Save"
function prepareSave()
{
  var form   = document.saveform; // reference to HTML form
  var canvas = document.applets["canvas"];
  var filename = getQueryVariable("image");
  form.filename.value = filename;

  if (!canvas.IsChanged()) {
  window.alert('Image was not changed. There is nothing to save');
  return false;
  }

  // Extract image from the Canvas
  var image = canvas.GetImage(form.format.value);

  if (image != "") {
  form.image.value = image; // assign it to the "image" field
  return true;
  }
  else {
  window.alert("Error while extracting image\n");
  return false;
  }
}

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  }
  return '';
}

// This could be made much more generic, for example by adding "optional" attributes
// to form elements so that we generically check all non-opitonal field
function validateUserRegForm()
{
	var success = true;
	//validate user id
	var uid = document.getElementById('uid');
	var password = document.getElementById('passwd');
	var confPassword = document.getElementById('confPassword');
	var firstName = document.getElementById('firstName');
	var lastName = document.getElementById('lastName');
	var email = document.getElementById('email');
	//alert("uid is " + uid.value);
	//alert("password is " + password.value);
	if (uid.value == "")
	{
		alert("Please enter a user id");
		success = false;
	}
	if (password.value.length <= 7)
	{
		alert("Password must be at least 8 characters long");
		success = false;
	}
	if (password.value != confPassword.value)
	{
		alert("Passwords do not match");
		success = false;
	}
	if (firstName.value == "")
	{
		alert("Please enter a first name");
		success = false;
	}
	if (lastName.value == "")
	{
		alert("Please enter a last name");
		success = false;
	}
	if (email.value == "")
	{
		alert("Please enter an email address");
		success = false;
	}
	
	
	return success;

}
