/*
+---------------------------------------------------------------+
| League Manager by bugrain (www.bugrain.plus.com)
|
| A plugin for the e107 Website System (http://e107.org)
|
| Copyright 2007, Neil Harrison (AKA bugrain)
|
| $Source: /CVS_Repository/league_manager/league_manager.js,v $
| $Revision: 1.3.2.5 $
| $Date: 2009/09/02 23:18:16 $
| $Author: Owner $
+---------------------------------------------------------------+
*/
document.observe("dom:loaded", function() {
   // Set up any autocompleter fields

   // Goal sccorers
   $$("input.autocomplete").each(function(el) {
      new Ajax.Autocompleter(el.id, el.id+"_choices", "league_manager_ajax.php", {
         parameters: "id="+el.id
      });
   });

   // Watch out for...
   if ($('leagman_js_date_button')) {
      $('leagman_js_date_button').observe('click', function(ev) {
         if (ev.element().previous('input').getValue() != '') {
            var temp = ev.element().previous('input').getValue();
            $$('input[name^=ui_fixture_date]').invoke('setValue', temp);
         }
      });
   }
   if ($('leagman_js_time_button')) {
      $('leagman_js_time_button').observe('click', function(ev) {
         if (ev.element().previous('input').getValue() != '') {
            var temp = ev.element().previous('input').getValue();
            $$('input[name^=ui_fixture_time]').invoke('setValue', temp);
         }
      });
   }
   if ($('leagman_js_venue_button')) {
      $('leagman_js_venue_button').observe('click', function(ev) {
         if (ev.element().previous('select').getValue() != 0) {
            var temp = ev.element().previous('select').getValue();
            $$('select[name^=ui_fixture_venue]').invoke('setValue', temp);
         }
      });
   }
});

var leagmanHelper = {
   addFormHighlight : function (formid) {
      var firstEl = null;
      Form.getElements(formid).each(function(el) {
         if (Element.visible(el) && el.focus && el.type != "submit" && el.type != "button") {
            Event.observe(el, 'focus', function(el) {
               var el = el.srcElement;
               //if (el.tagName != "DIV" && el.tagName != "TD") {
               //   while (el.tagName != "DIV" && el.tagName != "TD" && el.tagName != "BODY") {
               //      el = $(el.parentNode);
               //   }
               //   if (el.tagName == "BODY") {
               //      return;
               //   }
               //}
               new Effect.Highlight(el);
               if (firstEl != null) {
                  firstEl = el;
               }
                  //new Effect.Highlight(el.srcElement);
            });
         }
      });
      Event.observe(window, "load", function(firstEl) {
         //TODO this doesn't work - attempting to force highlight effect on 1st elements container on page load
         new Effect.Highlight(firstEl);
      });
   },
   ajaxRequest : function (el) {
      e107Helper.logDebug("leagmanHelper.ajaxRequest()");
      if (el.value != "") {
         //e107Helper.logDebug(el.value);
         //e107Helper.logDebug(el.up("form"));
         //e107Helper.logDebug(el.up("form").serialize());
         e107HelperAjax.addParm("action", el.value);
         e107HelperAjax.addParms(el.up("form").serialize());
         e107HelperAjax.post("league_manager_ajax.php");
      }
      return false;
   },
   getClubDetails : function(event) {
      e107Helper.logDebug("leagmanHelper.getClubDetails()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "getclubdetails");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.post("league_manager_ajax.php");
      }
      return false;
   },
   getVenueDetails : function(event) {
      e107Helper.logDebug("leagmanHelper.getVenueDetails()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "getvenuedetails");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.post("league_manager_ajax.php");
      }
   },
   getFixtureSearchForm : function(event) {
      e107Helper.logDebug("leagmanHelper.getLeagueDetails()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "getfixturesearchform");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.post("league_manager_ajax.php");
      }
   },
   getFixtureDetails : function(event) {
      e107Helper.logDebug("leagmanHelper.getFixtureDetails()");
      e107HelperAjax.addParm("action", "getfixturedetails");
      e107HelperAjax.addParm("league", $("leagman_league").value);
      e107HelperAjax.addParm("date", $("leagman_date").value);
      e107HelperAjax.addParm("division", $("leagman_division").value);
      e107HelperAjax.addParm("club", $("leagman_club").value);
      e107HelperAjax.addParm("team", $("leagman_team").value);
      e107HelperAjax.addParm("game", this._getRadioButtonValue("leagman_game"));
      e107HelperAjax.addParm("venue", this._getRadioButtonValue("leagman_venue"));
      e107HelperAjax.post("league_manager_ajax.php");
   },
   getLeagueTableDetails : function(event) {
      e107Helper.logDebug("leagmanHelper.getLeagueDetails()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "getleaguetabledetails");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.post("league_manager_ajax.php");
      }
   },
   getPlayerList : function(event) {
      e107Helper.logDebug("leagmanHelper.getPlayerList()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "getplayerlist");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.post("league_manager_ajax.php");
      }
   },
   getPlayerDetailsForm : function(event) {
      e107Helper.logDebug("leagmanHelper.getPlayerDetailsForm()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "getplayerdetailsform");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.post("league_manager_ajax.php");
      }
   },
   savePlayerDetails : function(event) {
      e107Helper.logDebug("leagmanHelper.savePlayerDetails()");
      if (event.srcElement.value != "") {
         e107HelperAjax.addParm("action", "saveplayerdetails");
         e107HelperAjax.addParm("id", event.srcElement.value);
         e107HelperAjax.addParms($("leagman_player_details_form").serialize());
         e107HelperAjax.post("league_manager_ajax.php");
      }
   },
   _getRadioButtonValue : function (name) {
      var els = document.getElementsByName(name);
      for (var i=0; i<els.length; i++) {
         if (els[i].checked) {
            return els[i].value;
         }
      }
      return "";
   },
   togglePanel : function (event, type) {
      e107Helper.logDebug("togglePanel()");
      //Event.stop(event);
      var el = event.findElement();
      // Don't activate if a real link was clicked
      if (el.tagName == "A" && el.hasClassName("leagman_navigate")) {
         return;
      }
      // Make sure we have a reference to the containing DIV
      if (el.tagName != "DIV") {
         while (el.tagName != "DIV" && el.tagName != "BODY") {
            el = $(el.parentNode);
         }
         if (el.tagName == "BODY") {
            return;
         }
      }
      var nextEl = el.next()
      if (nextEl.visible()) {
         el.addClassName("leagman_toggle_closed");
         switch (type) {
            case "slideright" : {
               Effect.SlideRightOutOfView(nextEl, {duration : 0.5});
               break;
            }
            default : {
               Effect.BlindUp(nextEl, {duration : 0.5});
            }
         }
      } else {
         el.removeClassName("leagman_toggle_closed");
         switch (type) {
            case "slideright" : {
               Effect.SlideRightIntoView(nextEl, {duration : 0.5});
               break;
            }
            default : {
               Effect.BlindDown(nextEl, {duration : 0.5});
            }
         }
      }
   },
   toggleDetails : function (event, next) {
      e107Helper.logDebug("toggleDetails()");
      Event.stop(event);
      var el = $(event.srcElement).up().next();
      el.select('.leagman_toggle').each(function(div) {
         div = next ? div.next() : div;
         if (div.visible()) {
            Effect.BlindUp(div, {duration : 0.5});
         } else {
            Effect.BlindDown(div, {duration : 0.5});
         }
      });
   }
}

