Window.js
11.4 KB
function Browser(){var ua,s,i;this.isIE=false;this.isNS=false;this.version=null;ua=navigator.userAgent;s="MSIE";if((i=ua.indexOf(s))>=0){this.isIE=true;this.version=parseFloat(ua.substr(i+s.length));return }s="Netscape6/";if((i=ua.indexOf(s))>=0){this.isNS=true;this.version=parseFloat(ua.substr(i+s.length));return }s="Gecko";if((i=ua.indexOf(s))>=0){this.isNS=true;this.version=6.1;return }}var browser=new Browser();function Window(el){var i,mapList,mapName;this.frame=el;this.titleBar=winFindByClassName(el,"titleBar");this.titleBarText=winFindByClassName(el,"titleBarText");this.titleBarButtons=winFindByClassName(el,"titleBarButtons");this.clientArea=winFindByClassName(el,"clientArea");mapName=this.titleBarButtons.useMap.substr(1);mapList=document.getElementsByTagName("MAP");for(i=0;i<mapList.length;i++){if(mapList[i].name==mapName){this.titleBarMap=mapList[i]}}this.activeFrameBackgroundColor=this.frame.style.backgroundColor;this.activeFrameBorderColor=this.frame.style.borderColor;this.activeTitleBarColor=this.titleBar.style.backgroundColor;this.activeTitleTextColor=this.titleBar.style.color;this.activeClientAreaBorderColor=this.clientArea.style.borderColor;if(browser.isIE){this.activeClientAreaScrollbarColor=this.clientArea.style.scrollbarBaseColor}this.activeButtonsImage=this.titleBarButtons.src;this.inactiveButtonsImage=this.titleBarButtons.longDesc;this.isOpen=false;this.isMinimized=false;this.open=winOpen;this.close=winClose;this.minimize=winMinimize;this.restore=winRestore;this.makeActive=winMakeActive;this.frame.parentWindow=this;this.frame.onmousemove=winResizeCursorSet;this.frame.onmouseout=winResizeCursorRestore;this.frame.onmousedown=winResizeDragStart;this.titleBar.parentWindow=this;this.titleBar.onmousedown=winMoveDragStart;this.clientArea.parentWindow=this;this.clientArea.onclick=winClientAreaClick;for(i=0;i<this.titleBarMap.childNodes.length;i++){if(this.titleBarMap.childNodes[i].tagName=="AREA"){this.titleBarMap.childNodes[i].parentWindow=this}}var initLt,initWd,w,dw;initLt=this.frame.style.left;initWd=parseInt(this.frame.style.width);this.frame.style.left=-this.titleBarText.offsetWidth+"px";if(browser.isIE){this.titleBarText.style.display="none";w=this.clientArea.offsetWidth;this.widthDiff=this.frame.offsetWidth-w;this.clientArea.style.width=w+"px";dw=this.clientArea.offsetWidth-w;w-=dw;this.widthDiff+=dw;this.titleBarText.style.display=""}w=this.frame.offsetWidth;this.frame.style.width=w+"px";dw=this.frame.offsetWidth-w;w-=dw;this.frame.style.width=w+"px";if(browser.isIE){this.widthDiff-=dw}this.isOpen=true;this.minimize();if(browser.isNS&&browser.version>=1.2){this.minimumWidth=this.frame.offsetWidth}else{this.minimumWidth=this.frame.offsetWidth-dw}this.titleBarText.style.width="";this.clipTextMinimumWidth=this.frame.offsetWidth-dw;this.minimumHeight=1;this.restore();this.isOpen=false;initWd=Math.max(initWd,this.minimumWidth);this.frame.style.width=initWd+"px";if(browser.isIE){this.clientArea.style.width=(initWd-this.widthDiff)+"px"}if(this.clipTextMinimumWidth>=this.minimumWidth){this.titleBarText.style.width=(winCtrl.minimizedTextWidth+initWd-this.minimumWidth)+"px"}this.frame.style.left=initLt}function winOpen(){if(this.isOpen){return }this.makeActive();this.isOpen=true;if(this.isMinimized){this.restore()}this.frame.style.visibility="visible";this.frame.style.left="30px"}function winClose(){this.frame.style.visibility="hidden";this.frame.style.left="-3000px";this.isOpen=false}function winMinimize(){if(!this.isOpen||this.isMinimized){return }this.makeActive();this.restoreFrameWidth=this.frame.style.width;this.restoreTextWidth=this.titleBarText.style.width;this.clientArea.style.display="none";if(this.minimumWidth){this.frame.style.width=this.minimumWidth+"px"}else{this.frame.style.width=""}this.titleBarText.style.width=winCtrl.minimizedTextWidth+"px";this.isMinimized=true}function winRestore(){if(!this.isOpen||!this.isMinimized){return }this.makeActive();this.clientArea.style.display="";this.frame.style.width=this.restoreFrameWidth;this.titleBarText.style.width=this.restoreTextWidth;this.isMinimized=false}function winMakeActive(){if(winCtrl.active==this){return }if(winCtrl.active){winCtrl.active.frame.style.backgroundColor=winCtrl.inactiveFrameBackgroundColor;winCtrl.active.frame.style.borderColor=winCtrl.inactiveFrameBorderColor;winCtrl.active.titleBar.style.backgroundColor=winCtrl.inactiveTitleBarColor;winCtrl.active.titleBar.style.color=winCtrl.inactiveTitleTextColor;winCtrl.active.clientArea.style.borderColor=winCtrl.inactiveClientAreaBorderColor;if(browser.isIE){winCtrl.active.clientArea.style.scrollbarBaseColor=winCtrl.inactiveClientAreaScrollbarColor}if(browser.isNS&&browser.version<6.1){winCtrl.active.clientArea.style.overflow="hidden"}if(winCtrl.active.inactiveButtonsImage){winCtrl.active.titleBarButtons.src=winCtrl.active.inactiveButtonsImage}}this.frame.style.backgroundColor=this.activeFrameBackgroundColor;this.frame.style.borderColor=this.activeFrameBorderColor;this.titleBar.style.backgroundColor=this.activeTitleBarColor;this.titleBar.style.color=this.activeTitleTextColor;this.clientArea.style.borderColor=this.activeClientAreaBorderColor;if(browser.isIE){this.clientArea.style.scrollbarBaseColor=this.activeClientAreaScrollbarColor}if(browser.isNS&&browser.version<6.1){this.clientArea.style.overflow="auto"}if(this.inactiveButtonsImage){this.titleBarButtons.src=this.activeButtonsImage}this.frame.style.zIndex=++winCtrl.maxzIndex;winCtrl.active=this}function winClientAreaClick(event){this.parentWindow.makeActive()}function winMoveDragStart(event){var target;var x,y;if(browser.isIE){target=window.event.srcElement.tagName}if(browser.isNS){target=event.target.tagName}if(target=="AREA"){return }this.parentWindow.makeActive();if(browser.isIE){x=window.event.x;y=window.event.y}if(browser.isNS){x=event.pageX;y=event.pageY}winCtrl.xOffset=winCtrl.active.frame.offsetLeft-x;winCtrl.yOffset=winCtrl.active.frame.offsetTop-y;if(browser.isIE){document.onmousemove=winMoveDragGo;document.onmouseup=winMoveDragStop}if(browser.isNS){document.addEventListener("mousemove",winMoveDragGo,true);document.addEventListener("mouseup",winMoveDragStop,true);event.preventDefault()}winCtrl.inMoveDrag=true}function winMoveDragGo(event){var x,y;if(!winCtrl.inMoveDrag){return }if(browser.isIE){x=window.event.x;y=window.event.y;window.event.cancelBubble=true;window.event.returnValue=false}if(browser.isNS){x=event.pageX;y=event.pageY;event.preventDefault()}winCtrl.active.frame.style.left=(x+winCtrl.xOffset)+"px";winCtrl.active.frame.style.top=(y+winCtrl.yOffset)+"px"}function winMoveDragStop(event){winCtrl.inMoveDrag=false;if(browser.isIE){document.onmousemove=null;document.onmouseup=null}if(browser.isNS){document.removeEventListener("mousemove",winMoveDragGo,true);document.removeEventListener("mouseup",winMoveDragStop,true)}}function winResizeCursorSet(event){var target;var xOff,yOff;if(this.parentWindow.isMinimized||winCtrl.inResizeDrag){return }if(browser.isIE){target=window.event.srcElement}if(browser.isNS){target=event.target}if(target!=this.parentWindow.frame){return }if(browser.isIE){xOff=window.event.offsetX;yOff=window.event.offsetY}if(browser.isNS){xOff=event.layerX;yOff=event.layerY}winCtrl.resizeDirection="";if(yOff<=winCtrl.resizeCornerSize){winCtrl.resizeDirection+="n"}else{if(yOff>=this.parentWindow.frame.offsetHeight-winCtrl.resizeCornerSize){winCtrl.resizeDirection+="s"}}if(xOff<=winCtrl.resizeCornerSize){winCtrl.resizeDirection+="w"}else{if(xOff>=this.parentWindow.frame.offsetWidth-winCtrl.resizeCornerSize){winCtrl.resizeDirection+="e"}}if(winCtrl.resizeDirection==""){this.onmouseout(event);return }if(browser.isIE){document.body.style.cursor=winCtrl.resizeDirection+"-resize"}if(browser.isNS){this.parentWindow.frame.style.cursor=winCtrl.resizeDirection+"-resize"}}function winResizeCursorRestore(event){if(winCtrl.inResizeDrag){return }if(browser.isIE){document.body.style.cursor=""}if(browser.isNS){this.parentWindow.frame.style.cursor=""}}function winResizeDragStart(event){var target;if(browser.isIE){target=window.event.srcElement}if(browser.isNS){target=event.target}if(target!=this.parentWindow.frame){return }this.parentWindow.makeActive();if(this.parentWindow.isMinimized){return }if(browser.isIE){winCtrl.xPosition=window.event.x;winCtrl.yPosition=window.event.y}if(browser.isNS){winCtrl.xPosition=event.pageX;winCtrl.yPosition=event.pageY}winCtrl.oldLeft=parseInt(this.parentWindow.frame.style.left,10);winCtrl.oldTop=parseInt(this.parentWindow.frame.style.top,10);winCtrl.oldWidth=parseInt(this.parentWindow.frame.style.width,10);winCtrl.oldHeight=parseInt(this.parentWindow.clientArea.style.height,10);if(browser.isIE){document.onmousemove=winResizeDragGo;document.onmouseup=winResizeDragStop}if(browser.isNS){document.addEventListener("mousemove",winResizeDragGo,true);document.addEventListener("mouseup",winResizeDragStop,true);event.preventDefault()}winCtrl.inResizeDrag=true}function winResizeDragGo(event){var north,south,east,west;var dx,dy;var w,h;if(!winCtrl.inResizeDrag){return }north=false;south=false;east=false;west=false;if(winCtrl.resizeDirection.charAt(0)=="n"){north=true}if(winCtrl.resizeDirection.charAt(0)=="s"){south=true}if(winCtrl.resizeDirection.charAt(0)=="e"||winCtrl.resizeDirection.charAt(1)=="e"){east=true}if(winCtrl.resizeDirection.charAt(0)=="w"||winCtrl.resizeDirection.charAt(1)=="w"){west=true}if(browser.isIE){dx=window.event.x-winCtrl.xPosition;dy=window.event.y-winCtrl.yPosition}if(browser.isNS){dx=event.pageX-winCtrl.xPosition;dy=event.pageY-winCtrl.yPosition}if(west){dx=-dx}if(north){dy=-dy}w=winCtrl.oldWidth+dx;h=winCtrl.oldHeight+dy;if(w<=winCtrl.active.minimumWidth){w=winCtrl.active.minimumWidth;dx=w-winCtrl.oldWidth}if(h<=winCtrl.active.minimumHeight){h=winCtrl.active.minimumHeight;dy=h-winCtrl.oldHeight}if(east||west){winCtrl.active.frame.style.width=w+"px";if(browser.isIE){winCtrl.active.clientArea.style.width=(w-winCtrl.active.widthDiff)+"px"}}if(north||south){winCtrl.active.clientArea.style.height=h+"px"}if(east||west){if(w<winCtrl.active.clipTextMinimumWidth){winCtrl.active.titleBarText.style.width=(winCtrl.minimizedTextWidth+w-winCtrl.active.minimumWidth)+"px"}else{winCtrl.active.titleBarText.style.width=""}}if(west){winCtrl.active.frame.style.left=(winCtrl.oldLeft-dx)+"px"}if(north){winCtrl.active.frame.style.top=(winCtrl.oldTop-dy)+"px"}if(browser.isIE){window.event.cancelBubble=true;window.event.returnValue=false}if(browser.isNS){event.preventDefault()}}function winResizeDragStop(event){winCtrl.inResizeDrag=false;if(browser.isIE){document.onmousemove=null;document.onmouseup=null}if(browser.isNS){document.removeEventListener("mousemove",winResizeDragGo,true);document.removeEventListener("mouseup",winResizeDragStop,true)}}function winFindByClassName(el,className){var i,tmp;if(el.className==className){return el}for(i=0;i<el.childNodes.length;i++){tmp=winFindByClassName(el.childNodes[i],className);if(tmp!=null){return tmp}}return null}var winList=new Array();var winCtrl=new Object();function winInit(){var elList;winCtrl.maxzIndex=0;winCtrl.resizeCornerSize=16;winCtrl.minimizedTextWidth=100;winCtrl.inactiveFrameBackgroundColor="#c0c0c0";winCtrl.inactiveFrameBorderColor="#f0f0f0 #505050 #404040 #e0e0e0";winCtrl.inactiveTitleBarColor="#808080";winCtrl.inactiveTitleTextColor="#c0c0c0";winCtrl.inactiveClientAreaBorderColor="#404040 #e0e0e0 #f0f0f0 #505050";winCtrl.inactiveClientAreaScrollbarColor="";winCtrl.inMoveDrag=false;winCtrl.inResizeDrag=false;elList=document.getElementsByTagName("div");for(var i=0;i<elList.length;i++){if(elList[i].className=="window"){winList[elList[i].id]=new Window(elList[i])}}}window.onload=winInit;