// Chained Menu



// Copyright Xin Yang 2004

// Web Site: www.yxScripts.com

// EMail: m_yangxin@hotmail.com

// Last Updated: 2004-08-23



// This script is free as long as the copyright notice remains intact.



var _disable_empty_list=false;

var _hide_empty_list=false;



// ------



///// DynamicDrive.com added function/////////////



var onclickaction="alert"



function goListGroup(){

for (i=arguments.length-1;i>=0; i--){

if (arguments[i].selectedIndex!=-1){

var selectedOptionvalue=arguments[i].options[arguments[i].selectedIndex].value

if (selectedOptionvalue!=""){

if (onclickaction=="alert")

alert(selectedOptionvalue)

else if (newwindow==1)

window.open(selectedOptionvalue)

else

window.location=selectedOptionvalue

break

}

}

}

}



///// END DynamicDrive.com added function//////





if (typeof(disable_empty_list)=="undefined") { disable_empty_list=_disable_empty_list; }

if (typeof(hide_empty_list)=="undefined") { hide_empty_list=_hide_empty_list; }



var cs_goodContent=true, cs_M="M", cs_L="L", cs_curTop=null, cs_curSub=null;



function cs_findOBJ(obj,n) {

  for (var i=0; i<obj.length; i++) {

    if (obj[i].name==n) { return obj[i]; }

  }

  return null;

}

function cs_findContent(n) { return cs_findOBJ(cs_content,n); }



function cs_findM(m,n) {

  if (m.name==n) { return m; }



  var sm=null;

  for (var i=0; i<m.items.length; i++) {

    if (m.items[i].type==cs_M) {

      sm=cs_findM(m.items[i],n);

      if (sm!=null) { break; }

    }

  }

  return sm;

}

function cs_findMenu(n) { return (cs_curSub!=null && cs_curSub.name==n)?cs_curSub:cs_findM(cs_curTop,n); }



function cs_contentOBJ(n,obj){ this.name=n; this.menu=obj; this.lists=new Array(); this.cookie=""; }; cs_content=new Array();

function cs_topmenuOBJ(tm) { this.name=tm; this.items=new Array(); this.df=0; this.addM=cs_addM; this.addL=cs_addL; }

function cs_submenuOBJ(dis,link,sub) {

  this.name=sub;

  this.type=cs_M; this.dis=dis; this.link=link; this.df=0;



  var x=cs_findMenu(sub);

  this.items=x==null?new Array():x.items;



  this.addM=cs_addM; this.addL=cs_addL;

}

function cs_linkOBJ(dis,link) { this.type=cs_L; this.dis=dis; this.link=link; }



function cs_addM(dis,link,sub) { this.items[this.items.length]=new cs_submenuOBJ(dis,link,sub); }

function cs_addL(dis,link) { this.items[this.items.length]=new cs_linkOBJ(dis,link); }



function cs_showMsg(msg) { window.status=msg; }

function cs_badContent(n) { cs_goodContent=false; cs_showMsg("["+n+"] Not Found."); }



function cs_optionOBJ(text,value) { this.text=text; this.value=value; }

function cs_emptyList(list) { for (var i=list.options.length-1; i>=0; i--) { list.options[i]=null; } }

function cs_refreshList(list,opt,df) {

  cs_emptyList(list);



  for (var i=0; i<opt.length; i++) {

    list.options[i]=new Option(opt[i].text, opt[i].value);

  }



  if (opt.length>0) {

    list.selectedIndex=df;

  }

}

function cs_getOptions(menu) {

  var opt=new Array();

  for (var i=0; i<menu.items.length; i++) {

    opt[i]=new cs_optionOBJ(menu.items[i].dis, menu.items[i].link);

  }

  return opt;

}

