﻿/****************************************************
* Script: DarkSlidingWindow
* Date: (October 16th 2008)
* Author: Dimitri Troncquo
* Contact: dimi3.t@gmail.com
* Description: 
* Creates a centered autohiding window.
*
* Requirements:
*  - Prototype framework
*  - script.aculo.us framework
*  - drk_slidingwindow.css (or equivalent css)
****************************************************/	

var DarkSlidingWindow = Class.create({
  initialize: function(slidingWindowId, pixelsShowing) {    
    this.slidingWindow = document.getElementById("slidingWindow");
    this.pixelsShowing = pixelsShowing || 35;
    this.isOpen = false;
    this.isMoving = false;
    this.canClose = true;
    this.calculateSlidingWindowPos();
    var registerHandlers = function(wndw){
        document.eventHandler.register(wndw.slidingWindow, "mouseover", function(){
            wndw.canClose = false;
            wndw.slideWindow(true);
        }); 
        
        document.eventHandler.register(wndw.slidingWindow, "mouseout", function(ev){
            if(!wndw.slidingWindow.contains(ev.relatedTarget)){
                wndw.canClose = true;
                setTimeout(function(){                    
                    wndw.slideWindow(false);
                }, 300);
            }
        });         
    };
    registerHandlers(this);
  },
  calculateSlidingWindowPos: function(){
    var vpDimension = viewportDimensions();
    if(vpDimension && this.slidingWindow){
        this.slidingWindow.style.top = (vpDimension.height - this.pixelsShowing) + "px";
        this.slidingWindow.style.left = ((vpDimension.width/2) - (parseFloat(this.slidingWindow.style.width)/2)) + "px";
        this.slidingWindow.style.display = "block";
        this.isOpen = false;
        this.isMoving = false;
    }
  },
  slideWindow: function(open, forceClose){
    var vpDimension = viewportDimensions();
    
    if(this.isOpen){
        if(!open && !this.isMoving && (this.canClose || forceClose)){ 
            this.isMoving = true;
            this.isOpen = false;            
            function doCloseEffect(wndw){
                var moveEffect = new Effect.Move(wndw.slidingWindow, { x: 0, y: (parseFloat(wndw.slidingWindow.style.height) - wndw.pixelsShowing) });            
                function resetSate(wndw){ 
		                setTimeout(function() {wndw.isMoving = false;}, moveEffect.options.duration*1000);
		        }
		        resetSate(wndw);
		    }
		    doCloseEffect(this);
        }
    }else{       
        if(open && !this.isMoving){
            this.isMoving = true;
            this.isOpen = true;
            function doOpenEffect(wndw){
                var moveEffect = new Effect.Move(wndw.slidingWindow, { x: 0, y: -1 * (parseFloat(wndw.slidingWindow.style.height) - wndw.pixelsShowing) });            
                function resetSate(wndw){ 
		                setTimeout(function() {wndw.isMoving = false;}, moveEffect.options.duration*1000);
		        }
		        resetSate(wndw);
		    }
		    doOpenEffect(this);
        }            
    }    
  }
});
try{
	if(HTMLElement && !HTMLElement.prototype.contains){
		HTMLElement.prototype.contains = function(node) {
			if (node == null) return false;
			if (node == this) return true;
			else return this.contains(node.parentNode);
		}
	}
}catch(e){}
