var currentGuideItem;
function updateGuideSegment(segName, item) {
  if(segName) {
    var thisSelect = $("guide-"+segName);
    var selectedRegion = thisSelect.value;
    if(!this.options) {
      that = "regions";
    } else {
      that = getPreviousSeg(segName)+"_"+this.options.selectedRegion;
    }

    if(thisSelect) {
      var aROpts = {
        onComplete: setGuideURL, 
        selectedRegion: selectedRegion,
        method: "get"
      };
      var aR = new Ajax("http://www.smh.com.au/travel/jupiter/destinationlist/"+that+".json", aROpts);
      aR.request();
    }
    if(typeof(item) != "undefined" || thisSelect.selectedIndex > -1 && thisSelect.value != 0) {
      var nextType = getNextRegionType(segName);
      if(segName == "region") {
        // Update desc field
        var descField;
        if(descField = $("guide-list")) {
          var aDOpts = {
            onComplete: updateGuideDescBox, 
            onFailure: catchError,
            segName: segName,
            method: "get"
          };
          var listItem = thisSelect.value;
          $('selectedRegion').setHTML(thisSelect.options[thisSelect.selectedIndex].text);
          clearNextSiblings(thisSelect);
          var aD = new Ajax("http://www.smh.com.au/travel/jupiter/destinationlist/list_"+listItem+".html", aDOpts);
          aD.request();
        }
      }
      if(nextType) {
        if(typeof(item) == "undefined") {
          item = thisSelect.options[thisSelect.selectedIndex].value;
        }
        var aOpts = {
          onComplete: updateGuideSelectBox,
          onFailure: catchError,
          nextType: nextType,
          segName: segName,
          selectedRegion: selectedRegion,
          method: "get"
        };
        var a = new Ajax("http://www.smh.com.au/travel/jupiter/destinationlist/"+segName+"_"+item+".json", aOpts);
        a.request();
      }
    }
  }
}

function setGuideURL(resp) {
  if($('guideForm')) {
    if(resultObj = Json.evaluate(resp)) {
      for(var a = 0; a < resultObj.length; a++) {
        if(resultObj[a].id == this.options.selectedRegion) {
          if(resultObj[a].url) {
            $('guideForm').setAttribute("action", resultObj[a].url);
          }
        }
      }
    }
  }
}

function getGuideURL() {
  if($('guideForm')) {
    window.location = $('guideForm').action;
  }
}

function catchError(resp) {
  clearNextSiblings("guide-"+this.options.segName);
}

function updateGuideSelectBox(resp) {
  if(resp) {
    var holder = $('guide-region-holder');
    var resultObj;
    if(resultObj = Json.evaluate(resp)) {
      if(resultObj.length == 2 && this.options.nextType == "country") {
         removeNextSiblings($("guide-"+this.options.segName));
         if(!window.ie) {
           var hiddenInput = new Element("input");
           var props = {
            "name": "country",
            "value": resultObj[1].id,
            "type": "hidden",
            "id": "guide-"+this.options.nextType
           };
           hiddenInput.setProperties(props);
           hiddenInput.inject(holder);
         }
         updateGuideSegment("country", resultObj[1].id);
      } else if(resultObj.length > 2) {
        var currentEle;
        if(currentEle = $('guide-'+this.options.segName)) {
          removeNextSiblings($('guide-'+this.options.segName));
        }
        var selectEle;
        selectEle = new Element("select");
        selectEle.id = "guide-"+this.options.nextType;
        selectEle.addEvent("change", updateGuideSegment.bind(this, this.options.nextType));
        var selectLabel = new Element("label");
        selectLabel.innerHTML = "Select "+this.options.nextType;
        selectLabel.id = "guide-"+this.options.nextType+"-label";
        selectLabel.setAttribute("for", "guide-"+this.options.nextType);
         for(var a = 0; a < resultObj.length; a++) {
          var thisOpt = resultObj[a];
          if(typeof(thisOpt) != "undefined") {
            if(thisOpt.id && thisOpt.name) {
              var opt = new Element("option");
              opt.value = thisOpt.id;
              opt.setHTML(thisOpt.name);
              opt.injectInside(selectEle);
            }
          }
        }
        selectLabel.inject(holder);
        selectEle.inject(holder);
      } else {
        removeNextSiblings($("guide-"+this.options.segName));
      }
    }
  }
}

function updateGuideDescBox(resp) {
  if(resp) {
    var guide;
    if(guide = $('guide-list')) {
      guide.setHTML(resp);
    }
  }
}

function getListItemName() {
  var regionS;
  var thing = "";

  if(regionS = $("guide-region")) {
    if(regionS.value != 0) {
      thing += regionS.value;
    }

    return thing;
  }
}

function getNextRegionType(type) {
  if(type == "region") {
    return "country";
  } else if(type == "country") {
    return "city";
  } 
  return false;
}

function getPreviousSeg(type) {
  if(type == "city") {
    return "country";
  } else if(type == "country") {
    return "region";
  } 
  return false;
}

function clearNextSiblings(thisSibling) {
  thisSibling = $(thisSibling);
  var next = thisSibling;
  while(next = next.getNext()) {
    if(next != thisSibling) {
      if(next.getTag() == "select" || next.getTag() == "input") {
        next.innerHTML = "";
      }
    }
  }
}

function removeNextSiblings(thisSibling) {
  var childrenEles = $("guide-region-holder").getChildren();
  var rem = false;
  childrenEles.each(function(thisChild) {
    if(rem) {
      var p = document.getElementById("guide-region-holder");
      if(thisChild.id != thisSibling.id && thisChild.id+"-label" != thisSibling.id) {
        var c = document.getElementById(thisChild.id);
        if(c.nodeName.toLowerCase() == "select") {
          p.removeChild(c);      
        } else {
          $(c).remove();
        }
      }
    }
    if(thisChild == thisSibling) {
      rem = true;
    }
  });
}

