
function DraggerSetting(){
  var shower = null;
  var po = null;//选中的Portlet对象
  var po_right = null;//被鼠标右键选中的Portlet对象
  var dc = null;//跟随鼠标的透明面板
  var ptreePanel = null;//portlet树
  var po_x = 0;
  var po_y = 0;
  var m_x = 0;
  var m_y = 0;
  var pcs = null;
  var position = null;
  var targetPc = null;
  var posHeight = 1;
  var lock;
  var action_button = null;//触发动作的按钮
  //动作属性
  var action = 0;
  var DONONE = 0;//无动作
  var DOCLOSE = 1;//关闭操作
  var DOEDITSHIFT = 2;//切换编辑
  var DOEDITEND = 3;//结束编辑
  var DOEDITSUBMIT = 4;//提交编辑
  var DODRAG = 5;//进行拖拽
  var DODRAGTREE = 6;//拖拽portlet树
  var DOVIEWSHIFT = 7;//内容部分的显示/隐藏切换
  var DOTREESHIFT = 8;//portlet树的显示/隐藏切换
  var DOTREELEFT = 9;//portlet树置左
  var DOTREERIGHT = 10;//portlet树置右
  //portlet状态
  var CREATED = 1;//已经生成，但尚未加载内容
  var LOADED = 2;//已经加载内容

  this.avoidSelect = function(){return false;}
  this.activeSelect = function(){return true;}
  //其它变量
  var layoutSaved;
  var ptreePanelScrollProcess;

//初始化
  this.init = function(){
    this.shower = document.getElementById("shower_");//调试用
    this.dc = document.getElementById("handle");//跟随鼠标的透明面板
    this.pcs = new Array(0);//所有模板容器pc的数组缓存
    this.loadpcs(document.body);//初始化模板容器数组pcs，载入所有模板容器pc
    this.posHeight = 0;
	this.lock = false;
	this.layoutSaved = true;

	//动作属性
	this.DONONE = 0;
    this.DOCLOSE = 1;
    this.DOEDITSHIFT = 2;
	this.DOEDITEND = 3;
	this.DOEDITSUBMIT = 4;
	this.DODRAG = 5;
	this.DODRAGTREE = 6;
	this.DOVIEWSHIFT = 7;
	this.DOTREESHIFT = 8;
	this.DOTREELEFT = 9;
	this.DOTREERIGHT = 10;
	this.action = DONONE;
	//portlet状态
    this.CREATED = 1;
    this.LOADED = 2;
  }

  this.showMessage = function(message){
	if(this.shower){
	  this.shower.innerHTML = message;
	}
  }

  this.removePo = function(po){
    var num = 0;
    if(!po || !po.parentNode)return;
	if(po.previousSibling){
   	var list = po.parentNode.childNodes;
        for(var i=0;i<list.length;i++){
               var item = list.item(i);
               if(item.pid){
                     num = num + 1;
                }
        }
        po.parentNode.removeChild(po.previousSibling);
        if(num<=1){
    	var s = String.fromCharCode(160);
        var text = document.createTextNode(s);
        po.parentNode.insertBefore(text);
                }
		po.parentNode.removeChild(po);

	}
  }

  this.close_portlet = function(){
	if(this.po_right){
	  this.removePo(this.po_right);
	}
	portlet_layout_menu.style.display = "none";
  }

  //加载e所有子结点中的模板容器到容器数组pcs
  this.loadpcs = function(e){
    if(e.pcontainerid){
	  var blankbare = document.getElementById("sampleBlankPosition");
	  var list = e.childNodes;
	  e.fixedWidth = e.offsetWidth;
	  if(list && false){
	    for(var i = 0;i<list.length;i++){
		  var item = list.item(i);
		  if(item.pid){
			e.insertBefore(blankbare.cloneNode(true),item);
			i++;
		  }
		}
	  }
	  e.appendChild(blankbare.cloneNode(true));
      this.pcs[this.pcs.length] = e;
    }
    var list = e.childNodes;
    if(list == null)return;
    for(var i = 0;i<list.length;i++){
      this.loadpcs(list.item(i));
    }
  }

  //获得坐标(x,y)在哪个模板容器pc中
  this.getpc = function(x,y,notitle){
    for(var i = 0;i<this.pcs.length;i++){
      var x_ = this.getAbsoluteX(this.pcs[i]);
	  var y_ = this.getAbsoluteY(this.pcs[i]);
      if(x>x_ && x<x_+this.pcs[i].offsetWidth && y>y_ && y<y_+this.pcs[i].offsetHeight && (!notitle || !this.pcs[i].titleContainer)){
	    return this.pcs[i];
      }
    }
    return null;
  }

  //根据选中的portlet标签item获得一个相应的面版内容
  this.getPortlet = function(item){
	return null;
  }

  //实际加载portlet
  this.loadPortlet = function(po){
  }

  //提交对portlet参数的编辑
  this.editSubmit = function(po){
  }

  //保存布局结果
  this.submit = function(){
	var str = "";
	for(var i = 0;i<this.pcs.length;i++){
	  str +=this.pcs[i].pcontainerid+"(";
	  var list = this.pcs[i].childNodes;
	  for(var j = 0;j<list.length;j++){
		var item = list.item(j);
		if(item.pid){
		  str += item.pid+",";
		}
	  }
	  str +=")\r\n";
	}
	alert(str);
  }

  //获得节点e右上角的绝对坐标x
  this.getAbsoluteX = function(e){
    var x = 0;
    while(e){
      x += e.offsetLeft;
      e = e.offsetParent;
    }
    return x- document.body.scrollLeft;
  }

  //获得节点e右上角的绝对坐标y
  this.getAbsoluteY = function(e){
    var y = 0;
    while(e){
      y += e.offsetTop;
      e = e.offsetParent;
    }
    return y- document.body.scrollTop;
  }

  this.shiftEditor = function(){
  }

  this.visitAll = function(root,check,func){
	var list = root.childNodes;
	for(var i = 0;i<list.length;i++){
	  var item = list.item(i);
	  if(check.apply(null,[item])){
	    func.apply(null, [item]);
	  }
	  else{
		this.visitAll(item,check,func);
	  }
	}
  }

  //对root中所有的Portlet执行方法func,args为参数
  this.visitAllPortlet = function(root,func){
	var isPortlet = function(portlet){return portlet && portlet.pid;};
	this.visitAll(root,isPortlet,func);
  }

  //对root中所有的Container执行方法func,args为参数
  this.visitAllContainer = function(root,func){
	var isContainer = function(container){return container && container.pContainer;};
	this.visitAll(root,isContainer,func);
  }

  this.disablePortelOnresize = function(portlet){
	portlet.temp = portlet.onresize;
	portlet.onresize = function(){};
	var frame = ds.findByProp(portlet,"frame");
	if(frame){
	  frame.temp = frame.onresize;
	  frame.onresize = function(){};
	}
  }

  this.enablePortelOnresize = function(portlet){
    portlet.onresize = portlet.temp;
	var frame = ds.findByProp(portlet,"frame");
	if(frame){
	  frame.onresize = frame.temp;
	}
  }

  this.setPortletFrameMinWidth = function(portlet){
	var frame = ds.findByProp(portlet,"frame");
	if(frame){
	  frame.width = 1;
	  try{
        frame.width = frame.contentWindow.document.body.scrollWidth;
	  }catch(e){}
	}
  }

  this.setPortletFrameFixedWidth = function(portlet){
	var frame = ds.findByProp(portlet,"frame");
	var content = ds.findByProp(portlet,"content");
	if(frame){
	  frame.width = content.offsetWidth-2;
	  try{
	  	frame.height = frame.contentWindow.document.body.scrollHeight;
	  }
	  catch (e){}
	}
  }

  this.resizeAllPortlet = function(){
	  return;
	this.visitAllPortlet(document.body,this.disablePortelOnresize);
	this.visitAllPortlet(document.body,this.setPortletFrameMinWidth);
	this.visitAllPortlet(document.body,this.setPortletFrameFixedWidth);
    this.visitAllPortlet(document.body,this.enablePortelOnresize);
//	return;
  }

  this.renew = function(e){
	  return;
	var list = e.childNodes;
	//获取各个PortletFrame的最大值
	var maxWidth = 0;
	for(var i = 0;i<list.length;i++){
	  var item = list.item(i);
	  if(item && item.pid){
		var frame = this.findByProp(item,"frame");
		var content = this.findByProp(item,"content");
		if(frame){
	      frame.temp = f.onresize;
	      f.onresize = function(){};
		  frame.width = 1;
		  try{
		    if(maxWidth < content.offsetWidth)maxWidth = frame.contentWindow.document.body.scrollWidth;
		  }catch(e){}
		}
	  }
	}
	////////////////////////////////
	for(var i = 0;i<list.length;i++){
	  var item = list.item(i);
	  if(item && item.pid){
		var frame = this.findByProp(item,"frame");
		if(frame){
		  frame.onresize = frame.temp;
		  frame.width = maxWidth;
		  //frame.onresize = func_bind(ds.frameResized,[frame]);
		}
	  }
	}
	return;
	var children = new Array(list.length);
	var container = document.createElement("DIV");
	var innerWidth = -3;
	var oldwidth = e.offsetWidth;
	for(var i = 0;i<list.length;i++){
	  children[i] = list.item(i);
	  if(children[i].style){
	    children[i].style.width = "100%";
	  }
	}
	for(var i = 0;i<children.length;i++){
	  container.appendChild(children[i]);
	}
	e.innerHTML = "";
	var maxWidth = 0;
	for(var i = 0;i<children.length;i++){
	  e.appendChild(children[i]);
	  if(children[i] && children[i].pid){
		var frame = this.findByProp(children[i],"frame");
		var content = this.findByProp(children[i],"content");
		if(frame){
		  if(maxWidth < content.offsetWidth)maxWidth = content.offsetWidth;
//		  frame.onresize = func_bind(ds.frameResized,[frame]);
		}
	  }
	}
	for(var i = 0;i<children.length;i++){
	  if(children[i] && children[i].pid){
		var frame = this.findByProp(children[i],"frame");
		if(frame){
		  frame.width = maxWidth-2;
		  frame.onresize = func_bind(ds.frameResized,[frame]);
		}
	  }
	}
	  return;
  }

  this.findByProp = function(e,name){
	if(e.prop && e.prop == name){
	  return e;
	}
	var list = e.childNodes;
	if(list){
	  for(var i = 0;i<list.length;i++){
	    var item = this.findByProp(list.item(i),name);
	    if(item){
		  return item;
	    }
	  }
    }
    return null;
  }

  this.findByAction = function(e,name){
	if(e.layout_action && e.layout_action == name){
	  return e;
	}
	var list = e.childNodes;
	if(list){
	  for(var i = 0;i<list.length;i++){
	    var item = this.findByAction(list.item(i),name);
	    if(item){
		  return item;
	    }
	  }
    }
    return null;
  }

  this.listByProp = function(e,name){
	var list = new Array(0);
	this.fillListByProp(e,name,list);
	return list;
  }

  this.fillListByProp = function(e,name,_list){
	if(e.prop && e.prop == name){
	  _list[_list.length] = e;
	}
	var list = e.childNodes;
	if(list){
	  for(var i = 0;i<list.length;i++){
	    this.fillListByProp(list.item(i),name,_list);
	  }
    }
    return null;
  }

  this.view_hidden_shift = function(e,init_hidden){
	var b = ds.action_button;
	if(!b)return;
    if(b.shift_button_element == null){
      b.shift_button_element = new Array();
    }
    if(b.childNodes){
      var j =0;
      for(var i = 0 ; i < b.childNodes.length ; i++){
        var item = b.childNodes.item(i);
        if(item.style)
          b.shift_button_element[j++] = item;
      }
    }
	var s = b.shift_button_element;
	var show = e.style.display == "none" || (!e.style.display && init_hidden);
	if(e && e.style){
	  if(show){
	    e.style.display = "block";
	  }
	  else{
	    e.style.display = "none";
	  }
    }
	if(s && s.length>1){
		if(show){
			s[0].style.display="none";s[1].style.display="block";
		}
		else{
			s[1].style.display="none";s[0].style.display="block";
		}
	}
  }

  this.rollPtreePos = function(){
	if(this.ptreePanelScrollProcess){
	  clearInterval(this.ptreePanelScrollProcess);
	}
    this.ptreePanelScrollProcess = setInterval(this.setPtreePos,"10");
  }

  this.setPtreePos = function(){
    if(this.ptreePanel.targetY || this.ptreePanel.targetY == 0){
	  var dy = this.ptreePanel.targetY - this.ptreePanel.offsetTop;
	  if(dy == 0){
		if(this.ptreePanelScrollProcess){
	      clearInterval(this.ptreePanelScrollProcess);
		}
		return;
	  }
	  if(dy>-5 && dy < 0) dy = -5;
	  if(dy< 5 && dy > 0) dy = 5;
	  this.ptreePanel.style.top = this.ptreePanel.offsetTop + dy/5;
	}
	else{
	  if(this.ptreePanelScrollProcess){
	    clearInterval(this.ptreePanelScrollProcess);
	  }
	}
  }


  //根据内容重设iframe大小,f为iframe
  this.frameResized = function(f){
	try{
	  if(f.contentWindow.document.body){
        if(f.height != f.contentWindow.document.body.scrollHeight){
          f.height = f.contentWindow.document.body.scrollHeight;
		}
	  }
	}
	catch (e){}
  }
}

