
var Modal = {

    modalId: "modalContainer",
    blackoutId: "blackOut",
    preloadId: "modalPreLoad",
    modalContentId: "modal_content",

    defaultLabel: "Loading...",
    defaultSaveLabel: "Saving...",

    lastModal: null,
    lastModalData: null,

    postEvalJS: false,
    refreshOnClose: false,

    modalPlacement: "center",
    modalPlacementTopOffset: 20,

    waitImgUrl: "/images/gen/wait.gif",
    waitImg: null,

    /*
     * these functions are the ones to be used publicly.
     */

    open: function (path,label)
    {
        if (label) { }else {label = Modal.defaultLabel}
        Modal.show(label);
        Modal.submitRequest(path);
        /*
        new Ajax.Updater(Modal.preloadId, path, {
            'onSuccess': Modal.finishRequest,
            'onFailure': Modal.finishRequest
        //    'on403': _permissionDenied,
        //    'on401': _displayFlagRefresh
        })
        ;*/
    },

    // purpose of second modal is that when the system tries to
    // close the modal, rather than closing it will try to restore
    // this current modal environment.
    openSecond: function (path,label)
    {
	Modal.storeCurrentModalData();
	Modal.open(path,label);
    },

    submitForm: function (elm,label)
    {
        if (label) { } else {label = Modal.defaultSaveLabel}

        var form = $$('#'+ Modal.modalId +' form');
        
	var values = $(elm).serialize();
	var action = form[0].action;

	Modal.show(label);
        Modal.submitRequest(action,values,'post');
        /*
	new Ajax.Updater(Modal.preloadId, action, {
            method: 'post',
            postBody: values,
            'onSuccess': Modal.finishRequest,
            'onFailure': Modal.finishRequest
            //'on403': _permissionDenied,
            //'on401': _displayFlagRefresh
            }
        );*/
    },

    submitRequest: function (action,requestValues,requestMethod)
    {
        new Ajax.Updater(Modal.preloadId, action, {
            method: (requestMethod ? requestMethod : 'get'),
            postBody: requestValues,
            'onSuccess': function (transport) {
                    Modal.finishRequest(transport)
                },
            'onFailure': function (transport) {
                    Modal.finishRequest(transport)
                }
            //'on403': _permissionDenied,
            //'on401': _displayFlagRefresh
            }
        );
    },

    close: function ()
    {
        if (Modal.lastModal != null) {
            Modal.reloadLastModal();
        } else if (Modal.refreshOnClose)  {
            Modal.closeRefresh();
        } else {
            Modal.closeEmpty();
            Modal.closeCleanup();
        }
    },


    /*
     * these functions are more internal.
     */

    show: function (label)
    {
	Modal.setup();
        Modal.showPreLoad();
        Modal.updateWaiting(label);
	Modal.resizeBlackout();
        Modal.reposModal();
        Modal.showBlackout();
        Modal.showModal();
	Modal.hideSelects();
    },

    updateWaiting: function (label)
    {
	$(Modal.modalContentId).update("<div align=center class='waitModal'><b> <img src='"+ Modal.waitImg.src +"' align=absmiddle hspace=10 width=30 height=30> "+ label +"</b></div>");
    },

    showPreLoad: function ()
    {
	$(Modal.preloadId).setStyle({'display':'block','visibility':'hidden'});
    },

    resizeBlackout: function ()
    {
        Placer.resizeToBody(Modal.blackoutId);
    },

    reposModal: function ()
    {
        if (Modal.modalPlacement == 'top') {
            var offset = Modal.modalPlacementTopOffset;
            Placer.anchorToTop(Modal.modalId, offset);
        } else {
            Placer.centerToWindow(Modal.modalId);
        }
        Modal.resizeBlackout();
        /* retest blackout?
         * 	outerHeight = $('OuterContainer').getHeight();
	offset		= $('OuterContainer').positionedOffset();
	totalModalVert = (outerHeight + offset[1]);
	if (totalModalVert >= $('blackOut').getHeight()) {
		$('blackOut').setStyle({height: (totalModalVert + 5) + 'px'});
	}

         */
    },

    showBlackout: function ()
    {
	$(Modal.blackoutId).show();
    },

    showModal: function ()
    {
	$(Modal.modalId).show();
    },

    setup: function ()
    {
        Modal.setupPreloader();
        Modal.setupBlackout();
        Modal.setupModal();
    },

    setupPreloader: function ()
    {
	var bodyTag = $$('body');
	var bodyElm = bodyTag[0];
	if ($(Modal.preloadId)) {
            // already setup
	} else {
            // create
            preLdr = new Element('div',{'id':Modal.preloadId,'style':"display:none;visibility:hidden;position:absolute;top:0px;left:0px;"});
            bodyElm.appendChild(preLdr);
	}
    },

    setupBlackout: function ()
    {
	var bodyTag = $$('body');
	var bodyElm = bodyTag[0];
	if ($(Modal.blackoutId)) {
            // already setup
	} else {
            // create
            var blkOut = new Element('div',{'id':Modal.blackoutId,'style':"display:none;height:100%;width:100%"});
            bodyElm.appendChild(blkOut);
            $(Modal.blackoutId).observe('click',function (event) {
                    Modal.close();
            });
	}
    },

    setupModal: function ()
    {
	var bodyTag = $$('body');
	var bodyElm = bodyTag[0];
	if ($(Modal.modalId)) {
            // already setup
	} else {
            // create
            var outrCntnr = new Element('div',{'id':Modal.modalId,'style':'display:none','class':'ModalOuterContainer'});
            outrCntnr.update('<div class="InnerContainer"><div class="modal_top"></div><div class="modal_middle"><div id="'+ Modal.modalContentId +'"></div></div><div class="modal_bottom"></div><div class="modal_close"></div></div>');
            bodyElm.appendChild(outrCntnr);
            var closeMod = $$('#'+ Modal.modalId +' .modal_close');
            $(closeMod[0]).observe('click',function (event) {
                Modal.close();
            });
	}
    },

    closeRefresh: function ()
    {
        if (Modal.lastModal == null) {
            ref = self.location.href;
           // if (ref.indexOf('_trigger') > 0) {
           //         ref = ref.substring(0,ref.indexOf('?'));
           //         self.location.href = ref;
           // } else {
                self.location.reload();
           // }
	}
        // this should never happen, but just in case.
	// Modal.refreshOnClose = false;
	Modal.close();
    },

    closeEmpty: function ()
    {
        $(Modal.preloadId).hide();
        $(Modal.preloadId).update('');
        $(Modal.blackoutId).hide();
        $(Modal.modalId).hide();
        $(Modal.modalContentId).update('');
    },

    closeCleanup: function ()
    {
        Modal.postEvalJS = false;
        Modal.showSelects();
    },

    showSelects: function ()
    {

    },

    hideSelects: function ()
    {

    },

    storeCurrentModalData: function ()
    {
        var form = $$('#'+ Modal.modalId +' form');
	if (form[0].action)  {
            Modal.lastModal = form[0].action;
            Modal.lastModalData = $(form[0]).serialize();
	}
    },

// needs cleaning
    reloadLastModal: function ()
    {
        var values = Modal.lastModalData;
	var form = Modal.lastModal +'load/only/';
	Modal.lastModalData = null;
	Modal.lastModal = null;
	Modal.show('Reloading..');
        Modal.submitRequest(form,values,'post');
        /*
	new Ajax.Updater('modalPreLoad', form, {
			method: 'post',
			postBody: values,
			'onSuccess': Modal.finishRequest,
			'onFailure': Modal.finishRequest
//			'onComplete': _finishedRequest,
			//'on403': _permissionDenied,
			//'on401': _displayFlagRefresh
			}
		);
         */
    },


    /*
     *REQUEST HANDLERS
     */

     finishRequest: function (transport)
     {
        if (transport.getResponseHeader('evalJS')) {
            Modal.postEvalJS = transport.getResponseHeader('evalJS');
        } else {
            Modal.postEvalJS = false;
        }
//        Modal.showResults();
	setTimeout('Modal.showResults()',1000);
     },

    finishFlagRefreshOnClose: function (transport)
    {
	Modal.refreshOnClose = true;
	Modal.finishedRequest(transport);
    },

    showResults: function ()
    {
        if ($(Modal.preloadId).innerHTML != '') {
            // here is where you could review the preLoaded content
            // and perform transitions based on its size.
            $(Modal.modalContentId).update($(Modal.preloadId).innerHTML);
            $(Modal.preloadId).update('');
        }
        if (Modal.postEvalJS) {
            eval(Modal.postEvalJS);
            Modal.postEvalJS = false;
        }
        Modal.resizeBlackout();
        Modal.reposModal();
    }

}

