// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

// oldPaymentMethod = 'saved_card_radio_button';
// var AccountFund = {
//  paymentMethodSelected : function() {
//    if ( $('saved_card_radio_button').checked ) {
//      if ( oldPaymentMethod != 'saved_card_radio_button' ) {
//        new Effect.BlindUp('credit_card', { duration: 0.5 } );
//        $('card_select').enable();
//        oldPaymentMethod = 'saved_card_radio_button';
//      }
//    }
//    else {
//      if ( oldPaymentMethod != 'new_card_radio_button' ) {
//        $('card_select').disable();
//        new Effect.BlindDown('credit_card', { duration: 0.5 } );
//        oldPaymentMethod = 'new_card_radio_button';
//      }
//    }
//  }
// };

Array.prototype.compare = function(testArr) {
    if (this.length != testArr.length) return false;

	var thisArr = this.sort(function(a,b) {return a - b});
	testArr = testArr.sort(function(a,b) {return a - b});

    for (var i = 0; i < testArr.length; i++) {
        if (thisArr[i].compare) { 
            if (!thisArr[i].compare(testArr[i])) return false;
        }
        if (thisArr[i] !== testArr[i]) return false;
    }
    return true;
}

Number.prototype.toCurrency = function(floatPoint, decimalSep, thousandsSep, unit)
{
	var n = this;
	var c = isNaN(c = Math.abs(floatPoint)) ? 2 : c
	var d = decimalSep == undefined ? "." : decimalSep
	var t = thousandsSep == undefined ? "," : thousandsSep
	var i = parseInt(n = (+n || 0).toFixed(c)) + ''
	var j = (j = i.length) > 3 ? j % 3 : 0;
	return (unit == undefined ? '$': unit) + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + (n - i).toFixed(c).slice(2) : '');
};

Number.prototype.withDelimiter = function(number, delimiter, separator)
{
  try {
    var delimiter = delimiter || ",";
    var separator = separator || ".";
   
    var parts = number.toString().split('.');
    parts[0] = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1" + delimiter);
    return parts.join(separator);
  } catch(e) {
    return number
  }
}

var Person = Class.create();
Person.prototype = {
	initialize : function(id, name, positionCode, franchiseShortName, effectiveCapNumber, currentCapNumber) {
		this.id = parseInt(id);
		this.name = name;
		this.positionCode = positionCode;
		this.franchiseShortName = franchiseShortName;
		this.effectiveCapNumber = parseInt(effectiveCapNumber);
		this.currentCapNumber = parseInt(currentCapNumber);
	},
	
	domId : function() {
	  return 'person_' + this.id;
	}
};

// Performance of Prototype in IE 6 blows really hard.
// So I have replicated some of the Prototype functions here
// and removed the line of code that hurts IE6 performance
// most (the line that extends the element with all Prototype
// Element functions).
var DOM = {
  
  visible: function(element) {
    return element.style.display != 'none';
  },

  hasClassName: function(element, className) {
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!DOM.hasClassName(element, className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },

  // Below this line (in DOM module) are non-Prototype convenience methods.

  reclassifyEvenOddTableRows: function(table) {
    rows = $(table).select('tbody tr');
        
    var visibleCount = 0;
    for (var index = 0; index < rows.length; ++index) {
      tr = rows[index];
      if (DOM.visible(tr)) {
        visibleCount += 1;
        if (visibleCount % 2 == 1 && DOM.hasClassName(tr, 'even')) {
          DOM.removeClassName(tr, 'even');
          DOM.addClassName(tr, 'odd');
        }
        if (visibleCount % 2 == 0 && DOM.hasClassName(tr, 'odd')) {
          DOM.removeClassName(tr, 'odd');
          DOM.addClassName(tr, 'even');
        }
      }
    }
  },

  cancelLink: function() {
    return false;
  },

  disableLink: function(link) {
    link = $(link);
    if (link.hasClassName('disabled')) return;

    link.oldOnClick = link.onclick;
    link.onclick = DOM.cancelLink;
    link.addClassName('disabled');
  },

  enableLink: function(link) {
    link = $(link);
    if (!link.hasClassName('disabled')) return

    link.onclick = link.oldOnClick;
    link.removeClassName('disabled');
  },

  enableIE6Hoverables: function() {
    if (DOM._ie6HoverablesEnabled == true) return;

    Event.observe(window, 'load', function() {  
      if (!window.XMLHttpRequest) {  
        // IE6, older browsers
        $$('tr.hoverable').each( function(e) {  
          Event.observe(e, 'mouseover', function() {  
            Element.addClassName(e, 'hover');  
          });  
          Event.observe(e, 'mouseout', function() {  
            Element.removeClassName(e, 'hover');  
          });  
        });  
      }  
    });  
    DOM._ie6HoverablesEnabled = true;
  },
  
  loaded: function() {
    DOM._loaded = true;
  },
  
  isLoaded: function() {
    return (DOM._loaded == true);
  }
  
};

var Interface = {
  filterKeystrokesForFreerollCode: function(e) {
    var e = window.event || e
    var keyunicode = e.charCode || e.keyCode
    // Allow alphanueric keys, plus BACKSPACE.
    if ((keyunicode >= 65 && keyunicode <= 122) || (keyunicode >= 48 && keyunicode <= 57) || keyunicode == 8) {
      // if (keyunicode >= 97 && keyunicode <= 122)
      //   e.charCode = keyunicode - 32;
        return true;
    }
    else {
      return false;
    }
  }
};

document.observe('dom:loaded', function() {
  DOM.loaded();
});
