var readSizeFromCookie = true; // Determines if size and position of windows should be set/retreved by use of cookie
var windowMinSize = [80,30]; // Mininum width and height of windows.
var moveCounter = -1;
var startEventPos = new Array();
var startPosWindow = new Array();
var startWindowSize = new Array();
var initResizeCounter = -1;
var activeWindow = false;
var activeWindowContent = false;
var windowSizeArray = new Array();
var windowPositionArray = new Array();
var currentZIndex = 10000;
/*
These cookie functions are downloaded from
http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
*/
function Get_Cookie(name) {
var start = document.cookie.indexOf(name+"=");
var len = start+name.length+1;
if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
if (start == -1) return null;
var end = document.cookie.indexOf(";",len);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(len,end));
}
// This function has been slightly modified
function Set_Cookie(name,value,expires,path,domain,secure) {
expires = expires * 60*60*24*1000;
var today = new Date();
var expires_date = new Date( today.getTime() + (expires) );
var cookieString = name + "=" +escape(value) +
( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
( (path) ? ";path=" + path : "") +
( (domain) ? ";domain=" + domain : "") +
( (secure) ? ";secure" : "");
document.cookie = cookieString;
}
function cancelEvent()
{
return (moveCounter==-1 && initResizeCounter==-1)?true:false;
}
function initMove(e)
{
if(document.all)e = event;
moveCounter = 0;
switchElement(false,this);
startEventPos = [e.clientX,e.clientY];
startPosWindow = [activeWindow.offsetLeft,activeWindow.offsetTop];
startMove();
if(!document.all)return false;
}
function startMove()
{
if(moveCounter>=0 && moveCounter<=10){
moveCounter++;
setTimeout('startMove()',10);
}
}
function stopMove(e)
{
if(document.all)e = event;
moveCounter=-1;
initResizeCounter=-1;
if(!activeWindow || !activeWindowContent)return;
Set_Cookie(activeWindow.id + '_attr',activeWindow.style.left.replace('px','') + ',' + activeWindow.style.top.replace('px','') + ',' + activeWindow.style.width.replace('px','') + ',' + activeWindowContent.style.height.replace('px','') + ',' + activeWindow.style.zIndex,50);
}
function moveWindow(e)
{
if(document.all)e = event;
if(moveCounter>=10){
activeWindow.style.left = startPosWindow[0] + e.clientX - startEventPos[0] + 'px';
activeWindow.style.top = startPosWindow[1] + e.clientY - startEventPos[1] + 'px';
}
if(initResizeCounter>=10){
var newWidth = Math.max(windowMinSize[0],startWindowSize[0] + e.clientX - startEventPos[0]);
var newHeight = Math.max(windowMinSize[1],startWindowSize[1] + e.clientY - startEventPos[1]);
activeWindow.style.width = newWidth + 'px';
activeWindowContent.style.height = newHeight + 'px';
}
if(!document.all)return false;
}
function initResizeWindow(e)
{
if(document.all)e = event;
initResizeCounter = 0;
switchElement(false,document.getElementById('dhtml_goodies_id' + this.id.replace(/[^\d]/g,'')));
startWindowSize = [activeWindowContent.offsetWidth,activeWindowContent.offsetHeight];
startEventPos = [e.clientX,e.clientY];
startResizeWindow();
return false;
}
function startResizeWindow()
{
if(initResizeCounter>=0 && initResizeCounter<=10){
initResizeCounter++;
setTimeout('startResizeWindow()',10);
}
}
function switchElement(e,inputElement)
{
if(!inputElement)inputElement = this;
if(activeWindow && activeWindowContent){
Set_Cookie(activeWindow.id + '_attr',activeWindow.style.left.replace('px','') + ',' + activeWindow.style.top.replace('px','') + ',' + activeWindow.style.width.replace('px','') + ',' + activeWindowContent.style.height.replace('px','') + ',' + activeWindow.style.zIndex,50);
}
currentZIndex = currentZIndex/1 + 1;
activeWindow = document.getElementById('dhtml_goodies_id' + inputElement.id.replace(/[^\d]/g,''));
activeWindow.style.zIndex = currentZIndex;
activeWindowContent = document.getElementById('windowContent' + inputElement.id.replace(/[^\d]/g,''));
Set_Cookie(activeWindow.id + '_attr',activeWindow.style.left.replace('px','') + ',' + activeWindow.style.top.replace('px','') + ',' + activeWindow.style.width.replace('px','') + ',' + activeWindowContent.style.height.replace('px','') + ',' + activeWindow.style.zIndex,50);
}
function hideWindow()
{
switchElement(false,document.getElementById('dhtml_goodies_id' + this.id.replace(/[^\d]/g,'')));
activeWindow.style.display='none';
}
function minimizeWindow()
{
var numericID = this.id.replace(/[^\d]/g,'');
switchElement(false,document.getElementById('dhtml_goodies_id' + numericID));
if(this.src.indexOf('minimize')>=0){
activeWindowContent.style.display='none';
document.getElementById('resizeImage'+numericID).style.display='none';
this.src = this.src.replace('minimize','maximize');
}else{
activeWindowContent.style.display='block';
document.getElementById('resizeImage'+numericID).style.display='';
this.src = this.src.replace('maximize','minimize');
}
}
function initWindows()
{
var divCounter = 0;
var zIndexSet = false;
var divs = document.getElementsByTagName('DIV');
for(var no=0;no<divs.length;no++){
if(divs[no].className=='dhtmlgoodies_window'){
divCounter = divCounter + 1;
if(divCounter==1)activeWindow = divs[no];
divs[no].id = 'dhtml_goodies_id' + divCounter;
divs[no].onmousedown = switchElement;
if(readSizeFromCookie)var cookiePos = Get_Cookie(divs[no].id + '_attr') + ''; else cookiePos = '';
var cookieValues = new Array();
if(cookiePos.indexOf(',')>0){
cookieValues = cookiePos.split(',');
if(!windowPositionArray[divCounter])windowPositionArray[divCounter] = new Array();
windowPositionArray[divCounter][0] = Math.max(0,cookieValues[0]);
windowPositionArray[divCounter][1] = Math.max(0,cookieValues[1]);
}
if(cookieValues.length==5 && !zIndexSet){
divs[no].style.zIndex = cookieValues[4];
if(cookieValues[4]/1 > currentZIndex)currentZIndex = cookieValues[4]/1;
}
if(windowPositionArray[divCounter]){
divs[no].style.left = windowPositionArray[divCounter][0] + 'px';
divs[no].style.top = windowPositionArray[divCounter][1] + 'px';
}
var subImages = divs[no].getElementsByTagName('IMG');
for(var no2=0;no2<subImages.length;no2++){
if(subImages[no2].className=='resizeImage'){
subImages[no2].style.cursor = 'nw-resize';
subImages[no2].onmousedown = initResizeWindow;
subImages[no2].id = 'resizeImage' + divCounter;
break;
}
if(subImages[no2].className=='closeButton'){
subImages[no2].id = 'closeImage' + divCounter;
subImages[no2].onclick = hideWindow;
}
if(subImages[no2].className=='minimizeButton'){
subImages[no2].id = 'minimizeImage' + divCounter;
subImages[no2].onclick = minimizeWindow;
}
}
}
if(divs[no].className=='dhtmlgoodies_window_top'){
divs[no].onmousedown = initMove;
divs[no].id = 'top_bar'+divCounter;
}
if(divs[no].className=='dhtmlgoodies_windowContent'){
divs[no].id = 'windowContent'+divCounter;
if(cookieValues.length>3){
if(!windowSizeArray[divCounter])windowSizeArray[divCounter] = new Array();
windowSizeArray[divCounter][0] = cookieValues[2];
windowSizeArray[divCounter][1] = cookieValues[3];
}
if(cookieValues.length==5){
activeWindowContent = document.getElementById('windowContent' + divCounter);
}
if(windowSizeArray[divCounter]){
divs[no].style.height = windowSizeArray[divCounter][1] + 'px';
divs[no].parentNode.parentNode.style.width = windowSizeArray[divCounter][0] + 'px';
}
}
}
document.body.onmouseup = stopMove;
document.body.onmousemove = moveWindow;
document.body.ondragstart = cancelEvent;
document.body.onselectstart = cancelEvent;
}
window.onload = initWindows;
|