var defaultSubtext;


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function highlightTab(block) {
  defaultSubtext.style.display = 'none'
  $(block).style.display = 'block'
}

function restoreDefault(hide) {
  $(hide).style.display = 'none';
  defaultSubtext.style.display = 'block';
}

Event.observe(window, 'load', function() {
  defaultSubtext = document.getElementsByClassName("subtext-selected")[0];
});


function formatCurrency(num) {
   //num = num.toString().replace(/\$|\,/g,'');
   if(isNaN(num))
     num = "0";
   num = Math.floor(num*100+0.50000000001);
   var cents = num%100;
   num = Math.floor(num/100).toString();
   if(cents<10)
     cents = "0" + cents;
   for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
     num = num.substring(0,num.length-(4*i+3))+','+
     num.substring(num.length-(4*i+3));
   }
   return (num + '.' + cents);

}

function parseCurrency(num) {
   return num.toString().replace(/\$|\,/g,'');
}

var ContributeCollect = {
    update_amounts : function() {
        var lineitems = document.getElementsByClassName("recipients-lineitem");
        var total = 0;

        // start by summing the individual amounts, set either manually or
        // by parameter.
        lineitems.each(function(lineitem) {
            var lineitem_value = parseFloat(parseCurrency(lineitem.value));
            var entity = ContributeCollect.get_entity_for_lineitem(lineitem);
            var contribution_limit = parseInt(entity.readAttribute('contribution_limit'))/100;
            if (lineitem_value > contribution_limit) {
               $('entity-' + entity.readAttribute('entity-id') + '-error-message').innerHTML = "Contribution exceeds the $"+ formatCurrency(contribution_limit) + " limit.";
            } else {
                if (lineitem_value > 0) {
                    total = total + lineitem_value;
                }
                $('entity-' + entity.readAttribute('entity-id') + '-error-message').innerHTML = ""; 

            }
        });

        $('recipients-total').innerHTML = formatCurrency(total);
    },

    get_entity_for_lineitem : function(element){
       return element.ancestors().find(function(e){ return e.hasClassName('entity-lineitems'); });
    }
};



var entities = new Array();

function update_entity_amounts(){
    entities = new Array();
    build_limits_hash();
    var amount = parseInt($('contribute-amount-top').value*100);
    spread_amounts(amount, defaults['minimum_contribution']);
    write_entities_hash();
}

function build_limits_hash(klass){
    //set the default klass to entityWrap
    klass = typeof(klass) != 'undefined' ? klass : '.entityWrap';

    var entity_divs = $$(klass)
    entity_divs.each(function(value, index){
        var entity = new Array();
        entity['limit'] = value.readAttribute('contribution_limit');
        entity['id'] =  value.readAttribute('id');
        entity['donate'] = (value.readAttribute('donate') == 'true');
        entity['amount'] = 0;
        if(entity['donate']){
            entities.push(entity);
        }
    });

}

function write_entities_hash(){
  var total = 0;
  entities.each(function(entity, index) {
    var id = 'recipients_' + entity['id'].split('-')[1];
    $(id).value = formatCurrency(entity['amount']/100);
    total = entity['amount'] + total;
  });
  if (total == 0) {
    $('contribution-status-message').innerHTML = "";
  } else if (total < 100) {
    $('contribution-status-message').innerHTML = "<div class=\"content\">The minimum contribution is $" + defaults['minimum_contribution']/100 +"</div>";
  } else if ( total < (entities.length * 100)){
    $('contribution-status-message').innerHTML = "<div class=\"content\">The minimum contribution is $" + defaults['minimum_contribution']/100 +" per recipient, so not all recipients will receive funds.  If you wish, you may increase or modify individual amounts of your contribution below.</div>"
  } else if ( entities.length > 1) {
    $('contribution-status-message').innerHTML = "<div class=\"content\">Your contribution has been distributed among the "+ defaults['site_entities_term'] +" below.</div>"  
  }
  $('contribute-amount-bottom').innerHTML = formatCurrency(total/100);

}

function spread_amounts(amount, minimum){
  if(amount == 0){
    entities.each(function(entity, index){
       entity['amount'] = 0;
    });
  } else if (amount < minimum ){
      entities[0]['amount'] = minimum;
  } else if (amount < (minimum * entities.length)){
      var num_recipients = parseInt(amount/minimum);
      var per_recipient = parseInt(amount/num_recipients);
      var extra_cents = amount - (num_recipients * per_recipient);
      for(var i=0; i<num_recipients; i = i +1 ){
        entities[i]['amount'] = per_recipient;
      }
      if(extra_cents > 0){
        for(var i=0; i<extra_cents-1; i = i +1 ){
            entities[i]['amount'] = entities[i]['amount'] + 1;
        }
      }
  } else {
      var remains = amount;
      var cum_pc = 0;
      while(remains > compact(entities).length && compact(entities).length > 0){
        var limit = compact(entities).min(function(value) {
          return parseInt(value['limit']);
        });
        var pc = (remains / compact(entities).length);
        if (pc + cum_pc > limit){
            pc = (limit - cum_pc);
        }

        for(var i=0; i<entities.length; i = i+1){
            if(entities[i]['limit']){
                entities[i]['amount'] =  entities[i]['amount'] + pc;
            }
        }
        cum_pc = pc + cum_pc;
        remains = remains - (pc * compact(entities).length)
        for(var i=0; i<entities.length; i = i +1){
            if(entities[i]['limit'] == entities[i]['amount']){
                entities[i]['limit'] = null;
            }
        }
      }
      if (compact(entities).length > 0) {
          var i = 0;
          while (remains > 0){
              if(entities[i]['limit']) {
                entities[i]['amount'] = 1 + entities[i]['amount'];
                remains = remains -1;
              }
              i = i + 1;
          }
      }
  }
}

function add_address(address){
  parent.parent.$('askRecipients').value = parent.parent.$('askRecipients').value + ', ' + address
}

function compact(array){
    array = array.reject(function(value) {
        return (value['limit'] == null)
    });
    return array;
}

document.observe('dom:loaded',  function() {
  var username = readCookie('logged_in_user');
  if(username && '' != username) {
    $$('.logged_in_user').invoke('update', unescape(username));
    $$('.show_if_logged_in').invoke('show');
    $$('.hide_if_logged_in').invoke('hide');
  }
  if('true' == readCookie('admin_user')) {
    $$('.show_if_admin').invoke('show');
  }
  if('true' == readCookie('partner_admin')) {
    $$('.show_if_partner').invoke('show');
  }
  if('true' == readCookie('has_entities')) {
    $$('.show_if_has_entities').invoke('show')
  }
});

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length));
	}
	return null;
}

// Datepicker initialization
//$j(function(){
document.observe('dom:loaded',  function() {
  try {
    $j('.datepicker').datepicker({ showOn: 'both', buttonImageOnly: true, buttonImage: '/images/datepicker.gif', maxDate: '+0d' });
  }catch(err){}
});
