Memberfuse.WndManager = {
    windows: new Hash(),
	beforeHideFunction: false,
    attachWnds: function(parent){
        //Memberfuse.WndManager.attachCtrls('CtrlMdl',Memberfuse.WndManager.attachCtrlMdl,parent);
        //Memberfuse.WndManager.attachCtrls('CtrlMdlPln',Memberfuse.WndManager.attachCtrlMdlPln,parent);
        //Memberfuse.WndManager.attachCtrls('CtrlMdlCstm',Memberfuse.WndManager.attachCtrlMdlCstm,parent);
        //Memberfuse.WndManager.attachCtrls('CtrlCnfrm',Memberfuse.WndManager.attachCtrlCnfrm,parent);
        Memberfuse.WndManager.attachCtrls('CtrlWnd',Memberfuse.WndManager.attachCtrlWnd,parent);
        //Memberfuse.WndManager.attachCtrls('CtrlTip',Memberfuse.WndManager.attachCtrlTip,parent);
        //Memberfuse.WndManager.attachCtrls('CtrlHvr',Memberfuse.WndManager.attachCtrlHvr,parent);
        //Memberfuse.WndManager.attachCtrls('CtrlDrg',Memberfuse.WndManager.attachCtrlDrg,parent);
    },
    attachCtrlDrg: function(e){
    	var modal_top = new Element('div',{  
            className: 'top'  
        }); 
        var closeLnk = new Element('a');
        closeLnk.onclick = function(){
            Memberfuse.WndManager.closeWindow(this);
        };
        closeLnk.insert('Close');
        modal_top.insert(closeLnk);
        if(e.title){
             var title = new Element('h1');
             title.insert(e.title);
             modal_top.insert(title);
        }
        var modal_middle = new Element('div',{  
            className: 'middle'  
        }); 
        var modal_bottom = new Element('div',{  
            className: 'bottom'  
        }); 
        
        //start with the default options
        var options = {
            className: 'modalbox',
            closeOnClick: false,
            insertRemoteContentAt: modal_middle,
            fade: false,
            fadeDuration: 0.15,
            reloadContent: true,
            draggable: modal_top,
            overlayOpacity: .01
        };
        
        //if extended options were specified in the rel
        //attribute use those
        Memberfuse.WndManager.extendOptions(options,e,'CtrlMdl');
        
        //reset or force the options we must have to operate
        //so the rel tag doesn't override them
        options.className += ' ctrlCntr ctrlDrg';
        options.afterInitialize = Memberfuse.WndManager.indexWnd;
        options.onRemoteContentLoaded = Memberfuse.WndManager.initWndContent;
        
        var ctrl = new Control.Modal(
            $(e),
            options
        );
        ctrl.container.insert(modal_top);
        ctrl.container.insert(modal_middle);
        ctrl.container.insert(modal_bottom);
    },
    attachCtrls: function(className,attachFunc,parent){
        if(parent){
            if(Object.isElement(parent)){
                $A($(parent).getElementsByClassName(className)).each(function(e){
                    attachFunc(e);
                });
            }
        }
        else{
            $$('.' + className).each(function(e){
                attachFunc(e);
            });
        }
    },
    attachCtrlWnd: function(e){
        var options = {
            className: 'window',
            draggable: true,
            closeOnClick: false
        };
        Memberfuse.WndManager.extendOptions(options,e,'CtrlWnd');
        options.className += ' ctrlCntr';
        options.afterInitialize = Memberfuse.WndManager.indexWnd;
        options.onRemoteContentLoaded = Memberfuse.WndManager.initWndContent;
	    var ctrl = new Control.Window(
	        $(e),
	        options
	    );
    },
    attachCtrlMdl: function(e){
        var modal_top = new Element('div',{  
            className: 'top'  
        }); 
        var closeLnk = new Element('a');
        closeLnk.onclick = function(){
            Memberfuse.WndManager.closeWindow(this);
        };
        closeLnk.insert('Close');
        modal_top.insert(closeLnk);
        if(e.title){
             var title = new Element('h1');
             title.insert(e.title);
             modal_top.insert(title);
        }
        var modal_middle = new Element('div',{  
            className: 'middle'  
        }); 
        var modal_bottom = new Element('div',{  
            className: 'bottom'  
        }); 
        
        //start with the default options
        var options = {
            className: 'modalbox',
            closeOnClick: 'overlay',
            insertRemoteContentAt: modal_middle,
            fade: true,
            fadeDuration: 0.15,
            reloadContent: true
        };
        
        //if extended options were specified in the rel
        //attribute use those
        Memberfuse.WndManager.extendOptions(options,e,'CtrlMdl');
        
        //reset or force the options we must have to operate
        //so the rel tag doesn't override them
        options.className += ' ctrlCntr';
        options.afterInitialize = Memberfuse.WndManager.indexWnd;
        options.onRemoteContentLoaded = Memberfuse.WndManager.initWndContent;
        
        var ctrl = new Control.Modal(
            $(e),
            options
        );
        ctrl.container.insert(modal_top);
        ctrl.container.insert(modal_middle);
        ctrl.container.insert(modal_bottom);
    },
    attachCtrlMdlPln: function(e){
        //start with the default options
        var options = {
            className: 'modalbox',
            closeOnClick: 'overlay',
            //insertRemoteContentAt: modal_middle,
            fade: true,
            fadeDuration: 0.15,
            reloadContent: true
        };
        
        //if extended options were specified in the rel
        //attribute use those
        Memberfuse.WndManager.extendOptions(options,e,'CtrlMdlPln');
        
        //reset or force the options we must have to operate
        //so the rel tag doesn't override them
        options.className += ' ctrlCntr';
        options.afterInitialize = Memberfuse.WndManager.indexWnd;
        options.onRemoteContentLoaded = Memberfuse.WndManager.initWndContent;
        
        var ctrl = new Control.Modal(
            $(e),
            options
        );
    },
    attachCtrlMdlCstm: function(e){
        //start with the default options
        var options = {
            className: 'modalbox modal_custom',
            closeOnClick: 'overlay',
            //insertRemoteContentAt: modal_middle,
            fade: true,
            fadeDuration: 0.15,
            reloadContent: true
        };
        
        //if extended options were specified in the rel
        //attribute use those
        Memberfuse.WndManager.extendOptions(options,e,'CtrlMdlCstm');
        
        //reset or force the options we must have to operate
        //so the rel tag doesn't override them
        options.className += ' ctrlCntr';
        options.afterInitialize = Memberfuse.WndManager.indexWnd;
        options.onRemoteContentLoaded = Memberfuse.WndManager.initWndContent;
        
        var ctrl = new Control.Modal(
            $(e),
            options
        );
    },
    attachCtrlCnfrm: function(e){
        var modal_top = new Element('div',{  
            className: 'top'  
        }); 
        var title = new Element('h2');
        if(e.title)
        {
             title.insert(e.title);
        }
        else
        {
        	title.insert("Confirm?");
        }
        modal_top.insert(title);
        var modal_middle = new Element('div',{  
            className: 'middle'  
        }); 
        var modal_bottom = new Element('div',{  
            className: 'bottom'  
        }); 
        
        //start with the default options
        var options = {
            className: 'confirmbox',
            closeOnClick: 'overlay',
            insertRemoteContentAt: modal_middle,
            fade: true,
            fadeDuration: 0.15,
            position: 'relative',
            offsetLeft: -240,
            offsetTop: 10,
            overlayOpacity: 0
            //constrainToViewport: true
        };
        
        //if extended options were specified in the rel
        //attribute use those
        Memberfuse.WndManager.extendOptions(options,e,'CtrlCnfrm');
        
        options.className = options.className.gsub('modalbox', ' ');
        
        //reset or force the options we must have to operate
        //so the rel tag doesn't override them
        options.className += ' ctrlCntr';
        options.afterInitialize = Memberfuse.WndManager.indexWnd;
        options.onRemoteContentLoaded = Memberfuse.WndManager.initWndContent;
        
        var ctrl = new Control.Window(
            $(e),
            options
        );
        ctrl.container.insert(modal_top);
        ctrl.container.insert(modal_middle);
        ctrl.container.insert(modal_bottom);
    },
    attachCtrlTip: function(e){
        var options = {
            className: 'tooltip',
            beforeOpen: function(){Memberfuse.clearAllTooltips(); Memberfuse.clearAllParentTitles(this.attachedElement);},
            afterOpen: function(){this.attachedElement.title="";},
            offsetLeft: 25,
            position: 'relative'
        };
        Memberfuse.WndManager.extendOptions(options,e,'CtrlTip');
        options.className += ' ctrlCntr';
        if(e.title){
	        var ctrl = new Control.ToolTip(
	            $(e),
	            e.title,
	            options
	        );
	        ctrl.attachedElement = e;
	   }
    },
    attachCtrlHvr: function(e){
        var options = {
            className: 'hoverbox',
            offsetLeft: 10,
            offsetTop: 10,
            position: 'mouse',
            hover: true
        };
        Memberfuse.WndManager.extendOptions(options,e,'CtrlHvr');
        options.className += ' ctrlCntr';
	    var ctrl = new Control.Window(
	        $(e),
	        options
	    );
    },
    extendOptions: function(options,element,type){
    	
        if(element.rel){
        
            var extendedOpts = eval('(' + element.rel + ').' + type);
            if(extendedOpts){
                Object.extend(options,extendedOpts);
            }
        }
    },
    indexWnd: function(){
        Memberfuse.WndManager.windows.set(this.container.id,this);
		if(!Memberfuse.WndManager.beforeHideFunction) {
			Memberfuse.WndManager.beforeHideFunction = true;
			
			Control.Overlay.observe('beforeHide', function (e) {
				var testOpen = Memberfuse.WndManager.openWindows();
				if(testOpen) {
					throw $break;
				}
			});
		}
    },
    initWndContent: function(){
        Memberfuse.init(this.container);
    },
    closeWindow: function closeWindow(e){
	    var cntr = $(e).up('.ctrlCntr');
	    if(cntr){
	        var w = Memberfuse.WndManager.windows.get(cntr.id);
	        if(w instanceof Control.Modal){
	           w.close();
	        }
	        else if(w instanceof Control.Window){
	           w.close();
	        }
	    }
	    
	},
	openWindows: function() {
		var ws = Memberfuse.WndManager.windows;
		
		var open = false;
		ws.each(function(pair) {
			if(pair.value.isOpen) {
				open = true;
			}
		});
		
		return open;
	}
};




