﻿////////////////////
//多级关联下拉列表
//Created By : Yozo Chen
////////////////////
var DropDownList = new Class({
    options:{
        containerId:'sel',
        dataType:'json',
        dataSource: [],
        xmlUrl:'',
        rootValue:'0',
        xmlTree:{
            selectName:'ElectronicCategory',
            nodeId:'PTID',
            nodeParentId:'PTParentID',
            nodeName:'PTName'
        },
        
        dropList:['国家','省份/市','地区','县级市、县、区'],
        onItemChange:Class.empty   
    },
    initialize: function(options){
        this.setOptions(options);
        this.container = $(this.options.containerId);
        if(this.container){
            var ds = null;
	        if(this.options.dataType == 'xml'){
	            var myAjax = new Ajax(this.options.xmlUrl,{
	                method:'get',onSuccess:function(text,xml){	                    
	                    ds = this._xml2Json(xml);
	                    this.options.dataSource = ds;
	                    this._renderControl(ds);
	                }.bind(this),
	                onFailure:function(){
	                    alert("未能加载xml文件，请确认网络是否连接！\n");
	                }
	            }).request();
	        }else{
	            ds = this.options.dataSource;
	            this._renderControl(ds);
	        }
        }

    },
    _renderControl: function(ds){
        for(var i = 0; i < this.options.dropList.length; i ++){
            var eSel = new Element('select', {'id':this.options.containerId + '_sel_' + i.toString()}).injectInside(this.container);                   
            var eItem = new Option('--'+this.options.dropList[i]+'--', '-1');
            eSel.options.add(eItem);

//            var eLabel = new Element('label')
//                .setHTML(this.options.dropList[i]+'：')
//                .injectBefore(eSel);
                
            if(i == 0){
                for(var j = 0; j < ds.length; j ++){
                    if(ds[j].parentId == this.options.rootValue){
                        var eItem = new Option(ds[j].name,ds[j].id);
                        eSel.options.add(eItem);
                    }
                }
            }
            eSel.addEvent('change', this._itemChange.bind(this));
            eSel.addEvent('itemChange', this._change.bind(this));
            eSel.addEvent('itemChange', this.options.onItemChange);
        }
        
    },
    _xml2Json: function(xml) {
	    var json = [];
	    var str = '[';
	    var aNodes = xml.documentElement.getElementsByTagName(this.options.xmlTree.selectName);
	    for(var i = 0; i < aNodes.length; i ++){
	        if(aNodes[i].nodeType == 1){
	            var sPTID = aNodes[i].getAttribute(this.options.xmlTree.nodeId);
                var sPTParentID = aNodes[i].getAttribute(this.options.xmlTree.nodeParentId);
                var sPTName = aNodes[i].getAttribute(this.options.xmlTree.nodeName);
                str = str + '{ id:\'' + sPTID + '\', parentId:\'' + sPTParentID + '\', name:\'' + sPTName + '\'},';
	        }
        }
	    if(str.length > 0 && str.charAt(str.length - 1) == ','){
	        str = str.substr(0,str.length - 1);
	    }
	    str = str + ']';
        json = eval(str);
        return json
	},
    bindData: function(ds){
        if(this.options.dataType == 'json'){
            this.options.dataSource = ds;
            var eSel0 = $(this.options.containerId +'_sel_0');
            for(var j = 0; j < this.options.dataSource.length; j ++){
                if(this.options.dataSource[j].parentId == this.options.rootValue){
                    var eItem = new Option(this.options.dataSource[j].name,this.options.dataSource[j].id);
                    eSel0.options.add(eItem);
                }
            }    
        }

    },
    _itemChange:function(event){
        var eSel = event.srcElement ? event.srcElement : event.target; 
        var iCount = this.options.dropList.length;
        eSel.fireEvent('itemChange', [eSel.getAttribute('id'),iCount]);
    },
    _change: function(sId,iCount){
        var eSel = $(sId);
        var sItemId = eSel.options[eSel.selectedIndex].value;
        var iNo = parseInt(eSel.id.substring(this.options.containerId.length + 5,eSel.id.length))+1;
        var sNextSelId = eSel.id.substring(0,this.options.containerId.length + 5)+ iNo.toString();

        if(iNo >= iCount) return;
        var eNextSel = $(sNextSelId);
        
        //清空下一个列表

        var sName = eNextSel.options[0].text;
        var sValue = eNextSel.options[0].value;
        eNextSel.options.length = 0;
        
        eNextSel.options.add(new Option(sName,sValue));
        //填充相应数据到下一个列表
        for(var k = 0; k < this.options.dataSource.length; k ++){
            if(this.options.dataSource[k].parentId == sItemId){  
                var eItem = new Option(this.options.dataSource[k].name,this.options.dataSource[k].id);
                eNextSel.options.add(eItem);  
            }
        }

        //选中下一个列表的第一个项
        if(eNextSel.options.length > 1){
            eNextSel.options[1].selected = true;

        }
        //递归下一个
        if(iNo < iCount - 1){
            this._change(sNextSelId,iCount);
        }
    }
});
DropDownList.implement(new Events);
DropDownList.implement(new Options);


