/*
 * 
 * version 1.0
 * 
 */
var Massify={
	version:'1.0'
};
Massify.extend = function(destination, source) {
	for (var property in source)
    	if(destination[property]==undefined)
			destination[property] = source[property];
  return destination;
};
/* every page needs these */
var Page={
	form_field_defaults:{},
	watched:[],
	load:function(evt)
	{		
		/* handles focus and blurring of form fields w/ default text */
		$$('.form-field').each(function(item){
			this.form_field_defaults[item.identify()]=item.value;
			//when a user focus the field, clear it
			Event.observe($(item),"focus",function(evt){
				var e=Event.element(evt);
				if(e.value==this.form_field_defaults[e.id])
					e.value='';
			}.bind(this));
			//when a user blurs the field, if it's empty, return the default
			Event.observe($(item),"blur",function(evt){
				var e=Event.element(evt);
				if(e.value=='')
					e.value=this.form_field_defaults[e.id];
			}.bind(this));
		}.bind(this));
		//begin watching things
		new PeriodicalExecuter(function()
		{
			var len=this.watched.length;
			for(var i=0; i<len; i++)
				this.watched[i]();
		}.bind(this),1);
	},
	watch:function(func)
	{
		this.watched.push(func);
	},
	equalize:function (boxes,way){
		var h1=0;var max=0;
		for(var i=0;i<boxes.length;i++){
			var h2=$(boxes[i]).getHeight();
			max=Math.max(h1, h2);
			h1=max;
		};
		max+='px';
		for(var i=0;i<boxes.length;i++){
			$(boxes[i]).setStyle({height:max});
		}
	},
	traverse:function(generation,className)
	{
		var ritem=generation;
		generation.ancestors().each(function(item){
			if(item.hasClassName(className))
			{
				ritem=item;
				throw $break;
			}
				
		});
		return ritem;
	},
	pluralize:function(count,singular,plural)
	{
		if(!plural) plural=singular+'s';
		return(count==1?singular:plural);
	},
	assign_label:function(item)
	{
		var label=item.next("label") || item.previous("label"); 
		if(label && !label.hasAttribute("for"))
			label.writeAttribute("for",item.identify());
	},
	sync_fields:function(from,to,field)
	{
		var type=from.elements[field].type;
		switch(type)
		{
		case "radio":
		case "checkbox":
			to.elements[field].checked=from.elements[field].checked;
			break;
		case "select-one":
		case "select-multiple":
			to.elements[field].options[from.elements[field].options.selectedIndex].selected=true;
			break;
		case "text":
		case "hidden":
		case "textarea":
			to.elements[field].value=from.elements[field].value;
			break;
		}
	}
};
Object.extend(Page,Massify);

document.observe("dom:loaded",Page.load.bind(Page));
