﻿

function initDrag()
{
    //结构说明：最外一个div（定位relative）,内部三列（div）（定位relative），
    //每列内为各个拖动模块，（定位：默认），通过_shopDrag.dragFlag、_shopDrag.isAll、_shopDrag.onlyFlag来设定
    //各个模块的className来明确是否可以拖动，是否任意拖动和只允许在本列拖动

    //若出现拖动后margin-top不起作用时，请给各个拖动模块定义浮动（如float：left;）

    var _shopDrag =
    {
        isPress:false,
        curX:0,//鼠标按下时的开始位置
        curY:0,
        tarLeft:0,//拖动目标对象原来相对于父节点的位置
        tarTop:0,
        dragObj:null,//拖动的对象
        tempObj:null,//临时填充对象
        anotherDiv:null,//替换位置对象
        groupObj:document.getElementById("dragOut1")==null?null:document.getElementById("dragOut1").childNodes,//列对象
        nowGroup:null,//当前列
        groupIDTag:"group",//列标识(id)
        objs:null,//每列的所有子对象
        isAll:true,//是否无限制位置拖动
        dragFlag:"drag",//可以拖动的标志（className）
        onlyFlag:"only",//只能在当前列拖动的标志（className）
        dragType:"drMe",//若只要模块里面的某元素(如头部)可以作用拖动则给出标识（className），该值即为该标识，否则整块可以作用移动，若要定死整个模块可以作用拖动，则该值为null
        dotedColor:"red",//虚框颜色（接收颜色值，如：red或者#FFFFFF）
        isOnFix:false,//是否在不可移动版块上

        mopress:function(event)
        {
            event=event||window.event;
            var nowDiv = event.srcElement || event.target;
            
            var targetDiv=null;
            if((_shopDrag.dragType!=null && nowDiv.className.indexOf(_shopDrag.dragType)>=0)||_shopDrag.dragType==null)
            {
               
                while(nowDiv)
                {
                    if(nowDiv.className && nowDiv.className.indexOf(_shopDrag.dragFlag)>=0)
                    {
                        targetDiv=nowDiv;
                        break;
                    }
                    nowDiv=nowDiv.parentNode;
                }
            }
            if(targetDiv!=null && targetDiv.className.indexOf(_shopDrag.dragFlag)>=0)
            {
                _shopDrag.dragObj=targetDiv;
                _shopDrag.nowGroup=targetDiv.parentNode;
                if(_shopDrag.nowGroup)
                {
                    _shopDrag.objs=_shopDrag.nowGroup.childNodes;
                }
                _shopDrag.isPress=true;
                if(document.selection)
                {
                    document.selection.empty();
                }
                event=event||window.event;
                _shopDrag.curX=event.clientX;
                _shopDrag.curY=event.clientY;
                _shopDrag.tarLeft=targetDiv.offsetLeft;
                _shopDrag.tarTop=targetDiv.offsetTop;
                if(_shopDrag.tempObj && _shopDrag.tempObj.parentNode!=null)
                {
                    _shopDrag.tempObj.parentNode.removeChild(_shopDrag.tempObj);
                }
                _shopDrag.tempObj=targetDiv.cloneNode(false);
                _shopDrag.tempObj.id="temp_ID";
                with(_shopDrag.tempObj.style)
                {
                     width = "auto";
                     border = "1px dotted " + _shopDrag.dotedColor;
                }
                with(targetDiv.style)
                {
                    cursor="move";
                    width=(targetDiv.offsetWidth-2)+"px";
                }
                if(targetDiv.className.indexOf(_shopDrag.onlyFlag)>=0)
                {
                    _shopDrag.isAll=false;
                }
                document.onmouseup = _shopDrag.moup;
                document.onmousemove = _shopDrag.momove;
            }
        },

        momove:function(event)
        {  
            
            if(_shopDrag.isPress && _shopDrag.dragObj!=null && _shopDrag.objs!=null  && document.onmousedown)
            {
                if(document.selection)
                {
                    document.selection.empty();  
                }
                targetDiv = _shopDrag.dragObj;
                event=event||window.event;
                var x=event.clientX;
                var y=event.clientY;
                var userLeft=targetDiv.offsetLeft+targetDiv.offsetParent.offsetLeft;
                var userTop=targetDiv.offsetTop+targetDiv.offsetParent.offsetTop;
                with(targetDiv.style)
                {
                    position="absolute";
                    zIndex=1000;
                    float="none";
                    clear="none";
                }
                targetDiv.style.left=(_shopDrag.tarLeft+x-_shopDrag.curX)+"px";
                targetDiv.style.top=(_shopDrag.tarTop+y-_shopDrag.curY)+"px";

                if(_shopDrag.groupObj!=null && _shopDrag.isAll==true)
                {
                    for(var k=0;k<_shopDrag.groupObj.length;k++)
                    {
                        if(userLeft>=_shopDrag.groupObj[k].offsetLeft && _shopDrag.groupObj[k].id && _shopDrag.groupObj[k].id.indexOf(_shopDrag.groupIDTag)>=0)
                        {
                            _shopDrag.nowGroup=_shopDrag.groupObj[k];
                            _shopDrag.objs=_shopDrag.nowGroup.childNodes;
                        }
                    }   
                }
                var flag=false;
                if(_shopDrag.objs!=null)
                {
                    for(var i=0;i<_shopDrag.objs.length;i++)
                    {   
                        _shopDrag.anotherDiv=_shopDrag.objs[i];
                        if(_shopDrag.anotherDiv!=null && _shopDrag.anotherDiv.offsetTop-10<targetDiv.offsetTop && targetDiv.offsetTop<=(_shopDrag.anotherDiv.offsetTop+_shopDrag.anotherDiv.offsetHeight) && _shopDrag.anotherDiv!=targetDiv)
                        {
                            flag=true;
                            break;
                        }
                    }
                }
                var tempTop=0;
                if(_shopDrag.tempObj!=null && _shopDrag.nowGroup)
                {
                    tempTop=_shopDrag.tempObj.offsetTop;
                    if(flag && _shopDrag.anotherDiv!=_shopDrag.tempObj)
                    {
                        _shopDrag.nowGroup.insertBefore(_shopDrag.tempObj,_shopDrag.anotherDiv);
                        if(_shopDrag.anotherDiv.className.indexOf(_shopDrag.dragFlag)<0)
                        {
                            _shopDrag.isOnFix=true;
                        }
                    }
                    else if(!_shopDrag.isOnFix && _shopDrag.anotherDiv!=_shopDrag.tempObj && targetDiv.offsetTop<=0 && _shopDrag.nowGroup.firstChild)
                    {
                        _shopDrag.nowGroup.insertBefore(_shopDrag.tempObj,_shopDrag.nowGroup.firstChild);
                    }
                    else if(!_shopDrag.isOnFix && _shopDrag.anotherDiv!=_shopDrag.tempObj)
                    {
                        _shopDrag.nowGroup.appendChild(_shopDrag.tempObj);
                    }
                    
                }
                
            }
            
        },

        moup:function(event)
        {

            if(_shopDrag.dragObj && _shopDrag.isPress)
            {
                event=event||window.event;
                targetDiv = _shopDrag.dragObj;
                with(targetDiv.style)
                {
                    cursor="auto";
                    zIndex="";
                    position="";
                    width="100%";
                }
                if(_shopDrag.tempObj && _shopDrag.tempObj.parentNode)
                {
                    var chkObj=targetDiv.getElementsByTagName("input");
                    var chkValue=chkObj[0].checked;
                    _shopDrag.tempObj.parentNode.insertBefore(targetDiv,_shopDrag.tempObj);
                    chkObj[0].checked=chkValue;
                    _shopDrag.tempObj.parentNode.removeChild(_shopDrag.tempObj);
                }
                BgInint(1);
                BgInint(2);
                BgInint(3);
                SaveForumOrder();
                
            }
            _shopDrag.isPress=false;
            _shopDrag.isAll=true;
            document.onmouseup = null;
            document.onmousemove = null;
            
        }
        
    };
    document.onmousedown = _shopDrag.mopress;
}