function portal_layout_onmousedown(event){
  var ev = event || window.event;
  if(ev.button == 1){
	portal_layout_onmousedown_leftbutton(event);
  }
}
function portal_layout_onmouseup(event){
  var ev = event || window.event;
  if(ev.button == 1){
	portal_layout_onmouseup_leftbutton(event);
  }
  else if(ev.button == 2){
    portal_layout_onmouseup_rightbutton(event);
  }
}
function portal_layout_onmousedown_leftbutton(event){
  if(ds.lock)return;
  var ev = event || window.event;
  var po = ev.target || ev.srcElement;
  ds.action = ds.DONONE;
  ds.po = null;
  while(po){
    //alert(po.nodeName);
    if(po.prop && po.prop == "dragger" && ds.action == ds.DONONE){
	  ds.action = ds.DODRAG;
	}
	else if(po.pTree){//拖拽树
	  ds.ptreePanel = po;
	  break;
	}
	else if(po.pid){
	  break;
	}
	if(po.layout_action && ds.action == ds.DONONE){
      ds.action_button = po;
	  if(po.layout_action=="close"){//单击了删除按钮
	    ds.action = ds.DOCLOSE;
	  }
	  else if(po.layout_action=="edit_shift"){//单击了编辑开始按钮
	    ds.action = ds.DOEDITSHIFT;
	  }
	  else if(po.layout_action=="edit_submit"){//单击了编辑结束按钮
	    ds.action = ds.DOEDITSUBMIT;
	  }
	  else if(po.layout_action=="view_shift"){//单击了最大化/最小化按钮
	    ds.action = ds.DOVIEWSHIFT;
	  }
	  else if(po.layout_action=="tree_shift"){//单击了Portlet树的最大化/最小化按钮
		ds.action = ds.DOTREESHIFT;
	  }
	  else if(po.layout_action=="tree_drag"){
	    ds.action = ds.DODRAGTREE;
	  }
	  else if(po.layout_action=="tree_left"){
		ds.action = ds.DOTREELEFT;
	  }
	  else if(po.layout_action=="tree_right"){
		ds.action = ds.DOTREERIGHT;
	  }
	}
    po = po.parentNode;
  }

  if(po && po.pid && !po.state){//portlet尚未创建,根据pid创建一个portlet
    po = ds.getPortlet(po);
	po.state = ds.CREATED;
	ds.action = ds.DODRAG;
  }

  if(ds.action == ds.DONONE){//没有任何操作,直接返回
	return;
  }

  ds.po = po;
  document.body.onselectstart= ds.avoidSelect;//暂时取消选中操作
  if(ds.action == ds.DODRAG){//拖拽操作
    ds.m_x = ev.clientX;ds.m_y = ev.clientY;
    ds.po_x = ds.m_x;ds.po_y = ds.m_y;
    if(po.state == ds.LOADED){
      ds.po_x = ds.getAbsoluteX(po);
      ds.po_y = ds.getAbsoluteY(po);
      ds.removePo(po);
    }
    ds.dc.innerHTML = "";
	var content = ds.findByProp(po,"content");
	if(po.parentNode){
	  po.parentNode.removeChild(po);
	}
    ds.dc.appendChild(po);
	var style = ds.dc.style;
    style.position = "absolute";style.display="block";
    style.left = ds.po_x + document.body.scrollLeft;
	style.top = ds.po_y + document.body.scrollTop;
    document.onmousemove(event);
  }
  else if(ds.action == ds.DODRAGTREE){
    ds.m_x = ev.clientX;ds.m_y = ev.clientY;
    ds.po_x = ds.getAbsoluteX(ds.ptreePanel);
    ds.po_y = ds.getAbsoluteY(ds.ptreePanel);
  }
}

