var regwaitid;
var currRegionDIV;
var currRegionIMG;
var currRegionParent;
var nregion_set_states = 4;
var region_set_states = [1,0,0,0,0,0,0,0,0];

function init_region_path()
{
   var lev = 1;
   setup_path(lev);
}

function setup_path(lev)
{
  if (lev>region_init_path.length)
     return;
  var div = document.getElementById('region_layer'+lev);
  if (typeof div != 'undefined' && div!=null)
  {
     //var img = div.parentElement.previousSibling.firstChild;
     var td = div.parentNode.previousSibling;
     while (td.nodeName!='TD')
         td = td.previousSibling;
     var img = td.firstChild;
     while (typeof img != 'undefined' && img!=null && img.nodeName!='IMG')
        img = img.nextSibling;
     if (typeof img != 'undefined' && img != null)
        img.src=imgDir(img.src)+region_sep_img;
     div.innerHTML = region_init_path[lev-1];
     region_set_states[lev-1]=3;
     setup_path(lev+1);
  }
}

function region_changed(lev,index,regid)
{

    if (region_loading)
      return;
    var del = regid=='-1'? 0:1;
    reset_region(lev+1+del);
    if (regid=='-1')
       findParentSel(lev-1)
    else
    {
       currRegionParent = regid;
       region_init_ids[lev-1]=regid;
    }
    var div = document.getElementById('region_layer'+(lev+1));
    if (regid!='-1' && typeof div != 'undefined' && div!=null)
    {
      //var img = div.parentElement.previousSibling.firstChild;
      var td = div.parentNode.previousSibling;
      while (td.nodeName!='TD')
         td = td.previousSibling;
      var img = td.firstChild;
      while (typeof img != 'undefined' && img!=null && img.nodeName!='IMG')
         img = img.nextSibling;
      if (typeof img != 'undefined' && img!=null)
         img.src = imgDir(img.src) + "plus1.gif";
      region_set_states[lev]=1;
      div.innerHTML = '';
      //var td = img.parentElement;
      td.style.display='';
      var td2 = td.nextSibling;
      while (typeof td2!='undefined' && td2!=null && td2.nodeName!='TD')
           td2 = td2.nextSibling;
      td2.style.display='';
    }
}

function fixPath(lev)
{
  if (lev<1)
     return;
  var sel = document.getElementById('region_sel_'+lev);
  var div = document.getElementById('region_layer'+lev);
  if (typeof sel != 'undefined' && sel!=null && typeof div != 'undefined' && div!=null)
  {
     div.innerHTML =sel.options[sel.selectedIndex].text;
     //var img = div.parentElement.previousSibling.firstChild;
     var td = div.parentNode.previousSibling;
     while (td.nodeName!='TD')
         td = td.previousSibling;
     var img = td.firstChild;
     while (typeof img != 'undefined' && img!=null && img.nodeName!='IMG')
        img = img.nextSibling;
     if (typeof img != 'undefined' && img != null)
        img.src=imgDir(img.src)+region_sep_img;
     region_set_states[lev-1]=3;
     if (lev>1)
       fixPath(lev-1);
   }
}

function reset_region(lev)
{
   var div = document.getElementById('region_layer'+lev);
   if (typeof div != 'undefined' && div!=null)
   {
      //var img = div.parentElement.previousSibling.firstChild;
     var td = div.parentNode.previousSibling;
     while (td.nodeName!='TD')
         td = td.previousSibling;
     var img = td.firstChild;
      while (typeof img != 'undefined' && img!=null && img.nodeName!='IMG')
         img = img.nextSibling;
      if (typeof img != 'undefined' && img!=null)
         img.src = imgDir(img.src) + "empty.gif";
      //var td = img.parentElement;
      var td = div.parentNode;
      td.style.display='none';
      var td2 = td.nextSibling;
      while (typeof td2 != 'undefined' && td2 != null && td2.nodeName!='TD')
         td2 = td2.nextSibling;
      td2.style.display='none';
      div.innerHTML = '';
      reset_region(lev+1);
      region_set_states[lev-1]=0;
   }
}

function findParentSel(lev)
{
   if (lev==0)
   {
     currRegionParent=null;
     return;
   }
   var sel = document.getElementById('region_sel_'+lev);
   if (typeof sel != 'undefined' && sel!=null)
   {
       if (sel.selectedIndex==-1 || sel.selectedIndex==0)
       {
         findParentSel(lev-1);
         return;
       }
       currRegionParent=sel.options[sel.selectedIndex].value;
   }
   else // shouldn't goes to this branch
     findParentSel(lev-1);
}

var error = new String('failed to load, try again!');

function findRegionImg()
{
   if (typeof currRegionDIV != 'undefined' && currRegionDIV!=null)
   {
      //var img = currRegionDIV.parentElement.previousSibling.firstChild;
      var td = currRegionDIV.parentNode.previousSibling;
      while (td.nodeName!='TD')
         td = td.previousSibling;
      var img = td.firstChild;
      while (typeof img != 'undefined' && img!=null && img.nodeName!='IMG')
      {
         img = img.nextSibling;
      }
      currRegionIMG = img;
   }
   else
      currRegionIMG = null;
}