//重新初始化背景颜色
function BgInint(flag)
{
    var outObject=document.getElementById("group"+flag);
    if(outObject)
    {
        var objects=outObject.getElementsByTagName("ul");
        if(objects)
        {
            for(var i=0;i<objects.length;i++)
            {
                if(i%2!=0)
                {
                    objects[i].style.background="#F4F5F9";
                    objects[i].style.border="none";
                }
                else
                {
                    objects[i].style.background="#FFFFFF";
                    objects[i].style.border="none";
                }
            }
        }
    }
}
//保存次序
function SaveForumOrder()
{
    var outObjects=document.getElementById("dragOut1").childNodes;
    var objects;
    var orderStr="";
    var tempOrder="";
    var statusStr="";
    var tempStatus="";
    var inputs;
    var spans;
    if(outObjects)
    {
        for(var i=0;i<outObjects.length;i++)
        {
            if(outObjects[i].id && outObjects[i].id.indexOf("group")>=0)
            {
                objects=outObjects[i].getElementsByTagName("ul");
                if(objects)
                {
                    for(var k=0;k<objects.length;k++)
                    {
                        inputs=objects[k].getElementsByTagName("input");
//                        spans=objects[k].getElementsByTagName("span");
//                        if(spans && spans.length>0)
//                        {
//                            tempStatus=tempStatus+spans[0].innerHTML + "@";
//                        }
                        if(inputs && inputs.length>=2)
                        {
                            if(inputs[0].checked)
                            {
                                tempOrder=tempOrder+inputs[1].value+",";
                                tempStatus=tempStatus+inputs[1].value+"@1,";
                            }
                            else
                            {
                                tempStatus=tempStatus+inputs[1].value+"@0,";
                            }
                            
                        }
                        
                    }
                    if(tempOrder!="")
                    {
                        tempOrder=tempOrder.substring(0,tempOrder.length-1);
                        orderStr=orderStr+outObjects[i].id.replace("group","")+":"+tempOrder +"|";
                        
                    }
                    if(tempStatus!="")
                    {
                        tempStatus=tempStatus.substring(0,tempStatus.length-1);
                        statusStr=statusStr+outObjects[i].id.replace("group","")+":"+tempStatus +"|";
                    }
                    tempOrder="";
                    tempStatus="";
                }
            }
        }
    }
    if(orderStr!="")
    {
        orderStr=orderStr.substring(0,orderStr.length-1);
    }
    if(statusStr!="")
    {
        statusStr=statusStr.substring(0,statusStr.length-1);
    }
    document.getElementById("hidForumOrder").value=orderStr;
    document.getElementById("hidForumStatus").value=statusStr;
}


