﻿//通用二级分类多选对象
function multiSelect2FreeObject(objKey,strShowId,strTypeId1,strTypeId2,data,typename,maxselectNum,cols){
	var key = objKey;
	var div1 = null;
	var div2 = null;
	var ctrShow = corefunc.$(strShowId);
	var ctrId1 = corefunc.$(strTypeId1);
	var ctrId2 = corefunc.$(strTypeId2);
	var values = new Array();
	var arrData = data;
    var maxnumber = isNaN(parseInt(maxselectNum)) ? 5 : parseInt(maxselectNum);
	var typename = typename;
	var columns = 5;
	if(typeof(cols)!="undefined" && cols>0)columns = cols;
	
    var setShowText = function(){
        var showText = "";
        for(var i=0;i<values.length;i++){
            if(i>0)showText+=", ";
            showText += values[i][1];
        }
        if(showText.length>0){
            if(ctrShow.tagName.toLowerCase() == "input"){
                ctrShow.title = showText;
                if(corefunc.byteLength(showText)>28){
                    showText = corefunc.leftByte(showText,26) + "...";
                }
                ctrShow.value = showText;
            }else{
                ctrShow.innerHTML = showText;
            }
        }else{
            if(ctrShow.tagName.toLowerCase() == "input"){
                ctrShow.title = "未设置";
                ctrShow.value = "请选择";
            }else{
                ctrShow.innerHTML = "";
            }
        }
    }
    
    this.doCancel = function(){
        if(div1!=null)div1.style.display="none";
        if(div2!=null)div2.style.display="none";
        globalMaskDiv.hide();
        init();
    }
    
    this.doOK = function(){
        var value1 = "";
        var value2 = "";
        var i,j1,j2;
        for(i=0,j1=0,j2=0;i<values.length;i++){
            if(values[i][2]==0){
                if(j1>0)value1 += ",";
                value1 += values[i][0];
                j1++;
            }else{
                if(j2>0)value2 += ",";
                value2 += values[i][0];
                j2++;
            }
        }
        ctrId1.value = value1;
        ctrId2.value = value2;
        setShowText();
        this.doCancel();
    }
    
    var hasChild = function(id){
        for(var i=0;i<arrData.length;i++){
            if(arrData[i][1]==id) return true;
        }
        return false;
    }
    
    var inSelect = function(id,parentId){
        for(var i=0;i<values.length;i++){
            if(values[i][0]==id && values[i][2]==parentId){
                return true;
            }
        }
        return false;
    }
    
    var hasChildInSelect = function(id){
        for(var i=0;i<values.length;i++){
            if(values[i][2]>0){
                for(var j=0;j<arrData.length;j++){
                    if(arrData[j][1]==id && arrData[j][0]==values[i][0]){
                        return true;
                    }
                }
            }
        }
        return false;
    }
    
    var setOpTagColor = function(){
        var cbs = corefunc.$$("cb0"+key);
        for(var idx=0;idx<cbs.length;idx++){
            if(cbs[idx].checked == false && hasChildInSelect(parseInt(cbs[idx].value))){
                cbs[idx].nextSibling.style.color = "blue";
            }else if(cbs[idx].checked == false){
                cbs[idx].nextSibling.style.color = "";
            }
        }
    }
    
    var showSelected = function(){
        var td = corefunc.$("txt"+key+"Selected");
        var html = "";
        if(values.length>0)
        {
            html = "<div style=\"background-color:#EFEFEF;padding:3px 1px;\"><strong>已选择:</strong>";
            html += "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr>";
            for(var i=0;i<values.length;i++){
                if(i>0&&i%columns==0)html += "</tr><tr>";
                html += "<td width=\""+parseInt(100/columns)+"%\" nowrap=\"nowrap\"><input type=\"checkbox\" checked=\"checked\" onclick=\"javascript:multiSelect2Free.clients['"+objKey+"'].exchangeId("+values[i][0]+",'"+values[i][1]+"',"+values[i][2]+");\" /> "+values[i][1]+"</td>";
            }
            html += "</tr></table>";
            html += "</div>";
        }
        td.innerHTML = html;
    }
    
    this.exchangeId = function(id,name,parentId){
        for(var i=0;i<values.length;i++){
            if(values[i][0]==id && values[i][2]==parentId){
                values.splice(i,1);
                if(parentId==0){
                    corefunc.$("cb0"+key+id).checked = false;
                    corefunc.$("cb0"+key+id).nextSibling.style.color = "";
                }else{
                    if(corefunc.$("cb" + parentId + key + id)!=null){
                        corefunc.$("cb" + parentId + key +id).checked = false;
                        corefunc.$("cb" + parentId + key + id).nextSibling.style.color = "";
                    }
                }
                if(parentId>0) setOpTagColor();
                showSelected();
                return true;
            }
        }
        if(parentId>0)
        {
            for(var idx=values.length-1;idx>=0;idx--){
                if(values[idx][0]==parentId && values[idx][2]==0){
                    values.splice(idx,1);
                }
            }
        }else{
            for(var idx=values.length-1;idx>=0;idx--){
                if(values[idx][2]==id){
                    values.splice(idx,1);
                }
            }
        }
        if(maxnumber>0){
            if(values.length>=maxnumber){
                alert("选择"+typename+"不能超过"+maxnumber+"个！");
                return false;
            }
        }
        values[values.length] = [id,name,parentId];
        corefunc.$("cb"+parentId+key+id).nextSibling.style.color="red";
        if(parentId>0)
        {
            corefunc.$("cb0"+key+parentId).checked = false;
            corefunc.$("cb0"+key+parentId).nextSibling.style.color="blue";
        }else{
            corefunc.$("cb"+parentId+key+id).nextSibling.style.color="red";
        }
        showSelected();
        return true;
    }
    
	this.popDiv1 = function(){
        globalMaskDiv.show();
        if(div1==null){
            div1 = document.createElement("DIV");
            div1.className = "popDiv";
            if(corefunc.isIE()){
                document.body.appendChild(div1);
            }else{
                document.documentElement.appendChild(div1);
            }
        }
        var html = "<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">";
        if(columns>1){
            html+="<tr class=\"opbar\"><td colspan=\""+(columns-1)+"\" class=\"title\">选择"+typename+"</td><td>&nbsp;&nbsp;<span class=\"pointer\" onclick=\"javascript:multiSelect2Free.clients['"+ objKey +"'].doOK();\">确定</span>&nbsp;&nbsp;<span class=\"pointer\" onclick=\"javascript:multiSelect2Free.clients['"+ objKey +"'].doCancel();\">取消</span></td></tr>";
        }else{
            html+="<tr class=\"opbar\"><td><table border=\"0\" width=\"100%\"><tr><td class=\"title\">选择"+typename+"</td><td>&nbsp;&nbsp;<span class=\"pointer\" onclick=\"javascript:multiSelect2Free.clients['"+ objKey +"'].doOK();\">确定</span>&nbsp;&nbsp;<span class=\"pointer\" onclick=\"javascript:multiSelect2Free.clients['"+ objKey +"'].doCancel();\">取消</span></td></tr></table></td></tr>";
        }
        html += "<tr><td colspan=\""+columns+"\" id=\"txt"+key+"Selected\" style=\"color:#333333;\"></td></tr>";
        var html1 = "<tr>";
        var html2 = "<tr>";
        var idx,idx1,idx2;
        for(idx=0,idx1=0,idx2=0;idx<arrData.length;idx++){
            if(arrData[idx][1]==0){
                var inSel = inSelect(arrData[idx][0],0);
                if(hasChild(arrData[idx][0])){
                    if(idx2>0 && idx2 % columns==0)html2+="</tr><tr>";
                    html2 += "<td><input type=\"checkbox\" name=\"cb0"+objKey+"\" value=\""+arrData[idx][0]+"\" id=\"cb0"+objKey+arrData[idx][0]+"\" onclick=\"javascript:return multiSelect2Free.clients['"+key+"'].exchangeId("+arrData[idx][0]+",'"+arrData[idx][2]+"',0);\"";
                    if(inSel) html2 += " checked=\"checked\"";
                    html2 += " /><span id=\""+objKey+"0Txt"+arrData[idx][0]+"\" style=\"cursor:pointer;";
                    if(inSel) html2 += "color:red;";
                    html2 += "\" onclick=\"javascript:multiSelect2Free.clients['"+objKey+"'].popDiv2("+arrData[idx][0]+",'"+arrData[idx][2]+"');\">＋"+arrData[idx][2]+"</span></td>"
                    idx2++;
                }else{
                    if(idx1>0 && idx1 % columns==0)html1+="</tr><tr>";
                    html1 += "<td><input type=\"checkbox\" name=\"cb0"+objKey+"\" id=\"cb0"+objKey+arrData[idx][0]+"\" onclick=\"javascript:return multiSelect2Free.clients['"+key+"'].exchangeId("+arrData[idx][0]+",'"+arrData[idx][2]+"',0);\"";
                    if(inSel) html1 += " checked=\"checked\"";
                    html1 += " /><span id=\""+objKey+"0Txt"+arrData[idx][0]+"\"";
                    if(inSel) html1 += " style=\"color:red;\"";
                    html1 += ">"+arrData[idx][2]+"</span></td>";
                    idx1++;
                }
                
            }
        }
        for(idx=0;idx<columns-idx1%columns;idx++){
            html1+="<td></td>";
        }
        for(idx=0;idx<columns-idx2%columns;idx++){
            html2+="<td></td>";
        }
        html1 += "</tr>";
        html2 += "</tr>";
        
        if(idx1>0){
            html+=html1+"<tr><td colspan=\""+columns+"\" style=\"height:5px;overflow:hidden;padding:0px;margin:0px;\"><hr noshade=\"noshade\" size=\"1\" color=\"#CCCCCC\" /></tr>";
        }
        if(idx2>0)html+=html2;
        html += "</table>";
        div1.innerHTML = html;
        div1.style.zIndex = globalMaskDiv.zIndex+1;
        div1.style.display = "";
        showSelected();
   	    setOpTagColor();
        corefunc.moveCenter(div1);
	}
	this.reshowDiv1 = function(){
	    div2.style.display = "none";
	    div1.style.zIndex = globalMaskDiv.zIndex + 1;
	}
	this.popDiv2 = function(id1,name1){
        if(div2==null)
        {
            div2 = document.createElement("DIV");
            div2.className = "popDiv";
            if(corefunc.isIE()){
                document.body.appendChild(div2);
            }else{
                document.documentElement.appendChild(div2);
            }
        }
        var html = "<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\">";
        if(columns>1){
            html+="<tr class=\"opbar\"><td colspan=\""+(columns-1)+"\" class=\"title\">"+name1+"</td><td colspan=\"2\"><span class=\"pointer\" onclick=\"javascript:multiSelect2Free.clients['"+objKey+"'].reshowDiv1();\">确定</span></td></tr>";
        }else{
            html+="<tr class=\"opbar\"><td><table border=\"0\" width=\"100%\"><tr><td class=\"title\">"+name1+"</td><td colspan=\"2\">&nbsp;&nbsp;<span class=\"pointer\" onclick=\"javascript:multiSelect2Free.clients['"+objKey+"'].reshowDiv1();\">确定</span></td></tr></table></td></tr>";
        }
        html += "<tr>"
        for(var idx=0,idx1=0;idx<arrData.length;idx++){
            if(arrData[idx][1]==id1){
                var inSel = inSelect(arrData[idx][0],arrData[idx][1]);
                if(idx1>0 && idx1 % columns==0)html+="</tr><tr>";
                html += "<td><input type=\"checkbox\" name=\"cb"+arrData[idx][1]+objKey+"\" id=\"cb"+arrData[idx][1]+objKey+arrData[idx][0]+"\" onclick=\"javascript:return multiSelect2Free.clients['"+key+"'].exchangeId("+arrData[idx][0]+",'"+arrData[idx][2]+"',"+arrData[idx][1]+");\"";
                if(inSel)html += " checked=\"checked\"";
                html += " /><span id=\""+objKey+"2Txt"+arrData[idx][0]+"\"";
                if(inSel) html += " style=\"color:red;\"";
                html += ">"+arrData[idx][2]+"</span></td>";
                idx1 ++;
            }
        }
        html += "</tr></table>";
        div1.style.zIndex = globalMaskDiv.zIndex - 1;
        div2.style.zIndex = globalMaskDiv.zIndex + 1;
        div2.innerHTML = html;
        div2.style.display = "";
        div2.style.left = (parseInt(div1.style.left)+20) + "px";
        div2.style.top  = (parseInt(div1.style.top)+(div1.clientHeight/3)) + "px";
	}
	
	var init = function(){
	    values.length = 0;
	    var ids;
	    if(corefunc.isIdSeries(ctrId1.value)){
	        ids = ctrId1.value.split(",");
	        for(var i=0;i<ids.length;i++){
	            values[values.length] = [parseInt(ids[i]),"",0];
	        }
	    }
	    if(corefunc.isIdSeries(ctrId2.value)){
	        ids = ctrId2.value.split(",");
	        for(var i=0;i<ids.length;i++){
	            values[values.length] = [parseInt(ids[i]),"",1];
	        }
	    }
	    if(values.length>0){
	        for(var i=0;i<values.length;i++){
	            if(values[i][2] == 0){
	                for(var j=0;j<arrData.length;j++){
	                    if(arrData[j][0]==values[i][0] && arrData[j][1] <= 0){
	                        values[i][1] = arrData[j][2];
	                        break;
	                    }
	                }
	            }else{
	                for(var j=0;j<arrData.length;j++){
	                    if(arrData[j][0]==values[i][0] && arrData[j][1] > 0){
	                        values[i][1] = arrData[j][2];
	                        values[i][2] = arrData[j][1];
	                        break;
	                    }
	                }
	            }
	        }
	    }
	    setShowText();
	}
	init();
}

//二级分类单选
var multiSelect2Free = {
    clients:new Array(),
    add:function(objKey,strShowId,strTypeId1,strTypeId2,data,typename,maxnumber,cols){
        var obj = new multiSelect2FreeObject(objKey,strShowId,strTypeId1,strTypeId2,data,typename,maxnumber,cols);
        multiSelect2Free.clients[objKey] = obj;
    },
    show:function(key){
        multiSelect2Free.clients[key].popDiv1();
    }
}

