function Hierarchy() {
  this.hierarchyId=0;
  this.relatedGeoNameId = geoNameId;
  this.type = '';
  this.geoName = new GeoName();
  this.geoName.geoNameId = 0;
  this.geoName.name = '';
  this.geoName.featureCode='';
}

var hierarchies = new Array();
var isTopDown=false;
var geoNameId=0;

function getHierarchyup(jData) {
  if (jData == null) {
    alert("There was a problem parsing search results.");
    return;
  }
  hierarchies = jData.geonames;
  isTopDown=false;
  createHierarchyTable();
}

function getHierarchydown(jData) {
  if (jData == null) {
    alert("There was a problem parsing search results.");
    return;
  }
  hierarchies = jData.geonames;
  isTopDown=true;
  createHierarchyTable();
}


function showHierarchy(id,isTopDown) {
  geoNameId = id;
  upOrDown = 'up';
  if (isTopDown) {
    upOrDown = 'down';
  }
  request = '/servlet/geonames?srv=580&isTopDown=' + isTopDown + '&geonameId=' + id + '&callback=getHierarchy'+ upOrDown;	  
  // Create a new script object
  aObj = new JSONscriptRequest(request);
  // Build the script tag
  aObj.buildScriptTag();
  // Execute (add) the script tag
  aObj.addScriptTag();
  showHierarchyDiv();
}

function createHierarchyTable(){
  var html = '';
  if (isTopDown) {
    html = '<h4>Hierarchy - Contains</h4>';
  } else {
    html = '<h4>Hierarchy - Part Of</h4>';
  }
  html += '<table class=restable><tr><th>Name</th><th>geonameId</th><th>featurecode</th><th>hierarchy type</th><th>action</th></tr>';
  for (var i = 0; i < hierarchies.length; i++) {
    if (i % 2== 0) {
	  html += '<tr>';
    } else {
      html +=  '<tr class=\"odd\">';
    }
    html += '<td><a href="' + hierarchies[i].geoName.url + '">' + hierarchies[i].geoName.name + '</a></td>';
    html += '<td><span id="id.' + i + '">' + hierarchies[i].geoName.geoNameId + '</span></td>';
    html += '<td><span id="featureCode.' + i + '">' + hierarchies[i].geoName.featureCode + '</span></td>';
    var type = '';
    if (hierarchies[i].type != null) {
      type = hierarchies[i].type;
    }
    html += '<td><span id="hierarchyType.' + i + '">' + type + '</span></td>';
    html += '<td><span id="action.' + i + '"><a href="javascript:deleteHierarchy(' + i + ')">delete</a></span></td>'; 
    html += '</tr>';
  }

  html = html + '</table>';
  html = html + '<a href="javascript:insertHierarchy()">new</a>';
  document.getElementById("hierarchyTableDiv").innerHTML = html;
}

function deleteHierarchy(idx) {
   var hierarchy = hierarchies[idx];
 
   if (!confirm('do you really want to delete the hierarchy "' + hierarchy.geoName.name + '"?')){
      return;
   }

   if (hierarchy.geoName.geoNameId > 0) {
     var request = GXmlHttp.create();
     request.open("GET", '/servlet/geonames?srv=582&hierarchyId=' + hierarchy.hierarchyId, true);
     request.onreadystatechange = function() {
       if (request.readyState == 4) {
         var xmlDoc = request.responseXML;
         var status = xmlDoc.documentElement.getElementsByTagName("status")[0];
         if (status.getAttribute("value") == 0) {
         } else {
          var errMessage = status.getAttribute("message");
          document.getElementById("cockpit").innerHTML = '<font color=red>error while saving:<br>'+ errMessage + '</font>';
          alert(errMessage);
         }
       }
     } // function
     request.send(null);
   }
   hierarchies.splice(idx,1);
   createHierarchyTable();
   lastIdx = -1;
}


function hideHierarchyDiv() {
  document.getElementById("hierarchyDiv").style.visibility='hidden';
}


function showHierarchyDiv() {
  document.getElementById("hierarchyDiv").style.visibility='visible';
}


function insertHierarchy(){
  var hierarchy = new Hierarchy();
  hierarchies.push(hierarchy);
  createHierarchyTable();
  editHierarchy(hierarchies.length -1 );
}

function editHierarchy(idx) {
  var elem = document.getElementById("id."+ idx);
  elem.innerHTML = '<input name=geoNameId type=text value="' + hierarchies[idx].geoName.geoNameId + '" size=9 maxlength=9>';

  var elem = document.getElementById("hierarchyType."+ idx);
  elem.innerHTML = '<input name=hierarchyType type=text value="' + hierarchies[idx].type + '" size=30 maxlength=100>';

  var elem = document.getElementById("action."+ idx);
  elem.innerHTML = '<a href="javascript:saveHierarchy(' + idx + ')">save</a>/<a href="javascript:deleteHierarchy(' + idx + ')">delete</a>';

  lastIdx = idx;
}

function saveHierarchy(idx) {
  if (true) {
    var hierarchy = hierarchies[idx];
    hierarchy.geoName.geoNameId = document.hierarchyForm.geoNameId.value;
    hierarchy.type = document.hierarchyForm.hierarchyType.value;

    var params = '';
    params = params + '&hierarchyId=' + hierarchy.hierarchyId;
    params = params + '&relatedGeoNameId=' + hierarchy.relatedGeoNameId;
    params = params + '&geonameId=' + hierarchy.geoName.geoNameId;
    params = params + '&isTopDown=' + isTopDown;
    params = params + '&hierarchyType=' + hierarchy.type;

    upOrDown = 'up';
    if (isTopDown) {
      upOrDown = 'down';
    }
    params = params + '&callback=getHierarchy'+ upOrDown;

    var request = GXmlHttp.create();

    request.open("GET", '/servlet/geonames?srv=581&' + params, true);
    request.onreadystatechange = function() {
      if (request.readyState == 4) {
        var xmlDoc = request.responseXML;
        var status = xmlDoc.documentElement.getElementsByTagName("status")[0];
        if (status.getAttribute("value") == 0) {
        } else {
          var errMessage = status.getAttribute("message");
          document.getElementById("cockpit").innerHTML = '<font color=red>error while saving:<br>'+ errMessage + '</font>';
          alert(errMessage);
        }
      }
    } // function
    request.send(null);

  } else {
    alert('no changes, save not required');
  }
  createHierarchyTable();
  lastIdx = -1;
}


