//??????Util??????????
var Util = new Object();
//??http header???UserAgent??????
Util.getUserAgent = navigator.userAgent;
//???Gecko???Browser???Mozila?Firefox
Util.isGecko = Util.getUserAgent.indexOf("Gecko") != -1;
//???Opera
Util.isOpera = Util.getUserAgent.indexOf("Opera") != -1;
//????element?offset??????????Body?padding???????
//?????????true???offsetLeft?false??offsetTop
//??offset?style?client????????dindin??????http://www.jroller.com/page/dindin/?anchor=pro_javascript_12
Util.getOffset = function (el, isLeft) {
    var retValue = 0;
    while (el != null) {
        retValue += el["offset" + (isLeft ? "Left" : "Top")];
        el = el.offsetParent;
    }
    return retValue;
};
//???function?????funcName???fuction?????????element???????element???????????????????google?????
Util.bindFunction = function (el, fucName) {
    return function () {
        return el[fucName].apply(el, arguments);
    };
};
//????????????element????????column?????????????????????????????
//??????????pagePosLeft?pagePosTop??????
Util.re_calcOff = function (el) {
    for (var i = 0; i < Util.dragArray.length; i++) {
        var ele = Util.dragArray[i];
        ele.elm.pagePosLeft = Util.getOffset(ele.elm, true);
        ele.elm.pagePosTop = Util.getOffset(ele.elm, false);
    }
    var nextSib = el.elm.nextSibling;
    while (nextSib) {
        nextSib.pagePosTop -= el.elm.offsetHeight;
        nextSib = nextSib.nextSibling;
    }
};

//??Google Ig????table????????????show??????????????????
Util.hide = function () {
    Util.rootElement.style.display = "none";
};
//??Google Ig????table?????
Util.show = function () {
    Util.rootElement.style.display = "";
};

//???????????
ghostElement = null;
//??????????dom????
getGhostElement = function () {
    if (!ghostElement) {
        ghostElement = document.createElement("DIV");
        ghostElement.className = "modbox";
        ghostElement.backgroundColor = "";
        ghostElement.style.border = "2px dashed #aaa";
        ghostElement.innerHTML = "&nbsp;";
    }
    return ghostElement;
};

//????????Element??????????????
function draggable(el) {
    //??????????
    this._dragStart = start_Drag;
    //??????????
    this._drag = when_Drag;
    //??????????
    this._dragEnd = end_Drag;
    //????????????????dom??
    this._afterDrag = after_Drag;
    //??????????????????
    this.isDragging = false;
    //???Element?this?????elm?????????????????????????????????
    this.elm = el;
    //?????Element????????div????????div
    this.header = document.getElementById(el.id + "_h");
	//???iframe?element??????????????
    this.hasIFrame = this.elm.getElementsByTagName("IFRAME").length > 0;
    //?????header???drag???event
    if (this.header) {
    	//??????????
        this.header.style.cursor = "move";
        //??????header?element?this???????????
        Drag.init(this.header, this.elm);
        //???????????????????elemnt??????????????element?draggable????????
        this.elm.onDragStart = Util.bindFunction(this, "_dragStart");
        this.elm.onDrag = Util.bindFunction(this, "_drag");
        this.elm.onDragEnd = Util.bindFunction(this, "_dragEnd");
    }
};

