/**
* @author:aliued-wd junbiao.zhujb
*/
var historyDrop = null;//默认历史激活层为空.
var SCROLLTOP = 0;
var FLOWTIME;
var newPostionY = 0;
var FOLLOW;
/**
* FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明事件处理函数的第一个参数为event
* @param {Object} e
*/
function getEvent(e) {
var ev = e || window.event;
if (!ev) {
var c = this.getEvent.caller;
while (c) {
ev = c.arguments[0];
if (ev && Event == ev.constructor) {
break;
}
c = c.caller;
}
}
return ev;
}
/**
* 拖动到实例类。
* @param {Object} dragObjId 拖动层的ID。
* @param {Object} dragCtrlId 控制这个层拖动到层的ID。
* @param {Object} dragContId 拖动层的内容区域ID。
*/
var XXDragDrop = function(dragObjId,dragCtrlId,dragContId,dragX,dragY,notFloat){
if(!dragObjId) return;
var oDrag = document.getElementById(dragObjId);
if(!oDrag) return;
this.oDrag = oDrag;
this.cont = null;
var oDragCtrl = document.getElementById(dragCtrlId);
if(!oDragCtrl){//如果拖动控制层不存在，这定义整个拖动层为拖动控制层
this.oDragCtrl = this.oDrag;
}else{
this.oDragCtrl = oDragCtrl;
}
this.oDragCtrl.style.cursor = "move";
this._init(oDrag,oDragCtrl,dragContId,dragX,dragY,notFloat);//初始化拖动层
};
XXDragDrop.prototype = {
/**
* 初始化拖动层
* @param {Object} oDrag 拖动层对象
* @param {Object} oDragCtrl 控制拖动层对象
* @param {Object} dragContId 拖动内容层对象
*/
_init: function(oDrag,oDragCtrl,dragContId,dragX,dragY,notFloat){
if(dragX&&dragY){
this.oDrag.style.left = dragX + "px";
this.oDrag.style.top = dragY+ "px";
}
if(dragContId){//如果拖动层的内容区域ID存在，在初始化拖动层的内容区域
this.cont = document.getElementById(dragContId);
}
/**
* 绑定onscroll事件
* @param {Object} e
*/
onscroll = function(e){
if(notFloat){}else{
FOLLOW = oDrag;
SCROLLTOP = document.documentElement.scrollTop;//获取当前可视窗口和页面顶端的高度
XDragDropCtrl.followFloat(9);
}
}
this.oDragCtrl.onmousedown = function(e){
/*以下为解决多个浮动层优先级问题*/
if(historyDrop&&historyDrop!=oDrag){//如果存在历史激活层and历史激活层不等于当前激活层
historyDrop.style.zIndex = 998;//设置历史激活层ZINDEX为998
}
oDrag.style.zIndex = 999;//设置当前激活层ZINDEX为999（最高）
historyDrop = oDrag;//把当前激活层设置为历史激活层
if(oDragCtrl.setCapture){
oDragCtrl.setCapture();//IE下捕获鼠标事件
}else{
window.captureEvents(Event.MOUSEMOVE);//FF下捕获鼠标事件
}
getEvent(e).cancelBubble = true;//取消时间冒泡，防止事件冲突
var bMouseX = getEvent(e).clientX;
var bMouseY = getEvent(e).clientY;
var x = parseInt(oDrag.offsetLeft);
var y = parseInt(oDrag.offsetTop);
if(!oDrag.offsetLeft){
x = parseInt(oDrag.currentStyle.left);
y = parseInt(oDrag.currentStyle.top);
}
oDragCtrl.onmousemove = function(e){
//鼠标移动后位置
var eMouseX = getEvent(e).clientX;
var eMouseY = getEvent(e).clientY;
this.parentNode.style.left = x+ eMouseX - bMouseX + "px";
this.parentNode.style.top = y + eMouseY - bMouseY + "px";
}
oDragCtrl.onmouseup = function(){
if(oDragCtrl.releaseCapture){
oDragCtrl.releaseCapture();//IE下释放鼠标事件
}else{
window.releaseEvents(Event.MOUSEMOVE);//FF下释放鼠标事件
}
oDragCtrl.onmousemove=null;//置空onmousemove事件，防止内存泄漏
oDragCtrl.onmouseup=null;//置空onmouseup事件，防止内存泄漏
}
}
}
};
var seedId = "";
var seedOnline = 1;
(function(){
var xxDragDrop = null;
var xxCtrlBtn = null;
var SPEED = 0;
XDragDropCtrl = {
/**
* 打开或者关闭浮动层
* @param {Object} xDragDrop 当前层对象
* @param {Object} ctrlBtn 控制对象
* @param {String} minClassName 最小按钮的css类名
* @param {String} maxClassName 最大按钮的css类名
*/
toMinorMax:function(xDragDrop,ctrlBtn,minClassName,maxClassName,notToBottom){
xxDragDrop = xDragDrop;
xxCtrlBtn = ctrlBtn;
var bottomRightXY = this.getBottomRight();
var titleName = xxCtrlBtn.title.substring(3,xxCtrlBtn.title.length);
if(xDragDrop.cont){
if(xxCtrlBtn.className == minClassName){
xxDragDrop.cont.style.display = "none";
xxCtrlBtn.className = maxClassName;
xxCtrlBtn.title = "最化"+titleName;
if(notToBottom) return;
this.toMin(bottomRightXY,xxDragDrop);
}else{
xxDragDrop.cont.style.display = "block";
xxCtrlBtn.className = minClassName;
xxCtrlBtn.title = "最小化"+titleName;
if(notToBottom) return;
this.toMax(bottomRightXY,xxDragDrop);
}
}
},
toMin:function(bottomRight,xxDragDrop){
var newCoordinate = {x:bottomRight.x-xxDragDrop.oDrag.scrollWidth,y:bottomRight.y-xxDragDrop.oDragCtrl.scrollHeight};
xxDragDrop.oDrag.style.left = newCoordinate.x + "px";
xxDragDrop.oDrag.style.top = newCoordinate.y + "px";
},
toMax:function(bottomRight,xxDragDrop){
var newCoordinate = {x:bottomRight.x-xxDragDrop.oDrag.scrollWidth,y:bottomRight.y-xxDragDrop.oDrag.scrollHeight};
xxDragDrop.oDrag.style.left = newCoordinate.x + "px";
xxDragDrop.oDrag.style.top = newCoordinate.y + "px";
},
/**
* 获得当前窗口的右下角位置。
*/
getBottomRight:function(){
var c_w = document.documentElement.clientWidth;
var c_h = document.documentElement.clientHeight + SCROLLTOP;
return {x:c_w,y:c_h};
},
/**
* 获得当前层的坐标.
* @param {Object} nowFloatObj
*/
getNowPostion:function(nowFloatObj){
return {x:parseInt(nowFloatObj.style.top.left),y:parseInt(nowFloatObj.style.top)}
},
/**
* 根据贸易通状态排序，排序规则为：主帐号顶置，其次是在线的，再次是手机在线，最后是不在线.
* @param {Object} oListId
* @param {Object} list
*/
sort:function(oListId,list){
var oList = document.getElementById(oListId);
var listLi = oList.getElementsByTagName("li");
var listLang = listLi.length;
for(var i=0;i<listLang;i++){
oList.removeChild(listLi[0]);
}
var first = new Array();
var arr_1 = new Array();
var arr_4= new Array();
var arr_0= new Array();
for(var i=0;i<list.length;i++){
var nowLiObj = list[i].eventObjs[0].parentNode;
if(i==0){
nowLiObj.getElementsByTagName("a")[0].className = "mainId";
first[first.length] = nowLiObj;
if(list[i].online==1){
seedId = nowLiObj.className;
seedOnline=1;
}
}else{
if(list[i].online==1){
//if(seedId==""){seedId = nowLiObj.className}
arr_1[arr_1.length] = nowLiObj;
}else if(list[i].online==4||list[i].online==5){
arr_4[arr_4.length] = nowLiObj;
}else if(list[i].online==0||list[i].online==2){
nowLiObj.getElementsByTagName("a")[0].className = "black";
arr_0[arr_0.length] = nowLiObj;
}
}
}
if(seedId == ""){
if(arr_1.length==0){
seedId = list[0].eventObjs[0].parentNode.className;
seedOnline = list[0].online;
}
else{
var rn = Math.floor(Math.random() * (arr_1.length));
seedId = arr_1[rn].className;
seedOnline = 1;
}
}
this.appendNewChild(oList,first);
this.appendNewChild(oList,arr_1);
this.appendNewChild(oList,arr_4);
this.appendNewChild(oList,arr_0);
},
appendNewChild:function(father,chlid){
for(var i=0;i<chlid.length;i++){
father.appendChild(chlid[i]);
}
},
getNewPostionY:function(nowBottomRight){
return nowBottomRight.y-FOLLOW.scrollHeight;
},
/**
* 根据速率浮动层
* @param {Object} speed
*/
followFloat:function(speed){
SPEED = speed;
newPostionY = this.getNewPostionY(this.getBottomRight());
if(FLOWTIME) clearInterval(FLOWTIME);
FLOWTIME = setInterval(this.followingY,1);
},
/**
* 浮动层Y轴方向.
*/
followingY:function(){
var tempTop = parseInt(FOLLOW.style.top);
var offsetTempTop = newPostionY - tempTop;
if(offsetTempTop>0){
if(offsetTempTop>=SPEED){
FOLLOW.style.top = tempTop + SPEED + "px";
}else{
FOLLOW.style.top = tempTop + offsetTempTop + "px";
clearInterval(FLOWTIME);
}
}else{
if((-offsetTempTop)>=SPEED){
FOLLOW.style.top = tempTop - SPEED + "px";
}else{
FOLLOW.style.top = tempTop + offsetTempTop + "px";
clearInterval(FLOWTIME);
}
}
}
}
})();
