var MSG_TIMER = 3;
var MSG_SPEED = 20;
var WRAPPER = 'content';

var MSG_ERROR = 'Error';
var MSG_WARNING = 'Warning';
var MSG_INFORMATION = 'Information';
var MSG_CONFIRMATION = 'Confirmation';

// calculate the current window width //
function pageWidth() {
    return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}

// calculate the current window height //
function pageHeight() {
    return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}

// calculate the current window vertical offset //
function topPosition() {
    return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
}

// calculate the position starting at the left of the window //
function leftPosition() {
    return typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
}

function showMessage(message, msgType, msgButton, msgFunc, closeFunc, closeTimeout) {
    if (!msgType) {
        msgType = MSG_INFORMATION;
    }

    var msgArea;
    var msgHeader;
    var msgClose;
    var msgTitle;
    var msgContent;
    var msgMask;
    if (!document.getElementById('msgArea')) {
        msgArea = document.createElement('div');
        msgArea.id = 'msgArea';
        msgHeader = document.createElement('div');
        msgHeader.id = 'msgHeader';
        msgTitle = document.createElement('div');
        msgTitle.id = 'msgTitle';
        msgClose = document.createElement('div');
        msgClose.id = 'msgClose';
        msgContent = document.createElement('div');
        msgContent.id = 'msgContent';
        msgMask = document.createElement('div');
        msgMask.id = 'msgMask';
        document.body.appendChild(msgMask);
        document.body.appendChild(msgArea);
        msgArea.appendChild(msgHeader);
        msgHeader.appendChild(msgTitle);
        msgHeader.appendChild(msgClose);
        msgArea.appendChild(msgContent);
        msgClose.setAttribute('onclick','hideMessage()');
        msgClose.onclick = hideMessage;
    } else {
        msgArea = document.getElementById('msgArea');
        msgHeader = document.getElementById('msgHeader');
        msgTitle = document.getElementById('msgTitle');
        msgClose = document.getElementById('msgClose');
        msgContent = document.getElementById('msgContent');
        msgMask = document.getElementById('msgMask');
        msgMask.style.visibility = 'visible';
        msgArea.style.visibility = 'visible';
    }

    msgArea.style.opacity = .00;
    msgArea.style.filter = 'alpha(opacity=0)';
    msgArea.alpha = 0;
    var width = pageWidth();
    var height = pageHeight();
    var left = leftPosition();
    var top = topPosition();
    var dialogwidth = msgArea.offsetWidth;
    var dialogheight = msgArea.offsetHeight;
    var topposition = top + (height / 3) - (dialogheight / 2);
    var leftposition = left + (width / 2) - (dialogwidth / 2);
    msgArea.style.top = topposition + "px";
    msgArea.style.left = leftposition + "px";
    msgHeader.className = msgType + "Header";
    msgTitle.innerHTML = msgType;
    msgContent.style.cssText = "line-height: 110%";
    msgContent.className = msgType;
    msgContent.innerHTML = message;

    var content = document.getElementById(WRAPPER);
    msgMask.style.height = content.offsetHeight + 'px';

    var tmp = document.createElement('div');
    if (dojo.isIE) {
        tmp.style.styleClear = 'left';
    } else {
        tmp.style.cssClear = 'left';
    }
    msgContent.appendChild(tmp);

    if (msgButton) {
        var tmp = document.createElement('div');
        tmp.align='center';
        tmp.style.textAlign='center';
        tmp.innerHTML = '<br><br>';
        
        if (msgButton.length > 0) {           
            var j = msgButton.length-1;
            for (var i=0; i < msgButton.length; i++) {
                var btn = document.createElement('div');
                btn.className = 'btn80';
                btn.style.marginRight = '5px';
                if (dojo.isIE) {
                    btn.style.styleFloat = 'right';
                } else {
                    btn.style.cssFloat = 'right';
                }
                btn.innerHTML = msgButton[j];  
                btn.setAttribute('onclick', msgFunc[j]);
                if (msgFunc[j]) {
                    btn.onclick = msgFunc[j];                    
                } else {
                    btn.onclick = hideMessage;                    
                }

                tmp.appendChild(btn);
                j--;
            }
        }

        msgContent.appendChild(tmp);
    }
    
    msgArea.timer = setInterval("fadeMessage(1)", MSG_TIMER);
    if (closeTimeout) {
        msgClose.style.visibility = 'hidden';
        window.setTimeout("hideMessage()", (closeTimeout * 1000));
    } else {
        if (closeFunc) {
            msgClose.onclick = closeFunc;
        }
        msgClose.style.visibility = 'visible';
    }
}

function showTopicMessage(message, type, duration, messageTopic) {
    if (!type) type = 'message';
	if (!duration) duration = '2000';

    if (!messageTopic) {
        messageTopic = 'Notice';
    }

	dojo.publish(messageTopic,
		[{
			message: "<br><b>" + message + "</b><br><br><br><br>",
			type: type,
			duration: duration
		}]
	);
}

// hide the dialog box //
function hideMessage() {
  var msgArea = document.getElementById('msgArea');
  clearInterval(msgArea.timer);
  msgArea.timer = setInterval("fadeMessage(0)", MSG_TIMER);
}

// fade-in the dialog box //
function fadeMessage(flag) {
    if (flag == null) {
        flag = 1;
    }
    var msgArea = document.getElementById('msgArea');
    var value;
    if (flag == 1) {
        value = msgArea.alpha + MSG_SPEED;
    } else {
        value = msgArea.alpha - MSG_SPEED;
    }
    msgArea.alpha = value;
    msgArea.style.opacity = (value / 100);
    msgArea.style.filter = 'alpha(opacity=' + value + ')';
    if (value >= 99) {
        clearInterval(msgArea.timer);
        msgArea.timer = null;
    } else if (value <= 1) {
        msgArea.style.visibility = 'hidden';
        document.getElementById('msgMask').style.visibility = 'hidden';
        clearInterval(msgArea.timer);
    }
}