/**
 * BUILD PAC Registration
 * Pellucid Designs 2008
 * Using MooTools JS Framework
 *
 * When user clicks
 *
 */
 
window.addEvent('domready', function(e){
	
	var myTips = new Tips($$('.toolTipLink'), {
	        maxTitleChars: 150});
	
	
	// Click on any regular package
	$$('.packages .package').each( function(o){
		o.addEvent('click', function(r){
			var e = new Event(r);
			if( e.target.checked == true ){
				var n = new Number(e.target.value);	
				
				$('amount').innerHTML = "$"+ n.numberFormat();
			}
		});
	});
	
	// Click on 'other' amount radio button
	$('otherradio').addEvent('click', function(o){
		// Click on 'other' button
		var e = new Event(o);
		var n = getOtherAmount();
		$('amount').innerHTML = "$"+ n.numberFormat();	
	});
	
	// Click on other amount text field
	$('otheramount').addEvent('change', function(o){
		// Click on 'other' button
		$('otherradio').checked = true;
		var n = getOtherAmount();	
		$('amount').innerHTML = "$"+ n.numberFormat();										   
	});
	
	/*
	$('pac-form').addEvent('submit', function(o){
		return validateForm();								  
	});
	*/
});

function getOtherAmount(){
	if( $defined( $('otheramount') ) ){
		var s = $('otheramount').value;
		s = s.replace(/$/, "");
		s = s.replace(/,/,"");
		var ni = new Number(s);
		if( (ni == 0) && (s.length > 0) ){
			alert('Please enter a whole number amount in the custom donation text field.');	
		}
		$('otheramount').value = ni;
	}
	else{
		var ni = new Number(0);	
	}
	return ni;
}

/**
 * Validate form by required fields and insert small red popup box
 
 */
function validateForm(){
	var passed = true;
	$$('#pac-form .validationError').each( function(o){
		o.remove();
	});
	
	$$('#pac-form .required').each( function(o){
		
		if( o.value.length == 0 ){
			passed = false;
			(new Element('div', {
				'class':'validationError'			 
			}).setHTML('This field is required')).injectAfter( o );	
		}
	});
	
	// Stop form submission if any fields missing
	return passed;
}

Number.extend({
 
	/*
	Property: numberFormat
		Format a number with grouped thousands.
 
	Arguments:
		decimals, optional - integer, number of decimal percision; default, 2
		dec_point, optional - string, decimal point notation; default, '.'
		thousands_sep, optional - string, grouped thousands notation; default, ','
 
	Returns:
		a formatted version of number.
 
	Example:
		>(36432.556).numberFormat()  // returns 36,432.56
		>(36432.556).numberFormat(2, '.', ',')  // returns 36,432.56
	*/
 
	numberFormat : function(decimals, dec_point, thousands_sep) {
			decimals = Math.abs(decimals) + 1 ? decimals : 2;
			dec_point = dec_point || '.';
			thousands_sep = thousands_sep || ',';
 
			var matches = /(-)?(\d+)(\.\d+)?/.exec((isNaN(this) ? 0 : this) + ''); // returns matches[1] as sign, matches[2] as numbers and matches[2] as decimals
			var remainder = matches[2].length > 3 ? matches[2].length % 3 : 0;
			return (matches[1] ? matches[1] : '') + (remainder ? matches[2].substr(0, remainder) + thousands_sep : '') + matches[2].substr(remainder).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep) + 
					(decimals ? dec_point + (+matches[3] || 0).toFixed(decimals).substr(2) : '');
		}
 
 
});