function cs_updateListGroup(content,idx,sidx,mode) {

  var i=0, curItem=null, menu=content.menu;



  while (i<idx) {

    menu=menu.items[content.lists[i++].selectedIndex];

  }



  if (menu.items[sidx].type==cs_M && idx<content.lists.length-1) {

    var df=cs_getIdx(mode,content.cookie,idx+1,menu.items[sidx].df);



    cs_refreshList(content.lists[idx+1], cs_getOptions(menu.items[sidx]), df);

    if (content.cookie) {

      cs_setCookie(content.cookie+"_"+(idx+1),df);

    }



    if (idx+1<content.lists.length) {

      if (disable_empty_list) {

        content.lists[idx+1].disabled=false;

      }

      if (hide_empty_list) {

        content.lists[idx+1].style.display="";

      }



      cs_updateListGroup(content,idx+1,df,mode);

    }

  }

  else {

    for (var s=idx+1; s<content.lists.length; s++) {

      cs_emptyList(content.lists[s]);



      if (disable_empty_list) {

        content.lists[s].disabled=true;

      }

      if (hide_empty_list) {

        content.lists[s].style.display="none";

      }



      if (content.cookie) {

        cs_setCookie(content.cookie+"_"+s,"");

      }

    }

  }

}

function cs_initListGroup(content,mode) {

  var df=cs_getIdx(mode,content.cookie,0,content.menu.df);



  cs_refreshList(content.lists[0], cs_getOptions(content.menu), df);

  if (content.cookie) {

    cs_setCookie(content.cookie+"_"+0,df);

  }



  cs_updateListGroup(content,0,df,mode);

}



function cs_updateList() {

  var content=this.content;

  for (var i=0; i<content.lists.length; i++) {

    if (content.lists[i]==this) {

      if (content.cookie) {

        cs_setCookie(content.cookie+"_"+i,this.selectedIndex);

      }



      if (i<content.lists.length-1) {

        cs_updateListGroup(content,i,this.selectedIndex,"");

      }

    }

  }

}



function cs_getIdx(mode,name,idx,df) {

  if (mode) {

    var cs_idx=cs_getCookie(name+"_"+idx);

    if (cs_idx!="") {

      df=parseInt(cs_idx);

    }

  }

  return df;

}



function _setCookie(name, value) {

  document.cookie=name+"="+value;

}

function cs_setCookie(name, value) {

  setTimeout("_setCookie('"+name+"','"+value+"')",0);

}



function cs_getCookie(name) {

  var cookieRE=new RegExp(name+"=([^;]+)");

  if (document.cookie.search(cookieRE)!=-1) {

    return RegExp.$1;

  }

  else {

    return "";

  }

}



// ----

function addListGroup(n,tm) {

  if (cs_goodContent) {

    cs_curTop=new cs_topmenuOBJ(tm); cs_curSub=null;



    var c=cs_findContent(n);

    if (c==null) {

      cs_content[cs_content.length]=new cs_contentOBJ(n,cs_curTop);

    }

    else {

      delete(c.menu); c.menu=cs_curTop;

    }

  }

}



function addList(n,dis,link,sub,df) {

  if (cs_goodContent) {

    cs_curSub=cs_findMenu(n);



    if (cs_curSub!=null) {

      cs_curSub.addM(dis,link||"",sub);

      if (typeof(df)!="undefined") { cs_curSub.df=cs_curSub.items.length-1; }

    }

    else {

      cs_badContent(n);

    }

  }

}



function addOption(n,dis,link,df) {

  if (cs_goodContent) {

    cs_curSub=cs_findMenu(n);



    if (cs_curSub!=null) {

      cs_curSub.addL(dis,link||"");

      if (typeof(df)!="undefined") { cs_curSub.df=cs_curSub.items.length-1; }

    }

    else {

      cs_badContent(n);

    }

  }

}



function initListGroup(n) {

  var _content=cs_findContent(n), count=0;

  if (_content!=null) {

    content=new cs_contentOBJ("cs_"+n,_content.menu);

    cs_content[cs_content.length]=content;



    for (var i=1; i<initListGroup.arguments.length; i++) {

      if (typeof(arguments[i])=="object" && arguments[i].tagName && arguments[i].tagName=="SELECT") {

        content.lists[count]=arguments[i];



        arguments[i].onchange=cs_updateList;

        arguments[i].content=content; arguments[i].idx=count++;

      }

      else if (typeof(arguments[i])=="string" && /^[a-zA-Z_]\w*$/.test(arguments[i])) {

        content.cookie=arguments[i];

      }

    }



    if (content.lists.length>0) {

      cs_initListGroup(content,content.cookie);

    }

  }

}



function resetListGroup(n) {

  var content=cs_findContent("cs_"+n);

  if (content!=null && content.lists.length>0) {

    cs_initListGroup(content,"");

  }

}

// ------