_saveTabIndexes = new Array();
_saveDesableSelect = new Array();
_tagWithTabIndex = new Array('A','AREA','BUTTON','INPUT','OBJECT','SELECT','TEXTAREA','IFRAME');

function doPopup(ScriptManager)
{
    var myUpdatePanel;
    var blnPopupFound = false;
    var myFader;
    var myElement;
    var myClassNamesSplit;
    var myBrowser = getBrowserType();
    
    
    //Loop through update panels in the script manager
    for (var n = 0; n <= ScriptManager._updatePanelClientIDs.length; n++)
    {
        myUpdatePanel = document.getElementById(ScriptManager._updatePanelClientIDs[n]);
    
        if (myUpdatePanel != null) {
            //Get a handle on the first element in the update panel
            if (myBrowser == "ff")
            {
                if (typeof(myUpdatePanel.childNodes[1]) != "undefined")
                {
                    myElement = myUpdatePanel.childNodes[1]
                }
            }
            else
            {
                if (typeof(myUpdatePanel.firstChild) != "undefined")
                {
                    myElement = myUpdatePanel.firstChild;
                }
            }   
        
        
            if (myElement != "undefined" && myElement != null) {  
                if (myElement.className == "Popup")
                {
                    blnPopupFound = true;
                    disableTab(myElement);
                    
                    //fadeInInit(myElement, 100, 300);
                    
                    break;
                }
                else if (typeof(myElement.className) == "string") //Handles elements with multiple classes
                {
                    myClassNamesSplit = myElement.className.split(" ")
                    
                    if (myClassNamesSplit[0] == "Popup")
                    {
                        blnPopupFound = true;
                        disableTab(myElement);
                        
                        //fadeInInit(myElement, 100, 300);
                        
                        break;
                    }
                }
            }
        }
    }
    
    myFader = document.getElementById("Fader");
    
    if (blnPopupFound)
    {        
        if (myFader.style.visibility == 'hidden' || myFader.style.visibility == '') {
            fadeInInit(myFader, 70, 50);
        }
        
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            myFader.style.height = getWindowHeight() + "px";
        }
        
        posPopup();
             
    } else
    {
        if (myFader.style.visibility == 'visible') {
          fadeOutInit(myFader, 70, 50);
        }
        
        restoreTab();
    }   
}

function fadeInInit(fadeTarget, targetOpacity, showDelay) {
		if (fadeTarget.style.MozOpacity!=null) {  
			/* Mozilla's pre-CSS3 proprietary rule */
			fadeTarget.style.MozOpacity = 0;
		} else if (fadeTarget.style.opacity!=null) {
			/* CSS3 compatible */
			fadeTarget.style.opacity = 0;
		} else if (fadeTarget.style.filter!=null) {
			/* IE's proprietary filter */
			fadeTarget.style.filter = "alpha(opacity=0)";
		}
		/* make the object visible again */
		fadeTarget.style.visibility = 'visible';
		
		window.setTimeout(function () { fadeIn(fadeTarget,0,targetOpacity); }, showDelay);
}

function fadeIn(fadeTarget, opacity, targetOpacity) {
	if (fadeTarget) {
		if (opacity <= targetOpacity) {
			if (fadeTarget.style.MozOpacity!=null) {
				/* Mozilla's pre-CSS3 proprietary rule */
				fadeTarget.style.MozOpacity = (opacity/100)-.001;
				/* the .001 fixes a glitch in the opacity calculation which normally results in a flash when reaching 1 */
			} else if (fadeTarget.style.opacity!=null) {
				/* CSS3 compatible */
				fadeTarget.style.opacity = (opacity/100)-.001;
			} else if (fadeTarget.style.filter!=null) {
				/* IE's proprietary filter */
				fadeTarget.style.filter = "alpha(opacity="+opacity+")";
				/* worth noting: IE's opacity needs values in a range of 0-100, not 0.0 - 1.0 */ 
			}
			opacity += 10;
			
			window.setTimeout(function () { fadeIn(fadeTarget,opacity,targetOpacity); }, 20);
		}
	}
}

