﻿if (!oPopupMajor) var oPopupMajor = {};
if (!oPopupCustomOcc) var oPopupCustomOcc = {};
if (!oPopupCat) var oPopupCat = {};
if (!oPopupArea) var oPopupArea = {};
if (!oPopupInd) var oPopupInd = {};
var oPopupLayer={};
oPopupLayer.extend = function(target, source, replace) {
    for(var i=0,len=target.length;i<len;i++){
        for(var prop in source) {
	        if(replace == false && target[i][prop] != null) { continue; }
	        target[i][prop] = source[prop];
        }
    }
	return target;
};


oPopupLayer.extend(
[oPopupArea], {
    getQuotaNum: function(cityID) {
        var cityObj = this.getObjBy(cityID);
        if (cityObj != null) return cityObj.quotaNum;
        return 0;
    },
    getChildNameList: function(ids) {
        var idArr = ids.split(","), nameList = [], child;
        for (var i = 0; i < idArr.length; i++) {
            if (idArr[i] == "") continue;
            child = this.getChildById(idArr[i]);
            if (child != null) {
                nameList.push(child.name);
            }
        }
        return nameList.join(",");
    },
    getNamesAndQuotaAmountBy: function(cityIDs) {
        var id = cityIDs.split(",");
        var nameList = [], result = [], parent, child, num = 0;
        for (var i = 0; i < id.length; i++) {
            if (id[i] == "") continue;
            parent = this.getParentById(id[i]);
            if (parent == null) {
                child = this.getChildById(id[i]);
                if (child != null) {
                    num += child.quotaNum;
                    nameList.push(child.name);
                }
            } else {
                if (parent.quotaNum == 1) {
                    nameList.push(parent.name);
                    num += parent.quotaNum;
                } else {
                    nameList.push(this.getChildNameList(parent.childIds));
                    num += parent.quotaNum;
                }
            }
        }
        result.push(nameList.join(","));
        result.push(num);

        return result;
    }
}, false);




oPopupLayer.extend(
    [oPopupCat,oPopupArea],{
        getObjBy:function(IdOrParentId){
            var tmp=null;
            tmp = this.getParentById(IdOrParentId);
            if(tmp!=null){
                return tmp;
            }else{
                return this.getChildById(IdOrParentId);
            }
        },
        getObjWith: function(obj, id) {
            var tmpObj = {};
            for (var i = 0, len = obj.length; i < len; i++) {
                tmpObj = obj[i];
                if (tmpObj.id == id) {
                    return tmpObj;
                }
            }
            return null;
        },
        getParentById:function(id){
            return this.getObjWith(this.pList,id);
        },
        getParentBy:function(childId){
            var tmpList=this.pList,tmpP={},cIds="";
            for(var i=0,len=tmpList.length;i<len;i++){                
                tmpP=tmpList[i];
                cIds = "," + tmpP.childIds + ",";
                if(cIds.indexOf(childId+",")>=0){
                    return tmpP;
                }
            }
            return null;
        },
        getChildById:function(id){
            return this.getObjWith(this.cList,id);
        },
        getNameById:function(IdOrParentId){
            var tmpList=this.pList,tmpP={},cIds="";
            for(var i=0,len=tmpList.length;i<len;i++){
                tmpP = tmpList[i];
                if(tmpP.id == IdOrParentId){
                    return tmpP.name;
                }
                cIds = tmpP.childIds + ",";
                if(cIds.indexOf(IdOrParentId+",")>=0){
                    var tmpObj =this.getChildById(IdOrParentId); 
                    if(tmpObj != null){
                        return tmpObj.name;
                    }else{
                        break;
                    }
                }
            }
            return "";
        },
        getChildArrayBy:function(pId){
            var tmpList = this.cList,arrList=[];
            if(pId=="77889900"){//all country
                return this.getAllCountry();
            }else{
                for(var i=0,len=tmpList.length;i<len;i++){
                    if(tmpList[i].pid==pId){
                        arrList.push(tmpList[i]);
                    }
                }
            }
            return arrList;
        },
        getAllCountry:function(){
            var tmpList = this.pList,arrList=[],mOtherCountry=this.otherCountry;
            for(var i=0,len=tmpList.length;i<len;i++){
                if (mOtherCountry.indexOf("," + tmpList[i].id + ",") < 0) {
                    var tempObj ={};
                    tempObj.id = tempObj.pid = tmpList[i].id
                    tempObj.name = tmpList[i].name
                    arrList.push(tempObj);
                }else{
                    var a=a;
                }
            }
            return arrList;
        },
        otherCountry:",37000,38000,39000,40000,41000,42000,"
    },false);
    oPopupLayer.extend(
    [oPopupInd,oPopupMajor,oPopupCustomOcc],{
        getNameById:function(id,ver){
            var tmpList=this.list,tmpP={},cIds="";
            if(ver != undefined){
                if(ver=="0"){
                    tmpList = this.list0;
                }
            }
            for(var i=0,len=tmpList.length;i<len;i++){
                tmpP = tmpList[i];
                if(tmpP.id == id){
                    return tmpP.name;
                }
            }
            return "";
        }
    },false);

