var prevOnload = window.onload;
if( prevOnload ) {
    window.onload = function () { prevOnload(); Donations.initPrices(); }
}
else
{
    window.onload = function () { Donations.InitPrices(); }
}

var Donations = new Object();

Donations.InitPrices = function () {

    var frm    = document.forms['add2cart'];
    var inputs = frm.elements;
    var prefix = 'item_price-';
    var total  = 0;

    for( var i = 0; i < inputs.length; i++ ) {
		var input = inputs[i];
	
		if( input.name.substr( 0, prefix.length ) == prefix ) {

		    input.onblur = Donations.CalcTotal;
		}
    }

    Donations.CalcTotal();
}

Donations.CalcTotal = function () {

    var frm    = document.forms['add2cart'];
    var inputs = frm.elements;
    var prefix = 'item_price-';
    var total  = 0;
    
    for( var i = 0; i < inputs.length; i++ ) {
	var input = inputs[i];
	
	if( input.name.substr( 0, prefix.length ) == prefix ) {
		    var price = input.value;
	
		    var parsedPrice = Tools.ParseMoney( price );
		    if( parsedPrice ) total += (parsedPrice * 1);
		}
    } // foreach

    var totalInput = document.getElementById( 'total-donation' );
    if( totalInput ) {
		totalInput.value = Tools.FormatMoney( total + "" );
    }
    
} // InitPrices

var Tools = new Object();

Tools.ParseMoney = function ( money )
{
    var match_money  = /^ *\$? *([0-9, ]+(\.\d{1,2}|\.)?) *$/;
    var matches      = match_money.exec( money );
    
    var parsed_money = null;

    if( matches ) {
		parsed_money = matches[1].replace( ',', '' ).replace( ' ', '' );
    }
    
    return parsed_money;
} // Tools.ParseMoney

Tools.FormatMoney = function ( money )
{
    var formatted_money = money;

    var missing_zero = /^\d+\.\d$/;
    if( missing_zero.exec( money ) )
    {
		formatted_money += '0';
    }
    else if( (new String( formatted_money )).indexOf( '.' ) == -1 )
    {
		formatted_money += '.00';
    }

    formatted_money = '$' + Tools.Commify( formatted_money );

    return formatted_money;
} // Tools.FormatMoney

Tools.Commify = function ( number )
{
    var commified_number = number;

    commified_number = Tools.ReverseString( commified_number );
    commified_number = commified_number.replace( /(\d{3})(?=\d)(?!\d*\.)/g, "$1," );
    commified_number = Tools.ReverseString( commified_number );
    
    return commified_number;
} // Commify

Tools.ReverseString = function (str)
{
    str = new String( str );
    var reversed_string = null;

    if( str != null )
    {
		reversed_string = "";
	
		if( str.length > 0 ) {
		    for( var i = str.length-1; i >= 0; i-- ) {
			reversed_string += str.charAt( i );
		    }
		}
    }

    return reversed_string;
} // ReverseString

