﻿// JScript File

/*
    Handles the raiseMessage Functionality or the MessageArea
*/


function raiseMessage(messageType, message, focusClientId, proceedFunction, cancelFunction, proceedText, cancelText, clrFormDisableOnProceed)
{
    messageArea.raiseMessage(messageType, message, focusClientId, proceedFunction, cancelFunction, proceedText, cancelText, clrFormDisableOnProceed);
    return;
}


var messageArea = {
    mInit: false,
    mControl: null,
    txtMsg: null,
    btnProceed: null,
    btnCancel: null,
    btnClose: null,
    messageDisplayed: false,
    messageRaised: false,
    cancelFunction: '',
    proceedFunction: '',
    Messages: [],
    useFadeEffect: false,
    btnProceedName: 'Proceed',
    btnCancelName: 'Cancel',
    focusControl: null,
    messageType: '',
    lastResponse: false,
    clearFormDisableOnProceed: true,
    MessageIndex: 0,
    CurrentMessage: null,
    defaultProceedText: 'Proceed',
    defaultCancelText: 'Cancel',

    Init: function(defaultProceedText, defaultCancelText)
    {
        messageArea.defaultProceedText = defaultProceedText;
        messageArea.defaultCancelText = defaultCancelText;
    },

    init: function()
    {
        var s;
        var ul;
        var li;

        if (messageArea.mControl == null)
        {
            messageArea.mControl = $CE('div', { id: 'ctl00_MessageArea', className: 'MessageArea', tabindex: 0 }, { display: 'none' });
            //messageArea.mControl.onkeypress = "return fireDefaultButton(event, 'ctl00_MessageArea_btnProceed', 'ctl00_MessageArea_btnCancel');";
            document.forms['aspnetForm'].appendChild(messageArea.mControl);

            Event.observe(messageArea.mControl, 'keypress', messageArea.fireDefaultButtonDelegate, false);

            messageArea.btnClose = $CE('a', { id: 'ctl00_MessageArea_closeMsg', className: 'Close', href: "javascript:messageArea.close();", accessKey: 'X', tabindex: 3 }, { display: 'none' });
            s = $CE('span');
            s.innerHTML = 'X';
            messageArea.btnClose.appendChild(s);
            messageArea.mControl.appendChild(messageArea.btnClose);


            messageArea.txtMsg = $CE('div', { id: 'ctl00_MessageArea_txtMsg', className: 'MessageAreaText' });
            messageArea.mControl.appendChild(messageArea.txtMsg);

            ul = $CE('ul', { id: 'ctl00_MessageArea_messagearea_list', className: 'messagearea_list' });

            li = $CE('li', { className: 'first' });
            messageArea.btnProceed = $CE('a', { id: 'ctl00_MessageArea_btnProceed', name: "ctl00$MessageArea$btnProceed", className: 'hoverbutton_messagearea', href: "javascript:messageArea.proceed();", accesskey: 'P', tabindex: 1 }, { display: 'none' });
            s = $CE('span');

            s.innerHTML = messageArea.defaultProceedText;
            messageArea.btnProceed.appendChild(s);
            li.appendChild(messageArea.btnProceed);
            ul.appendChild(li);

            li = $CE('li', { className: 'last' });
            messageArea.btnCancel = $CE('a', { id: 'ctl00_MessageArea_btnCancel', name: "ctl00$MessageArea$btnCancel", className: 'hoverbutton_messagearea', href: "javascript:messageArea.cancel();", accesskey: 'C', tabindex: 2 }, { display: 'none' });
            s = $CE('span');
            s.innerHTML = messageArea.defaultCancelText;
            messageArea.btnCancel.appendChild(s);
            li.appendChild(messageArea.btnCancel);
            ul.appendChild(li);

            messageArea.mControl.appendChild(ul);
            //addEvent(messageArea.btnCancel, 'keypress', messageArea.fireDefaultButtonDelegate, false);
            //addEvent(messageArea.btnProceed, 'keypress', messageArea.fireDefaultButtonDelegate, false);
            //addEvent(messageArea.btnClose, 'keypress', messageArea.fireDefaultButtonDelegate, false);

        }
    },

    fireDefaultButtonDelegate: function()
    {
        fireDefaultButton(arguments[0], 'ctl00_MessageArea_btnProceed', 'ctl00_MessageArea_btnCancel');
    },

    raiseMessage: function(messageType, message, focusClientId, proceedFunction, cancelFunction, proceedText, cancelText, clrFormDisableOnProceed)
    {
        messageArea.init();

        //If we are already displaying a message then do not allow another message.
        if (messageArea.messageRaised)
        {
            return false;
        }

        messageArea.clearFormDisableOnProceed = true;

        if (isNullOrUndefined(proceedText))
        {
            proceedText = messageArea.defaultProceedText;
        }
        if (isNullOrUndefined(cancelText))
        {
            cancelText = messageArea.defaultCancelText;
        }
        if (!isNullOrUndefined(clrFormDisableOnProceed))
        {
            messageArea.clearFormDisableOnProceed = clrFormDisableOnProceed;
        }

        if (typeof (messageType) == 'undefined')
        {
            if (messageArea.Messages.Count() == 0)
            {
                return false;
            }

            messageArea.CurrentMessage = messageArea.Messages.shift();

            messageType = messageArea.CurrentMessage.MessageType;
            message = messageArea.CurrentMessage.Message;
            focusClientId = messageArea.CurrentMessage.FocusClientId;
            proceedFunction = messageArea.CurrentMessage.ProceedFunction;
            cancelFunction = messageArea.CurrentMessage.CancelFunction;
            proceedText = messageArea.CurrentMessage.proceedText;
            cancelText = messageArea.CurrentMessage.cancelText;
            clrFormDisableOnProceed = messageArea.CurrentMessage.clrFormDisableOnProceed;
        }
        else
        {
            messageArea.CurrentMessage = new MessageItem(messageType, message, focusClientId, proceedFunction, cancelFunction, proceedText, cancelText, clrFormDisableOnProceed);
        }

        if (typeof (proceedFunction) == 'undefined')
        {
            proceedFunction = '';
        }

        if (typeof (cancelFunction) == 'undefined')
        {
            cancelFunction = '';
        }

        if (typeof (focusClientId) == 'undefined')
        {
            messageArea.focusControl = null;
        }
        else
        {
            messageArea.focusControl = document.getElementById(focusClientId);
            //--addToClassName(messageArea.focusControl, 'hightlight_control');
        }

        messageArea.btnProceed.getElementsByTagName('span')[0].innerHTML = proceedText;
        messageArea.btnCancel.getElementsByTagName('span')[0].innerHTML = cancelText;

        messageArea.btnClose.style.display = '';

        messageArea.messageType = messageType;

        switch (messageType.toLowerCase())
        {
            case 'warning':
                messageArea.btnProceed.style.display = '';
                messageArea.btnCancel.style.display = 'none';

                setButtonState(messageArea.btnProceed.id, null, true);
                setButtonState(messageArea.btnCancel.id, null, false);

                messageArea.mControl.className = 'MessageArea MessageAreaWarning';
                break;

            case 'validation':
                cancelFunction = 'messageArea.validateCancel()';
                messageArea.btnProceed.style.display = 'none';
                messageArea.btnCancel.style.display = '';

                setButtonState(messageArea.btnProceed.id, null, false);
                setButtonState(messageArea.btnCancel.id, null, true);

                messageArea.mControl.className = 'MessageArea MessageAreaValidation';
                break;

            case 'stoperror':
                messageArea.btnProceed.style.display = 'none';
                messageArea.btnCancel.style.display = '';

                setButtonState(messageArea.btnProceed.id, null, false);
                setButtonState(messageArea.btnCancel.id, null, true);

                messageArea.mControl.className = 'MessageArea MessageAreaStopError';
                break;

            case 'question':
                messageArea.btnProceed.style.display = '';
                messageArea.btnCancel.style.display = '';

                setButtonState(messageArea.btnProceed.id, null, true);
                setButtonState(messageArea.btnCancel.id, null, true);

                //messageArea.style.border = 'double 4px rgb(250,200,0)';
                messageArea.mControl.className = 'MessageArea MessageAreaQuestion';
                break;

            default:
                //case 'info':
                messageArea.btnProceed.style.display = '';
                messageArea.btnCancel.style.display = 'none';

                setButtonState(messageArea.btnProceed.id, null, true);
                setButtonState(messageArea.btnCancel.id, null, false);

                messageArea.mControl.className = 'MessageArea MessageAreaInfo';
                break;
        }

        //Display the text
        messageArea.txtMsg.innerHTML = message;

        //TODO: HARD CODED THE MESSAGEBOX WIDTH HERE (400) - COULDNT FIND THE WIDTH PROGRAMMATICALLY (EASILY)
        messageArea.mControl.style.marginLeft = '-' + parseInt(400 / 2) + 'px';


        //Set the functions to call on button click.
        messageArea.proceedFunction = proceedFunction;
        messageArea.cancelFunction = cancelFunction;

        //Set the control id to recieve focus after the event.
        messageArea.focusClientId = focusClientId;

        if (typeof (formDisable) == 'function')
        {
            formDisable(true);
        }

        //Display the message area
        if ((messageArea.useFadeEffect == false) || (typeof (Effect) == 'undefined'))
        {
            messageArea.mControl.style.display = 'block';
            messageArea.Focus();
        }
        else if (messageArea.messageDisplayed != true)
        {
            new Effect.Appear(messageArea.mControl, { duration: .5, queue: 'end', afterFinish: function() { messageArea.Focus(); } });
            //setTimeout('messageArea.Focus()', 505);
        }
        messageArea.messageDisplayed = true;

        //_centreDialog(messageArea.mControl);

        window.scrollTo(0, 0);

        return;

    },

    proceed: function(e)
    {
        var retval = false;

        if ((messageArea.useFadeEffect == false) || (typeof (Effect) == 'undefined'))
        {
            messageArea.mControl.style.display = 'none';
        }
        else
        {
            new Effect.Fade(messageArea.mControl, { duration: .2, queue: 'end' });
        }
        messageArea.messageDisplayed = false;

        if (messageArea.proceedFunction != '')
        {
            if ((typeof (formDisable) == 'function') && (messageArea.clearFormDisableOnProceed))
            {
                formDisable(false);
            }
            retval = eval(messageArea.proceedFunction);
        }
        else
        {
            if ((typeof (formDisable) == 'function') && (messageArea.clearFormDisableOnProceed))
            {
                formDisable(false);
            }
            retval = true;
        }

        messageArea.messageRaised = false;
        messageArea.lastResponse = retval;
        messageArea.btnCancel.style.display = 'none';
        messageArea.btnProceed.style.display = 'none';
        messageArea.btnClose.style.display = 'none';


        return;
    },

    cancel: function(e)
    {
        var retval = false;
        if ((messageArea.useFadeEffect == false) || (typeof (Effect) == 'undefined'))
        {
            messageArea.mControl.style.display = 'none';
        }
        else
        {
            new Effect.Fade(messageArea.mControl, { duration: .2, queue: 'end' });
        }
        messageArea.messageDisplayed = false;

        if (messageArea.cancelFunction != '')
        {
            formDisable(false);
            retval = eval(messageArea.cancelFunction);
        }
        else
        {
            formDisable(false);
            retval = false;
        }

        messageArea.messageRaised = false;
        messageArea.lastResponse = retval;


        messageArea.btnCancel.style.display = 'none';
        messageArea.btnProceed.style.display = 'none';
        messageArea.btnClose.style.display = 'none';

        try
        {
            if (messageArea.focusControl != null)
            {
                messageArea.focusControl.focus();
            }
        }
        catch (ex)
        { }
        return;
    },

    close: function(e)
    {
        var retval = false;
        if ((messageArea.useFadeEffect == false) || (typeof (Effect) == 'undefined'))
        {
            messageArea.mControl.style.display = 'none';
        }
        else
        {
            new Effect.Fade(messageArea.mControl, { duration: .2, queue: 'end' });
        }
        messageArea.messageDisplayed = false;

        messageArea.btnCancel.style.display = 'none';
        messageArea.btnProceed.style.display = 'none';
        messageArea.btnClose.style.display = 'none';

        messageArea.messageRaised = false;
        messageArea.lastResponse = retval;
        formDisable(false);

        try
        {
            if (messageArea.focusControl != null)
            {
                messageArea.focusControl.focus();
            }
        }
        catch (ex)
        { }
        return;
    },

    validateCancel: function(e)
    {
        return false;
    },

    nextMessage: function(e)
    {
        if (MessageArea.Messages.Count > 0)
        {
            raiseMessage();
        }
    },


    Focus: function()
    {
        try
        {

            messageArea.mControl.focus();
            
            if (messageArea.btnProceed.style.display != 'none')
            {
                messageArea.btnProceed.focus();
            }
            else if (messageArea.btnCancel.style.display != 'none')
            {
                messageArea.btnCancel.focus();
            }
            else
            {
                messageArea.btnClose.focus();    
            }
        }
        catch (e) { }
    },



    GetType: function() { return 'MessageArea'; }
};


function MessageItem(messageType, message, focusClientId, proceedFunction, cancelFunction, proceedText, cancelText, clrFormDisableOnProceed)
{
	this.MessageType = messageType;
	this.Message = message;
	this.FocusClientId = focusClientId;
	this.ProceedFunction = proceedFunction;
	this.CancelFunction = cancelFunction;
	this.proceedText = proceedText;
	this.cancelText = cancelText;
	this.clrFormDisableOnProceed = clrFormDisableOnProceed;
	
}

MessageItem.prototype = 
{
    MessageType: 'info',
    Message: '',
    ProceedFunction: '',
    CancelFunction: '',
    FocusClientId: '',
    proceedText: null,
    cancelText: null, 
    clrFormDisableOnProceed: true
};


function MessageItemList()
{

	this.innerList = new Array();
	

	this.Add = function(objMessageItem)
	{
		this.innerList.push(objMessageItem);
	}
	
	this.pop = function()
	{
		return this.innerList.pop();
	}
	
	this.shift = function()
	{
		return this.innerList.shift();
	}
	
	this.Item = function(index)
	{
		return this.innerList[index];
	}
	
	this.Count = function()
	{
		return this.innerList.length;
	}
}

MessageItemList.prototype.innerList = [];