function removeBackground(e){
	var list = e.childNodes;
	if(e.background){
		e.background=null;
	}
	if(e.style && e.style.background)e.style.background="";
	if(list){
		for(var i =0;i<list.length;i++){
			removeBackground(list.item(i));
		}
	}
}

var portlet_layout_menu = document.getElementById("portlet_layout_menu_");
document.oncontextmenu= function(){ return false;}
function portal_layout_onmouseup_rightbutton(event){
  return true;
  var ev = event || window.event;
  var po = ev.target || ev.srcElement;
  ds.action = ds.DONONE;
  while(po){
    if(po.pid){
	  break;
	}
	po = po.parentNode;
  }
  ds.po_right = po;
  if(po){
	portlet_layout_menu.style.left = ev.clientX;
	portlet_layout_menu.style.top = ev.clientY;
	portlet_layout_menu.style.display = "block";
  }
}
function portal_layout_onmouseup_leftbutton(event){
  document.body.onselectstart= ds.activeSelect;
  if(ds.action == ds.DOCLOSE){
    ds.removePo(ds.po);
  }
  else if(ds.action == ds.DOEDITSHIFT){
	ds.shiftEditor();
  }
  else if(ds.action == ds.DOVIEWSHIFT){
	var content = ds.findByProp(ds.po,"content");
	ds.view_hidden_shift(content);
  }
  else if(ds.action == ds.DOEDITSUBMIT){
	ds.editSubmit(ds.po);
  }
  else if(ds.action == ds.DOTREESHIFT){
	var tree = ds.findByProp(ds.ptreePanel,"tree");
	ds.view_hidden_shift(tree);
  }
  else if(ds.action == ds.DOTREELEFT){
	ds.ptreePanel.style.left = 0;
	ds.ptreePanel.style.top = document.body.scrollTop;
	ds.ptreePanel.relatedY = 0;
	ds.ptreePanel.targetY = treePanel.offsetTop;
  }
  else if(ds.action == ds.DOTREERIGHT){
	var max_left = document.body.clientWidth-ds.ptreePanel.offsetWidth + document.body.scrollLeft;
	ds.ptreePanel.style.left = max_left;
	ds.ptreePanel.style.top = document.body.scrollTop;
	ds.ptreePanel.relatedY = 0;
	ds.ptreePanel.targetY = treePanel.offsetTop;
  }
  else if(ds.action == ds.DOEDITEND){
	var editor = ds.findByProp(ds.po,"editor");
	if(editor && editor.style){
	  editor.style.display = "none";
    }
  }
  else if(ds.action == ds.DODRAG){
//    if(ds.targetPc){
    for(i=0;i<ds.targetPc.all.length;i++){
    	var item = ds.targetPc.all[i];

    }
	var oldParent = null;
    if(ds.po && ds.po.pid){
	  oldParent = ds.po.parent;
      if(ds.position){

        ds.position.style.height = ds.posHeight;
		ds.position.style.border = "none";//关闭虚线框
		ds.position.style.display = "none";
        if(ds.targetPc){
          var newposition = ds.position.cloneNode(true);
          ds.targetPc.insertBefore(newposition,ds.position);
		  var frameEle = ds.findByProp(ds.po,"frame");
		  if(frameEle){frameEle.style.display = "none";}
          ds.targetPc.insertBefore(ds.po,ds.position);
          var elist = ds.targetPc.childNodes;
          for(var i=0;i<elist.length;i++){
          	var eitem = elist.item(i);
                if(!eitem.pid&&eitem.nodeValue){
                  //alert(eitem.nodeValue);
                	ds.targetPc.removeChild(eitem);
                        i=0;
                }
          }
		  var content = ds.findByProp(ds.po,"content");
		  ds.po.width = "100%";//ds.targetPc.fixedWidth;
		  if(frameEle){
			frameEle.width = "100%";
			frameEle.onresize = func_bind(ds.frameResized,[frameEle]);
		    frameEle.style.display = "block";
		  }
        }
      }
	  if(ds.po.parentNode){
        ds.renew(ds.po.parentNode);
	  }
	  if(oldParent){
	    ds.renew(oldParent);
	  }
    }
	//ds.po.width = "100%";
    ds.dc.style.display="none";
    if(ds.po && ds.po.state != ds.LOADED && ds.po.parentNode){
      ds.loadPortlet(ds.po);
	  ds.po.state = ds.LOADED;
    }
    //ds.resizeAllPortlet();
    ds.layoutSaved = false;
//    }else{
//    	     alert("对不起，该区域不是可拖拽区域！");
//    }
  }
  ds.action = ds.DONONE;
  ds.po = null;
}

