var FS = window.FS || {};
FS.Util = FS.Util || {};

FS.Util.Modal = function() {
    
    var Dom = YAHOO.util.Dom;
    var Event = YAHOO.util.Event;
    
    undefined;
    
    var modalPrefix = 'modalBoxWrapper_';
    var modalHeaderPrefix = 'modalHeader_';
    var modalBodyPrefix = 'modalBody_';
    var modalClosePrefix = 'modalClose_';
    var defaultConfig = {
            fixedcenter: false,
            constraintoviewport: true,
            zIndex: 9999999,
            visible: false
    };
    
    var manager = new YAHOO.widget.OverlayManager();
    
    var getRandId = function() {
        return Math.floor(Math.random() * 101);
    };
    
    var createMarkup = function(containerId, type) {
      
        var div = document.createElement('div');
        var id = modalPrefix + containerId;
        div.id = id;
        
        var buffer = new FS.Util.StringBuffer();
        
        if (type === 'white') {
			buffer.append('<table border="0" cellpadding="0" cellspacing="0">');
	        buffer.append('<tbody>');
	        buffer.append('<tr>');
	        buffer.append('<td class="mdl-shdw-tl"></td>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('<td class="mdl-shdw-tr"></td>');
	        buffer.append('</tr>');
	        buffer.append('<tr>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('<td class="mdl-shdw-bg">');
	        buffer.append('<div class="modal_azure">');
	        buffer.append('<div class="hd">');
	        buffer.append('<div class="tl"></div>');
	        buffer.append('<span id="', modalHeaderPrefix + containerId, '"></span>');
					buffer.append('<span class="closeModal" id="', modalClosePrefix + containerId, '"></span>');
	        buffer.append('<div class="tr"></div>');
	        buffer.append('</div>');
	        buffer.append('<div class="bd" id="', modalBodyPrefix + containerId, '">');
	        buffer.append('</div>');
	        buffer.append('<div class="ft">');
	        buffer.append('<div class="bl"></div>');
	        buffer.append('<div class="br"></div>');
	        buffer.append('</div>');
	        buffer.append('</div>'); 
	        buffer.append('</td>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('</tr>');
	        buffer.append('<tr>');
	        buffer.append('<td class="mdl-shdw-bl"></td>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('<td class="mdl-shdw-br"></td>');
	        buffer.append('</tr>');
	        buffer.append('</tbody>');
	        buffer.append('</table>');		
        }
        else if (type === 'blue') {
	        buffer.append('<table border="0" cellpadding="0" cellspacing="0">');
	        buffer.append('<tbody>');
	        buffer.append('<tr>');
	        buffer.append('<td class="mdl-shdw-tl"></td>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('<td class="mdl-shdw-tr"></td>');
	        buffer.append('</tr>');
	        buffer.append('<tr>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('<td class="mdl-shdw-bg">');
	        buffer.append('<div class="modal_ltblue">');
	        buffer.append('<div class="hd">');
	        buffer.append('<div class="tl"></div>');
	        buffer.append('<span id="', modalHeaderPrefix + containerId, '"></span>');
					buffer.append('<span class="closeModal" id="', modalClosePrefix + containerId, '"></span>');					
	        buffer.append('<div class="tr"></div>');
	        buffer.append('</div>');
	        buffer.append('<div class="bd" id="', modalBodyPrefix + containerId, '">');
	        buffer.append('</div>');
	        buffer.append('<div class="ft">');
	        buffer.append('<div class="bl"></div>');
	        buffer.append('<div class="br"></div>');
	        buffer.append('</div>');
	        buffer.append('</div>'); 
	        buffer.append('</td>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('</tr>');
	        buffer.append('<tr>');
	        buffer.append('<td class="mdl-shdw-bl"></td>');
	        buffer.append('<td class="mdl-shdw-bg"></td>');
	        buffer.append('<td class="mdl-shdw-br"></td>');
	        buffer.append('</tr>');
	        buffer.append('</tbody>');
	        buffer.append('</table>');				
        }
					
        div.innerHTML = buffer.toString();
        buffer.reset();
        
        return div;
        
    };
    
    return {
        getInstance : function(args, overlayArgs) {
            var overlay;
            var id;
            var type;
            
            //check if id is available
            if (args === undefined || args.id === undefined) {
                id = getRandId();

                while (manager.find(modalPrefix + id) !== null) {
                    id = getRandId();
                }
            } else {
                if (manager.find(modalPrefix + args.id) !== null) {
                    throw ("An existing Container already exist with the given ID: " + args.id);
                } else {
                    id = args.id;
                }
            }
            
            //get type of modal box we are creating, if not specified set to white
            if (args !== undefined &&  args.type !== undefined) {
                type = args.type;
            }
            else {
                type = 'white';
            }
                
            if (overlayArgs !== undefined) {
                for (var arg in overlayArgs) {
                    if (YAHOO.lang.hasOwnProperty(overlayArgs, arg)) {
                        defaultConfig[arg] = overlayArgs[arg];
                    }
                }
            }
            
            //create markup first and append to body or specific container
            var divContainer = createMarkup(id, type);
            
            if (typeof args !== 'undefined' && typeof args.container !== 'undefined') {
                var container = Dom.get(args.container);
                container.appendChild(divContainer);
            	overlay = new YAHOO.widget.Overlay(modalPrefix + id, defaultConfig);
                overlay.render(container);
            }
            else {
                document.body.appendChild(divContainer);
            	overlay = new YAHOO.widget.Overlay(modalPrefix + id, defaultConfig);
                overlay.render(document.body);
            }
						
			//add event for hiding modal boxes
			Event.on(modalClosePrefix + id, 'click', function() {
				overlay.hide();																								
			});

            manager.register(overlay);

            return overlay;
        },
        setHeader: function(container, header) {
            var id = container.id.replace(modalPrefix, '');
            Dom.get(modalHeaderPrefix + id).innerHTML = header;
        },
        setBody: function(container, body) {
            var id = container.id.replace(modalPrefix, '');
            Dom.get(modalBodyPrefix + id).innerHTML = body;
        },
        getManager : function() {
            return manager;
        },
        get: function(id) {
            return manager.find(id);
        }
    };
}();
