﻿// JScript File

/*
Handles the raiseMessage Functionality or the MessageArea

*/

/* 
Declarations 
NOTE: there is only one message area per page.

*/
var messageArea = null;


function raiseMessage(messageType, message, focusClientId, proceedFunction, cancelFunction)
{
	if(!messageArea)
	{
		return false;
	}
	
    //If we are already displaying a message then do not allow another message.
    if(messageArea.messageRaised)
    {   
        return false;
    }
    
    if (messageArea.focusControl != null)
    {
        //Remove hightlight_control classname from control
        //--removeFromClassName(messageArea.focusControl, 'hightlight_control');
    }
    
    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;
	}
	else
	{
		messageArea.CurrentMessage = new MessageItem(messageType, message, focusClientId, proceedFunction, cancelFunction);
    }
    
    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.messageType = messageType;
    
    switch(messageType.toLowerCase())
    {
        case 'warning':
            messageArea.btnProceed.style.display = 'block';
            messageArea.btnCancel.style.display = 'none';
            
            setButtonState(messageArea.btnProceed.id, null, true);
            setButtonState(messageArea.btnCancel.id, null, false);
            
            //messageArea.style.border = 'double 4px rgb(0,0,250)';
            messageArea.className = 'MessageArea MessageAreaWarning';
            break;
            
        case 'info':
            messageArea.btnProceed.style.display = 'block';
            messageArea.btnCancel.style.display = 'none';
            
            setButtonState(messageArea.btnProceed.id, null, true);
            setButtonState(messageArea.btnCancel.id, null, false);            
                  
            //messageArea.style.border = 'double 4px rgb(0,250,0)';
            messageArea.className = 'MessageArea MessageAreaInfo';
            break;

        case 'validation':
            cancelFunction = 'messageArea.validateCancel()';
            messageArea.btnProceed.style.display = 'none';
            messageArea.btnCancel.style.display = 'block';  
            
            setButtonState(messageArea.btnProceed.id, null, false);
            setButtonState(messageArea.btnCancel.id, null, true);
            
            //messageArea.style.border = 'double 4px rgb(250,0,0)';
            messageArea.className = 'MessageArea MessageAreaValidation';
            break;
            
        case 'stoperror':
            messageArea.btnProceed.style.display = 'none';
            messageArea.btnCancel.style.display = 'block';
           
            setButtonState(messageArea.btnProceed.id, null, false);
            setButtonState(messageArea.btnCancel.id, null, true);
            
            //messageArea.style.border = 'double 4px rgb(250,0,0)';     
            messageArea.className = 'MessageArea MessageAreaStopError';       
            break;
            
        case 'question':
            messageArea.btnProceed.style.display = 'block';
            messageArea.btnCancel.style.display = 'block';   
            
            setButtonState(messageArea.btnProceed.id, null, true);
            setButtonState(messageArea.btnCancel.id, null, true);
            
            //messageArea.style.border = 'double 4px rgb(250,200,0)'; 
            messageArea.className = 'MessageArea MessageAreaQuestion';                      
            break;
            
        default:
        
            break;
    }            

    //Display the text
    //messageArea.txtMsg.value = message;
    messageArea.txtMsg.innerHTML = message;

    //TODO: HARD CODED THE MESSAGEBOX WIDTH HERE (400) - COULDNT FIND THE WIDTH PROGRAMMATICALLY (EASILY)
    messageArea.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.style.display = 'block'; 
		messageArea_Focus();
	}
	else if(messageArea.messageDisplayed != true)
	{
		new Effect.Appear(messageArea, {duration: .5, queue: 'end'});
		setTimeout('messageArea_Focus()', 505);
	}
	messageArea.messageDisplayed = true;
    
    //messageArea.style.display = 'block';
    
      
	window.scrollTo(0, 0);
    //self.scrollTo(0, messageArea.offsetTop + messageArea.scrollHeight);

    return;
}

function messageArea_Focus()
{
	try
	{
		messageArea.focus();
	}
	catch(e){}
}

function messageArea_Init(divId, txtMsgId, btnProceedId, btnProceedName, btnCancelId, btnCancelName)
{
    // Set the message area object to be the div.
    messageArea = document.getElementById(divId);
    
    if (messageArea == null)
    {
		return;
    }
    messageArea.txtMsg = document.getElementById(txtMsgId);
    messageArea.btnProceed = document.getElementById(btnProceedId);
    messageArea.btnCancel = document.getElementById(btnCancelId);
    
    //These values are used for postback.
    messageArea.btnProceedName = btnProceedName;
    messageArea.btnCancelName = btnCancelName;
    messageArea.focusControl = null;
    messageArea.messageType = '';
    messageArea.messageRaised = false;
    messageArea.messageDisplayed = false;
    messageArea.useFadeEffect = true;
    messageArea.lastResponse = false;
    
    //Initially we do not wish for the message area to be visible. This will be handled by raiseMessage().
    messageArea.style.display = 'none';
    messageArea.Messages = new MessageItemList();
    messageArea.MessageIndex = 0;
    messageArea.CurrentMessage = null;
    
    //messageArea.txtMsg.style.width = messageArea.style.width;

    
    //Create the proceed functionality.
    
    messageArea.proceedFunction = '';
        
    messageArea.proceed = function(e)
    {
        var retval = false;
        
        if((messageArea.useFadeEffect == false)||(typeof(Effect) == 'undefined'))
        {
			messageArea.style.display = 'none'; 
		}
		else
		{
			new Effect.Fade(messageArea, {duration: .2, queue: 'end'});
		}
		messageArea.messageDisplayed = false;
		
        if(messageArea.proceedFunction != '')
        {
            retval = eval(messageArea.proceedFunction);
        }
        else
        {
            retval = true;
        }
        
        messageArea.messageRaised = false;
        messageArea.lastResponse = retval;
        
        if (typeof(formDisable) == 'function')
        {
            formDisable(false);
        }            
        return;
    }
    
    //Create the cancel functionality.
    
    messageArea.cancelFunction = '';
    
    messageArea.cancel = function(e)
    {
        var retval = false;
        if((messageArea.useFadeEffect == false)||(typeof(Effect) == 'undefined'))
        {
			messageArea.style.display = 'none'; 
		}
		else
		{
			new Effect.Fade(messageArea, {duration: .2, queue: 'end'});
		}
		messageArea.messageDisplayed = false;
		
        if(messageArea.cancelFunction != '')
        {
            retval = eval(messageArea.cancelFunction);
        }
        else
        {
            retval = false;
        }
        
        messageArea.messageRaised = false;
        messageArea.lastResponse = retval;
        formDisable(false);
        
        try
        {
            if(messageArea.focusControl != null)
            {
                messageArea.focusControl.focus();
            }
        }
        catch(ex)
        {}
        return;
    }
    

    
    //Create the validation cancel functionality.
        
    messageArea.validateCancel = function(e)
    {      
        return false;
    }
    
    messageArea.nextMessage = function(e)
    {
		if (messageArea.Messages.Count > 0)
		{
			raiseMessage();
		}
    }
}


function MessageItem(messageType, message, focusClientId, proceedFunction, cancelFunction)
{
	this.MessageType = messageType;
	this.Message = message;
	this.FocusClientId = focusClientId;
	this.ProceedFunction = proceedFunction;
	this.CancelFunction = cancelFunction;
}

MessageItem.prototype.MessageType = 'info';
MessageItem.prototype.Message = '';
MessageItem.prototype.ProceedFunction = '';
MessageItem.prototype.CancelFunction = '';
MessageItem.prototype.FocusClientId = '';


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 = new Array();