// This function will add an onload handler to the body.  It's fine to
// add a bunch of handlers, this keeps track of all of them.
function add_body_onload(func) {
  var old_body_onload=window.onload;
  window.onload=function() {
    if (old_body_onload) { old_body_onload(); }
    func();
  }
}

var isIE=(navigator.appName.indexOf('Microsoft')!=-1);
var ie_version=0;
if (isIE) {
	var p=navigator.userAgent.match(/MSIE (\d+\.\d+)/);
	if (p) {
		ie_version=parseFloat(p[1]);
	} else {
		// This is a hack, but if I'm only checking ie_version, leaving it
		// at "0" would be wrong.
		ie_version=5;
	}
}

function proper_sizer(portal_div, kid_type) {
	portal_div=$(portal_div);
	kid_type=kid_type.toUpperCase();
	var divs = portal_div.getElementsByTagName('div');
	var scroller_div=false;
	for (var i=0 ; i < divs.length ; i++) {
		if (divs[i].className.match(/\bscroller\b/)) {
			scroller_div = divs[i];
			i=9999999;
		}
	}
	var scroller_width=0;
	var first_kid=false;
	for (var child = scroller_div.firstChild ; child ; child = child.nextSibling) {
		if (child.tagName == kid_type) {
			scroller_width += child.offsetWidth;
			if (!first_kid) first_kid=child;
		}
	}
	if (first_kid) {
		scroller_div.style.width = (scroller_width+5) + 'px';
		portal_div.style.height = (first_kid.offsetHeight+20) + 'px';
		portal_div.style.height = 'auto';
	}
}

// Fixes odd row classes for trs
function fix_odd_even(tbl, grouping) {
  if (!grouping) grouping=1;
  tbl=$(tbl);
  if (tbl) {
    tr_num=0;
    for (var row=0 ; row < tbl.childNodes.length ; row++) {
      if (tbl.childNodes[row].nodeName=='TR') {
        tr=tbl.childNodes[row];
        if (Math.floor(tr_num/grouping)&1==1) {
          // must have "odd"
          if (!tr.className.match(/\bodd\b/)) {
            tr.className += ' odd';
          }
        } else {
          // must not have "odd"
          if (tr.className.match(/\bodd\b/)) {
            tr.className = tr.className.replace(/ ?\bodd\b ?/g, ' ');
          }
        }
        tr_num++;
      }
    }
  }
}

// Simple cookie stuff - get/set/unset a cookie
function get_cookie_value(name) {
  var cookie_str = document.cookie;
  if (!cookie_str || !cookie_str.length) return null;
  var raw_cookies = cookie_str.split(/\s*;\s*/);
  for (var i=0 ; i<raw_cookies.length ; i++) {
    var pieces = raw_cookies[i].split('=');
    if (decodeURIComponent(pieces[0]) == name) {
      return decodeURIComponent(pieces[1]);
    }
  }
  return null;
}

function set_cookie_value(name, value, seconds) {
  var max_age='';
  if (seconds!==undefined) { max_age = "; max-age="+seconds; }
  document.cookie = encodeURIComponent(name)+'='+encodeURIComponent(value)+"; path=/"+max_age;
}

function unset_cookie_value(name) {
  set_cookie_value(name, '', 0);
}

// Check fields with class "required" on a form
function check_required_fields(form, message) {
  var problems = false;
  var any_check_box = false;
  for (var fnum = 0 ; fnum < form.elements.length ; fnum++) {
    var field = form.elements[fnum];
    var fname = field.name
    if (field.className.match(/\brequired\b/)) {
      if (field.type == 'text' || field.type == 'textarea') {
        if (field.value.match(/^\s*$/)) { problems = true; }
      } else if (field.type == 'checkbox') {
        if (field.checked) { any_check_box = true; }
      }
    }
  }
  if (!any_check_box) { problems = true; }
  if (problems) {
    alert(message);
    return false;
  } else {
    return true;
  }
}

// calculate equal percentages
function split_percentages(table_id) {
  var table = $(table_id);
  if (!table) return false;
  var raw_inputs = table.getElementsByClassName('percentage');
  if (raw_inputs) {
    var inputs = [];
    for (var row=0 ; row < raw_inputs.length ; row++) {
      if (raw_inputs[row].parentNode.parentNode.style.display!='none') {
        inputs.push(raw_inputs[row]);
      }
	 }
    var total_percentage = 10000.0;
	 var items_remaining = inputs.length;
    for (var row=0 ; row < inputs.length ; row++) {
	 	if (inputs[row].parentNode.parentNode.style.display!='none') {
	 	  var this_percentage = 0;
        if (row == inputs.length-1) {
          this_percentage = total_percentage;
		  } else {
          this_percentage = Math.round(total_percentage / items_remaining);
		    total_percentage -= this_percentage;
		  }
		  inputs[row].value = this_percentage / 100.0;
		  items_remaining--;
		}
    }
  }
}

// hide div if mouse clicks outside of it
var modal_div_id = null;

function close_on_outside_click(e) {
	if (e.findElement("div#" + modal_div_id)) {
		// ignore clicks inside the box
	} else {
		e.stop();
		$(modal_div_id).hide();
		clear_modal_listener();
	}
}

function setup_close_on_outside_click(div_id) {
	modal_div_id = div_id;
	$$('body')[0].observe('click', close_on_outside_click);
}

function clear_modal_listener() {
	modal_div_id = null;
	$$('body')[0].stopObserving('click', close_on_outside_click);
}