function fadeOutInit(fadeTarget, startOpacity, hideDelay) {
		if (fadeTarget.style.MozOpacity!=null) {  
			/* Mozilla's pre-CSS3 proprietary rule */
			fadeTarget.style.MozOpacity = startOpacity;
		} else if (fadeTarget.style.opacity!=null) {
			/* CSS3 compatible */
			fadeTarget.style.opacity = startOpacity;
		} else if (fadeTarget.style.filter!=null) {
			/* IE's proprietary filter */
			fadeTarget.style.filter = "alpha(opacity="+startOpacity+")";
		}
				
		window.setTimeout(function () { fadeOut(fadeTarget,startOpacity,0); }, hideDelay);
}

function fadeOut(fadeTarget, opacity, targetOpacity) {
	if (fadeTarget) {
		if (opacity >= targetOpacity) {
			if (fadeTarget.style.MozOpacity!=null) {
				/* Mozilla's pre-CSS3 proprietary rule */
				fadeTarget.style.MozOpacity = (opacity/100)-.001;
				/* the .001 fixes a glitch in the opacity calculation which normally results in a flash when reaching 1 */
			} else if (fadeTarget.style.opacity!=null) {
				/* CSS3 compatible */
				fadeTarget.style.opacity = (opacity/100)-.001;
			} else if (fadeTarget.style.filter!=null) {
				/* IE's proprietary filter */
				fadeTarget.style.filter = "alpha(opacity="+opacity+")";
				/* worth noting: IE's opacity needs values in a range of 0-100, not 0.0 - 1.0 */ 
			}
			opacity -= 10;
			
			window.setTimeout(function () { fadeOut(fadeTarget,opacity,targetOpacity); }, 20);
		}
		else
		{
		  fadeTarget.style.visibility = 'hidden';
		}
	}
}

//Currently unused
function addFader()
{
  document.appendChild
}


function disableTab(PopupElement) {
        /// <summary>
        /// Change the tab indices so we only tab through the modal popup
        /// (and hide SELECT tags in IE6)
        /// </summary>

        var i = 0;
        var tagElements;
        var tagElementsInPopUp = new Array();
        Array.clear(this._saveTabIndexes);

        //Save all popup's tag in tagElementsInPopUp
        for (var j = 0; j < _tagWithTabIndex.length; j++) { //Loop through types of tabable elements
            tagElements = PopupElement.getElementsByTagName(_tagWithTabIndex[j]); //Get all elements of type X in popup
            for (var k = 0 ; k < tagElements.length; k++) { //Loop elements
                tagElementsInPopUp[i] = tagElements[k]; //Assign element array
                i++;
            }
        }

        i = 0;
        for (var j = 0; j < _tagWithTabIndex.length; j++) { //Loop through types of tabable elements
            tagElements = document.getElementsByTagName(_tagWithTabIndex[j]);//Get all elements of type X in page
            for (var k = 0 ; k < tagElements.length; k++) { //Loop elements
                if (Array.indexOf(tagElementsInPopUp, tagElements[k]) == -1)  { // If the current element is not an element from the popup
                    _saveTabIndexes[i] = {tag: tagElements[k], index: tagElements[k].tabIndex}; //Saves the element
                    tagElements[k].tabIndex="-1"; //Makes the element untabable
                    i++;
                }
            }
        }

        //IE6 Bug with SELECT element always showing up on top
        i = 0;
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            //Save SELECT in PopUp
            var tagSelectInPopUp = new Array();
            for (var j = 0; j < _tagWithTabIndex.length; j++) {
                tagElements = PopupElement.getElementsByTagName('SELECT');
                for (var k = 0 ; k < tagElements.length; k++) {
                    tagSelectInPopUp[i] = tagElements[k];
                    i++;
                }
            }

            i = 0;
            Array.clear(_saveDesableSelect);
            tagElements = document.getElementsByTagName('SELECT');
            for (var k = 0 ; k < tagElements.length; k++) {
                if (Array.indexOf(tagSelectInPopUp, tagElements[k]) == -1)  {
                    _saveDesableSelect[i] = {tag: tagElements[k], visib: getCurrentStyle(tagElements[k], 'visibility')} ;
                    tagElements[k].style.visibility = 'hidden';
                    i++;
                }
            }
        }
    }