function SelectFirst(eSel, sValue){
    for(var i = 0; i < eSel.options.length; i ++){
        if(eSel.options[i].value == sValue){
            eSel.options[i].selected =true;
            break;
        }
    }
}

function classSelect(eSel,dl,parentIdValue,IdValue)
{
    //清空下一个列表
        var sName = eSel.options[0].text;
        var sValue = eSel.options[0].value;
        eSel.options.length = 0;
        eSel.options.add(new Option(sName,sValue));
        
    //填充相应数据到下一个列表
    for(var k = 0; k < dl.options.dataSource.length; k ++){
        if(dl.options.dataSource[k].parentId == parentIdValue){  
            var eItem = new Option(dl.options.dataSource[k].name,dl.options.dataSource[k].id);
            eSel.options.add(eItem);
        }
    }

    //选中下一个列表的第一个项
    for(var k = 0; k<eSel.options.length;k++){
        if(eSel.options[k].value == IdValue){
            eSel.options[k].selected = true;
        }
    }
}
//var oOption = {
//    containerId:'sel',
//    dataType:'json',
//    dataSource:[],
//    xmlUrl:'',
//    rootValue:'0',
//    xmlTree:{
//        selectName:'ElectronicCategory',
//        nodeId:'PTID',
//        nodeParentId:'PTParentID',
//        nodeName:'PTName'
//    },
//    dropList:['国家','省份/市','地区','县级市、县、区'],
//    onItemChange:function(){
//        //alert('00');
//    }   
//}
//var dl = new DropDownList(oOption);
//var synData = [
//    { id:'1', name:'中国',parentId:'0000000000'},
//    { id:'2', name:'美国',parentId:'0000000000'},
//    { id:'3', name:'德国',parentId:'0000000000'},
//    { id:'4', name:'日本',parentId:'0000000000'},
//    { id:'5', name:'广东',parentId:'1'},
//    { id:'6', name:'江西',parentId:'1'},
//    { id:'7', name:'北京',parentId:'1'},
//    { id:'8', name:'上海',parentId:'1'},
//    { id:'9', name:'南昌',parentId:'6'},
//    { id:'10', name:'赣州',parentId:'6'},
//    { id:'11', name:'深圳',parentId:'5'},
//    { id:'12', name:'广州',parentId:'5'},
//    { id:'13', name:'东莞',parentId:'5'},
//    { id:'14', name:'福田区',parentId:'11'},
//    { id:'15', name:'南山区',parentId:'11'},
//    { id:'16', name:'罗湖区',parentId:'11'},
//    { id:'17', name:'加州',parentId:'2'},
//    { id:'18', name:'加州222',parentId:'17'}];
//dl.bindData(synData);


///取值示例：
//function getValuekk(){
//    var el1 = document.getElementById('sel_sel_0');
//    var el2 = document.getElementById('sel_sel_1');
//    var el3 = document.getElementById('sel_sel_2');
//    var el4 = document.getElementById('sel_sel_3');
//    var s1 = el1.options[el1.selectedIndex].value;
//    var s2 = el2.options[el2.selectedIndex].value;
//    var s3 = el3.options[el3.selectedIndex].value;
//    var s4 = el4.options[el4.selectedIndex].value;
//    alert(s1+'  '+s2+'  '+s3+'  '+s4);
//}