/***

	(C)opyright spirito GmbH, Germany, 2007
	All rights reserved
	
	http://www.spirito.de
	This is part of the DADO Application Server Software
	
	$Revision: 2808 $
	$Author: holtwick $
	$Date: 2007-08-28 15:09:17 +0200 (Di, 28 Aug 2007) $

	Dialoge mit ausgegrautem Hintergrund. Erfordert die Einbindung 
	folgender Skripte:
	
	<script type="text/javascript" src="/_dado/js/ajax/prototype.js"></script>
	<script type="text/javascript" src="/_dado/js/ajax/effects.js"></script>
		
***/

Element.addMethods({
    show: function(element) {
        $(element).removeClassName("hide")
        $(element).removeClassName("hidden")
        $(element).style.display = '';
        return element
    }
})

var Dialog = {

    background: null,
	dialog: null,
	element: null,
	isopen: false,
    isinit: false,
    
    defaultOptions: {
        fading: false,
        background: "#fff",
        opacity: 0.5,
        duration: 0.15
        },
        
	_init: function() {
	   	if(!this.isinit) {
           	this.isinit = true
    		this.element = $(document.createElement("DIV"));
    		document.body.appendChild(this.element);
    		var x = this.element.style;
    		x.position = "absolute";
    		x.top = "0px";
    		x.left = "0px";
    		x.width = Dialog.getWindowWidth() + "px";
    		x.height = Dialog.getWindowHeight() + "px";
    		x.zIndex = "10000";		
    		x.display = "none";
    		this.background = x
    		Event.observe(window, 'resize', this.onResize.bindAsEventListener(this));
    		if(!window.innerHeight) {
    			Event.observe(window, 'scroll', this.onResize.bindAsEventListener(this));
    		}
    	}
    	this.background.background = this.options.background;
	},
	
    getWindowHeight: function() {
    	if (typeof(window.innerHeight) == 'number')
    		return window.innerHeight;
    	else if (document.documentElement && document.documentElement.clientHeight)
    		return document.documentElement.clientHeight;
    	else if (document.body && document.body.clientHeight)
    		return document.body.clientHeight;
    	return 0;
    },
    
    getWindowWidth: function() {
    	if (typeof(window.innerWidth) == 'number')
    		return window.innerWidth;
    	else if (document.documentElement && document.documentElement.clientWidth)
    		return document.documentElement.clientWidth;
    	else if (document.body && document.body.clientWidth)
    		return document.body.clientWidth;
    	return 0;
    },
    
	open: function(element,ware , options) {	   	   
	    $('dialogware').value=ware
	    this.options = Object.extend(Object.extend({}, this.defaultOptions), options || {});    
	    this._init()
	    if(this.isopen)
	       Dialog.close()
		this.isopen = true
		this.dialog = $(element)
		this.dialog.style.zIndex = "10001";
		Dialog.hideSelectBoxes()		
		this.onResize()		
		if(this.options.fading==false) {
		    this.element.show()
			this.dialog.show()
		} else {
    		try {
        		new Effect.Appear(
    				this.dialog, {
    				    duration: this.options.duration, 
    				    to: 1.0
    				    })
    			new Effect.Appear(
    				this.element, {
    				    duration: this.options.duration, 
    				    to: this.options.opacity
    				        })			
    		} catch(e) {			
    			this.element.show()
    			this.dialog.show()			
    		}	
    	}
		Element.setOpacity(this.element, this.options.opacity)
		Element.setOpacity(this.dialog, 1.0)
		return false
	},
	
	close: function() {	    		
		try {
			new Effect.Fade(
				this.element, {
				    duration: this.options.duration
				    }
				)
			new Effect.Fade(
				this.dialog, {
				    duration: this.options.duration
				    }
				)
		} catch(e) {
			// log("Effect error %s", e)
			// $(this.element).show()
			this.dialog.hide()
			this.element.hide()
		}		
		//Dialog.showSelectBoxes()
		this.isopen = false
		return false
	},

	modal: function(func, options) {
	    var value = null	   	   
	    if(Dialog.isopen) {
	       value = func()
	    } else {
    	    Dialog.options = Object.extend(Object.extend({}, Dialog.defaultOptions), options || {});    
    		Dialog.isopen = true
    	    Dialog._init()
    		Dialog.onResize()		
    		Dialog.dialog = null		
    		Dialog.element.show()
    		Element.setOpacity(Dialog.element, Dialog.options.opacity)
    		Dialog.hideSelectBoxes()
 	        value = func()
    		Dialog.showSelectBoxes()
    		Dialog.element.hide()
    		Dialog.isopen = false
        }
		return value
	},
	
	show: function(text, options) {   	   
        Dialog.options = Object.extend(Object.extend({}, Dialog.defaultOptions), options || {});    
        Dialog.isopen = true
        Dialog._init()
        Dialog.onResize()		
        Dialog.dialog = null		
        Dialog.element.show()
        Element.setOpacity(Dialog.element, Dialog.options.opacity)
        Dialog.hideSelectBoxes()
        Dialog.element.innerHTML=text
		return true
	},
    
    alert: function(msg, options) {
        return Dialog.modal(function() {
            alert(msg)
            return false
        }, options)
    },	
	
	confirm: function(msg, options) {	   	   		
        return Dialog.modal(function() {
            return confirm(msg)
        }, options)
	},

	prompt: function(msg, defaultValue, options) {	   	   
        return Dialog.modal(function() {
            return prompt(msg, defaultValue)
        }, options)
	},
	
	onResize: function() {
		if(this.isopen) {
            if(this.dialog) {
    			var dim = Element.getDimensions(this.dialog)
	       		var y = this.dialog.style
	       	}
			var x = this.element.style;
			var dx =  window.pageXOffset
				|| document.documentElement.scrollLeft
				|| document.body.scrollLeft
				|| 0;
			var dy =  window.pageYOffset
				|| document.documentElement.scrollTop
				|| document.body.scrollTop
				|| 0;
			var vh = Dialog.getWindowHeight()
			var vw = Dialog.getWindowWidth()
			if(window.innerHeight) {
				x.position = "fixed"
				if(this.dialog) {
    				y.position = "fixed"
    				y.top = ((vh - dim.height) / 2) +  "px"
    				y.left = ((vw - dim.width) / 2) +  "px"
    			}
			} else {
				x.position = "absolute"
				x.top = dy
				x.left = dx		
				if(this.dialog) {		
    				y.position = "absolute"
    				y.top = (dy + ((vh - dim.height) / 2)) +  "px"
    				y.left = (dx + ((vw - dim.width) / 2)) +  "px"
    		  }
			}
			x.width = vw + "px";
			x.height = vh + "px";
		}
	},
	
	showSelectBoxes: function () {
        if(!window.XMLHttpRequest)
            $$("select").each(function(e) {
                e.show()
            })
    },
    
    hideSelectBoxes: function () {
        if(!window.XMLHttpRequest)  // IE6?
            $$("select").each(function(e) {
                e.hide()
            })
    }
	
}

// Shortcuts
Alert = Dialog.alert
Confirm = Dialog.confirm
Prompt = Dialog.prompt
DLShow=Dialog.show