//上移下移
function UpDown(flag,nowDiv)
{
    var dragFlag="drag" ;
    var dragType="noUpDown";
    var targetDiv=null;
    if(nowDiv.className.indexOf(dragType) < 0)
    {
        while(nowDiv)
        {
            if(nowDiv.className && nowDiv.className.indexOf(dragFlag)>=0)
            {
                targetDiv=nowDiv;
                break;
            }
            nowDiv=nowDiv.parentNode;
            
        }
        if(flag==0)
        {
            if(targetDiv && targetDiv.previousSibling && targetDiv.parentNode)
            {
                var chkObj=targetDiv.getElementsByTagName("input");
                var chkValue=chkObj[0].checked;
                targetDiv.parentNode.insertBefore(targetDiv,targetDiv.previousSibling);
                chkObj[0].checked=chkValue;
            }
        }
        if(flag==1)
        {
            if(targetDiv && targetDiv.nextSibling && targetDiv.parentNode)
            {
                if(targetDiv.nextSibling.nextSibling)
                {
                    var chkObj=targetDiv.getElementsByTagName("input");
                    var chkValue=chkObj[0].checked;
                    targetDiv.parentNode.insertBefore(targetDiv,targetDiv.nextSibling.nextSibling);
                    chkObj[0].checked=chkValue;
                }
                else
                {
                    var chkObj=targetDiv.getElementsByTagName("input");
                    var chkValue=chkObj[0].checked;
                    targetDiv.parentNode.appendChild(targetDiv);
                    chkObj[0].checked=chkValue;
                }
            }
        }
        BgInint(1);
        BgInint(2);
        BgInint(3);
        SaveForumOrder();
    }
}


