/**
 * Prototype extension
 *
 * @package    Skeletor
 * @copyright  Copyright (c) 2005-2006 Quicken Loans, Inc. (http://www.quickenloans.com)
 */

/**
 * PeriodicalExecuter extensions
 *
 * @author James Gregory
 * @link   http://blog.jagregory.com/articles/2006/01/09/prototype-periodicalexecuter-stop-javascript-function
 */

PeriodicalExecuter.prototype.registerCallback = function() {
    this.intervalID = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
}

PeriodicalExecuter.prototype.stop = function() {
    clearInterval(this.intervalID);
}

/**
 * Form.Element.Serializers extensions
 *
 * Overrides selectOne method to return the value of a select box,
 * not the text
 */

Object.extend(Form.Element.Serializers, {
    selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = [];
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected)
        value.push(opt.value);
    }
    return [element.name, value];
  }
});


Object.extend(Event, {
    KEY_SHIFT: 16,
    KEY_CAPS_LOCK: 20,
    KEY_END: 35,
    KEY_HOME: 36,
    KEY_INSERT: 45,
    KEY_DELETE: 46,
    KEY_NUMPAD_0: 96,
    KEY_NUMPAD_1: 97,
    KEY_NUMPAD_2: 98,
    KEY_NUMPAD_3: 99,
    KEY_NUMPAD_4: 100,
    KEY_NUMPAD_5: 101,
    KEY_NUMPAD_6: 102,
    KEY_NUMPAD_7: 103,
    KEY_NUMPAD_8: 104,
    KEY_NUMPAD_9: 105,
    KEY_NUMPAD_DECIMAL_POINT: 110,
    KEY_NUMLOCK: 144,
    KEY_COMMA: 188,
    KEY_PERIOD: 190
});

// Adapted from DOM Ready extension by Dan Webb
// http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
// which was based on work by Matthias Miller, Dean Edwards and John Resig
//
// Usage:
//
// Event.onReady(callbackFunction);
Object.extend(Event, {
  _domReady : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;

    if (Event._timer)  clearInterval(Event._timer);
    
    Event._readyCallbacks.each(function(f) { f() });
    Event._readyCallbacks = null;
    
  },
  onDOMReady : function(f) {
    if (!this._readyCallbacks) {
      var domReady = this._domReady;
      
      if (domReady.done) return f();
      
      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", domReady, false);
        
        /*@cc_on @*/
        /*@if (@_win32)
            var dummy = location.protocol == "https:" ?  "https://javascript:void(0)" : "javascript:void(0)";
            document.write("<script id=__ie_onload defer src='" + dummy + "'><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") { domReady(); }
            };
        /*@end @*/
        
        if (/WebKit/i.test(navigator.userAgent)) { 
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) domReady(); 
          }, 10);
        }
        
        Event.observe(window, 'load', domReady);
        Event._readyCallbacks =  [];
    }
    Event._readyCallbacks.push(f);
  }
});