window.onbeforeunload = function(){
  if(!ds.layoutSaved){
	return "页面布局尚未保存";
  }
}

function portal_layout_onmousemove(event){
  if(ds.lock)return;
  if(ds.action == ds.DOCLOSE)return;
  var ev = event || window.event;
  if(ds.po && ev.button == 0){
	portal_layout_onmouseup_leftbutton(event);
  }
  if(ds.action == ds.DODRAGTREE){
	var treePanel = ds.ptreePanel;
    treePanel.style.left = ev.clientX + document.body.scrollLeft + ds.po_x - ds.m_x;
    treePanel.style.top = ev.clientY + document.body.scrollTop + ds.po_y - ds.m_y;
	var left_max = document.body.clientWidth-treePanel.offsetWidth + document.body.scrollLeft;
	var top_max = document.body.clientWidth-16 + document.body.scrollTop;
	var left_min = document.body.scrollLeft;
	var top_min = document.body.scrollTop;
	if(near(treePanel.offsetLeft,left_min,10))treePanel.style.left=left_min;
	if(near(treePanel.offsetLeft,left_max,10))treePanel.style.left=left_max;
	if(near(treePanel.offsetTop,top_min,10))treePanel.style.top=top_min;
	if(near(treePanel.offsetTop,top_max,10))treePanel.style.top=top_max;
	treePanel.relatedY = treePanel.offsetTop - document.body.scrollTop;
	treePanel.targetY = treePanel.offsetTop;
	return;
  }

  var po = ds.po;
  if(po){
	  try{
    ds.dc.style.left = ev.clientX + document.body.scrollLeft + ds.po_x - ds.m_x;
    ds.dc.style.top = ev.clientY + document.body.scrollTop + ds.po_y - ds.m_y;
	  }
	  catch(e){
	  }

	var empty = true;
	var targetPc = ds.getpc(ev.clientX,ev.clientY,po.state == ds.LOADED);
    var oldParent = po.parentNode;

	if(targetPc == null){
	  return;
	}

    var y = ev.clientY;
    var lastPo = null;
	var list = targetPc.childNodes;
	var min_dy = 10000;
	var str = "";
	var containerY = ds.getAbsoluteY(targetPc);
	for(var i = 0;i < list.length;i ++){
	  var item = list.item(i);
	  var dy = containerY - y;
	  if(item.offsetHeight){
	    containerY += item.offsetHeight;
	  }
      if(item.prop && item.prop == "blankbar"){
	    if(item == ds.position){
		  y += ds.position.offsetHeight;
	    }
	    if(dy < 0)dy = -dy;
	    if(dy < min_dy){
		  index = i;
          lastPo = item;
		  min_dy = dy;
	    }
	  }
	}
    if(!lastPo || lastPo == po){
	  return;
	}
	//po.width = targetPc.offsetWidth-2;
	if(po && po.style && po.pid){
	  ds.dc.style.width = targetPc.offsetWidth-4;
	  po.style.width = "100%";
	}
	if(ds.dc.offsetLeft+ targetPc.offsetWidth - 5 < ev.clientX){
		ds.dc.style.left = ev.clientX - targetPc.offsetWidth/2;
	}

    if(ds.position){
      ds.position.style.height = ds.posHeight;
      ds.position.style.border = "none";
	  ds.position.style.display = "none";
    }
    ds.position = lastPo;
    if(lastPo.style && ds.dc.childNodes.length>0){
 	  var style = lastPo.style;
      style.border = "dashed";
      style.height = ds.dc.childNodes.item(0).offsetHeight;
      style.display = "block";
	}
    ds.targetPc = targetPc;
  }
}

var ds = new DraggerSetting();

var portal_normal_onmousedown = document.onmousedown;
var portal_normal_onmousemove = document.onmousemove;
var portal_normal_onmouseup = document.onmouseup;

//拖拽相关的鼠标事件
document.onmousedown = portal_layout_onmousedown;
document.onmouseup = portal_layout_onmouseup;
document.onmousemove = portal_layout_onmousemove;

function near(a,b,d){
	return a-b<d && b-a<d;
}


var portal_normal_onkeypress = document.onkeypress;

var layout_edit_model = true;
document.onkeypress = function(event){
  if(portal_normal_onkeypress){
    portal_normal_onkeypress(event);
  }
  var ev = event || window.event;
  if(ev.keyCode == 112){
	if(layout_edit_model){
	  layout_edit_model = false;
	  document.onmousedown = portal_normal_onmousedown;
	  document.onmousemove = portal_normal_onmousemove;
	  document.onmouseup = portal_normal_onmouseup;
	}
	else{
	  layout_edit_model = true;
      document.onmousedown = portal_layout_onmousedown;
      document.onmouseup = portal_layout_onmouseup;
      document.onmousemove = portal_layout_onmousemove;
	}
  }
}