function region_click(lev)
{
   if (region_loading)
      return;
   if (lev>1 && region_set_states[lev-1]==0)
      return;
   currRegionDIV = document.getElementById('region_layer'+lev);
   findRegionImg();
   region_set_states[lev-1] = (region_set_states[lev-1]+1)%nregion_set_states;
   if (region_set_states[lev-1]==0)
   {
     region_set_states[lev-1]=1;
     if (lev>1)
       currRegionParent = region_init_ids[lev-2];
     else
       currRegionParent = null;
   }
   switch (region_set_states[lev-1])
   {
      case 0:
         reset_region(lev);
         break;
      case 1:
         {
            if (typeof currRegionIMG != 'undefined' && currRegionIMG!=null)
             currRegionIMG.src = imgDir(currRegionIMG.src) + "plus1.gif";
            currRegionDIV.innerHTML = '';
            reset_region(lev+1);
         }
         break;
      case 2:
         {
            var sel = document.getElementById('region_sel_'+lev);
            if (typeof sel == 'undefined' || sel==null)
              loadItems(lev,currRegionParent);
         }
         break;
      case 3:
         commitSelection(lev)
         break;
      default:
         throw "state undefined!";
         break;
   }
}

function loadItems(lev,pid)
{
    currRegionDIV.innerHTML ='loading ...';
    regwaitid=window.setTimeout("display_wait("+lev+")", 300);
    var url = approot+'/GeoRegions/LoadRegions.aspx?lev='+lev;
    if (pid!=null)
    {
       var ps='';
       for (var i=0;i<lev-2;i++)
           ps += region_init_ids[i]+',';
       region_init_ids[lev-1]=currRegionParent;
       url+='&pid='+ps+pid;
    }
    //document.frames[regframeid].document.location.href=url;
    window.frames[regframeid].window.location=url;
}

var currRegionNode;

function commitSelection(lev)
{
   var sel = document.getElementById('region_sel_'+lev);
   if (typeof sel != 'undefined' && sel!=null)
   {
     if (sel.selectedIndex==-1 || sel.selectedIndex==0)
     {
       if (sel.options.count==1 && lev>1)
       {
         reset_region(lev);
         commitSElection(lev-1);
         return;
       }
       region_set_states[lev]=2;
     }
     else
     {
        currRegionNode=sel.options[sel.selectedIndex].text;
        currRegionParent = sel.options[sel.selectedIndex].value;
        var url = approot+'/GeoRegions/CommitRegion.aspx?pid='+currRegionParent+'&lev='+lev;
        if (typeof region_set_perm!='undefined' && region_set_perm!=null)
        {
           if (region_set_perm)
              url += '&perm=1';
           else
              url += '&perm=0';
        }
        else
           url += '&perm=0';
        regwaitid=window.setTimeout("display_wait("+lev+")", 300);
        //document.frames[regframeid].document.location.href=url;
        window.frames[regframeid].window.location.href=url;
     }
   }
   else
     region_set_states[lev]=2;
}

function imgDir(source)
{
  return source.substring(0, source.lastIndexOf('/') + 1);
}

var cnt=0;
var err=false;
var region_loading;
function display_wait(lev)
{
  region_loading=true;
  if (err)
    return;
  cnt++;
  if (cnt<80)
  {
      if (currRegionDIV.innerHTML.length<30)
         currRegionDIV.innerHTML += '.';
      else
         currRegionDIV.innerHTML = '';
      regwaitid=window.setTimeout("display_wait("+lev+")", 300);
  }
  else
  {
      stopWait();
      err=true;
      reset_region(lev+1);
      currRegionDIV.innerHTML = error;
      region_set_states[lev-1]-=1;
      switch(region_set_states[lev-1])
      {
         case 1:
            if (typeof currRegionIMG != 'undefined' && currRegionIMG!=null)
             currRegionIMG.src = imgDir(currRegionIMG.src) + "plus1.gif";
            break;
         case 2:
            if (typeof currRegionIMG != 'undefined' && currRegionIMG!=null)
             currRegionIMG.src = imgDir(currRegionIMG.src) + "check.gif";
            break;
      }
  }
}

function loadDone(lev,ok)
{
  stopWait();
  if (ok)
  {
    if (typeof currRegionIMG != 'undefined' && currRegionIMG!=null)
       currRegionIMG.src = imgDir(currRegionIMG.src) + "check.gif";
  }
  else
  {
    reset_region(lev);
    //var td = currRegionIMG.parentElement;
    var td = currRegionIMG.parentNode;
    td.style.display='none';
    var td2 = td.nextSibling;
    while (td2.nodeName!='TD')
       td2 = td2.nextSibling;
    td2.style.display='none';

  }
}

function commitDone(lev,pid)
{
  stopWait();
  currRegionDIV.innerHTML = currRegionNode;
  currRegionIMG.src =  imgDir(currRegionIMG.src) + region_sep_img;
  fixPath(lev);
  region_init_ids[lev-1]=currRegionParent;
  reset_region(lev+1);
  if (typeof region_set_reload!='undefined' && region_set_reload!=null)
  {
     //document.location.href=region_set_reload;
     window.location=region_set_reload;
  }
}

function stopWait()
{
  cnt=0;
  window.clearTimeout(regwaitid);
  region_loading=false;
}



