﻿//=============================================================================
/**
 * This derivative version of subModal can be downloaded from http://gabrito.com/files/subModal/
 * Original By Seth Banks (webmaster at subimage dot com)  http://www.subimage.com/
 * Contributions by Eric Angel (tab index code), Scott (hiding/showing selects for IE users), Todd Huss (submodal class on hrefs, moving div containers into javascript, phark method for putting close.gif into CSS), Thomas Risberg (safari fixes for scroll amount), Dave Campbell (improved parsing of submodal-width-height class)
 */
//=============================================================================
// Popup code
var gPopupMask      = null;
var gPopupContainer = null;
var gMainDiv        = null;
var gReturnFunc;
var gPopupIsShown   = false;
var gHideSelects    = false;
var gTooltipsSupported = false;
var gDialogTypeID   = null;
//var gReturnVal      = null;
var gPleaseWaitHTML = "Please wait...";
var gTabIndexes     = new Array();
// Pre-defined list of tags we want to disable/enable tabbing into
var gTabbableTags  = new Array("A", "BUTTON", "TEXTAREA", "INPUT", "IFRAME");	
//For Restore Y Scroll Position...
var scrollYPos;
//=============================================================================
// If using Mozilla or Firefox, use Tab-key trap.
if(!document.all) 
{
	document.onkeypress = keyDownHandler;
}
//=============================================================================
/**
* Initializes popup code on load.	
*/
//=============================================================================
function initPopUp() 
{
    var funcAfterClose = false;
    if(arguments[0])
    {
         funcAfterClose = true;
    }
    //Add the pop up HTML to the body
    var body = document.getElementsByTagName('body')[0];        	    	
    //mask to the main page...
    var popmask = document.createElement('div');
    popmask.id = 'popupMask';
    //the pop up container...
    var popcont = document.createElement('div');
    popcont.id = 'popupContainer';

    popcont.innerHTML = '' +    	
    //'<div id="toolTipPopup" class="tooltip" style="z-index: 1000; position: absolute;"></div>' + 
    '<div id="popupInner">' +
        '<table width="100%" border="0" cellspacing="0" cellpadding="0">' + 
             '<tr>' + 
                  '<td class="left_top">&nbsp;</td>' + 
                  '<td class="top">' + 
                       '<div id="popupTitleBar">' + 
                            '<div class="title">' + 
			                  '<div class="inner">' + 
				                  '<span id="popupTitle"></span>' + 
			                  '</div>' + 
		                  '</div>' + 
		                  //'<a class="close" onmouseover="this.className=\'close_over\'" onmouseout="this.className=\'close\'" onclick="hidePopWin(' + funcAfterClose + ');"></a>' + 
		                  '<a class="close" onmouseover="this.className=\'close_over\'" onmouseout="this.className=\'close\'" onclick="hidePopWin();"></a>' + 
	             '</td>' + 
                  '<td class="right_top">&nbsp;</td>' + 
             '</tr>' + 
             '<tr>' + 
                  '<td class="left">&nbsp;</td>' + 
                  '<td class="center">' + 
                     '<div id="mainDiv" class="popupMain"></div>' + 
	             '</td>' + 
                  '<td class="right">&nbsp;</td>' +                   
             '</tr>' + 
             '<tr>' + 
                  '<td class="left_bottom">&nbsp;</td>' + 
                  '<td class="bottom">&nbsp;</td>' + 
                  '<td class="right_bottom">&nbsp;</td>' + 
             '</tr>' + 
        '</table>' +
    '</div>';

    var popToolTip = document.createElement('div');
    popToolTip.id = 'toolTipPopup';
    popToolTip.innerHTML = '<div id="toolTipPopup" class="tooltip" style="z-index: 1000; position: absolute;"></div>';

    body.appendChild(popToolTip);
	body.appendChild(popmask);
	body.appendChild(popcont);
	gPopupMask      = $("popupMask");
	gPopupContainer = $("popupContainer");
	gMainDiv        = $("mainDiv");	
	
	//check to see if this is IE version 6 or lower. hide select boxes if so
	//maybe they'll fix this in version 7?
	var brsVersion = parseInt(window.navigator.appVersion.charAt(0), 10);
	if(brsVersion <= 6 && window.navigator.userAgent.indexOf("MSIE") > -1) 
	{
		gHideSelects = true;
	}
	
	//Add onclick handlers to 'a' elements of class submodal or submodal-width-height
	//creates the close image...
	/*var elms = document.getElementsByTagName('a');
	for (i = 0; i < elms.length; i++) 
	{
		if(elms[i].className.indexOf("submodal") >= 0) 
		{ 
			elms[i].onclick = function()
			{
				//default width and height
				var width  = 400;
				var height = 200;
				// Parse out optional width and height from className
				var startIndex = this.className.indexOf("submodal");
				var endIndex   = this.className.indexOf(" ", startIndex);
				if(endIndex < 0) 
				{
					endIndex = this.className.length;
				}
				var clazz = this.className.substring(startIndex, endIndex);
				params = clazz.split('-');
				if(params.length == 3) 
				{
					width  = parseInt(params[1]);
					height = parseInt(params[2]);
				}
				showPopWin('', this.href, width, height, null); 
				return false;
			}
		}
	}*/
}
//=============================================================================
addEvent(window, "load", initPopUp);
//=============================================================================
function resetPopUp() 
{
    gMainDiv.style.width = "0px";
	gMainDiv.style.height = "0px";
	
	gPopupContainer.style.width = "0px";
	gPopupContainer.style.height = "0px";
}
//=============================================================================
/**
* @argument width - int in pixels
* @argument height - int in pixels
* @argument dialogTypeID - dialog type ID to show
* @argument dialogID - dialog ID to show
* @argument parameterValue1, 2 - parameters to pass for custom message
* @argument returnFunc - function to call when returning true from the window.
*/
//=============================================================================
function showPopWin(title, dialogTypeID, dialogID, parameterValue1, parameterValue2, width, height, returnFunc, fixTitleBarOffSetWidth) 
{
    resetPopUp();

    try
    {
         scrollYPos = getScrollYPosition();
         setScrollVisible("100%", "hidden");	
         //window.scrollTo(0, 0);    
    }
    catch(e){}
    
    gPopupIsShown = true;
    gDialogTypeID = dialogTypeID;
    disableTabIndexes();
    gPopupMask.style.display      = "block";
    gPopupContainer.style.display = "block";
    centerPopWin(width, height);
    var titleBarHeight = parseInt($("popupTitleBar").offsetHeight, 10);
	
    if(typeof($("popupTitle").innerText) != "undefined")
    {
	    $("popupTitle").innerText = "  " + title + "  ";	
    }
    else
    {
         $("popupTitle").innerHTML = "  " + title + "  ";	
    }

	gPopupContainer.style.width = width + "px";
	gPopupContainer.style.height = (height + titleBarHeight) + "px";
	
	gMainDiv.style.width = parseInt($("popupTitleBar").offsetWidth, 10) + "px";	
	if(typeof(fixTitleBarOffSetWidth) != "undefined")
	{
	    gMainDiv.style.width = fixTitleBarOffSetWidth + "px";
	}
	gMainDiv.style.height = (height) + "px";
	gMainDiv.innerHTML = prepareInnerHTML(dialogID, parameterValue1, parameterValue2);
	gReturnFunc = returnFunc;
	//for IE...
	if(gHideSelects == true) 
	{
		hideSelectBoxes();
	}
	if((typeof(windowedObject) != "undefined") && (windowedObject != null))
	{
	    hideObject($(windowedObject));
	    //to check if this is a problem...????...
	    //displayObject($(windowedObjectReplacer));
	    displayObject($(windowedObject));
	}	
	
	popupCustomFunction();
	//window.setTimeout("setPopTitleAndRewriteTargets();", 100);
}
//=============================================================================
function prepareInnerHTML(dialogID, parameterValue1, parameterValue2)
{
    switch (gDialogTypeID)
    {
        case 'yesno':
            return buildYesNoPopupHTML(dialogID, parameterValue1);
            break;
        case 'generalmessage':
            return buildGeneralMessagePopupHTML(dialogID, parameterValue1);
            break;
        case 'uploadprofilepicture':
            return buildUploadProfilePicturePopupHTML();
            break;
        case 'passwordrecovery':
            return buildPasswordRecoveryPopupHTML(parameterValue1);
            break;
        case 'changepassword':
            return buildChangePasswordPopupHTML();
            break;
        case 'sendmail':
            return buildSendMailPopupHTML(dialogID, parameterValue1, parameterValue2);
            break;
        case 'comment':
            return buildCommentPopupHTML(parameterValue1);
            break;
        case 'player':
            return buildPlayerPopupHTML(parameterValue1, parameterValue2);
            break;            
    }
    
    return "";
}
//=============================================================================
function popupCustomFunction()
{
    switch (gDialogTypeID)
    {
        case 'yesno':
            yesnoPopupInit();
            break;
        case 'generalmessage':
            generalMessagePopupInit();
            break;
        case 'uploadprofilepicture':
            initPopupTooltip();
            hideTooltip();
            uploadProfilePictureInit();
            break;
        case 'passwordrecovery':
            initPopupTooltip();
            hideTooltip();
            passwordRecoveryPopupInit();
            break;
        case 'changepassword':
            initPopupTooltip();
            hideTooltip();
            changePasswordPopupInit();
            break;
        case 'sendmail':
            initPopupTooltip();
            hideTooltip();
            sendMailPopupInit();
            break;
        case 'comment':
            initPopupTooltip();
            hideTooltip();
            commentPopupInit();
            break;
        case 'player':
            playerPopupInit();
            break;
    }
}
//=============================================================================
function hidePopupCustomFunction()
{
    switch (gDialogTypeID)
    {
        case 'yesno':
            break;
        case 'generalmessage':
            //generalMessagePopupFinalize();
            break;
        case 'uploadprofilepicture':
            hideTooltip();
            //uploadProfilePictureFinalize();
            break;
        case 'passwordrecovery':
            hideTooltip();
            //passwordRecoveryPopupFinalize();
            break;
        case 'changepassword':
            hideTooltip();
            //changePasswordPopupFinalize();
            break;
        case 'sendmail':
            hideTooltip();
            //sendMailPopupFinalize();
            break;
        case 'comment':
            hideTooltip();
            //sendMailPopupFinalize();
            break;
        case 'player':
            break;
    }
}
//=============================================================================
var gi = 0;
function centerPopWin(width, height) 
{
	if(gPopupIsShown == true) 
	{
		if(width == null || isNaN(width)) 
		{
			width = gPopupContainer.offsetWidth;
		}
		if(height == null) 
		{
			height = gPopupContainer.offsetHeight;
		}
		var fullHeight = getViewportHeight();
		var fullWidth  = getViewportWidth();
		// scLeft and scTop changes by Thomas Risberg
		var scLeft,scTop;
		if(self.pageYOffset) 
		{
			scLeft = self.pageXOffset;
			scTop = self.pageYOffset;
		} 
		else if(document.documentElement && document.documentElement.scrollTop) 
		{
			scLeft = document.documentElement.scrollLeft;
			scTop  = document.documentElement.scrollTop;
		} 
		else if(document.body) 
		{
			scLeft = document.body.scrollLeft;
			scTop = document.body.scrollTop;
		} 
		//gPopupMask.style.height = fullHeight + "px";
		//gPopupMask.style.width  = fullWidth  + "px";
		gPopupMask.style.height = getBodyHeight() + "px";
		
		//gPopupMask.style.top    = scTop      + "px";
		//gPopupMask.style.left   = scLeft     + "px";
		window.status           = gPopupMask.style.top + " " + gPopupMask.style.left + " " + gi++;
		var titleBarHeight      = parseInt($("popupTitleBar").offsetHeight, 10);
		var topMargin           = scTop + ((fullHeight - (height+titleBarHeight)) / 2);
		if (topMargin < 0) 
		{ 
		     topMargin = 0; 
		}
		gPopupContainer.style.top  = topMargin + "px";
		gPopupContainer.style.left = (scLeft + ((fullWidth - width) / 2)) + "px";
	}
}
//=============================================================================
addEvent(window, "resize", centerPopWin);
//addEvent(window, "scroll", centerPopWin);
//window.onscroll = centerPopWin;
//=============================================================================
/**
 * @argument callReturnFunc - bool - determines if we call the return function specified
 * @argument returnVal - anything - return value 
 */
 //=============================================================================
