/**
 * $Author: dr-bashwort $
 * $Revision: 1.3 $ $Date: 2008/07/23 03:12:47 $
 */

 var treeOpenImg = new Image();
 treeOpenImg.src = "/images/bullet_ball_glass_green16.gif";
 var treeClosedImg = new Image();
 treeClosedImg.src = "/images/bullet_ball_glass_blue16.gif";
 
 /**
  * If the object with the passed id is showing then hide it. If it is hidden
  * then show it. This will only work with objects that are initially hidden.
  */
 function toggleVisibility(objectId) {
    var objectStyle = document.getElementById(objectId).style;

    if(objectStyle.display == "block") {
        objectStyle.display = "none";
    }
    else {
        objectStyle.display = "block";
    }
 }

  /**
   * Special verion of toggle that works with the document tree.
   */
  function toggleBranch(objectId) {
    var objectStyle = document.getElementById(objectId).style;

    if(objectStyle.display == "") {
        // use image to determine if open or closed
        var objectImg = document.getElementById('i' + objectId);
        if(objectImg.src.indexOf(treeClosedImg.src) > -1)
            objectStyle.display = "block";
        else
            objectStyle.display = "none";
    }
    else if(objectStyle.display == "block") {
        objectStyle.display = "none";
    }
    else {
        objectStyle.display = "block";
    }
 }

 function swapLeafImage(img) {
    var objectImg = document.getElementById(img);
    if(objectImg.src.indexOf(treeClosedImg.src) > -1)
        objectImg.src = treeOpenImg.src;
    else
        objectImg.src = treeClosedImg.src;
 }

 function openPopup(url) {
   open(url, "popup", "toolbar=no,menubar=no,width=700,height=500,resizable=yes,top=0,left=0,scrollbars=yes");
 }

 function openFormPopup(url, w, h) {
   open(url, "popup", "toolbar=no,menubar=no,width="+w+",height="+h+",resizable=yes,top=0,left=0,scrollbars=yes");
 }

 function openFlashPopup(url, w, h) {
   open(url, "popup", "toolbar=no,menubar=no,width="+w+",height="+h+",resizable=yes,top=0,left=0,scrollbars=no");
 }

    /**
     * Change the size of a text area.
     */
    function changeTextAreaSize(e, name, num) {
        e.form.elements[name].rows=e.form.elements[name].rows+num
    }

    function getElementsByClassName(className) {
        var elements = new Array();
        var inc=0;
        var alltags=document.all? document.all : document.getElementsByTagName("*");
        for(i=0;i<alltags.length;i++) {
            if(alltags[i].className == className)
                elements[inc++]=alltags[i];
        }
        return elements;
    }

    function getDefaultScrollPadding() {
        
        var defaultScrollPadding = 20;
        var userAgent = navigator.userAgent;
        
        //alert(userAgent);
        if(userAgent.indexOf("Firefox")!=-1) {
            // Detect Firefox - allow Scriptaculous if Firefox version is >= 2
            //var versionindex = userAgent.indexOf("Firefox")+8;
            //var versionNumberString = userAgent.substring(versionindex);
            //version=parseFloat(versionNumberString)
            //if(version >= 2)
                //return true;
            defaultScrollPadding = 18;
        }
        else if(userAgent.indexOf("MSIE") != -1) {
            // Detect Internet Explorer Version - allow Scriptaculous if IE version is >= 7
            //var versionindex = userAgent.indexOf("MSIE")+5;
            //var versionNumberString = userAgent.substring(versionindex);
            //version=parseFloat(versionNumberString)
            //if(version >= 7)
                //return true;
            defaultScrollPadding = 6;
        }

        return defaultScrollPadding;
    }
    
    function useScriptaculous() {
        
        var userAgent = navigator.userAgent;
        
        //alert(userAgent);
        
        // Detect Firefox - allow Scriptaculous if Firefox version is >= 2
        if(userAgent.indexOf("Firefox")!=-1){
            var versionindex = userAgent.indexOf("Firefox")+8;
            var versionNumberString = userAgent.substring(versionindex);
            version=parseFloat(versionNumberString)
            if(version >= 2)
                return true;
        }
        
        // Detect Internet Explorer Version - allow Scriptaculous if IE version is >= 7
        //if(userAgent.indexOf("MSIE") != -1) {
            //var versionindex = userAgent.indexOf("MSIE")+5;
            //var versionNumberString = userAgent.substring(versionindex);
            //version=parseFloat(versionNumberString)
            //if(version >= 7)
                //return true;
        //}

        return false;
    }
    
    /*************************************************************************/
    /** Use Prototype and Scriptaculous                                     **/
    /*************************************************************************/
    
    var Utilities = {
        checkboxLimit : function(event) {
            
            var listClass = Event.element(event).className;
            var listContainerId = listClass + 'List';
            var listButton = listClass + 'Button';
            
            var counter = 0;
            
            var checkboxes = $(listContainerId).getElementsByClassName(listClass);
            for(i=0;i<checkboxes.length;i++) {
                var nextCheckbox = checkboxes[i];
                //var checkboxId = nextCheckbox.id;
                //$(checkboxId).enable();
                
                if(nextCheckbox.checked)
                    counter++;
            }
            
            if(counter >= 2) {
                
                $(listButton).enable();

                //for(i=0;i<checkboxes.length;i++) {
                //    var nextCheckbox = checkboxes[i];
                //    if(!nextCheckbox.checked) {
                //        var checkboxId = nextCheckbox.id;
                //        $(checkboxId).disable();
                //    }
                //}
            }
            else {
                 $(listButton).disable();
            }
        },
        configureImageMouseover : function(imageId, image) {

            if($(imageId)) {
                var imageOn = new Image();
                imageOn.src = "/images/" + image + "_on.gif";
                var imageOff = new Image();
                imageOff.src = "/images/" + image + "_off.gif";
                Event.observe(imageId, 'mouseover', function() {
                    $(imageId).src = imageOn.src;
                });
                Event.observe(imageId, 'mouseout',  function() {
                    $(imageId).src = imageOff.src;
                });
            }
        }
    };

    var Regulations = {
        toggleVisability : function(event) {

            var id = Event.element(event).id;
            var triggerId = id.toString();
            var baseId = triggerId.substring(0, triggerId.lastIndexOf('_'));

            if(useScriptaculous()) {

                if(!$(baseId).visible()) {
                    $(baseId + '_show').toggle();
                    new Effect.SlideDown(baseId, {queue:'front', afterFinish: function() {$(baseId + '_hide').toggle();}});
                }
                else {
                    $(baseId + '_hide').toggle();
                    new Effect.SlideUp(baseId, {queue:'front', afterFinish: function() {$(baseId + '_show').toggle();}});
                }
            }
            else {
                $(baseId + "_show").toggle();
                $(baseId).toggle();
                $(baseId + "_hide").toggle();
            }
        },
        configureToggleVisabilityTriggers : function(containerId, triggerClass) {

            var triggers = $(containerId).getElementsByClassName(triggerClass);
            for(i=0;i<triggers.length;i++) {
                var nextTrigger = triggers[i];
                var triggerId = nextTrigger.id;
                Event.observe(triggerId, 'click', Regulations.toggleVisability.bindAsEventListener(Regulations));
            }
        },
        toggleActionMenu : function(event) {
            
            var toggle = true;
            if(event != null) { // do not toggle if we clicked on a group heading
                var id = Event.element(event).id;
                var triggerId = id.toString();
                var baseId = triggerId.substring(0, triggerId.lastIndexOf('_'));
                if(baseId == "groupHeading") {
                    toggle = false;
                }
                if(baseId == "actionForm") {
                    toggle = false;
                }
            }

            if(toggle) {
                var actionMenuTrigger = $('actionMenuTrigger');
                var triggerPosition = Position.cumulativeOffset(actionMenuTrigger);
                var left = triggerPosition[0] - 96;
                var top = triggerPosition[1] + 30;
                var topicDisplayActions = $('topicDisplayActions');
                Position.absolutize(topicDisplayActions);
                Element.setStyle(topicDisplayActions, {top: top + "px", left: left + "px"});
                topicDisplayActions.toggle();
            }
        },
        closeActionMenu : function(event) {
            
            var id = Event.element(event).id;
            var topicDisplayActions = $('topicDisplayActions');
            if(id != "actionMenuTrigger" && topicDisplayActions.visible())
                Regulations.toggleActionMenu(event);
        },
        toggleActionMenuGroup : function(event) {

            var id = Event.element(event).id;
            var groupId = "actionGroup_" + id.toString(); 
            
            if(useScriptaculous()) {

                if(!$(groupId).visible()) {
                    new Effect.SlideDown(groupId, {queue:'front', duration:0.5}); 
                }
                else {
                    new Effect.SlideUp(groupId, {queue:'front', duration:0.5});
                }
            }
            else {
                $(groupId).toggle();  
            }
        },
        toggleTableOfContents : function(containerId) {

            $('hideTableOfContents').toggle();
            $('showTableOfContents').toggle();
            
            var tableOfContentsOn = $(containerId).getElementsByClassName('tableOfContentsOn');
            if(tableOfContentsOn != null) {
                for(i=0;i<tableOfContentsOn.length;i++) {
                    var nextElement = tableOfContentsOn[i];
                    nextElement.toggle();
                }
            }
            
            var tableOfContentsOff = $(containerId).getElementsByClassName('tableOfContentsOff');
            if(tableOfContentsOff != null) {
                for(i=0;i<tableOfContentsOff.length;i++) {
                    var nextElement = tableOfContentsOff[i];
                    nextElement.toggle();
                }
            }
        },
        toggleNonDifferentRows : function(containerId) {

            $('hideNonDifferentRows').toggle();
            $('showNonDifferentRows').toggle();

            var allTableRows = $(containerId).select('tr');
            for(i=0;i<allTableRows.length;i++) {
                var nextElement = allTableRows[i];
                var rowClass = nextElement.className;
                if(rowClass.indexOf("containsNoDifferences") != -1)
                    nextElement.toggle();
            }

            Regulations.showEvenAndOddRows(containerId);
        },
        showEvenAndOddRows : function(containerId) {

            var allTableRows = $(containerId).select('tr');
            var subtopicRowCounter = 1;
            for(i=0;i<allTableRows.length;i++) {
                var nextElement = allTableRows[i];
                var rowClass = nextElement.className;

                if(rowClass.indexOf("subtopicRow") != -1 && nextElement.visible()) {

                    var evenOdd = (subtopicRowCounter % 2 == 0) ? 'even' : 'odd';
                    if(rowClass.indexOf(evenOdd) == -1) {
                        nextElement.removeClassName(evenOdd == 'even' ? 'odd' : 'even');
                        nextElement.addClassName(evenOdd);
                    }

                    subtopicRowCounter++;
                }

                if(rowClass.indexOf("subtopicGroupTitle") != -1)
                    subtopicRowCounter = 1;
            }
        },
        showEditIcons : function(event) {

            var args = $A(arguments);

            var triggerId = args[1];
            var iconId = args[2];
            var padding = args[3];

            var trigger = $(triggerId);
            var triggerPosition = Position.cumulativeOffset(trigger);
            var left = triggerPosition[0];
            var top = triggerPosition[1];
            var icons = $(iconId);

            if(icons != null) {
                Position.absolutize(icons);
                Element.setStyle(icons, {top: top + "px", left: left + "px"});

                Element.setStyle(trigger, {paddingLeft: padding + "px"});

                $(iconId).show();
            }
        },
        hideEditIcons : function(event) {

            var args = $A(arguments);

            var triggerId = args[1];
            var iconId = args[2];
            var defaultPadding = args[3];

            var icons = $(iconId);

            if(icons != null) {
                var trigger = $(triggerId);
                Element.setStyle(trigger, {paddingLeft: defaultPadding + "px"});

                $(iconId).hide();
            }
        },
        configureMouseOverEditTriggers : function(containerId, triggerClass, iconPrefix, defaultLeftPadding, mouseOverLeftPadding) {
 
            var triggers = $(containerId).getElementsByClassName(triggerClass);
            for(i=0;i<triggers.length;i++) {

                var nextTrigger = triggers[i];
                var triggerId = nextTrigger.id.toString();
                var id = triggerId.substring(triggerId.indexOf("_"));
                var iconId = iconPrefix + id;
                Event.observe(triggerId, 'mouseover', Regulations.showEditIcons.bindAsEventListener(Regulations, triggerId, iconId, mouseOverLeftPadding));
                Event.observe(triggerId, 'mouseout', Regulations.hideEditIcons.bindAsEventListener(Regulations, triggerId, iconId, defaultLeftPadding));
            }
        },
        configureRegulationsActionMenu : function(containerId) {
 
            // hook up the action menu
            Regulations.toggleActionMenu();
            Event.observe('actionMenuTrigger', 'click', Regulations.toggleActionMenu.bindAsEventListener(Regulations));
            Event.observe('topicDisplayActions', 'click', Regulations.toggleActionMenu.bindAsEventListener(Regulations));
            Event.observe('screen', 'click', Regulations.closeActionMenu.bindAsEventListener(Regulations));

            // hook up the action menu groups
            var groupHeadingTriggers = $('topicDisplayActions').getElementsByClassName('groupHeading actionMenuTrigger');
            for(i=0;i<groupHeadingTriggers.length;i++) {
                var nextTrigger = groupHeadingTriggers[i];
                var triggerId = nextTrigger.id;
                Event.observe(triggerId, 'click', Regulations.toggleActionMenuGroup.bindAsEventListener(Regulations));
            }

            // hook up the table of contents
            if($('hideTableOfContents') != null) {
                Event.observe('hideTableOfContents', 'click', function() {
                    Regulations.toggleTableOfContents(containerId);
                    RegulationsRemoting.setHidingTableOfContents();
                });
            }
            
            if($('showTableOfContents') != null) {
                Event.observe('showTableOfContents', 'click', function() {
                    Regulations.toggleTableOfContents(containerId);
                    RegulationsRemoting.setShowingTableOfContents();
                });
            }

            if($('hideNonDifferentRows') != null) {
                Event.observe('hideNonDifferentRows', 'click', function() {
                    Regulations.toggleNonDifferentRows(containerId);
                    RegulationsRemoting.setHidingNonDifferentRows();
                });
            }

            if($('showNonDifferentRows') != null) {
                Event.observe('showNonDifferentRows', 'click', function() {
                    Regulations.toggleNonDifferentRows(containerId);
                    RegulationsRemoting.setShowingNonDifferentRows();
                });
            }
        },
        showEditorTools: function(event) {
  
            $('showEditorTools').hide();
            $('hideEditorTools').show();
            var editPageTools = $('content').getElementsByClassName('editPageTools');
            for(i=0;i<editPageTools.length;i++) {
                var nextTool = editPageTools[i];
                var toolId = nextTool.id;
                
                if(useScriptaculous()) {
                    new Effect.Appear(nextTool);
                }
                else {
                    nextTool.show();
                }
            }
            
            RegulationsRemoting.setEditingPage();
        },
        hideEditorTools: function(event) {

            $('showEditorTools').show();
            $('hideEditorTools').hide();
            var editPageTools = $('content').getElementsByClassName('editPageTools');
            for(i=0;i<editPageTools.length;i++) {
                var nextTool = editPageTools[i];
                var toolId = nextTool.id;

                if(useScriptaculous()) {
                    new Effect.Fade(nextTool);
                }
                else {
                    nextTool.hide();
                }
            }
            
            RegulationsRemoting.setNotEditingPage();
        },
        showYourTrail: function(event) {

            $('showYourTrail').hide();
            $('hideYourTrail').show();
            var breadcrumbs = $('breadcrumbs');
            if(breadcrumbs != null) {
                if(useScriptaculous()) {
                    new Effect.SlideDown(breadcrumbs, {queue:'front', duration:0.5});
                }
                else {
                    breadcrumbs.show();
                }
            }

            RegulationsRemoting.setShowTrail();
        },
        hideYourTrail: function(event) {

            $('showYourTrail').show();
            $('hideYourTrail').hide();
            var breadcrumbs = $('breadcrumbs');
            if(breadcrumbs != null) {
                if(useScriptaculous()) {
                    new Effect.SlideUp(breadcrumbs, {queue:'front', duration:0.5});
                }
                else {
                    breadcrumbs.hide();
                }
            }
            RegulationsRemoting.setHideTrail();
        },
        toggleDiffMenu : function(event) {

            var id = Event.element(event).id;

            var menuId = id.split("_")[1];
            var menu = $('diffMenu_' + menuId);

            if(menu.visible()) {
                new Effect.SlideUp(menu, {queue:'front', duration:0.5});
            }
            else {
                new Effect.SlideDown(menu, {queue:'front', duration:0.5});
            }
        },
        highlightDiffColumns : function(event) {

            var id = Event.element(event).id;
            if(id != null && id != '' && (id.startsWith("diffMenuItem_") || id.startsWith("diffMenuLink_"))) {

                var split = id.split("_");
                var versionFrom = split[2];
                var versionTo = split[3];

                $('versionHeading_' + versionFrom).addClassName('showDifference');
                $('versionHeadingFixed_' + versionFrom).addClassName('showDifference');
                $('versionHeading_' + versionTo).addClassName('showDifference');
                $('versionHeadingFixed_' + versionTo).addClassName('showDifference');
            }
        },
        unhighlightDiffColumns : function(event) {

            var id = Event.element(event).id;
            if(id != null && id != '' && (id.startsWith("diffMenuItem_") || id.startsWith("diffMenuLink_"))) {

                var split = id.split("_");
                var versionFrom = split[2];
                var versionTo = split[3];

                $('versionHeading_' + versionFrom).removeClassName('showDifference');
                $('versionHeadingFixed_' + versionFrom).removeClassName('showDifference');
                $('versionHeading_' + versionTo).removeClassName('showDifference');
                $('versionHeadingFixed_' + versionTo).removeClassName('showDifference');
            }
        }
    };

    function getUrlParameter(name) {
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( window.location.href );
        if( results == null )
            return "";
        else
            return results[1];
    }
    
    function goToAnchor(anchorName) {
        var anchorElements = $('content').select('a[name="'+anchorName+'"]');
        if(anchorElements.length > 0) {
            var targetElement = anchorElements[0];
            var targetId = targetElement.id;
            var relativeLocation = Position.page($(targetId))
            var scrollY = relativeLocation[1];
            var topScrollPadding = getDefaultScrollPadding();
            if ('function' == typeof window.getFixedHeaderSize) {
                topScrollPadding = topScrollPadding + getFixedHeaderSize();
            }
            scrollY = scrollY - topScrollPadding;
            window.scrollBy(0,scrollY); // horizontal and vertical scroll increments
            //scrolldelay = setTimeout('pageScroll()',100); // scrolls every 100 milliseconds
        }
    }

    function validateRelatedDocumentForm(theForm) {

        var msg = '';

        var market1 = theForm.market1;
        var marketSelected = false;
        for(var i=0; i<market1.length; i++) {
            if(market1[i].checked)
                marketSelected = true;
        }

        var documentType = theForm.docType;
        var documentTypeSelected = false;
        for(var i=0; i<documentType.length; i++) {
            if(documentType[i].checked)
                documentTypeSelected = true;
        }

        if(!marketSelected && !documentTypeSelected) {
            msg = 'Please select a market and a document type to view related documents.';
            alert(msg);
        }
        else if(!marketSelected) {
            msg = 'Please select a market to view related documents.';
            alert(msg);
        }
        else if(!documentTypeSelected) {
            msg = 'Please select a document type to view related documents.';
            alert(msg);
        }

        return marketSelected && documentTypeSelected;
    }

    function selectAllCheckboxes(containerId) {
        var allCheckboxes = $(containerId).select('input[type="checkbox"]');
        for(var i=0; i<allCheckboxes.length; i++) {
            allCheckboxes[i].checked = true
        }
    }

    function unSelectAllCheckboxes(containerId) {
        var allCheckboxes = $(containerId).select('input[type="checkbox"]');
        for(var i=0; i<allCheckboxes.length; i++) {
            allCheckboxes[i].checked = false
        }
    }

 
