
/*
 * GRI Index accordian javascripts
 * 22 July, 2008
 */


            document.observe("dom:loaded", function() {
                            
                          // alert('the document is just being loaded');
                           //attachEventListnersToTitles('accordian_container', 'accordian_header');
                           attachEventListnersToTitles('GRI', 'accordian_header');
                           attachEventListnersToTitles('GRI_a', 'accordian_header');
                       
                            //hideAll_acClass('accordian_container', 'accordian_content');
                            //closeAll('accordian_container','accordian_header','accordian_content');
                            closeAll('GRI','accordian_header','griTable');
                            closeAll('GRI_a','accordian_header','griTable');
                         
                            //make the accordian class visible
                            //openFirst('accordian_container','accordian_header','accordian_content');
                               
                            openFirst('GRI','accordian_header','griTable');
                            openFirst('GRI_a','accordian_header','griTable');
                    
                            //attach event handler to showAll anchor;
                            var showAll = getElements('a', 'showAll');

                                 
                            if(showAll){
                                for (i = 0, j = showAll.length; i < j; i++) {
                                    showAll[i].onclick = function(){
                                        openAll('GRI', 'accordian_header', 'griTable');
                                    }
                                }
                            }                            

                            //attach event handler to hideAll anchor;
                            var hideAll = getElements('a', 'hideAll');
                                    
                            if(hideAll){
                                for (i = 0, j = hideAll.length; i < j; i++) {
                                    hideAll[i].onclick = function(){
                                        closeAll('GRI', 'accordian_header', 'griTable');
                                    }
                                }
                            }                            



                            //attach event handler to showAll_a anchor;
                            var showAll_a = getElements('a', 'showAll_a');

                                 
                            if(showAll_a){
                                for (i = 0, j = showAll_a.length; i < j; i++) {
                                    showAll_a[i].onclick = function(){
                                        openAll('GRI_a', 'accordian_header', 'griTable');
                                    }
                                }
                            }                            

                            //attach event handler to hideAll_a anchor;
                            var hideAll_a = getElements('a', 'hideAll_a');
                                    
                            if(hideAll_a){
                                for (i = 0, j = hideAll_a.length; i < j; i++) {
                                    hideAll_a[i].onclick = function(){
                                        closeAll('GRI_a', 'accordian_header', 'griTable');
                                    }
                                }
                            }                            




            });
            
            //open all the accordian_content elements / show them
            //open all the contents and change the title status
            function openAll(accordianID, accordianTitleClass, accordianContentClass){
                      var nodes = $(accordianID).getElementsByClassName(accordianContentClass)
                        $A(nodes).each(function(cnode){
                                    // add the 'visible' class to the contentBox
                                    if(!cnode.hasClassName('visible')){ cnode.addClassName('visible'); }
                                    //show the contentBox
                                    cnode.show();
                                        //add the open title class from the accordian headings
                                        var nodes = $(accordianID).getElementsByClassName(accordianTitleClass)
                                        $A(nodes).each(function(hnode){
                                                 if(!hnode.hasClassName('opened')){ hnode.addClassName('opened'); }
                                        });
                        });
            }
        
        
        function openFirst(accordianID, accordianTitleClass, accordianContentClass){
               
             
              var firstNodeA = $(accordianID).getElementsByClassName(accordianContentClass);
              var  firstNode = firstNodeA[0];
               
              // alert('here'+ firstNode.className);
                if (firstNode) {
                        if (!firstNode.hasClassName('visible')) {
                            firstNode.addClassName('visible');
                        }
                        //show the contentBox
                        firstNode.show();
                }
                    
               
               var firstNodeA = $(accordianID).getElementsByClassName(accordianTitleClass);
               var  firstNode = firstNodeA[0];
                if (firstNode) {
                // alert('here'+firstNode.innerHTML);
                    if (!firstNode.hasClassName('opened')) {
                        firstNode.addClassName('opened');
                    }
                }  
        }
        
        
            //close all the contents and change the title status
            function closeAll(accordianID, accordianTitleClass,accordianContentClass){
                        //hide all the contents
                      var nodes = $(accordianID).getElementsByClassName(accordianContentClass)
                        $A(nodes).each(function(cnode){
                                    if(cnode.hasClassName('visible')){ cnode.removeClassName('visible'); }
                                    cnode.hide();
                                    
                        });
             
                        //remove the open title class from the accordian headings
                         var nodes = $(accordianID).getElementsByClassName(accordianTitleClass)
                                        $A(nodes).each(function(hnode){
                                                            // alert(c.nodeName+': '+c.innerHTML);
                                    if(hnode.hasClassName('opened')){ hnode.removeClassName('opened'); }
                        });
            }
        
         
         //attach event listners to the accordian titles
         function attachEventListnersToTitles(accordianID, accordianTitleClass){
                //get all the title event listners
                var nodes = $(accordianID).getElementsByClassName(accordianTitleClass)
                $A(nodes).each(function(hnode){
                                    hnode.observe('click', accordianTitleEventListner.bindAsEventListener(this,'kaat'));
                        });
         }   
            

            //eventlistner for the accordian titles
            function accordianTitleEventListner(evnt,msg){
                   //alert( elem.className+ " : yep"+msg);
                   el = Event.element(evnt);     //this gets the class name of the object on which this event occoured
                   
                   el.toggleClassName('opened');
                  
                  
                  if(el.hasClassName('opened')){
                      if(el.next('.accordian_content',0).hasClassName('accordian_content')){
                            el.next('.accordian_content',0).addClassName('visible').show();;
                      }else{
                         //   el.next('.accordian_content',0).addClassName('hidden').hide();;
                      }
                      // el.toggleClassName('opened');
                  }else{
                    //  alert('nohas');
                      if(el.next('.accordian_content',0).hasClassName('accordian_content')){
                            el.next('.accordian_content',0).removeClassName('visible').hide();
                            //el.next('.accordian_content',0).addClassName('visible').show();
                      }else{
                            //el.next('.accordian_content',0).addClassName('hidden').hide();
                      }
                  }
                 
            }


            function FirstTimeKeepOpen(titleID, contentID){
                    $(titleID).show();
                            if(! ($(titleID).hasClassName('opened'))){ $(titleID).addClassName('opened'); }
                    $(contentID).show();
                            if(! ($(contentID).hasClassName('visible'))){ $(contentID).addClassName('visible'); }
            }


            //set the style of all the accordian_contents to hidden
          function hideAll_acClass(accordianID, accordianContentClass){
                      var nodes = $(accordianID).getElementsByClassName(accordianContentClass)
                        $A(nodes).each(function(c){
                                    // alert(c.nodeName+': '+c.innerHTML);
                                    c.hide();
                        });
              }



            //get all the accordian_content classes within the ID=accordian_container and show their content
            //status: workerd fine
            function accordian_contents(accordianID,container_class){
                var nodes = $(accordianID).getElementsByClassName(container_class)
                $A(nodes).each(function(c){
                    alert(c.nodeName+': '+c.innerHTML);
                });
            }
        



            //show the container hash for id= accordian_container
            // printst the HTML ELEMENT, InnerHTML, and its className
            //status: worked fine
            function accordian_hash(accordianID){
                var nodes = $(accordianID).descendants();
                
                nodes.each(function(node){ 
                    alert(node.nodeName + ': ' + node.innerHTML+': - class name : '+node.className);       
                });

            }


        function hasClass(ele,cls) {   return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));       }

       //Returns an Array, of given elements having the given class name
       //this is a type of getElementByClassName method , but it even takes in the element name that you are looking to be having
       //the given class name. this is much more precise
        
       var getElements = function(tag, classname){
           //this is in case the classname is not given
           (typeof classname == 'undefined')? classname ='': null;
           
           //get references to all the given elements
           var elements = document.getElementsByTagName(tag);
           var element = new Array(); 
           
            //push the matching elements
           for( var i = k = 0, j = elements.length; i < j ; i++){
               // match the className of the element. if it matches, return the element reference            
               if (elements[i].className.match(new RegExp('(\\s|^)' + classname + '(\\s|$)'))) {
                   element[k] = elements[i];
                   k++;
               }    
           }
          elements = null;
          if (element.length > 0) {
              return element;
          } else {
              return false;
          }  
       }