Modal.waitImg = new Image();
Modal.waitImg.src = Modal.waitImgUrl;





// calendar variable
// defines the container the yui calendar will anchor to when positioning
var calendarAnchor = 'modal_content';

// defines and preloads the waiting animated gif. quicker reference and display.
// var waitImage = newImage('/media/inteleapp/1.5/images/waitanimation.gif');


/*
function  _evalJsCrawl(elm)
{
	top.alert(elm.nodeName);
	if (elm.nodeName == 'SCRIPT') {
		top.alert(elm.nodeName);
	} else {
		if ((nelm = elm.down(0))) {
			_evalJsCrawl(nelm);
		}
	}
	if ((nelm = elm.next(0))) {
		_evalJsCrawl(nelm);
	}
}*/


/*

var imageProcessing = false;

function modalUploadForm(frmName)
{

	forceRefresh = true;

	iframe = new Element('iframe',{'id':'uploadFrame','style':'visibility:hidden;position:absolute;top:0px;left:0px;','name':'uploadFrame'});

	var bodyTag = $$('body');
	var bodyElm = bodyTag[0];
	bodyElm.appendChild(iframe);

	$('uploadFrame').observe('load',function () {
		imageProcessing = false;
		content = $('uploadFrame').contentWindow.document.body.innerHTML;
		// top.alert('content :'+ content);
		if (content != '') {
			$('modalPreLoad').update(content);
			setTimeout('_displayFromPreLoadResult()',1000);
			setTimeout('_unloadIframe()',1000);
		}
	});

	$(frmName).writeAttribute('target',"uploadFrame");
	// $(frmName).writeAttribute('onSubmit');
	$(frmName).writeAttribute('enctype',"multipart/form-data");
	// top.alert('ready to submit '+ $(frmName).nodeName);
	// var form = $$('#modal_content form');
	// self.document.forms['edit_image'].submit();
	setTimeout('_showModal("Uploading")',10);
	//_showModal("Uploading");
	return true;
}

function _unloadIframe ()
{
	// $('uploadFrame').contentWindow.stop();
	$('uploadFrame').remove();
}


function modalSubmitConfirm (formName,message)
{
	popUpConfirm(message,'modalSubmitForm',formName);
}

*/




