/* -*- coding: utf-8-unix; -*-
 * Pre-initialization script.
 *
 * @package webbadges
 * @author 252523.net (webmaster@www.252523.net)
 * @copyright (c) 252523.net(http://www.252523.net)
 * @version $Id: application.js 20 2007-04-08 07:09:32Z tarousan $
 * Last-Modified: 2007-04-08 07:41:21 JST
 */



document.getElementsByClassName = function(className, parentElement) {
  var children = (document.getElementById(parentElement) || document.body).getElementsByTagName('*');
  var results =[];
  for (var i=0;i < children.length;i++){
    if (children[i].className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      results.push(children[i]);
  }
  return results;
};


var globalTarget = new Object;

function ToggleLink()
{
    var self = this;
    return self.initialize();
}
ToggleLink.prototype = {
    initialize : function()
    {
        var self = this;
        var d = document;
        var switches = document.getElementsByClassName('linkSw');
        for (var i=0,t; t = switches[i]; i++) {
            var pId = t.id;
            var str = t.innerHTML;
            t.onclick = self.toggleInit(t.id + 'Block');
        }
        return self;
    },
    toggleInit : function(num)
    {
        var self = this;
        return function() { new Effect.toggle($(num),'appear'); return false; }
    }
};


function ToggleBox()
{
    var self = this;
    self._ancs = new Array();
    return self.initialize();
}
ToggleBox.prototype = {
    initialize : function()
    {
        var switches = document.getElementsByClassName('badgeSw');
        for (var i=0,t; t = switches[i]; i++) {
            t.onclick = this.toggleInit( t.id );
        }
    },
    toggleInit : function(num)
    {
        var self = this;
        return function() { self.toggleBlock(num); return false; }
    },
    toggleBlock : function(id)
    {
      var self = this;
      var target = id + 'Block';
      var t = document.getElementById( id + 'Block' );
      globalTarget = $(target);

      $(id).className = ( $(id).className == 'badgeSw' ) ? 'badgeSws': 'badgeSw';

      if(!t.getAttribute('opened')){
          var params = 'category=' + id;
          var myAjax =
            new Ajax.Request(
                             'create_html.php',
                             {
                                 method: 'get',
                                 parameters: params,
                                 onLoading: this.onloadingAction,
                                 onComplete: this.completeAction
                             });
          t.setAttribute( 'opened', 'true' );
      }else{
          new Effect.toggle($(target),'appear');
      }
    },
    onloadingAction : function()
    {
        globalTarget.innerHTML = '<div class="indicator"><img src="images/indicator.gif" /> Loading...</div>';
    },
    completeAction : function(request)
    {
        globalTarget.innerHTML = request.responseText;
        verticalArr = document.getElementsByClassName('vertical', globalTarget.id);
        for (var i=0,v; v=verticalArr[i]; i++){
            Element.hide(v);
            var catId = 'category'+globalTarget.id+i;
            v.id = catId;
            var p = document.createElement('p');
            p.className = 'showvertical';
            p.id = catId+'showVertical';
            var a = document.createElement('a');
            a.appendChild(document.createTextNode("also available Vertical buttons."));
            p.appendChild(a);
            v.parentNode.insertBefore(p, v);
            a.onclick = function(){
                Effect.BlindDown( this.parentNode.id.replace(/showVertical$/,"") );
                Element.hide( this.parentNode );
            };
        }
    }
};


function prepareReplace(){
  linkSws = document.getElementsByClassName('linkSw');
  for (var i=0,child; child=linkSws[i]; i++){
    var str = child.innerHTML;
    child.style.color = '#09f';
    child.style.cursor = 'pointer';
    document.getElementById( child.id + 'Block' ).style.display = 'none';
  }
}

Event.observe(window,"load",function() {
    if (!document.getElementsByTagName) return;
    prepareReplace();
    new ToggleLink();
    new ToggleBox();
});