function  restoreTab() {
    /// <summary>
    /// Restore the tab indices so we tab through the page like normal
    /// (and restore SELECT tags in IE6)
    /// </summary>

    for (var i = 0; i < _saveTabIndexes.length; i++) {
        _saveTabIndexes[i].tag.tabIndex = _saveTabIndexes[i].index;
    }

    //IE6 Bug with SELECT element always showing up on top
    if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
        for (var k = 0 ; k < _saveDesableSelect.length; k++) {
            _saveDesableSelect[k].tag.style.visibility = _saveDesableSelect[k].visib;
        }
    }
}

function getCurrentStyle(element, attribute, defaultValue) {
    /// <summary>
    /// CommonToolkitScripts.getCurrentStyle is used to compute the value of a style attribute on an
    /// element that is currently being displayed.  This is especially useful for scenarios where
    /// several CSS classes and style attributes are merged, or when you need information about the
    /// size of an element (such as its padding or margins) that is not exposed in any other fashion.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Live DOM element to check style of
    /// </param>
    /// <param name="attribute" type="String">
    /// The style attribute's name is expected to be in a camel-cased form that you would use when
    /// accessing a JavaScript property instead of the hyphenated form you would use in a CSS
    /// stylesheet (i.e. it should be "backgroundColor" and not "background-color").
    /// </param>
    /// <param name="defaultValue" type="Object" mayBeNull="true" optional="true">
    /// In the event of a problem (i.e. a null element or an attribute that cannot be found) we
    /// return this object (or null if none if not specified).
    /// </param>
    /// <returns type="Object">
    /// Current style of the element's attribute
    /// </returns>

    var currentValue = null;
    if (element) {
        if (element.currentStyle) {
            currentValue = element.currentStyle[attribute];
        } else if (document.defaultView && document.defaultView.getComputedStyle) {
            var style = document.defaultView.getComputedStyle(element, null);
            if (style) {
                currentValue = style[attribute];
            }
        }
        
        if (!currentValue && element.style.getPropertyValue) {
            currentValue = element.style.getPropertyValue(attribute);
        }
        else if (!currentValue && element.style.getAttribute) {
            currentValue = element.style.getAttribute(attribute);
        }       
    }

    if ((!currentValue || currentValue == "" || typeof(currentValue) === 'undefined')) {
        if (typeof(defaultValue) != 'undefined') {
            currentValue = defaultValue;
        }
        else {
            currentValue = null;
        }
    }   
    return currentValue;  
}

function posPopup()
{         
    if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
        var myElements = getElementsByClassName("Popup", "div", document)
    
        if (myElements != null)
        {
            if (myElements.length > 0) 
            {
                for (var n = 0; n < myElements.length; n++)
                {
                    myElements[n].style.marginTop = getScrollPos() + "px";
                }
            }
        }
    }
}   

function getScrollPos()
{
    var Scroll;

    Scroll = document.body.scrollTop;
    
    if (Scroll == 0)
    {
        if (window.pageYOffset)
            Scroll = window.pageYOffset;
        else
            Scroll = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
    }
    
    return Scroll;
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function getWindowHeight()
{
    var Height;

    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        Height 		= window.innerHeight;
    }
    else if( document.documentElement &&
        ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        Height 		= document.documentElement.clientHeight;
    }
    else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        Height 		= document.body.clientHeight;
    }else{
        Height 		= 608;
    }
    
    return Height;
}

function getWindowHeight()
{
    var Height;

    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        Height 		= window.innerHeight;
    }
    else if( document.documentElement &&
        ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        Height 		= document.documentElement.clientHeight;
    }
    else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        Height 		= document.body.clientHeight;
    }else{
        Height 		= 608;
    }
    
    return Height;
}

function getBrowserType()
{
    if (navigator.appName == "Microsoft Internet Explorer")
    {
        version=0
        if (navigator.appVersion.indexOf("MSIE")!=-1){
            temp=navigator.appVersion.split("MSIE")
            version=parseFloat(temp[1])
        }
    
        if (version >= 7)
        {
            browser = "ie7";
        }
        else
        {
            browser = "ie";
        }
    }
    else
    {
        browser= "ff";
    }
    
    return browser;
}