﻿//标题：无限级下拉菜单(ASP/AJAX/JS)

function createXMLHttpRequest(classid,str,types) {
try{
http_request=new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
	try{
	http_request=new ActiveXObject('Microsoft.XMLHTTP');
	}catch(e){
		try{
		http_request=new XMLHttpRequest();
		}catch(e){alert("你的游览器不支持xmlhttp对象!")}
	}
}
var linkurl="/WebManage/Class/CitySelect/Linkage.asp?classid="+classid+"&str="+escape(str)+"&types="+types;
http_request.open("GET",linkurl,false);
http_request.send(null);

//服务器端处理返回的是经过escape编码的字符串.
//在页面显示服务器查询结果
var returntxt=unescape(http_request.responseText);
return returntxt;
}

function deleteList(tid)	//更改下下级 及以下菜单为空
{
	for(var kkk=parseInt(tid)+2;kkk<=selectList;kkk++){
		submenu=document.getElementById(MenuIdArr[kkk])	;
		submenu.length=0;
		submenu.options.add(new Option( "-----请选择-----",""));
		submenu.options[0].selected=true;}
}

var MenuIdArr,M
var selectList=2;		//设置几级联动菜单
var selectName="sel";	//下拉菜单控件前缀名，不带数字
function selectArr()	//创建下拉列表数组
{
	MenuIdArr= new Array();
	for(M=1;M<=selectList;M++)
		MenuIdArr[M]=""+selectName+M;
}

function GetResult(types,tid)
{//types:判断类型(添加(Add)/删除(Delete)/修改(Modify)/为空);tid:当前菜单级别(tid的值为1...selectList,第一次加载为0)
var str="";
tid=parseInt(tid);								//转换成整型
selectArr();									//调用菜单列表数
if(tid==0)										//tid为0时，表示第一次加载
	classid=0;									//classid为当前选择列表的ID
else											//非第一次加载
	if(types=="Add" && tid==1)					//如果为添加，且为第一级菜单时
		classid=0;
	else if(types=="Add" && tid!=1)			//如果为添加，且不为第一级菜单时，则取得上一级菜单的ID值
		classid=$$(MenuIdArr[tid-1]).value;		//classid为当前选择列表的ID
	else
		classid=$$(MenuIdArr[tid]).value;		//classid为当前选择列表的ID

	if(types=="Add" || types=="Modify")
		str=$("str").value;							//添加或修改的类别名称

	if(tid<=selectList){
	if((types=="Add" && str.length<1) || (types=="Modify" && str.length<1) || (classid.length<1))
		alert("类别不能为空!");
	else
	{
		if(tid<selectList || (tid==selectList && (types=="Add" || types=="Modify" || types=="Delete")))
			var returntxt=createXMLHttpRequest(classid,str,types);		//创建xmlhttp对象,获取返回值
		switch(returntxt){
			case "Being":
			shows("该类别名已经存在！","");
			break;
			case "AddSuccess":
			shows("添加成功！",classid,tid);										//添加成功，并且重置当前下拉列表的值
			break;
			case "ModifySuccess":
			shows("修改成功！",((parseInt(tid)==1)?0:($$(MenuIdArr[tid-1]).value)),tid);	//修改成功，并且重置当前下拉列表的值
			break;
			case "DeleteSuccess":
			shows("删除成功！",((parseInt(tid)==1)?0:($$(MenuIdArr[tid-1]).value)),tid);	//删除成功，并且重置当前下拉列表的值
			break;
			case "Error":
			shows("参数出现错误！","");
			break;
			default:
			//通过XMLHTTP返回数据,开始构建Select.
			if(tid!=selectList)		//当菜单级别到最后一级时，它没有下一级菜单,所以不能构建下一级菜单的内容
				BuildSel(returntxt,document.getElementById(MenuIdArr[parseInt(tid)+1]));	//构建下一级菜单的内容
			deleteList(tid);	//更改下下级 及以下菜单为空
		}
	}
}
}

function BuildSel(str,sel)
{//先清空原来的数据.用于显示下拉菜单用
sel.options.length=0;
var arrstr = new Array();
arrstr = str.split(",");
//开始构建新的Select.
sel.options.add(new Option( "-----请选择-----",""));
if(str.length>0)
{
for(var i=0;i<arrstr.length;i++)
{//分割字符串
var subarrstr=new Array
subarrstr=arrstr[i].split("|")
//生成下级菜单
sel.options.add(new Option(subarrstr[1],subarrstr[0]));
}
sel.options[0].selected=true;
}}

function GetClass(pid,classid,tid)
{//pid:父ID;classid:传的类别ID值;tid:当前菜单级别
tid=parseInt(tid);
if(tid<=selectList){
	selectArr();	//调用菜单列表数
	var returntxt=createXMLHttpRequest(pid,"","");		//创建xmlhttp对象,获取返回值
	//通过XMLHTTP返回数据,开始构建Select.
	BuildSel1(returntxt,document.getElementById(MenuIdArr[tid]),classid);
	//更改下级 及以下菜单为空
	deleteList(tid-1);
}
}

function BuildSel1(str,sel,classid)
{//先清空原来的数据.用于修改内容时显示菜单用
sel.options.length=0;
var arrstr = new Array();
arrstr = str.split(",");
//开始构建新的Select.
	if(str.length>0)   
	{
		for(var i=0;i<arrstr.length;i++)
		{//分割字符串
		var subarrstr=new Array;
		subarrstr=arrstr[i].split("|");
		//生成下级菜单
		sel.options.add(new Option(subarrstr[1],subarrstr[0]));
		if(parseInt(classid)==parseInt(subarrstr[0]))
		sel.options[i].selected=true;
		}
	}
	else
	sel.options.add(new Option( "-----请选择-----",""));
}

//显示添加/修改/删除的成功消息
function shows(title,classid,tid)
{
	$("show").style.display="";
	$("show").innerHTML=title;
	setTimeout("$('show').style.display='none'",3000);
	if(/^[0-9]*$/.test(tid))
	{
		BuildSel(createXMLHttpRequest(classid,"",""),document.getElementById(MenuIdArr[tid]));	//构建当前级菜单的内容
		deleteList(tid-1);	//更改下级 及以下菜单为空
	}
}
//获取ID
function $(id)
{return document.getElementById(id);}
//获取下拉框当前选中项
function $$(id)
{return $(id).options[$(id).options.selectedIndex]}
//添加/修改/删除传值函数
function ChangeTitle(title,types,tid)
{//title:操作时显示的说明;types:判断类型(添加(Add)/删除(Delete)/修改(Modify)/为空);tid:当前菜单级别(tid的值为1...selectList,第一次加载为0)
	selectArr();									//调用菜单列表数
	$("box").style.display="none";
	if((types=="Modify" || types=="Delete") && ($$(MenuIdArr[tid]).value.length>0))
	{	$("t1").innerHTML=title;
		$("t2").innerHTML=$$(MenuIdArr[tid]).text;	//原类名(修改/删除时用来显示)
		$("str").value=$$(MenuIdArr[tid]).text;		//原类名(修改/删除时用来显示)
		$("seletesid").value=tid
		$("types").value=types;
		$("box").style.display="";	}
	else if(types=="Add")
	{	$("t1").innerHTML=title;
		$("seletesid").value=tid
		$("types").value=types;
		$("box").style.display="";	}
	else
		alert("请先选择要操作的类别！");
}

function clo()
{$("box").style.display="none";}