function hidePopWin(callReturnFunc, retVal) 
{
    gPopupIsShown = false;
    restoreTabIndexes();
    if(gPopupMask == null) 
        return;

    gPopupMask.style.display      = "none";
    gPopupContainer.style.display = "none";
    if(callReturnFunc == true && gReturnFunc != null) 
        gReturnFunc(retVal);
    else
        gMainDiv.innerHTML = gPleaseWaitHTML;

    //display all select boxes...
    if(gHideSelects == true) 
        displaySelectBoxes();

    if ((typeof(windowedObject) != "undefined") && (windowedObject != null))
    {
        displayObject($(windowedObject));
        //to check if this is a problem...????...
        //hideObject($(windowedObjectReplacer));
        hideObject($(windowedObject));
    }	
    
    hidePopupCustomFunction();
    
    try
    {
         setScrollVisible("auto", "auto");	
         //window.scrollTo(0, scrollYPos);    
    }
    catch(e){}
}
//=============================================================================
// Tab key trap. if popup is shown and key was [TAB], suppress it.
// @argument e - event - keyboard event that caused this function to be called.
function keyDownHandler(e) 
{
    if(gPopupIsShown && e.keyCode == 9)  return false;
}
//=============================================================================
// For IE.  Go through predefined tags and disable tabbing into them.
function disableTabIndexes() 
{
	if(document.all) 
	{
		var i = 0;
		for (var j = 0; j < gTabbableTags.length; j++) 
		{
			var tagElements = document.getElementsByTagName(gTabbableTags[j]);
			for (var k = 0 ; k < tagElements.length; k++) 
			{
				gTabIndexes[i]          = tagElements[k].tabIndex;
				tagElements[k].tabIndex = "-1";
				i++;
			}
		}
	}
}
//=============================================================================
// For IE. Restore tab-indexes.
function restoreTabIndexes() 
{
	if (document.all) 
	{
		var i = 0;
		for (var j = 0; j < gTabbableTags.length; j++) 
		{
			var tagElements = document.getElementsByTagName(gTabbableTags[j]);
			for (var k = 0 ; k < tagElements.length; k++) 
			{
				tagElements[k].tabIndex   = gTabIndexes[i];
				tagElements[k].tabEnabled = true;
				i++;
			}
		}
	}
}
//=============================================================================
/**
* Hides all drop down form select boxes on the screen so they do not appear above the mask layer.
* IE has a problem with wanted select form tags to always be the topmost z-index or layer
* Thanks for the code Scott!
*/
//=============================================================================
function hideSelectBoxes() 
{
    for(var i = 0; i < document.forms.length; i++) 
    {
	    for(var e = 0; e < document.forms[i].length; e++)
	    {
		    if(document.forms[i].elements[e].tagName == "SELECT") 
		    {
		         document.forms[i].elements[e].style.visibility = "hidden";
		    }
         }
    }
}
//=============================================================================
function hideObject(objRef)
{
    try
    {
         changeVisibility(objRef, false);
    }
    catch(e){}                
}
//=============================================================================
/**
* Makes all drop down form select boxes on the screen visible so they do not reappear after the dialog is closed.
* IE has a problem with wanted select form tags to always be the topmost z-index or layer
*/
//=============================================================================
function displaySelectBoxes() 
{
    for(var i = 0; i < document.forms.length; i++) 
    {
         for(var e = 0; e < document.forms[i].length; e++)
	    {
	         if(document.forms[i].elements[e].tagName == "SELECT") 
		    {
		         document.forms[i].elements[e].style.visibility = "visible";
		    }
	    }
    }
}
//=============================================================================
function displayObject(objRef)
{    
    try
    {
         changeVisibility(objRef, true);
    }
    catch(e){}    
}
//=============================================================================
/**
 * Code below taken from - http://www.evolt.org/article/document_body_doctype_switching_and_more/17/30655/ *
 * Modified 4/22/04 to work with Opera/Moz (by webmaster at subimage dot com)
 * Gets the full width/height because it's different for most browsers.
 */
 //=============================================================================
