/*
* CONFIG
*/
var override = true; //true als alert, prompt and confirm overschreven mogen worden
var maxShine = 60; //de maximum doorzichtigheid van de shine
var framespeed = 300;//speed for each frame in the fade effect

/*
* ACTUAL CODE
*/
function opacity(id, inout, max, callback) {
    var max = max || 100;
    
    var speed = Math.round(window.framespeed / 100);
    var timer = 0;
    if(inout=="out") {
        for(i = max; i > 0; i--){
            setTimeout("changeOpac(" + i + ",'" + id + "', "+ callback +")",(timer * speed));
            timer++;
        }
    } else if(inout=="in") {
        for(i = 0; i <= max; i++){
            setTimeout("changeOpac(" + i + ",'" + id + "', "+ callback +")",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id, callback) {
    if(document.getElementById(id))
    {
        var object = document.getElementById(id).style;
        object.opacity = (opacity / 100);
        object.MozOpacity = (opacity / 100);
        object.KhtmlOpacity = (opacity / 100);
        object.filter = "alpha(opacity=" + opacity + ")";
        
        if(opacity == 1)
        {
            if(typeof callback == 'function') {
                callback();
            } 
        }
    }
}

function getWindowHeight() {
  var windowHeight = 0;
	
  if (typeof(window.innerHeight) == 'number')
    windowHeight = window.innerHeight;
	
  else {
		
    if (document.documentElement && document.documentElement.clientHeight)
      windowHeight = document.documentElement.clientHeight;
		
    else {
      if (document.body && document.body.clientHeight)
        windowHeight = document.body.clientHeight; }; };
				
  return windowHeight;
};

function getWindowWidth() {
  var windowHeight = 0;
	
  if (typeof(window.innerWidth) == 'number')
    windowWidth = window.innerWidth;
	
  else {
		
    if (document.documentElement && document.documentElement.clientWidth)
      windowWidth = document.documentElement.clientWidth;
		
    else {
      if (document.body && document.body.clientWidth)
        windowWidth = document.body.clientWidth; }; };
				
  return windowWidth;
};

function createWindow(id)
{
    if(!document.getElementById(id))
    {
	var overlay = document.createElement('div');
	overlay.className = 'overlay';
	
	var windowDiv = document.createElement('div');
	windowDiv.className = 'window';
	windowDiv.id = id;
	
	var closeButton = document.createElement('button');
	closeButton.className = 'close';
	closeButton.innerHTML = 'Close';
		
	windowDiv.innerHTML = id;
	windowDiv.appendChild(closeButton);
	overlay.appendChild(windowDiv);
      
        document.body.appendChild(overlay);
    }
  
    //create shine
    if(document.getElementById('oldShine')) //reuze existing shine
    {
        changeOpac(0, 'oldShine');
	document.getElementById('oldShine').id = 'shine';
    }
    else
    {
	var shine = document.createElement('div');
	shine.id = 'shine';
	document.body.appendChild(shine)
    }
    
    opacity('shine', 'in', window.maxShine);
    
    //hoogte en breedte krijgen van window
    var windowheight = getWindowHeight()
    var windowwidth = getWindowWidth()
    
    //hoogte en breedte krijgen van element
    var elementheight = document.getElementById(id).offsetHeight;
    var elementwidth = document.getElementById(id).offsetWidth;
    
    //blok verticaal centeren
    document.getElementById(id).style.marginTop = (getWindowHeight() / 2 + 160) - (elementheight / 2 )  + "px";

    //corrections for IE
    if(document.all)
    {
        document.getElementById('shine').style.height = windowheight;
        document.getElementById('shine').style.width = windowwidth;
	document.getElementById(id).style.marginLeft = (windowwidth/2 - elementwidth/2) + "px";
	
	if(window.IE6) //disable selectboxes for IE 6
	{
	    var nodes = document.getElementsByTagName('select');
	    for(var i=0; i < nodes.length; i++)
	    {
		nodes[i].disabled = 'disabled';
	    }
	    
	    //enable selects in the window
	    var nodes = document.getElementById(id).getElementsByTagName('select');
	    for(var i=0; i < nodes.length; i++)
	    {
		nodes[i].disabled = null;
	    }
	}
    }
    
    //enable all close buttons, inputs and links
    var nodes = document.getElementById(id).getElementsByTagName('*');
    for(var i=0; i < nodes.length; i++)
    {
	if(nodes[i].className == 'close')
	{
	    nodes[i].onclick  = closeWindow;
	}
    }
    
    //window tonen
    document.getElementById(id).parentNode.style.top= "0px";
    document.getElementById(id).parentNode.onclick = closeShimWindow;
    globalActiveModalWindow = id;
}

function closeShimWindow(e)
{
    var event = e || window.event;
    var target = event.target ? event.target : event.srcElement;
    
    if(target.className == 'overlay')
    {
	closeWindow();
    }
}

function closeWindow()
{  
    document.getElementById(globalActiveModalWindow).parentNode.style.top= "-10000px";
    document.getElementById('shine').id = 'oldShine';
  
    opacity('shine', 'out', window.maxShine, function(){ //define callback
        document.getElementById(globalActiveModalWindow).parentNode.style.top= "-10000px";
        document.getElementById('shine').id = 'oldShine'
        
        if(window.IE6) //enable selectboxes for IE 6
        {
            //enable selects in the body
            var nodes = document.getElementsByTagName('select');
            for(var i=0; i < nodes.length; i++)
            {
                nodes[i].disabled = null;
            }
        }
    });
    
    return false;//in case of a link
}

if(override)
{
    window.alert = function(id){
	createWindow(id)
    }
}