var Placer = {

    resizeToBody: function (elm)
    {
        var bodyTag = $$('body');
        var bodyElm = bodyTag[0];
        var viewport = document.viewport.getDimensions();
        if(viewport.height > bodyElm.getHeight()) {
            $(elm).setStyle({width: viewport.width + 'px',height: (viewport.height) + 'px'});
        } else {
            $(elm).setStyle({width: viewport.width + 'px',height: bodyElm.getHeight() + 'px'});
        }
    },

    centerToWindow: function (elm)
    {
        // page_pos = getPagePosition();
        var bodyTag = $$('body');
        var bodyElm = bodyTag[0];
        var offset = bodyElm.cumulativeScrollOffset();
        var viewport = document.viewport.getDimensions();
        elmHeight = $(elm).getHeight();
        elmWidth = $(elm).getWidth();
        heightDiff = viewport.height - elmHeight;
        var top = offset.top + 20;
        if (heightDiff > 0) {
            top = (offset.top + (heightDiff/2));
        }
        $(elm).setStyle({top: top + 'px', left: ((viewport.width / 2) - (elmWidth / 2) ) + 'px'});
    },

    centerToElment: function (elm,anchor)
    {
        contentW  = $(anchor).getWidth();
        contentH  = $(anchor).getHeight();

        msgW  = $(elm).getWidth();
        msgH  = $(elm).getHeight();

        $(elm).style.left = Math.round((contentW - msgW)/2) +'px';
        $(elm).style.top = (Math.round((contentH - msgH)/2))  +'px';
    },

    anchorToTop: function (elm,offsetTop)
    {
	// page_pos = getPagePosition();
	var bodyTag = $$('body');
	var bodyElm = bodyTag[0];
	//var offset = bodyElm.cumulativeScrollOffset();

	var doffset = document.viewport.getScrollOffsets();
	// alert(doffset[0]+':'+doffset[1]);

	var viewport = document.viewport.getDimensions();
	elmHeight = $(elm).getHeight();
	elmWidth = $(elm).getWidth();
	heightDiff = viewport.height - elmHeight;
	var top = doffset[1] + offsetTop;
//	var top = offset.top + 20 ;
//	if (heightDiff > 0)  {
//		top = (offset.top + (heightDiff/2));
//	}
	$(elm).setStyle({top: top + 'px', left: ((viewport.width / 2) - (elmWidth / 2) ) + 'px'});
    },

    getFullWindowSize: function ()
    {
        var bodyTag = $$('body');
        var bodyElm = bodyTag[0];
        var viewport = document.viewport.getDimensions();
        var width = (viewport.width);
        var height = (viewport.height);
        if(height < bodyElm.getHeight()) {
            height = bodyElm.getHeight();
        }
        if (width < bodyElm.getWidth()) {
            width = bodyElm.getWidth();
        }
        var spec = $('spec').cumulativeOffset()
        if(height < spec[1]) {
            height = spec[1] + 1;
        }
        if (width < spec[0]) {
            width = spec[0] + 1;
        }

        return [width,height];
    }


}