function popupLayer(){
    this.selectedItems=[];
    this.oCurData=oPopupArea;
    this.curDataType="";
    this.dataVer = 2;
    this.callbackHandlerList=[];
    this.client={
        tagPrefix:"",
        saveSelItemEleId:"",
        renderSelItemEleId:""/**/
    };
    this.tips={
        chooseParentItem:"（选择此大类，将包括以下所有小类）",
        exceedChooseMaxCount:"最多允许选择 {0} 项！",
        notAllowChooseParent:"请去掉对职位大类的勾选，请您选择职位小类",
        chooseParentItem1:"<label class='c_err'>[请选择以下小类]</label>",        
        includeParentMsg:"请去掉对职位大类的勾选，请您选择职位小类",
        titleSingle:"请选择{0}",
        title:"请选择{0}(最多可选{1}项)",
        selectedItemTitle:"您选择的{0}是"
    };
    this.rules={
        itemId:"chk_{0}_{1}_pl",
        selectedItemId:"_chk_{0}_{1}_pl"
    };
    var settings={
        chooseMaxCount:5,
        isSingle:false,
        showParentSel:true,
        showParentChk:true,
        showAllCountry:false,
        allowChooseParent:true
    };
    var eleIdList={
        plMain:"divMain_pl",
        plTitle:"divTitle_pl",
        plHTitleSingle:"hTitleSingle_pl",
        plHTitle:"hTitle_pl",
        plContent:"divContent_pl",
        plItems:"tblItems_pl",
        plSelectedItems:"tblSelectedItems_pl",
        plContentBottom_pl:"divContentBottom_pl",
        plParentSelect:"selParentItems_pl",
        plSelectedItemsTitle:"spSelectedItemsTitle_pl"
    };
    var classNames={
        classNameMain:"layerall",
        classNameTitle:"h3blk"
    };
    this.defaults={
    };    
    oPopupLayer.extend([this.defaults],classNames,false);
    oPopupLayer.extend([this],settings,false);
    oPopupLayer.extend([this.defaults],eleIdList,false);
}
popupLayer.isReady=false;
popupLayer.readyList=[];
popupLayer.prototype = {
//    show: function(clientElePrefix, renderSelectedItemsEleId, saveSelectedItemsEleId) {
//        var _self = this, arg = arguments;
//        if (!popupLayer.isReady) {
//            popupLayer.readyList[0] = function() {
//                _self.show.apply(_self, arg);
//            }
//            return;
//        }

        show: function(clientElePrefix, renderSelectedItemsEleId, saveSelectedItemsEleId, DesignatedAreaEleId) {
            var _self = this, arg = arguments;
            if (!popupLayer.isReady) {
                popupLayer.readyList[0] = function() {
                    _self.show.apply(_self, arg);
                }
                return;
            }

     //  debugger;
            this.$(this.defaults.plParentSelect).style.display = "block";
            this.settings(saveSelectedItemsEleId);
            this.clearSelectedItems();
            this.client.tagPrefix = clientElePrefix;
            this.client.saveSelItemEleId = saveSelectedItemsEleId;
            this.client.renderSelItemEleId = renderSelectedItemsEleId;
            this.client.designatedAreaEleId = DesignatedAreaEleId;
            this.client.DesignatedAreaList = [];
            this.showLayer();
       // debugger;
        switch (this.curDataType) {
            case "cate":
                this.oCurData = oPopupCat;
                this.addSelectedItemFrom(saveSelectedItemsEleId);
                this.fillParentSel();
                this.showTitle("职位类别");
                break;
            case "area":
                this.oCurData = oPopupArea;
                this.addSelectedItemFrom(saveSelectedItemsEleId);
                this.fillParentSel();
                this.showDesignatedArea();
                this.showTitle("地区");
                break;
            case "ind":
                this.notParentNode = true;
                this.oCurData = oPopupInd;
                this.addSelectedItemFrom(saveSelectedItemsEleId);
                this.showParentSel = false;
                this.renderTable(this.$(this.defaults.plItems), this.dataVer == "0" ? this.oCurData.list0 : this.oCurData.list, 3, "", "", this.isSingle ? true : false, "ind");
                this.showTitle("行业");
                break;
            case "major":
                this.notParentNode = true;
                this.oCurData = oPopupMajor;
                this.addSelectedItemFrom(saveSelectedItemsEleId);
                this.showParentSel = false;
                this.renderTable(this.$(this.defaults.plItems), this.oCurData.list, 3, "", "", this.isSingle ? true : false, "ind");
                this.showTitle("专业");
                break;
            case "customocc":
                this.notParentNode = true;
                this.oCurData = oPopupCustomOcc;
                this.addSelectedItemFrom(saveSelectedItemsEleId);
                this.showParentSel = false;
                this.renderTable(this.$(this.defaults.plItems), this.oCurData.list, 3, "", "", this.isSingle ? true : false, "ind");
                this.showTitle("自定义职位类别");
                break;
            default:
                this.tip("数据类型只能为：Area Cate Ind。请重新配置数据类型");
                this.close();
                return;
                break;
        }
    },
    settings: function(saveSelectedItemsEleId) {
        var clientSaveEle = this.$(saveSelectedItemsEleId);
        var dataType = clientSaveEle.getAttribute("plDataType");
        var isSingle = clientSaveEle.getAttribute("plIsSingle");
        var maxCount = clientSaveEle.getAttribute("plMaxCount");
        var showParentChk = clientSaveEle.getAttribute("plShowParentCheckBox");
        var showAllCountry = clientSaveEle.getAttribute("plShowAllCountry");
        var dataVersion = clientSaveEle.getAttribute("plDataVersion");
        var allowChooseParent = clientSaveEle.getAttribute("plAllowChooseParent");
        this.notParentNode = false;
        if (dataType) {
            this.curDataType = dataType.toLowerCase();
        } else {
            this.curDataType = "";
        }
        if (isSingle && isSingle.toLowerCase() == "true") {
            this.isSingle = true;
        } else {
            this.isSingle = false;
        }
        if (!isNaN(maxCount)) {
            this.chooseMaxCount = parseInt(maxCount, 10);
        } else {
            this.chooseMaxCount = 5;
        }
        if (showParentChk && showParentChk.toLowerCase() == "false") {
            this.showParentChk = false;
        } else {
            this.showParentChk = true;
        }
        if (allowChooseParent && allowChooseParent.toLowerCase() == "false") {
            this.allowChooseParent = false;
        } else {
            this.allowChooseParent = true;
        }
        if (showAllCountry && showAllCountry.toLowerCase() == "true") {
            this.showAllCountry = true;
        } else {
            this.showAllCountry = false;
        }
        if (dataVersion != undefined) {
            this.dataVer = dataVersion;
        }
        this.showParentSel = true;
    },
    showLayer: function() {
        webPB.showDialog("");
        var pl = this.$(this.defaults.plMain);
        with (pl.style) {
            position = "absolute";
            zIndex = "10001";
            display = "";
            top = 100 + webPB.getScrollPos().top + "px";
            left = webPB.getWAndHOfWindow().w / 2 - 350 + "px";
        }
    },
    showTitle: function(val) {
        var titleSingle = this.tips.titleSingle.replace("{0}", val);
        var title = this.tips.title.replace("{0}", val).replace("{1}", this.chooseMaxCount);
        var selectedTitle = this.tips.selectedItemTitle.replace("{0}", val);
        this.$(this.defaults.plSelectedItemsTitle).innerHTML = selectedTitle;
        if (this.isSingle || this.chooseMaxCount <= 0) {
            this.display(this.$(this.defaults.plHTitle), "none");
            this.display(this.$(this.defaults.plHTitleSingle), "block");
            this.$(this.defaults.plHTitleSingle).innerHTML = titleSingle;
        } else {
            this.$(this.defaults.plHTitle).innerHTML = title;
            this.display(this.$(this.defaults.plHTitleSingle), "none");
            this.display(this.$(this.defaults.plHTitle), "block");
        }
    },
    display: function(ele, val) {
        var e = this.$(ele);
        e.style.display = val;
    },
    render: function() {
        if (popupLayer.isReady) return;
        popupLayer.isReady = true;
        var html = [], _self = this;
        var div = document.createElement("div");
        div.id = this.defaults.plMain;
        div.className = this.defaults.classNameMain;
        div.style.cssText = "display:none;";
        html.push('<div class="alert_lay sech_lay lay_wl">');
        html.push('<!--背景圆角上-->');
        html.push('<div class="alert_t"></div>');
        html.push('<div class="box">');
        html.push('<h1 id="divTitle_pl">');
        html.push('<span id="hTitleSingle_pl">请选择职位类别</span>');
        html.push('<span id="hTitle_pl">请选择职位类别(最多可选<b></b>项)</span>');
        html.push('<a href="javascript:void(0);" id="btnCloseTop_pl" class="butn3"></a>');
        html.push('</h1>');
        html.push('<div class="sech_layt">');
        html.push('<h3><span id="spSelectedItemsTitle_pl">您选择的职位类别是：</span><b><input name="Submit" type="submit" id="btnConfirmTop_pl" class="butdef" value="确定" />');
        html.push('<input name="" type="button" id="btnClear_pl" value="清空" class="butdef" /></b></h3>');
        html.push('<div id="tblSelectedItems_pl"></div>');
        html.push('</div>');
        html.push('<div class="sech_layb" id="divContent_pl">');
        html.push('<select style="display:block;" id="selParentItems_pl"></select>');
        html.push('<div id="tblItems_pl"></div>');
        html.push('</div>');
        html.push('</div>');
        html.push('<!--背景圆角下-->');
        html.push('<div class="alert_b"><img src="http://image.mychinahr.com/a/sjob6.0/style/image/laybj_br.gif" alt=""/></div>');
        html.push('</div>');
        div.innerHTML = html.join("");
        document.body.appendChild(div);
        this.$("btnCloseTop_pl").onclick = function() { _self.close(); };
        this.$("btnConfirmTop_pl").onclick = function() { return _self.confirm(); };
        this.$("btnClear_pl").onclick = function() { _self.clearSelectedItems(); };
        if (popupLayer.readyList.length > 0) {
            popupLayer.readyList[0]();
        }
    },
    renderTable: function(table, childList, colNum, pId, pName, isRadio, dataT) {
        var itemCount = childList.length;
        var html = [], rowNum = (itemCount % colNum) == 0 ? itemCount / colNum : itemCount / colNum + 1;
        var tmpTable = table, chkId = "", status = false;
        var index = 0, _self = this, tempObj = {};
        rowNum = parseInt(rowNum, 10);
        this.deleteTableRow(tmpTable);
        var tr = this.getRow(tmpTable, 0); //tmpTable.insertRow(i);
        for (var i = 0; i < rowNum; ) {
            //var tr = this.getRow(tmpTable,i); //tmpTable.insertRow(i);
            for (j = 0; j < colNum; j++) {
                if (index < itemCount) {
                    var td = this.getCell(tr, index); //tr.insertCell(j);
                    tempObj = childList[index];
                    if (pId == pName && dataT != "ind") {
                        chkId = this.getSelectedItemId(tempObj);
                        td.innerHTML = this.createItemHtml(tempObj, tempObj.pname, chkId, true, false);
                    } else {
                        chkId = this.getItemId(tempObj);
                        if (pId != "77889900") {
                            td.innerHTML = this.createItemHtml(tempObj, pName, chkId, false, isRadio);
                        } else {
                            td.innerHTML = this.createItemHtml(tempObj, tempObj.name, chkId, false, isRadio);
                        }
                    }
                    this.$(chkId).onclick = function() { _self.addSelectedItem(this); };
                } else {//td.innerHTML = "";
                }
                index++;
            }
            i++;
        }
        if (this.showParentSel == false) { this.display(this.defaults.plParentSelect, "none") }
        else { this.display(this.defaults.plParentSelect, "block"); }
        if (pId != pName) { this.createPItemCheckBoxHtml(tmpTable, colNum, pId, pName, isRadio); }

        this.setCheckBoxStatus();
    },
    getRow: function(tmpObj, index) {
        if (tmpObj.nodeName.toLowerCase() == "table") {
            return tmpObj.insertRow(index);
        } else {
            var olEle = document.createElement("ol");
            if (index == 0) {
                return tmpObj.insertBefore(olEle, tmpObj.firstChild)
            }
            return tmpObj.appendChild(olEle);
            //return tmpObj;
        }
    },
    getCell: function(tmpObj, index) {
        if (tmpObj.nodeName.toLowerCase() == "tr") {
            return tmpObj.insertCell(index);
        } else {
            var liEle = document.createElement("li");
            if (index == 0) {
                return tmpObj.insertBefore(liEle, tmpObj.firstChild)
            }
            tmpObj.appendChild(liEle);
            return liEle;
        }
    },
    createPItemCheckBoxHtml: function(table, colNum, pId, pName, isRadio) {
        if (this.showParentChk == false) { return; }
        var _self = this, tempObj = {}, status = false;
        var tr = table.insertBefore(document.createElement("h6"), table.firstChild); //this.getRow(table,0)
        var td = tr;
        tempObj = { id: pId, name: pName, pid: pId, pname: pName };
        chkId = this.rules.itemId.replace("{0}", tempObj.pid).replace("{1}", tempObj.pid);
        if (this.exist(tempObj)) { status = true; }
        else { status = false; }
        var displayValue = "";
        if (this.allowChooseParent == false && this.onlyParentID(pId) == false) {
            displayValue = "none";
        }
        td.innerHTML = this.createItemHtml(tempObj, pName, chkId, status, isRadio, displayValue);
        if (this.onlyParentID(pId) == false) {
            if (this.allowChooseParent) {
                td.innerHTML += this.tips.chooseParentItem;
            } else {
                td.innerHTML += this.tips.chooseParentItem1;
            }
        }
        this.$(chkId).onclick = function() { _self.addSelectedItem(this); };
        if (status) {
            this.disableCheckBox(true);
        }
    },
    createItemHtml: function(childItem, pName, chkId, chkStatus, isRadio, display) {
        var html = [], tempChkId = chkId;
        var lblId = "lbl_" + childItem.pid + "_" + childItem.id + "_pl";
        var gn = "gn_" + childItem.pid + "_pl";
        html.push(this.createCheckBoxHtml(childItem, pName, tempChkId, chkStatus, isRadio, gn, display));
        html.push("<label for='" + tempChkId + "'");
        html.push(">");
        html.push(childItem.name);
        html.push("</label>");
        return html.join("");
    },
    createCheckBoxHtml: function(childItem, pName, chkId, chkStatus, isRadio, groupName, display) {
        var html = [];
        html.push("<input ");
        if (isRadio) {
            html.push(" type='radio'");
            html.push(" name=" + groupName);
        } else {
            html.push(" type='checkbox'");
        }
        if (chkStatus) {
            html.push(" checked=true");
        }
        html.push(" id='" + chkId + "'");
        html.push(" cid=" + childItem.id);
        html.push(" cname=" + childItem.name);
        html.push(" pid=" + (childItem.pid != undefined ? childItem.pid : childItem.id));
        html.push(" pname=" + pName);
        if (display != undefined) {
            html.push("  style='display:" + display + ";'")
        }
        html.push(">");
        html.push("</input>");
        return html.join("");
    },
    changeParent: function(pId, pName) {
        var cList = this.oCurData.getChildArrayBy(pId);
        this.renderTable(this.$(this.defaults.plItems), cList, 3, pId, pName, this.isSingle ? true : false, "");
    },
    deleteTableRow: function(table) {
        if (table.nodeName.toLowerCase() == "table") {
            for (var i = 0, count = table.rows.length; i < count; i++) {
                table.deleteRow(0);
            }
        } else {
            table.innerHTML = "";
        }
    },
    addSelectedItemFrom: function(clientSaveSelItemEleId) {
       // debugger;
        var ele = this.$(clientSaveSelItemEleId);
        var ids = ele.value.split(','), tmpData = this.oCurData;
        for (var i = 0, len = ids.length; i < len; i++) {
            if (ids[i] != "") {
                var tempObj = {};
                tempObj.id = ids[i];
                if (this.notParentNode == false) {
                    if (tmpData.getObjBy) {
                        var tempP = tmpData.getObjBy(tempObj.id);
                        if (tempP != null) {
                            if (tempP.pid) {
                                tempObj.pid = tempP.pid;
                                tempObj.pname = tmpData.getNameById(tempObj.pid);
                                tempObj.name = tempP.name;
                            } else {//parent
                                tempObj.name = tempP.name;
                                tempObj.pid = tempP.id;
                                tempObj.pname = tempP.name;
                            }
                            this.selectedItems.push(tempObj);
                        }
                    }
                } else {
                    tempObj.name = tmpData.getNameById(tempObj.id, this.dataVer);
                    tempObj.pid = tempObj.id;
                    tempObj.pname = tempObj.name;
                    this.selectedItems.push(tempObj);
                }
            }
        }
        this.renderSelectedItem();
    },
    addSelectedItem: function(ele) {
        if (ele.checked && !this.validate(ele)) { ele.checked = false; return false; };
        if (!ele.checked) { this.removeSelectedItem(ele); return; }
        var tempObj = {};
        tempObj.pid = ele.getAttribute("pid");
        tempObj.pname = ele.getAttribute("pname");
        tempObj.id = ele.getAttribute("cid");
        tempObj.name = ele.getAttribute("cname");
        if (tempObj.id == "77889900") {
            var o = oPopupArea.otherCountry;
            var selItem = this.selectedItems;
            for (var i = 0, len = selItem.length; i < len; i++) {
                if (o.indexOf("," + selItem[i].id + ",") >= 0 || o.indexOf("," + selItem[i].pid + ",") >= 0) {
                    this.selectedItems.add(selItem[i])
                } else {
                    this.removeSelectedItemById(selItem[i].id);
                    this.removeSelectedItemBy(selItem[i].pid);
                }
            }
            var chkList = this.$(this.defaults.plItems).getElementsByTagName("input"), tmpE, tmpT;
            for (var i = 0, len = chkList.length; i < len; i++) {
                tmpE = chkList[i]
                tmpT = tmpE.type.toLowerCase();
                if (tmpT == "checkbox" || tmpT == "radio") {
                    var tmpO = {};
                    tmpO.pid = tmpE.getAttribute("pid");
                    tmpO.pname = tmpE.getAttribute("pname");
                    tmpO.id = tmpE.getAttribute("cid");
                    tmpO.name = tmpE.getAttribute("cname");
                    if (tmpO.pid != tempObj.pid)
                        this.selectedItems.add(tmpO);
                    tmpE.checked = true;
                    tmpE.disabled = false;
                }
            }
        } else {
            if (tempObj.pid == tempObj.id) {
                this.removeSelectedItemBy(tempObj.pid);
                this.disableCheckBox(true);
            }
            this.selectedItems.push(tempObj);
        }
        this.renderSelectedItem();
    },
    removeSelectedItem: function(ele) {
        if (ele.getAttribute("cid") == "77889900") {
            //this.clearSelectedItems();
            var o = oPopupArea.otherCountry;
            var selItem = this.selectedItems;
            for (var i = 0, len = selItem.length; i < len; i++) {
                if (o.indexOf("," + selItem[i].id + ",") >= 0 || o.indexOf("," + selItem[i].pid + ",") >= 0) {
                } else {
                    this.removeSelectedItemById(selItem[i].id);
                    this.removeSelectedItemBy(selItem[i].pid);
                }
            }
            var chkList = this.$(this.defaults.plItems).getElementsByTagName("input"), tmpE, tmpT;
            for (var i = 0, len = chkList.length; i < len; i++) {
                tmpE = chkList[i]
                tmpT = tmpE.type.toLowerCase();
                if (tmpT == "checkbox" || tmpT == "radio") {
                    tmpE.checked = false;
                    tmpE.disabled = false;
                }
            }
            return;
        };
        if (this.$("chk_77889900_77889900_pl")) {
            this.$("chk_77889900_77889900_pl").checked = false;
        }
        var tmpList = [], tmpSelectedItem = this.selectedItems, ele1, id;
        for (var i = 0, len = tmpSelectedItem.length; i < len; i++) {
            if (tmpSelectedItem[i].id != ele.getAttribute("cid")) {
                tmpList.push(tmpSelectedItem[i]);
            } else {
                id = this.getItemId(tmpSelectedItem[i]);
                ele1 = this.$(id);
                if (ele1) { ele1.checked = false };
            }
        }
        this.selectedItems = tmpList;
        this.renderSelectedItem();
        if (ele.getAttribute("cid") == ele.getAttribute("pid")) {
            if (this.$(this.getItemId({ id: ele.getAttribute("cid"), pid: ele.getAttribute("pid") })))
                this.disableCheckBox(false);
        }
    },
    removeSelectedItemBy: function(pId) {
        var tmpList = [], tmpSelectedItem = this.selectedItems;
        for (var i = 0, len = tmpSelectedItem.length; i < len; i++) {
            if (tmpSelectedItem[i].pid != pId) {
                tmpList.push(tmpSelectedItem[i]);
            }
        }
        this.selectedItems = tmpList;
    },
    removeSelectedItemById: function(id) {
        var tmpList = [], tmpSelectedItem = this.selectedItems;
        for (var i = 0, len = tmpSelectedItem.length; i < len; i++) {
            if (tmpSelectedItem[i].id != id) {
                tmpList.push(tmpSelectedItem[i]);
            }
        }
        this.selectedItems = tmpList;
        this.renderSelectedItem();
    },
    clearSelectedItems: function() {
        var eleList = this.$(this.defaults.plContent).getElementsByTagName("input");
        for (var i = 0; i < eleList.length; i++) {
            if (eleList[i].type == 'radio' || eleList[i].type == 'checkbox') {
                eleList[i].checked = false;
                eleList[i].disabled = false;
            }
        }
        this.selectedItems = [];
        this.deleteTableRow(this.$(this.defaults.plSelectedItems));
    },
    renderSelectedItem: function() {
        this.renderTable(this.$(this.defaults.plSelectedItems), this.selectedItems, 3);
        this.validateParent(undefined, true);
    },
    disableCheckBox: function(s) {
        if (s && this.isSingle) return;
        var chkList = this.$(this.defaults.plItems).getElementsByTagName("input"), tmpE, tmpT;
        for (var i = 0, len = chkList.length; i < len; i++) {
            tmpE = chkList[i]
            tmpT = tmpE.type.toLowerCase();
            if (tmpT == "checkbox" || tmpT == "radio") {
                if (tmpE.getAttribute("cid") != tmpE.getAttribute("pid")) {
                    tmpE.checked = false;
                    tmpE.disabled = s;
                }
            }
        }
    },
    setCheckBoxStatus: function() {
        var tmpList = [], tmpSelectedItem = this.selectedItems, id = "", ele;
        for (var i = 0, len = tmpSelectedItem.length; i < len; i++) {
            id = this.getItemId(tmpSelectedItem[i]);
            ele = this.$(id);
            if (ele) {
                ele.checked = true;
            }
        }
    },
    getItemId: function(o) {
        return this.rules.itemId.replace("{0}", o.pid != undefined ? o.pid : o.id).replace("{1}", o.id);
    },
    getSelectedItemId: function(o) {
        return this.rules.selectedItemId.replace("{0}", o.pid != "undefined" ? o.pid : o.id).replace("{1}", o.id);
    },
    validate: function(ele) {
        if (this.isSingle && ele) { this.selectedItems = []; return true; }
        if (this.validateParent(ele) == false) { return false; };
        if (this.chooseMaxCount <= 0) {
            return true;
        } else if (ele && this.selectedItems.length < this.chooseMaxCount) {
            if (ele && ele.getAttribute("cid") == "77889900" && this.chooseMaxCount < 34) {
                this.tip(this.tips.exceedChooseMaxCount.replace("{0}", this.chooseMaxCount));
                return false;
            } else {
                return true;
            }
        } else {
            if (ele) {
                if (ele.getAttribute("cid") == ele.getAttribute("pid")) {
                    if (this.existBy(ele.getAttribute("pid"))) {
                        return true;
                    }
                }
                this.tip(this.tips.exceedChooseMaxCount.replace("{0}", this.chooseMaxCount));
                return false;
            } else {
                if (this.selectedItems.length > this.chooseMaxCount) {
                    this.tip(this.tips.exceedChooseMaxCount.replace("{0}", this.chooseMaxCount));
                    return false;
                }
            }
            return true;
        }
    },
    validateParent: function(ele, pageWarning) {
        if (this.allowChooseParent == false) {
            if (ele) {
                if (ele.getAttribute("cid") == ele.getAttribute("pid")) {
                    if (this.onlyParentID(ele.getAttribute("cid"))) {
                        return true;
                    }
                    if (this.oCurData.getParentById(ele.getAttribute("pid")) != null) {
                        this.tip(this.tips.notAllowChooseParent);
                        return false;
                    }
                }
            } else {
                var tmpSelectedItem = this.selectedItems, len = this.selectedItems.length;
                for (var i = 0; i < len; i++) {
                    if (this.oCurData.getParentById(tmpSelectedItem[i].id) != null && this.onlyParentID(tmpSelectedItem[i].id) == false) {
                        if (pageWarning) {
                            var selItemId = this.getSelectedItemId(tmpSelectedItem[i]);
                            var divWarning = document.createElement("label");
                            divWarning.innerHTML = this.tips.includeParentMsg;
                            divWarning.className = "c_err";
                            this.$(selItemId).parentNode.appendChild(divWarning);
                        } else {
                            this.tip(this.tips.notAllowChooseParent);
                            return false;
                        }
                    }
                }
            }
        }
        return true;
    },
    onlyParentID: function(id) {
        var specialIds = ",2600,3700,";
        id = "," + id + ",";
        if (specialIds.indexOf(id) >= 0) {
            return true;
        } else {
            return false;
        }
    },
    exist: function(item) {
        var tmpSelectedItem = this.selectedItems;
        for (var i = 0, len = tmpSelectedItem.length; i < len; i++) {
            if (tmpSelectedItem[i].id == item.id) {
                return true;
            }
        }
        return false;
    },
    existBy: function(pId) {
        var tmpSelectedItem = this.selectedItems;
        for (var i = 0, len = tmpSelectedItem.length; i < len; i++) {
            if (tmpSelectedItem[i].pid == pId) {
                return true;
            }
        }
        return false;
    },
    tip: function(msg) {
        setTimeout("alert(\"" + msg + "\")", 3);
    },
    fillParentSel: function() {
        if (this.showParentSel == false) { return; }
        var sel = this.$(this.defaults.plParentSelect), tempObj = {}, tempObjArr = this.oCurData.pList ? this.oCurData.pList : this.oCurData.list;
        var _self = this;
        for (var i = 0, len = tempObjArr.length; i < len; i++) {
            tempObj = tempObjArr[i];
            sel.options[i] = new Option(tempObj.name, tempObj.id);
        }
        if (sel.length > tempObjArr.length) {
            for (var i = index = tempObjArr.length, len = sel.length; i < len; i++) {
                sel.removeChild(sel.options[index]);
            }
        }
        if (this.curDataType == "area" && this.showAllCountry) {
            sel.insertBefore(new Option("全国", "77889900"), sel.options[0]);
            sel.options[0].value = "77889900"; //ie 很烂
            sel.options[0].text = "全国";
            sel.selectedIndex = 1;
        }
        sel.onchange = function() { _self.changeParent(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text) };
        sel.onchange();
    },
    showDesignatedArea: function() {
        var designatedArea = this.$(this.client.designatedAreaEleId);
        if (designatedArea) {
            switch (designatedArea.value) {
                case "-1": //全国
                    this.hideParentSelectItem(oPopupArea.otherCountry);
                    break;
                case "": break;
                default:
                    var city = oPopupArea.getObjBy(designatedArea.value);
                    var pName = "", pCityID = "";
                    if (city.pid) {
                        pName = oPopupArea.getParentById(city.pid).name;
                        pCityID = city.pid;
                        this.client.DesignatedAreaList.push(city.id);
                    } else {
                        pName = city.name;
                        pCityID = city.id;
                    }
                    var sel = this.$(this.defaults.plParentSelect);
                    this.changeParent(pCityID, pName);
                    sel.style.display = "none";
                    this.showParentSel = false;
                    this.hideNotInDesignatedAreaCity();
                    break;
            }
        }
    },
    hideNotInDesignatedAreaCity: function() {
        if (this.client.DesignatedAreaList.length > 0) {
            var itemsInputList = this.$(this.defaults.plItems).getElementsByTagName("input");
            var kLen = this.client.DesignatedAreaList.length;
            for (var i = 0, len = itemsInputList.length; i < len; i++) {
                for (var k = 0; k < kLen; k++) {
                    if (itemsInputList[i].id.indexOf("_" + this.client.DesignatedAreaList[k] + "_") < 0) {
                        this.display(itemsInputList[i].parentNode, "none");
                    }
                }
            }
        }
    },
    hideParentSelectItem: function(ids) {
        var idArr = ids.split(","), sel = this.$(this.defaults.plParentSelect);
        for (var i = 0, len = idArr.length; i < len; i++) {
            if (idArr[i] != "") {
                for (var index = 0, len = sel.length; index < len; index++) {
                    if (sel.options[index].value == idArr[i]) {
                        sel.removeChild(sel.options[index]);
                        break;
                    }
                }
            }
        }
    },
    $: function(id) {
        if (typeof (id) == "string") return document.getElementById(id);
        else return id;
    },
    confirm: function() {
        if (this.validate() == false) {
            return;
        }
        this.renderSelItemsToClient();
        this.close();
    },
    close: function() {
        //this.display("bgDiv_pl","none");
        webPB.close();
        this.display(this.defaults.plMain, "none");
    },
    remove: function(id, saveSelectedItemEle, mainDivId) {
        var ele = this.$(saveSelectedItemEle);
        var delIds = id.split('_');
        var delId = parseInt(delIds[delIds.length - 1], 10) || parseInt(delIds[delIds.length - 2], 10)
        var ids = ele.value.split(','), newIds = [];
        for (var i = 0, len = ids.length; i < len; i++) {
            if (ids[i] != delId) {
                newIds.push(ids[i]);
            }
        }
        this.$(mainDivId).removeChild(this.$(id));
        ele.value = newIds.join(',');
        this.callCallbackHandler();
    },
    renderSelItemsToClient: function() {
        var html = [], tmpSelectedItem = this.selectedItems, tmpObj;
        var renderSelItemDiv = this.$(this.client.renderSelItemEleId), len = tmpSelectedItem.length;
        var ids = [];
        for (var i = 0; i < len; i++) {
            tmpObj = tmpSelectedItem[i];
            html.push('<div class="list_m" id="' + this.client.tagPrefix + '_divSelItem_' + tmpObj.id + '">');
            html.push('<div class="list_c">');
            html.push(tmpObj.name);
            html.push('</div>');
            html.push('<input type="button" value="删除" title="删除"');
            html.push('onclick="pLayer.remove(\'' + this.client.tagPrefix + '_divSelItem_' + tmpObj.id + '\',\'' + this.client.saveSelItemEleId + '\',\'' + this.client.renderSelItemEleId + '\')" />');
            html.push('</div>');
            ids.push(tmpObj.id);
        }
        if (len > 0) {
            renderSelItemDiv.innerHTML = html.join("");
        } else {
            renderSelItemDiv.innerHTML = "";
        }
        this.$(this.client.saveSelItemEleId).value = ids.join(',');
        this.callCallbackHandler();
    },
    callCallbackHandler: function() {
        for (var i = 0, len = this.callbackHandlerList.length; i < len; i++) {
            try {
                var oTemp = this.callbackHandlerList[i];
                if (oTemp.id == this.client.saveSelItemEleId) {
                    oTemp.name.apply(null, oTemp.arguments);
                }
            } catch (ee) { }
        }
    },
    setCallbackHandler: function(eleID, fnHandlerName, argList) {
        this.callbackHandler = fnHandlerName;
        this.callbackHandlerArguments = argList;
        var oCallbackHandler = {};
        oCallbackHandler.id = eleID;
        oCallbackHandler.name = fnHandlerName;
        oCallbackHandler.arguments = argList;
        for (var i = 0, len = this.callbackHandlerList.length; i < len; i++) {
            if (this.callbackHandlerList[i].id == eleID && this.callbackHandlerList[i].name == fnHandlerName) {
                this.callbackHandlerList[i] = oCallbackHandler;
                return;
            }
        }
        this.callbackHandlerList.push(oCallbackHandler);
    }
};
var pLayer = new popupLayer();
jDoc.prepare(
    function(){
        pLayer.render();
    }        
);
