

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
var is_ie = ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent));
var is_opera = /opera/i.test(navigator.userAgent);
var is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);

var submit_to = function(url, form) {
  if(!form) form = document.forms[0];

  form.action = url
  form.submit()
}

var go = function(url) {
  window.location = url;
}

var element;

var hide_tips = function() {
  document.getElementsByClassName('tip-body').each( function(element, index) {
    element.className = "tip-body hidden";
  });
}

var show_tips = function() {
  document.getElementsByClassName('hidden').each( function(element, index) {
      element.className = "tip-body";
  });
}

var timeout; 
var next_url;
var openInfoDialog = function(address) { 
  Dialog.info("Saving...", 
    {windowParameters: {width:100, height:50}, showProgress: true}); 
  timeout=3; 
  next_url = address;
  setTimeout(infoTimeout, 1000) ;
} 

function infoTimeout() { 
  timeout--; 
  if (timeout >0) { 
    Dialog.setInfoMessage("Saving...") 
    setTimeout(infoTimeout, 1000) 
  } else {
    window.location = next_url;
  }
}

var disable_form_elements = function() {
  var f = $('application_form');
  if (!f) return;
  $A(f.elements).each(function(i,index){
    i.onfocus = "this.blur()";
  });
}

var dirty = false;

var throw_mud = function() {
  dirty = true;
  window.onbeforeunload = pendingChanges;
}

function pendingChanges() {
	if (dirty) {
		return 'You have unsaved changes.';
	}
}

var track_dirty = function() {
  Form.getElements("application_form").each(function(key, value) {
    key.onchange = function() {
                      if(summable == true) {
                        do_summing();
                      }
                      throw_mud();
                   }
  })
}

var summable = false;

var make_summable = function() {
  summable = true;
}

var do_summing = function() {
  var sum_fields = document.getElementsByAttribute("sum_for");
  var sum_field_names = [];
  var sum_field_data = [];
  sum_fields.each(function(element, value) {
      sum_field_names.push(element.getAttribute("sum_for"));
      sum_field_data.push(0.0);
  });
  var all_index = sum_field_names.indexOf("ALL");
  document.getElementsByAttribute("summable").each(function(element, value) {
     element.value = clean_number(element.value);
     var index = sum_field_names.indexOf(element.getAttribute("field"));
     sum_field_data[index] += parseFloat(element.value);
     if(all_index != null){
        sum_field_data[all_index] += parseFloat(element.value);
     }
  });
  sum_fields.each(function(element, value) {
      var field_value = sum_field_data[sum_field_names.indexOf(element.getAttribute("sum_for"))];
      element.innerHTML = formatAsMoney(field_value);
  });
}



document.getElementsByAttribute = function(attribute, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.getAttribute(attribute))
      elements.push(Element.extend(child));
    return elements;
  });
}

function formatAsMoney(mnt) {
    mnt -= 0;
    mnt = (Math.round(mnt*100))/100;
    return (mnt == Math.floor(mnt)) ? mnt + '.00' 
              : ( (mnt*10 == Math.floor(mnt*10)) ? 
                       mnt + '0' : mnt);
}

function clean_number(strValue) {
    var objRegExp = /\(/;
    var strMinus = ''; 
  
    objRegExp = /\$|\s|\)|\(|[,]/g;
    strValue = strValue.replace(objRegExp,'');
    if(isNaN(strValue) || strValue.length == 0) strValue = 0;
    
    return strMinus + strValue;
}