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

var arrow_right = new Image();
var arrow_down = new Image();
var link_break_icon = new Image();
var link_go_icon = new Image();
arrow_right.src = "/images/icons/arrow-right.gif";
arrow_down.src = "/images/icons/arrow-down.gif";
link_break_icon.src = "/images/icons/link_break.gif"
link_go_icon.src = "/images/icons/link_go.gif"

Array.prototype.in_array = function( what ) {
	for( var a = 0; a < this.length; a++ ) {
		if( this[a] == what ) {
			return true;
		} else if( this[a] instanceof Array ) {
			return this[a].in_array( what );
		}
	}
	return false;
}

// redefining Ajax.PeriodicalUpdater to add a max_decay option
Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);
	this.maxFrequency = (this.options.maxFrequency || this.frequency);

    this.updater = { };
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay = (response.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = response.responseText;
    }
    this.timer = this.onTimerEvent.bind(this).delay(Math.min(this.decay * this.frequency, this.maxFrequency));
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});

function number_to_currency(number, options){
	try {
		var options = options || {};
		var precision = options["precision"] || 2;
		var unit = typeof(options["unit"]) == 'undefined' ? "$" : options["unit"];
		var separator = precision > 0 ? options["separator"] || "." : "";
		var delimiter = options["delimiter"] || ",";
		
		var parts = parseFloat(number).toFixed(precision).split('.');
		return unit + number_with_delimiter(parts[0], delimiter) + separator + parts[1].toString();
	} 
	catch (e) {
		return number
	}
}
	
function number_with_delimiter(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
	}
}

function popper(thisUrl,thisWidth,thisHeight,thisTop,thisLeft) {
	optionString = ('width=' + thisWidth + ',height=' + thisHeight + ',top=' + thisTop + ',left=' + thisLeft + ',status=no,menubar=no,resizable=no,scrollbars=yes');
	mainWin = window.open(thisUrl,"inquiry",optionString);
}

function toggle_activity_display(event) {
	var target = Event.element(event);
	
	if (target.tagName == 'IMG') {
		results = target.id.match(/arrow_(\d+)$/);
		activity_id = results[1];

		if (results) {
			var arrow = target;
			if (arrow.src == arrow_right.src) {
				arrow.src = arrow_down.src;
			} else {
				arrow.src = arrow_right.src;
			}
			el = $('activity_'+activity_id);
			if (gActivities[activity_id]) {
				el.toggle();
			} else {
				var url = gURL+'?activity_id='+activity_id;
				if (gParams && gParams.length > 0) {
					for (var i = 0; i < gParams.length; i++) {
						if (typeof(gParams[i]) == 'object' && Object.isHash(gParams[i])) {
							url = url + '&' + gParams[i].get('name') + '=' + gParams[i].get('value');
						} else {
							url = url + '&' + gParams[i] + '=' + $(gParams[i]).value;
						}
						
					}
				}

				gLoader = 'activity_'+activity_id;
				new Ajax.Request(url, {
				  method: 'get',
				  onSuccess: function(transport) {
					  el.innerHTML = transport.responseText;
					  gActivities[activity_id] = true;
				  },
				  onLoading: function() {
					el.toggle();
					arrow.src = arrow_down.src;
					$(gLoader).innerHTML = '<img src="/images/icons/spinner.gif" alt="" />';
				  }
				});
			}
		}
	}
}

function check_rank_selection(me, max_rank, activity_time_ids) {
	for (i = 0; i< activity_time_ids.length;  i++) {
		id = "selections_" + activity_time_ids[i] + "_" +me.value;
		el = $(id);
		if (id != me.id && el.checked) {
			el.checked = false;
		}
	}
}

function toggleArrow(arrow) {
	arrow.next().toggle();
	if ( arrow.next().visible() ) {
	    arrow.addClassName('expanded');
	    arrow.down('img').replace('<img src="/images/icons/arrow-down.gif" alt="hide section" />');
	} else {
	    arrow.removeClassName('expanded');
	    arrow.down('img').replace('<img src="/images/icons/arrow-right.gif" alt="show section" />');
	}
}

function toggleTarget(event) {
  // NOTE:  Within an event handler, 'this' always refers to the element they are registered on.
  var url = this.getAttribute("url");
  var arrow = this;
  if (url == null || arrow.next().visible()) {
  	toggleArrow(arrow);
  } else {
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport){
			arrow.next().innerHTML = transport.responseText;
			toggleArrow(arrow);
		},
		onLoading: function(){
			arrow.down('img').replace('<img src="/images/icons/spinner.gif" alt="loading..." />');
		}
	});
  }
}

document.observe('dom:loaded', function() {
  var triggers = $$('.trigger');
  for (var i = 0, len = triggers.length; i < len; ++i) {
    triggers[i].insert({ top: '<img src="/images/icons/arrow-right.gif" alt="show section" />' });
    triggers[i].next().hide();
    triggers[i].observe('click',toggleTarget);
  }
  var expandeds = $$('.expanded');
  for (var i = 0, len = expandeds.length; i < len; ++i) {
    expandeds[i].insert({ top: '<img src="/images/icons/arrow-down.gif" alt="hide section" />' });
    expandeds[i].addClassName('trigger');
    expandeds[i].observe('click',toggleTarget);
  }
});
