var Application =
{
	updateTable: function(el, command, id)
	{
		var table = $(id);
		var tbody = table.getFirst();
		var rows = tbody.getChildren();

		switch (command)
		{
			case 'rowcopy':
				var tr = new Element('tr');
				var children = rows[0].getChildren();

				for (var i=0; i < children.length; i++)
				{
					var next = children[i].clone(true,true).injectInside(tr);
					next.getFirst().value = children[i].getFirst().value;
				}
				tr.injectBefore(rows[rows.length - 1]);
				break;
			case 'rowdel':

				//find the first element under the tbody element
				var element = $(el);
				var element_parent = element.getParent();
				while (element_parent != tbody) {
					element = element_parent;
					element_parent = element.getParent();
				}

				if (rows.length > 2)
				{
					element.dispose();
				}
				break;
		}

		// for every data row we need to rewrite the form names, ie. 'formname[2]' might
		// need to be 'formname[1]' if the prev 'formname[1]' was deleted.
		rows = tbody.getChildren();

		for (var i=0; i < rows.length; i++)
		{
			Application.updateChildren(rows[i], i);
		}

    // set all date fields to read-only
    jQuery('.date').attr("readonly", true);    
	},

	updateChildren: function(child, level)
	{
		var children = child.getChildren();
		for (var i=0; i < children.length; i++)
		{
			switch (children[i].type) {
				case 'hidden':
				case 'text':
				case 'password':
				case 'select-one':
				case 'select-multiple':
				case 'radio':
				case 'checkbox':
				case 'textarea':
					children[i].name = children[i].name.replace(/\[[0-9]+\]/ig, '[' + level +']');
					children[i].id = children[i].id.replace(/_[0-9]/ig, '_' + level);
					break;
				default:
					Application.updateChildren(children[i],level);
					break;
			}
		}
	},

	updateWordCount: function(obj, maxWords, display)
	{
	  var words = obj.value.split(/[\s]+/);
	  var len = words.length;

	  if (words.length > 0) {
	    if (words[words.length - 1] == '')
	      len = len - 1;
	  }

	  var newWord = false;
	  var wordCount = 0;
	  var i = 0;
	  var lastSpaceIndex = 0;
	  var maxReached = false;
	  for (i = 0; i < obj.value.length; i++) {
	      if (obj.value.charAt(i) != ' ') {
                  if (!newWord) {
		    newWord = true;
		    wordCount++;
		    if (wordCount > maxWords) {
			maxReached = true;
			break;
		    }
		  }
	      } else {
		newWord = false;
		lastSpaceIndex = i;
	      }
	  }

	  if (maxReached) {
	    obj.value = obj.value.substring(0, lastSpaceIndex + 1);
	    wordCount--;
	  }

	  $(display).set('text', maxWords - wordCount);
	},

      doCalendar: function(obj)
      {

	function onSelect(calendar) {

	  var p = cal.params;
	  var update = (cal.dateClicked || p.electric);
	  if (update && p.inputField) {
	    $(p.inputField).value = cal.date.print(p.ifFormat);
	  }

	  if (update && p.singleClick && cal.dateClicked)
	    cal.callCloseHandler();
	}

	var cal = new Calendar(1, null, onSelect, function(cal) { cal.hide(); });

	var params = {
	  ifFormat : '%Y-%m-%d',
	  daFormat : '%Y-%m-%d',
	  singleClick : true,
	  range : [0000, 2999],
	  weekNumbers : true,
	  electric : true,
	  step : 2
	};

	var button = $(obj);
	var prev = button.getPrevious();

	params['inputField'] = prev.get('id');
	cal.params = params;
	cal.create();
	cal.showAtElement(obj);
      }

}