function getViewportHeight() 
{
	if (window.innerHeight != window.undefined) return window.innerHeight;
	if (document.compatMode == 'CSS1Compat')    return document.documentElement.clientHeight;
	if (document.body)                          return document.body.clientHeight; 
	                                            return window.undefined; 
}
//=============================================================================
function getViewportWidth() 
{
	if (window.innerWidth != window.undefined) return window.innerWidth; 
	if (document.compatMode == 'CSS1Compat')   return document.documentElement.clientWidth; 
	if (document.body)                         return document.body.clientWidth; 
	                                           return window.undefined; 
}
//=============================================================================
addEvent(document, "keydown", popupCheckEsc);
//=============================================================================
function popupCheckEsc(e)
{
    if (e && isEscClicked(e))
    {
        try
        {
            if (gTooltipsSupported)
                isTooltipOpen() ? hideTooltip() : hidePopWin();
            else
            
            //_ToolTip.setContainer("toolTipPopup");
                hidePopWin();
            //(_ToolTip && _ToolTip.isVisible()) ? hideTooltip() : hidePopWin();
        }
        catch(e){}
    }
}
//=============================================================================
function isPopupOpen()
{
    return (gPopupIsShown);
}
//=============================================================================
function initPopupTooltip()
{
    gTooltipsSupported = true;
    _ToolTip.setContainer("toolTipPopup");
}