//????draggable??????4?function
//??????????
function start_Drag() {
	//?????????????????????????
    Util.re_calcOff(this);
    //????????????????????????
    this.origNextSibling = this.elm.nextSibling;
    //???????????????
    var _ghostElement = getGhostElement();
    //??????????????
    var offH = this.elm.offsetHeight;
    if (Util.isGecko) {
    	//??gecko??????
        offH -= parseInt(_ghostElement.style.borderTopWidth) * 2;
    }
    //??????????????
    var offW = this.elm.offsetWidth;
    //??left?top???
    var offLeft = Util.getOffset(this.elm, true);
    var offTop = Util.getOffset(this.elm, false);
    //????????
    Util.hide();
    //?????????style????
    this.elm.style.width = offW + "px";
    //????????????????????????
    _ghostElement.style.height = offH + "px";
    //???????????????
    this.elm.parentNode.insertBefore(_ghostElement, this.elm.nextSibling);
    //????????????????????????????????position?absolute?????????css???????
    this.elm.style.position = "absolute";
    //??zIndex???????????????zIndex=100?????????????zIndex>100?????
    this.elm.style.zIndex = 100;
    //??position=absolute????left?top????????????????????????????????????????????
    this.elm.style.left = offLeft + "px";
    this.elm.style.top = offTop + "px";
    //?????????????????????
    Util.show();
    //??????ig_d.G???????????????????????????????????
    //??????????????
    this.isDragging = false;
    return false;
};
//??????????????????move??event????????????clientX, clientY
function when_Drag(clientX, clientY) {
	//????????????????????????
    if (!this.isDragging) {
        this.elm.style.filter = "alpha(opacity=70)";
        this.elm.style.opacity = 0.7;
        this.isDragging = true;
    }
    //???????column????????????
    var found = null;
    //?????????????????bug
    var max_distance = 100000000;
    //?????????element???????????????????????????
    for (var i = 0; i < Util.dragArray.length; i++) {
        var ele = Util.dragArray[i];
        //??????????????????????
        var distance = Math.sqrt(Math.pow(clientX - ele.elm.pagePosLeft, 2) + Math.pow(clientY - ele.elm.pagePosTop, 2));
        //????????????????
        if (ele == this) {
            continue;
        }
        //??????????
        if (isNaN(distance)) {
            continue;
        }
        //??????????????????found
        if (distance < max_distance) {
            max_distance = distance;
            found = ele;
        }
    }
    //???????
    var _ghostElement = getGhostElement();
    //???????????
    if (found != null && _ghostElement.nextSibling != found.elm) {
    	//???????????????????????????????????????????
        found.elm.parentNode.insertBefore(_ghostElement, found.elm);
        if (Util.isOpera) {
        	//Opera?????????/??????????
            document.body.style.display = "none";
            document.body.style.display = "";
        }
    }
};
//????
function end_Drag() {
	//???????????????after_Drag()?????????????????????????????????
    if (this._afterDrag()) {
        //remote call to save the change
		/*add by kamir 20090530*/
			
		var obj_td = this.elm.parentNode;
		//alert(obj_td);
		if (obj_td != null)
		{
			var cellIndex = obj_td.cellIndex;
			var position_left = -1;
			if (cellIndex == 1)
			{
				position_left = 0;
			}
			else if(cellIndex == 3)
			{
				position_left = 1;
			}
			
			var sections = "";
			var sub_sections = "";			
			
			
			if (position_left == 0 || position_left  == 1)
			{
				//alert(position_left);
				for (var j = 0; j < obj_td.childNodes.length; j++) 
				{
					var ele1 = obj_td.childNodes[j];
					if (ele1.tagName == "DIV" && ele1.className == "modbox") 			
					{
						if (ele1.attributes["section"]!= null)
						{
							if (sections == "")
								sections = ele1.attributes["section"].nodeValue;
							else
								sections = sections + ";" + ele1.attributes["section"].nodeValue;
						
						}
						if (ele1.attributes["subsection"]!= null)
						{
							if (sub_sections == "")
								sub_sections = ele1.attributes["subsection"].nodeValue;
							else
								sub_sections = sub_sections + ";" + ele1.attributes["subsection"].nodeValue;	
						
						}
						
					}
				}
				
				if (!xmlhttpLayOut)
					xmlhttpLayOut = initAjax();
					
				
				if (xmlhttpLayOut != null)
				{
					//alert(xmlhttpLayOut);
					xmlhttpLayOut.open("post","action_save_sections_layout.asp",true);
					xmlhttpLayOut.onreadystatechange = function()
					{
						if ( 4 == xmlhttpLayOut.readyState )
						{
							if ( 200 == xmlhttpLayOut.status )
							{
								//alert(xmlhttpLayOut.responseText);
								//_btn_del(section_id,user_id,category);
								//_btn_del_page_setting(1);
								var retxmlvalue = xmlhttpLayOut.responseText
								if (retxmlvalue == "error_section_user_id")
								{
									location.reload();
								}
								
							}
							else if(0 != xmlhttpLayOut.status)
							{
								alert(xmlhttpLayOut.status);
							}
						}
					};
					//alert(position_left + ";"+sections+";"+sub_sections);
					xmlhttpLayOut.setRequestHeader('Content-type','application/x-www-form-urlencoded');
					xmlhttpLayOut.send("postion_left="+escape(position_left)+"&sections="+escape(sections)+"&sub_sections="+escape(sub_sections));
		
				}

			}

		}

		
			//alert(this.elm.parentNode.childNodes.length);
		//alert(this.elm.parentNode.parentNode.cells[1].childNodes.length);
		/*end kamir*/
    }
    return true;
};
//????????
function after_Drag() {
    var returnValue = false;
    //????
    Util.hide();
    //?????position=absolute??????style???
    this.elm.style.position = "";
    this.elm.style.width = "";
    this.elm.style.zIndex = "";
    this.elm.style.filter = "";
    this.elm.style.opacity = "";
    //????
    var ele = getGhostElement();
    //???????????????
    if (ele.nextSibling != this.origNextSibling) {
    	//????????????????
        ele.parentNode.insertBefore(this.elm, ele.nextSibling);
        //??????????
        returnValue = true;
    }
    //??????????????????????
    ele.parentNode.removeChild(ele);
    //???????
    Util.show();
    if (Util.isOpera) {
    	//Opera?????????/??????????
        document.body.style.display = "none";
        document.body.style.display = "";
    }
    return returnValue;
};
//???Element???????event??????????????????netvibes???????????
//??????dindin???????????http://www.jroller.com/page/dindin/?anchor=pro_javascript_12
var Drag = {
	//???element????????????Element
	obj:null, 
	//element???????????elementHeader???????????
	init:function (elementHeader, element) {
		//?start???onmousedown?????????start
    	elementHeader.onmousedown = Drag.start;
    	//?element??header?obj?????header???????
	    elementHeader.obj = element;
	    //?????????????position=absolute????????????????onDrag???parse???
	    if (isNaN(parseInt(element.style.left))) {
	        element.style.left = "0px";
	    }
	    if (isNaN(parseInt(element.style.top))) {
	        element.style.top = "0px";
	    }
	    //???Function???????????Drag.init??????????????????draggable?????
	    element.onDragStart = new Function();
	    element.onDragEnd = new Function();
	    element.onDrag = new Function();
	},
	//?????????????????event?
	start:function (event) {
	    var element = Drag.obj = this.obj;
	    //????????event???????
	    event = Drag.fixE(event);
	    //?????????
	    if (event.which != 1) {
	    	//?????????
	        return true;
    	}
    	//???????????????????
	    element.onDragStart();
	    //??????
	    element.lastMouseX = event.clientX;
	    element.lastMouseY = event.clientY;
	    //?Global?event???????element???
	    document.onmouseup = Drag.end;
	    document.onmousemove = Drag.drag;
	    return false;
	}, 
	//Element????????
	drag:function (event) {
		//????????event???????
	    event = Drag.fixE(event);
	    //?????????
	    if (event.which == 0) {
	    	//?????????
	        return Drag.end();
    	}
    	//??????Element
	    var element = Drag.obj;
	    //????
	    var _clientX = event.clientY;
	    var _clientY = event.clientX;
	    //????????????
	    if (element.lastMouseX == _clientY && element.lastMouseY == _clientX) {
	        return false;
	    }
	    //??Element???
	    var _lastX = parseInt(element.style.top);
	    var _lastY = parseInt(element.style.left);
	    //????
	    var newX, newY;
	    //????????????+???????
	    newX = _lastY + _clientY - element.lastMouseX;
	    newY = _lastX + _clientX - element.lastMouseY;
	    //??element?????
	    element.style.left = newX + "px";
	    element.style.top = newY + "px";
	    //??element?????????????
	    element.lastMouseX = _clientY;
	    element.lastMouseY = _clientX;
	    //?????????????Drag????
	    element.onDrag(newX, newY);
	    return false;
	},
	//Element?????????????
	end:function (event) {
		//????????event???????
	    event = Drag.fixE(event);
	    //???Global?event???
	    document.onmousemove = null;
	    document.onmouseup = null;
	    //????onDragEnd???????obj
	    var _onDragEndFuc = Drag.obj.onDragEnd();
	    //?????obj??
	    Drag.obj = null;
	    return _onDragEndFuc;
	}, 
	//????????event???????
	fixE:function (ig_) {
	    if (typeof ig_ == "undefined") {
	        ig_ = window.event;
	    }
	    if (typeof ig_.layerX == "undefined") {
	        ig_.layerX = ig_.offsetX;
	    }
	    if (typeof ig_.layerY == "undefined") {
	        ig_.layerY = ig_.offsetY;
	    }
	    if (typeof ig_.which == "undefined") {
	        ig_.which = ig_.button;
	    }
    	return ig_;
	}
};



