    /************************************************************************************************************
    (C) www.dhtmlgoodies.com, September 2005

    Update log:

    January 18th, 2006: Added feature that makes the window cover selectboxes(ref. problem with windowed and window less elements).
    January 29th, 2006: Fixed problem showing the windows in Opera
    Feb, 8th 2006:      Added support for creating new windows dynamically
    March,  11th, 2006: Added support for getting content from external files by use of Ajax

    This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.

    Terms of use:
    You are free to use this script as long as the copyright message is kept intact. However, you may not
    redistribute, sell or repost it without our permission.

    Thank you!

    www.dhtmlgoodies.com
    Alf Magne Kalleland

    ************************************************************************************************************/

        /* TCS - 20060808 - replaced paths to images and set readSizeFromCookie to false */
        /* details: http://www.dhtmlgoodies.com/index.html?whichScript=floating_window */

    var readSizeFromCookie = false; // 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;
    var windowStateArray = new Array(); // Minimized or maximized
    var activeWindowIframe = false;
    var divCounter = 0;
    var zIndexSet = false;

    var MSIEWIN = (navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Win')>=0 && navigator.userAgent.toLowerCase().indexOf('opera')<0)?true:false;
    var opera = navigator.userAgent.toLowerCase().indexOf('opera')>=0?true:false;


    var ajaxObjects = new Array();

    /*
    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(!MSIEWIN)return false;

    }

    function startMove()
    {
        if(moveCounter>=0 && moveCounter<=10){
            moveCounter++;
            setTimeout('startMove()',5);
        }
    }

    function stopMove(e)
    {
        if(document.all)e = event;
        moveCounter=-1;
        initResizeCounter=-1;
        if(!activeWindow || !activeWindowContent)return;
        var state = '0';
        if(windowStateArray[activeWindow.id.replace(/[^0-9]/g,'')])state = '1';

        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 + ',' + state,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(MSIEWIN && activeWindowIframe){
                activeWindowIframe.style.width = (newWidth) + 'px';
                activeWindowIframe.style.height = (newHeight+20) + '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];

        if(MSIEWIN)activeWindowIframe = activeWindow.getElementsByTagName('IFRAME')[0];
        startResizeWindow();
        return false;

    }

    function startResizeWindow()
    {
        if(initResizeCounter>=0 && initResizeCounter<=10){
            initResizeCounter++;
            setTimeout('startResizeWindow()',5);
        }
    }

    function switchElement(e,inputElement)
    {
        if(!inputElement)inputElement = this;
        var numericId = inputElement.id.replace(/[^0-9]/g,'');
        var state = '0';
        if(windowStateArray[numericId])state = '1';

        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 + ',' + state,50);

        }
        currentZIndex = currentZIndex/1 + 1;
        activeWindow = document.getElementById('dhtml_goodies_id' + numericId);
        activeWindow.style.zIndex = currentZIndex;
        activeWindowContent = document.getElementById('windowContent' + numericId);

        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 + ',' + state,50);
    }

    function hideWindow()
    {
        switchElement(false,document.getElementById('dhtml_goodies_id' + this.id.replace(/[^\d]/g,'')));
        activeWindow.style.display='none';
    }

    function minimizeWindow(e,inputObj)
    {
        if(!inputObj)inputObj = this;
        var numericID = inputObj.id.replace(/[^0-9]/g,'');
        switchElement(false,document.getElementById('dhtml_goodies_id' + numericID));
        var state;
        if(inputObj.src.indexOf('minimize')>=0){
            activeWindowContent.style.display='none';
            document.getElementById('resizeImage'+numericID).style.display='none';
            inputObj.src = inputObj.src.replace('minimize','maximize');
            windowStateArray[numericID] = false;
            state = '0';
        }else{
            activeWindowContent.style.display='block';
            document.getElementById('resizeImage'+numericID).style.display='';
            inputObj.src = inputObj.src.replace('maximize','minimize');
            windowStateArray[numericID] = true;
            state = '1';
        }

        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 + ',' + state,50);

    }

    function initWindows(e,divObj)
    {


        var divs = document.getElementsByTagName('DIV');

        if(divObj){
            var tmpDivs = divObj.getElementsByTagName('DIV');
            var divs = new Array();
            divs[divs.length] = divObj;

            for(var no=0;no<tmpDivs.length;no++){
                divs[divs.length] = tmpDivs[no];
            }
        }

        for(var no=0;no<divs.length;no++){

            if(divs[no].className=='dhtmlgoodies_window'){

                if(MSIEWIN){
                    var iframe = document.createElement('IFRAME');
                    iframe.style.border='0px';
                    iframe.frameborder=0;
                    iframe.style.position = 'absolute';
                    iframe.style.backgroundColor = '#FFFFFF';
                    iframe.style.top = '0px';
                    iframe.style.left = '0px';
                    iframe.style.zIndex = 100;


                    var subDiv = divs[no].getElementsByTagName('DIV')[0];
                    divs[no].insertBefore(iframe,subDiv);

                }
                if(divObj){
                    divs[no].style.zIndex = currentZIndex;
                    currentZIndex = currentZIndex /1 + 1;
                }

                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 = '';
                if(divObj)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(cookieValues.length==6 && cookieValues[5]=='0'){
                            setTimeout('minimizeWindow(false,document.getElementById("minimizeImage' + divCounter + '"))',10);
                        }
                        if(cookieValues.length==6 && cookieValues[5]=='1'){
                            windowStateArray[divCounter] = 1;
                        }


                    }
                }
            }
            if(divs[no].className=='dhtmlgoodies_windowMiddle' || divs[no].className=='dhtmlgoodies_window_bottom'){
                divs[no].style.zIndex = 1000;

            }
            if(divs[no].className=='dhtmlgoodies_window_top'){
                divs[no].onmousedown = initMove;
                divs[no].id = 'top_bar'+divCounter;
                divs[no].style.zIndex = 1000;

            }

            if(divs[no].className=='dhtmlgoodies_windowContent'){
                divs[no].id = 'windowContent'+divCounter;
                divs[no].style.zIndex = 1000;
                if(cookieValues && cookieValues.length>3){
                    if(!windowSizeArray[divCounter])windowSizeArray[divCounter] = new Array();
                    windowSizeArray[divCounter][0] = cookieValues[2];
                    windowSizeArray[divCounter][1] = cookieValues[3];
                }
                if(cookieValues && 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';

                    if(MSIEWIN){
                        iframe.style.width = (windowSizeArray[divCounter][0]) + 'px';
                        iframe.style.height = (windowSizeArray[divCounter][1]+20) + 'px';
                    }
                }
            }


        }

        if(!divObj){
            document.body.onmouseup = stopMove;
            document.body.onmousemove = moveWindow;
            document.body.ondragstart = cancelEvent;
            document.body.onselectstart = cancelEvent;
        }

        return divCounter;
    }


function createNewWindow(width,height,left,top)
   {
      var div = document.createElement('DIV');
      div.className='dhtmlgoodies_window';
      document.body.appendChild(div);

      var topDiv = document.createElement('DIV');
      topDiv.className='dhtmlgoodies_window_top';
      div.appendChild(topDiv);

      var img = document.createElement('IMG');
      img.src = '/graphics/popup_window_images/top_left.gif';
      img.align='left';
      topDiv.appendChild(img);

      var img = document.createElement('IMG');
      img.src = '/graphics/popup_window_images/top_center.gif';
      img.className='topCenterImage';
      topDiv.appendChild(img);

      var buttonDiv = document.createElement('DIV');
      buttonDiv.className='top_buttons';
      topDiv.appendChild(buttonDiv);

      var img = document.createElement('IMG');
      img.src = '/graphics/popup_window_images/minimize.gif';
      img.className='minimizeButton';
      buttonDiv.appendChild(img);

      var img = document.createElement('IMG');
      img.src = '/graphics/popup_window_images/close.gif';
      img.className='closeButton';
      buttonDiv.appendChild(img);

      var img = document.createElement('IMG');
      img.src = '/graphics/popup_window_images/top_right.gif';
      buttonDiv.appendChild(img);

      var middleDiv = document.createElement('DIV');
      middleDiv.className='dhtmlgoodies_windowMiddle';
      div.appendChild(middleDiv);

      var contentDiv = document.createElement('DIV');
      contentDiv.className='dhtmlgoodies_windowContent';
      middleDiv.appendChild(contentDiv);

      var bottomDiv = document.createElement('DIV');
      bottomDiv.className='dhtmlgoodies_window_bottom';
      div.appendChild(bottomDiv);

      var img = document.createElement('IMG');
      img.src = '/graphics/popup_window_images/bottom_right.gif';
      img.className='resizeImage';
      bottomDiv.appendChild(img);

      var index = windowSizeArray.length;
      if(index==0)index=1;
      if (top < 0)
      {
		var bodyHeight;
		if (self.innerHeight){ // all except Explorer
		   bodyHeight = self.innerHeight;
		}  else if (document.documentElement && document.documentElement.clientHeight) {
		   // Explorer 6 Strict Mode
		   bodyHeight = document.documentElement.clientHeight;
		} else if (document.body) {// other Explorers
		   bodyHeight = document.body.clientHeight;
		}

        var topOffset = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
        top = (Math.ceil((bodyHeight - height) / 2) + topOffset );
      }
      if (left < 0)
      {
		var bodyWidth;
		if (self.innerHeight){ // all except Explorer
		   bodyWidth = self.innerWidth;
		}  else if (document.documentElement && document.documentElement.clientHeight) {
		   // Explorer 6 Strict Mode
		   bodyWidth = document.documentElement.clientWidth;
		} else if (document.body) {// other Explorers
		   bodyWidth = document.body.clientWidth;
		}

        left = Math.ceil((bodyWidth - width) / 2);
      }
      windowSizeArray[index] = [width,height];
      windowPositionArray[index] = [left,top];

      return initWindows(false,div);



   }
    function showAjaxContent(ajaxIndex,windowId)
    {
        document.getElementById('windowContent' + windowId).innerHTML = ajaxObjects[ajaxIndex].response;


    }

    function addContentFromUrl(url,windowId)
    {
        var ajaxIndex = ajaxObjects.length;
        ajaxObjects[ajaxIndex] = new sack();
        ajaxObjects[ajaxIndex].requestFile = url;   // Specifying which file to get
        ajaxObjects[ajaxIndex].onCompletion = function(){ showAjaxContent(ajaxIndex,windowId); };   // Specify function that will be executed after file has been found
        ajaxObjects[ajaxIndex].runAJAX();       // Execute AJAX function


    }

    /* This function illustrates how you can create a new custom window dynamically */

    function customFunctionCreateWindow(urlToExternalFile)
    {
        var divId = createNewWindow(200,200,300,300);
        document.getElementById('windowContent' + divId).innerHTML = 'Content of new window';
        if(urlToExternalFile)addContentFromUrl(urlToExternalFile,divId);    // Add content from external file
    }

    window.onload = initWindows;
