var timer_hash = {};
var default_hash = {};

function call_later(func, ename, timeout) {
	if (timer_hash[ename] && timer_hash[ename]['id']) {
		clearTimeout(timer_hash[ename]['id']);
	}
	
	var array = [];	
	for (var i = 3; i < arguments.length; i++) {
		array.push(arguments[i]);
	}

	timer_hash[ename] = { id: setTimeout(function(){ func.apply(this, array) }, 250 ) };
}

function field_by_name(ename, pform) {
	if (!pform || (pform.length === 0 )) {
		pform = $(document);
	}

	if (typeof(ename) == 'string') {
		ename = [ename];
	}

	jq = [];
	for (var i in ename) {
		jq.push( "[name='" + ename[i] + "']" );
	}

	return $(jq.join(','));
}

function load_defaults(ename, defaults) {
	var jq = field_by_name(ename);
	var pform = jq.parents('form:first');

	if (pform) {
		//pform.unbind('submit', fsubmit);
		pform.bind('submit', fsubmit);
	}

	default_hash[ename] = { 'obj': jq, 'val': defaults };

	jq.bind('focus', {value: defaults}, reset_default);
	jq.bind('blur', {value: defaults}, set_default);

	if (!default_hash['_run']) {
		default_hash['_run'] = 1;
		$(document).ready(function(){set_defaults('blur')});
	}
}

function fsubmit(event) {
	set_defaults('focus');
}

function set_defaults(typ) {
	for (var i in default_hash) {
		if (i != '_run') {
			default_hash[i]['obj'].trigger(typ);
		}
	}
}

function set_default(event) {
	var jq = $(this);
	var defaults = event.data.value;

	if (jq.val() == '') {
		jq.css('color', '#9999FF');
		jq.val(defaults);
	}
}

function reset_default(event) {
	var jq = $(this);
	var defaults = event.data.value;

	if (jq.val() == defaults) {
		jq.css('color', null);
		jq.val('');
	}
}