//????????????????????????
var _IG_initDrag = function (el) {
	//column??????google??????table???tbody?netvibes??<div>
    Util.rootElement = el;
    //??tbody??
    Util._rows = Util.rootElement.tBodies[0].rows[0];
    //??google?3?????????
    Util.column = Util._rows.cells;
    //??????????
    Util.dragArray = new Array();
    var counter = 0;
    for (var i = 0; i < Util.column.length; i++) {
    	//?????column
        var ele = Util.column[i];
        for (var j = 0; j < ele.childNodes.length; j++) {
        	//????column?????element
            var ele1 = ele.childNodes[j];
            //???div?????????draggable??
            //if (ele1.tagName == "DIV") 
            if (ele1.tagName == "DIV" && (ele1.className == "modbox"||ele1.className == "dm")) 			
			{
                Util.dragArray[counter] = new draggable(ele1);
                counter++;
            }
        }
    }
};

//google????????????id?"t_1"
//???onload?????????????google???onload?
//??????????????????????????????????????????

//????????????????????????google ig?????????????script???????js?????????
//_table=document.getElementById("t_1");
//window.onload = _IG_initDrag(_table);

//???????????javascript?????????????
/*add by kamir 20090530*/
var xmlhttpLayOut = null;

function initAjax()
{
	var aObj = null;
	try
	{
		aObj = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			aObj = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e2)
		{
			aObj = false;
		}
	}
	
	if (!aObj && typeof XMLHttpRequest != 'undefined')
	{
		aObj = new XMLHttpRequest();
	}
	return aObj;
}
/*end kamir*/

