/*
日期：2001-04-19
版本：1.0
功能：实现一个选择框随着另一个选择框的改变而改变的功能，如城市随着省的改变而改变。(需要用到options.js文件中的options函数)
*/

/*
输入参数：
　　dataArrayName 第一级选择框的数据数组的名称，该数组的元素是包含三个子元素的数组，第一个子元素为选项的标题，第二个子元素为选项的值，第三个子元素为null或者为具有同样结构的下一级选择框的数据数组指针
　　selectionName 1, selectionName 2, ... selectionName N 各级选择框的完整对象名，如：document.province、document.city
*/
function liandong(dataArrayName){
  var i,j;
  var params;
  
  //取出第一个选择框和最后一个选择框的名称在arguments数组中的索引号
  var selectionIndexStart = 1, selectionIndexEnd = arguments.length-1;
  
  //设置各级选择框的onchange事件
  params = '';
  for(i=0;i<arguments.length;i++) params += ',"' + arguments[i] + '"';

  j = 0;
  for(i=selectionIndexStart;i<=selectionIndexEnd;i++,j++){
    var liandong_onchange_str = 'liandong_onchange(' + j + params + ')';
    //if(i==selectionIndexEnd)
    //liandong_onchange_str = 'liandong_onchange2(' + j + params + ')';
    var onchangeEvent = "new Function('"+liandong_onchange_str+"')";
    eval(arguments[i] + '.onchange=' + onchangeEvent);
    /*alert(liandong_onchange_str);
    alert(onchangeEvent);
    alert(arguments[i]);
    alert(i);*/
  }
  
  //初始化第一级选择框
  options(eval(arguments[selectionIndexStart]), eval(dataArrayName), 0, 1);
  
  //初始化第一级以下的所有选择框
  params = '0';
  for(i=0;i<arguments.length;i++) params += ',"' + arguments[i] + '"';
  eval('liandong_onchange(' + params + ')');
}

/*
输入参数：
　　thisSelectionIndex 当前改动的选择框的索引号，从0开始
　　dataArrayName      第一级选择框的数据数组的名称，该数组的元素是包含三个子元素的数组，第一个子元素为选项的标题，第二个子元素为选项的值，第三个子元素为null或者为具有同样结构的下一级选择框的数据数组指针
　　selectionName 1, selectionName 2, ... selectionName N 各级选择框的完整对象名，如：document.province、document.city
(递归)
*/
function liandong_onchange(thisSelectionIndex, dataArrayName){
  var i;
  
  //取出第一个选择框和最后一个选择框的名称在arguments数组中的索引号
  var selectionIndexStart = 2, selectionIndexEnd = arguments.length-1;
  
  //将thisSelectionIndex转换为当前选择框的名称在arguments数组中的索引号
  thisSelectionIndex += selectionIndexStart;
  
  //测试当前改动的选择框是否为最后一个选择框，如果是最后一个选择框，则退出该递归调用
  if( thisSelectionIndex>=selectionIndexEnd )
  {//alert("last");
  	return;
  	} 
  
  //取出下一级选择框的数据数组
  var nextSelectionArray = eval(dataArrayName);
  for(i=selectionIndexStart;i<=thisSelectionIndex && nextSelectionArray!=null;i++){
    nextSelectionArray = nextSelectionArray[eval(arguments[i]+'.selectedIndex')];
    if( nextSelectionArray.length<3 ) nextSelectionArray = null;
    else nextSelectionArray = nextSelectionArray[2];
  }
  
  //刷新下一级选择框的选项
  thisSelectionIndex++;
  if( nextSelectionArray==null ) eval(arguments[thisSelectionIndex] + '.length=0');
  else options(eval(arguments[thisSelectionIndex]), nextSelectionArray, 0, 1);
  
  //递归调用该函数，但第一个参数的值改为thisSelectionIndex+1(下一级选择框)
  var params = "" + (thisSelectionIndex-selectionIndexStart);
  for(i=1;i<arguments.length;i++) params += ',"' + arguments[i] + '"';
  eval('liandong_onchange(' + params + ')');
}

