
if(!SAPO.Widget || typeof(SAPO.Widget) == 'undefined') {
    SAPO.namespace('Widget');
}


SAPO.Widget.Dialog = {

    /*
    YDom: YAHOO.util.Dom,

    YEvent: YAHOO.util.Event,
    */

    overlay: false,

    _component: false,

    stoHideFlash: false, 

    intervalHideFlash: 2000, 

    addLayer: function()
    {
        /*
        this.hideObjectElement();

        this._layer = document.createElement('DIV');
        this._layer.style.width = this.getPageWidth()+'px';
        this._layer.style.height = this.getPageHeight()+'px';
        this._layer.style.position = 'absolute';
        this._layer.style.zIndex = '100';
        this._layer.style.left = '0px';
        this._layer.style.top = '0px';
        this._layer.style.backgroundColor = '#696969';
        this._layer.style.cursor = 'not-allowed';
        this.YDom.setStyle(this._layer, 'opacity', 0.5);
        */

        document.body.appendChild(this._createOverlay());

        if(this.stoHideFlash) {
            clearInterval(this.stoHideFlash);
            this.stoHideFlash = false;
        }
        this.hideAllFlash();
        this.stoHideFlash = setInterval(function(){
                    this.hideAllFlash();
                }.bind(this), this.intervalHideFlash);
    }, 

    _createOverlay: function()
    {
        var pageDims = this.getPageSize();

        this.overlay = document.createElement('div');
        //this.overlay.id = 'sapo_widget_login_overlay';
        this.overlay.style.position = 'absolute';
        this.overlay.style.zIndex = '100000';
        this.overlay.style.width = pageDims[0]+'px';
        this.overlay.style.height = pageDims[1]+'px';
        this.overlay.style.left = '0px';
        this.overlay.style.top = '0px';
        this.overlay.style.backgroundColor = '#696969';
        this.overlay.style.cursor = 'not-allowed';

        Element.setOpacity(this.overlay, 0.5);

        return this.overlay;
    },

    /*
    getPageWidth: function()
    {
        return parseInt(this.YDom.getDocumentWidth());
    },
    
    getPageHeight: function()
    {
        return parseInt(this.YDom.getDocumentHeight());
    }, 

    getViewWidth: function()
    {
        return parseInt(this.YDom.getClientWidth());
    },
    
    getViewHeight: function()
    {
        return parseInt(this.YDom.getClientHeight());
    },
    */

    /*
    removeLayer: function()
    {
        this.showObjectElement(); 

        this._layer.parentNode.removeChild(this._layer);
        this._component.parentNode.removeChild(this._component);
        this._layer = null;
        this._layer = false;
        this._component = null;
        this._component = false;
    },
    */

    removeLayer: function(e)
    {
        if(this._component) {
            //this._removeEvents();
            this._component.parentNode.removeChild(this._component);
            this._component = false;
        }
        if(this.overlay) {
            this.overlay.parentNode.removeChild(this.overlay);
            this.overlay = false;
        }
        //this._removeCss();

        this.showAllFlash();
    },

    alert: function(message, image) 
    {
        var options = Object.extend({
                    width: 250,
                    height: false,
                    onComplete: false,
                    callBack: false,
                    className: false,
                    debug: false
                }, arguments[2] || {});

        var width = parseInt(options.width);
        var height = options.height;

        /*
        if(options.width) {
            width = parseInt(options.width);
        }
        if(options.height) {
            height = parseInt(options.height);
        }
        */

        var pageDims = this.getPageSize();
        var scrollDims = this.getPageScroll();

        /*
        var left = ((this.getViewWidth() / 2) - (width / 2));
        var top = ((this.getViewHeight() / 2) - (height / 2));
        */
        var left = ((Number(pageDims[2]) / 2) - (width / 2));
        var top = 0; //(Number(((Number(pageDims[3]) / 2) - (height / 2)) + Number(scrollDims[1])));

        message = message.replace(new RegExp("\\n", "g"), '<br />');

        this.addLayer();

        this._component = this.createMessageComponent(message, width, height, top, left, options.className);

        var ok = document.createElement('INPUT');
        if(image && typeof(image) != 'undefined') {
            ok.type = 'image';
            ok.src = image;
        } else {
            ok.type = 'button';
            ok.value = 'Ok';
        }
        ok.style.fontFamily = 'Arial, Verdana, sans-serif';
        ok.style.fontSize = '12px';
        //ok.onclick = function() { SAPO.Widget.Dialog.removeLayer(); };
        Event.observe(ok, 'click', function(e, callBack){ SAPO.Widget.Dialog.removeLayer(); if(callBack) { callBack(); } }.bindAsEventListener(this, options.callBack));

        var p = document.createElement('DIV');
        p.style.textAlign = 'center';
        p.style.padding = '20px';

        p.appendChild(ok);
        this._component.appendChild(p); 

        document.body.appendChild(this._component);
        
        var height = parseInt(Element.getHeight(this._component));
        var top = (Number(((Number(pageDims[3]) / 2) - (height / 2)) + Number(scrollDims[1])));
        
        this._component.style.top = top+'px';

        if(options.onComplete) {
            options.onComplete();
        }
    }, 

    confirm: function(message, image, imageCancel) 
    {
        var options = Object.extend({
                    width: 250,
                    height: false,
                    onComplete: false,
                    callBack: false,
                    callBackCancel: false,
                    className: false,
                    debug: false
                }, arguments[3] || {});

        var width = parseInt(options.width);
        var height = options.height;
        
        var pageDims = this.getPageSize();
        var scrollDims = this.getPageScroll();

        var left = ((Number(pageDims[2]) / 2) - (width / 2));
        var top = 0; //(Number(((Number(pageDims[3]) / 2) - (height / 2)) + Number(scrollDims[1])));

        message = message.replace(new RegExp("\\n", "g"), '<br />');

        this.addLayer();

        this._component = this.createMessageComponent(message, width, height, top, left, options.className);

        var ok = document.createElement('INPUT');
        if(image && typeof(image) != 'undefined') {
            ok.type = 'image';
            ok.src = image;
        } else {
            ok.type = 'button';
            ok.value = 'Ok';
        }
        ok.style.fontFamily = 'Arial, Verdana, sans-serif';
        ok.style.fontSize = '12px';
        Event.observe(ok, 'click', function(e, callBack){ SAPO.Widget.Dialog.removeLayer(); if(callBack) { callBack(); } }.bindAsEventListener(this, options.callBack));

        var cancel = document.createElement('INPUT');
        if(imageCancel && typeof(imageCancel) != 'undefined') {
            cancel.type = 'image';
            cancel.src = imageCancel;
        } else {
            cancel.type = 'button';
            cancel.value = 'Cancel';
        }
        cancel.style.fontFamily = 'Arial, Verdana, sans-serif';
        cancel.style.fontSize = '12px';
        Event.observe(cancel, 'click', function(e, callBack){ SAPO.Widget.Dialog.removeLayer(); if(callBack) { callBack(); } }.bindAsEventListener(this, options.callBackCancel));

        var p = document.createElement('DIV');
        p.style.textAlign = 'center';
        p.style.padding = '20px';

        p.appendChild(ok);
        //p.innerHTML += '&nbsp;&nbsp;&nbsp;';
        p.appendChild(document.createTextNode('   '));
        p.appendChild(cancel);

        this._component.appendChild(p); 

        document.body.appendChild(this._component);
        
        var height = parseInt(Element.getHeight(this._component));
        var top = (Number(((Number(pageDims[3]) / 2) - (height / 2)) + Number(scrollDims[1])));
        
        this._component.style.top = top+'px';

        if(options.onComplete) {
            options.onComplete();
        }

    },

    info: function(message)
    {
        var options = Object.extend({
                    width: 250,
                    height: false,
                    onComplete: false,
                    className: false,
                    debug: false
                }, arguments[1] || {});

        var width = parseInt(options.width);
        var height = options.height;

        /*
        if(options.width) {
            width = parseInt(options.width);
        }
        if(options.height) {
            height = parseInt(options.height);
        }
        */
        
        var pageDims = this.getPageSize();
        var scrollDims = this.getPageScroll();

        /*
        var left = ((this.getViewWidth() / 2) - (width / 2));
        var top = ((this.getViewHeight() / 2) - (height / 2));
        */
        var left = ((Number(pageDims[2]) / 2) - (width / 2));
        var top = 0; //(Number(((Number(pageDims[3]) / 2) - (this.options.loginBoxHeight / 2)) + Number(scrollDims[1])));

        message = message.replace(new RegExp("\\n", "g"), '<br />');
    
        this.addLayer();

        this._component = this.createMessageComponent(message, width, height, top, left, options.className);

        document.body.appendChild(this._component);
       
        var height = Element.getHeight(this._component); 
        var top = (Number(((Number(pageDims[3]) / 2) - (height / 2)) + Number(scrollDims[1])));
        this._component.style.top = top+'px';

        if(options.onComplete) {
            options.onComplete();
        }
    },

    infoElm: function(message, elementId)
    {
        var options = Object.extend({
                    width: 250,
                    height: false,
                    onComplete: false,
                    className: false,
                    debug: false
                }, arguments[1] || {});

        var width  = parseInt(options.width);
        var height = options.height;

        var region = YAHOO.util.Dom.getRegion(elementId);
        var regionWidth  = region.right - region.left;
        var regionHeight = region.bottom - region.top;

        var pageDims = this.getPageSize();
        var scrollDims = this.getPageScroll();

        var left = (((region.left + (regionWidth / 2)) ) - (width / 2));
        var top = 0; //(Number(((Number(pageDims[3]) / 2) - (this.options.loginBoxHeight / 2)) + Number(scrollDims[1])));

        message = message.replace(new RegExp("\\n", "g"), '<br />');

        this.overlay = document.createElement('div');
        //this.overlay.id = 'sapo_widget_login_overlay';
        this.overlay.style.position = 'absolute';
        this.overlay.style.zIndex = '100000';
        this.overlay.style.width = regionWidth+'px';
        this.overlay.style.height = regionHeight+'px';
        this.overlay.style.left = region.left+'px';
        this.overlay.style.top = region.top+'px';
        this.overlay.style.backgroundColor = '#696969';
        this.overlay.style.cursor = 'not-allowed';

        Element.setOpacity(this.overlay, 0.5);

        document.body.appendChild(this.overlay);

        this._component = this.createMessageComponent(message, width, height, top, left, options.className);

        document.body.appendChild(this._component);

        var height = Element.getHeight(this._component); 
        var top = (((region.top + (regionHeight / 2)) ) - (height / 2));
        this._component.style.top = top+'px';

        if(options.onComplete) {
            options.onComplete();
        }
    },

    createMessageComponent: function(message, width, height, top, left, className) 
    {
        var comp = document.createElement('div');
        comp.style.position = 'absolute';
        comp.style.zIndex = '100001';
        comp.style.width = width+'px';
        if(height) {
            comp.style.height = height+'px';
        }
        //comp.style.height = height+'px';
        /*
        comp.style.left = (left + (document.documentElement.scrollLeft || document.body.scrollLeft) )+'px';
        comp.style.top = (top + (document.documentElement.scrollTop || document.body.scrollTop))+'px';
        */
        comp.style.left = left+'px';
        comp.style.top = top+'px';
        comp.style.cursor = 'default';

        if(className && typeof(className) != 'undefined' && className != null) {
            comp.className = className;
        } else {
            comp.style.padding = '5px';
            comp.style.fontFamily = 'Arial, Verdana, sans-serif';
            comp.style.fontSize = '12px';
            comp.style.textAlign = 'center';
            comp.style.backgroundColor = '#FFF';
            comp.style.border = '1px solid black';
        }

        //this.YDom.setStyle(comp, 'opacity', 2);

        comp.innerHTML = message;

        return comp;
    },

    /*
    hideObjectElement: function()
    {
        if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
            var aObjs = document.getElementsByTagName('OBJECT');
        } else {
            var aObjs = document.getElementsByTagName('EMBED');
        }
        if(aObjs.length > 0) {
            for(var i=0; i < aObjs.length; i++) {
                aObjs[i].style.visibility = 'hidden';
            }
        }
    },
    */

    /*
    showObjectElement: function()
    {
        if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
            var aObjs = document.getElementsByTagName('OBJECT');
        } else {
            var aObjs = document.getElementsByTagName('EMBED');
        }
        if(aObjs.length > 0) {
            for(var i=0; i < aObjs.length; i++) {
                aObjs[i].style.visibility = 'visible';
            }
        }
    }, 
    */


    /* UTILITY STUFF */

    hideAllFlash: function()
    {
        var aEmbed = document.body.getElementsByTagName('EMBED');
        for(var i=0; i < aEmbed.length; i++) {
            aEmbed[i].style.visibility = 'hidden';
        }
        var aObject = document.body.getElementsByTagName('OBJECT');
        for(var i=0; i < aObject.length; i++) {
            aObject[i].style.visibility = 'hidden';
        }
        var aIframe = document.body.getElementsByTagName('IFRAME');
        for(var i=0; i < aIframe.length; i++) {
            aIframe[i].style.visibility = 'hidden';
        }
        var aSelect = document.body.getElementsByTagName('SELECT');
        for(var i=0; i < aSelect.length; i++) {
            aSelect[i].style.visibility = 'hidden';
        }
    },

    showAllFlash: function()
    {
        if(this.stoHideFlash) {
            clearInterval(this.stoHideFlash);
            this.stoHideFlash = false;
        }

        var aEmbed = document.body.getElementsByTagName('EMBED');
        for(var i=0; i < aEmbed.length; i++) {
            aEmbed[i].style.visibility = 'visible';
        }
        var aObject = document.body.getElementsByTagName('OBJECT');
        for(var i=0; i < aObject.length; i++) {
            aObject[i].style.visibility = 'visible';
        }
        var aIframe = document.body.getElementsByTagName('IFRAME');
        for(var i=0; i < aIframe.length; i++) {
            aIframe[i].style.visibility = 'visible';
        }
        var aSelect = document.body.getElementsByTagName('SELECT');
        for(var i=0; i < aSelect.length; i++) {
            aSelect[i].style.visibility = 'visible';
        }
    },

    getPageScroll: function()
    {
        var xScroll, yScroll;

        if (self.pageYOffset) {
            yScroll = self.pageYOffset;
            xScroll = self.pageXOffset;
        } else if (document.documentElement && document.documentElement.scrollTop){
            yScroll = document.documentElement.scrollTop;
            xScroll = document.documentElement.scrollLeft;
        } else if (document.body) {
            yScroll = document.body.scrollTop;
            xScroll = document.body.scrollLeft;
        }

        var arrayPageScroll = [xScroll,yScroll];

        return arrayPageScroll;
    },

    getPageSize: function() {

        var xScroll, yScroll;

        if (window.innerHeight && window.scrollMaxY) {
            xScroll = window.innerWidth + window.scrollMaxX;
            yScroll = window.innerHeight + window.scrollMaxY;
        } else if (document.body.scrollHeight > document.body.offsetHeight){
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
        } else {
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
        }

        var windowWidth, windowHeight;

        if (self.innerHeight) {
            if(document.documentElement.clientWidth){
                windowWidth = document.documentElement.clientWidth;
            } else {
                windowWidth = self.innerWidth;
            }
            windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) {
            windowWidth = document.documentElement.clientWidth;
            windowHeight = document.documentElement.clientHeight;
        } else if (document.body) {
            windowWidth = document.body.clientWidth;
            windowHeight = document.body.clientHeight;
        }

        if(yScroll < windowHeight){
            pageHeight = windowHeight;
        } else {
            pageHeight = yScroll;
        }

        if(xScroll < windowWidth){
            pageWidth = xScroll;
        } else {
            pageWidth = windowWidth;
        }

        var arrayPageSize = [pageWidth,pageHeight,windowWidth,windowHeight];

        return arrayPageSize;
    },


    debug: function()
    {
    }

};


