﻿/* $Id: watermark.js,v 1.3 2009/05/19 08:41:25 str Exp $
 *
 * Adds watermarks to textboxes
 *
 * Usage:
 * watermarkManager.add('textboxid', { watermarkText: 'Type Your Name' });
 *
 */

var Watermark = Class.create(
{
	initialize: function(element, options)
	{
		this.element = $(element);
		this.options = options;

		this.update();

		this.element.observe('focus', this._onFocus.bindAsEventListener(this));
		this.element.observe('blur', this._onBlur.bindAsEventListener(this));
	},

	update: function()
	{
		if (typeof document.activeElement == 'undefined')
			return;

		try
		{
			if (document.activeElement == this.element)
				this._onFocus();
			else
				this._onBlur();
		}
		catch (e)
		{
		}
	},

	_onFocus: function(event)
	{
		if (this.element.value == this.options.watermarkText)
		{
			this.element.value = '';
			this.element.removeClassName('watermark');
		}
	},

	_onBlur: function(event)
	{
		if (this.element.value == '' || this.element.value == this.options.watermarkText)
		{
			this.element.value = this.options.watermarkText;
			this.element.addClassName('watermark');
		}
		else
			this.element.removeClassName('watermark');
	}
});

var WatermarkManager = Class.create(
{
	initialize: function()
	{
		this.watermarksToBeLoaded = new Hash();
		this.watermarks = new Hash();
		this.loaded = false;
		FastInit.addOnLoad(this._onLoad.bindAsEventListener(this));
	},

	add: function(elementid, options)
	{
		if (this.loaded)
			this._addWatermark(elementid, options);
		else
			this.watermarksToBeLoaded.set(elementid, options);
	},

	update: function(element)
	{
		element = $(element);

		var watermark = this.watermarks.get(element.id);
		if (watermark != null)
			watermark.update();
	},

	_onLoad: function()
	{
		var wmgr = this;
		this.watermarksToBeLoaded.each(function(w)
		{
			wmgr._addWatermark(w[0], w[1]);
		});
		this.loaded = true;
	},

	_addWatermark: function(elementid, options)
	{
		this.watermarks.set(elementid, new Watermark(elementid, options));
	}
});

var watermarkManager = new WatermarkManager();