Effect.SlideRightIntoView = function(element) {
  $(element).style.width = '0px';
  $(element).style.overflow = 'hidden';
  //$(element).firstChild.style.position = 'relative';
  Element.show(element);
  new Effect.Scale(element, 100,
    Object.extend(arguments[1] || {}, {
      scaleContent: false,
      scaleY: false,
      scaleMode: 'contents',
      scaleFrom: 0,
      afterUpdate: function(effect){}
    })
  );
}

Effect.SlideRightOutOfView = function(element) {
  $(element).style.overflow = 'hidden';
  //$(element).firstChild.style.position = 'relative';
  Element.show(element);
  new Effect.Scale(element, 0,
    Object.extend(arguments[1] || {}, {
      scaleContent: false,
      scaleY: false,
      afterUpdate: function(effect){},
      afterFinish: function(effect)
        { Element.hide(effect.element); }
    })
  );
}

Effect.SlideLeftIntoView = function(element) {
  $(element).style.width = '0px';
  $(element).style.overflow = 'hidden';
  //$(element).firstChild.style.position = 'relative';
  Element.show(element);
  new Effect.Scale(element, 100,
    Object.extend(arguments[1] || {}, {
      scaleContent: false,
      scaleY: false,
      scaleMode: 'contents',
      scaleFrom: 0,
      afterUpdate: function(effect){}
    })
  );
}

Effect.SlideLeftOutOfView = function(element) {
  $(element).style.overflow = 'hidden';
  //$(element).firstChild.style.position = 'relative';
  Element.show(element);
  new Effect.Scale(element, 0,
    Object.extend(arguments[1] || {}, {
      scaleContent: false,
      scaleY: false,
      afterUpdate: function(effect){},
      afterFinish: function(effect)
        { Element.hide(effect.element); }
    })
  );
}

Effect.SlideLeftAndRight = function(element) {
  element = $(element);
  if(Element.visible(element)) new Effect.SlideRightOutOfView(element);
  else new Effect.SlideRightIntoView(element);
}
Effect.divSwap = function(element, container, duration){
   var div = $(container);
   var nodeList = div.childNodes;
   var queue = Effect.Queues.get('menuScope');
   if (typeof duration == "undefined") {
      duration = "1.0";
   }

   if (queue.effects.length < 1) {
      if (Element.visible(element) == false) {
         for (i=0; i<nodeList.length; i++) {
            if (nodeList.item(i).nodeName == "DIV" && nodeList.item(i).id != element) {
               if (Element.visible(nodeList.item(i)) == true) {
                  Effect.SlideUp(nodeList.item(i),{duration:duration,queue:{position:'end',scope:'menuScope',limit:2}})
               }
            }
         }
         Effect.SlideDown(element,{duration:duration,queue:{position:'end',scope:'menuScope',limit:2}})
      }
   }
}
