// JavaScript Document
FormTips = function()
{
	var self = arguments.callee;

	if( self.instance == null )
	{
		this.initialize.apply( this, arguments );
		self.instance = this;
	}

	return self.instance;
}

FormTips.prototype =
{
	initialize : function()
	{
		var link_element = document.createElement( "link" );
		link_element.rel  = "stylesheet";
		link_element.href = FormTips.path + 'css/formtips.css';
		link_element.type = "text/css";
		document.getElementsByTagName( 'head' )[ 0 ].appendChild( link_element );
	}
};

FormTips.getInstance = function()
{
	if( FormTips.instance == null )
	{
		new FormTips();
	}

	return FormTips.instance;
}

FormTips.addClassName = function( id, class_name )
{
	var element = document.getElementById( id );

	if( !element )
	{
		return;
	}

	if( element.className.length > 0 )
	{
		if( element.className == class_name || new RegExp( "(^|\\s)" + class_name + "(\\s|$)" ).test( element.className ) )
		{
			return;
		}
	}

	element.className += ( element.className ? ' ' : '' ) + class_name;
}

FormTips.removeClassName = function( id, class_name )
{
	var element = document.getElementById( id );

	if( !element )
	{
		return;
	}

	element.className = element.className.replace( new RegExp( "(^|\\s+)" + class_name + "(\\s+|$)" ), ' ' ).replace( /^\s+/, '' ).replace( /\s+$/, '' );
}

FormTips.configure = function( input_tag )
{
	if( input_tag.id == '' )
	{
		input_tag.id = input_tag.name;
	}

	input_tag.onfocus = function()
	{
		if( this.value == this.title )
		{
			this.value = '';
		}

		FormTips.removeClassName( this.id, 'formtip_message' );
	}

	input_tag.onblur = function()
	{
		if( this.value == '' )
		{
			this.value = this.title;
			FormTips.addClassName( this.id, 'formtip_message' );
		}
	}

	var submit_callback = function( id )
	{
		var element_id = id;

		return function()
		{
			var element = document.getElementById( element_id );

			if( element.value == element.title )
			{
				element.value = '';
			}

			FormTips.removeClassName( element.id, 'formtip_message' );
		};
	};

	if( input_tag.form.addEventListener )
	{
		input_tag.form.addEventListener( 'submit', submit_callback( input_tag.id ), false );
	}
	else
	{
		input_tag.form.attachEvent( 'onsubmit', submit_callback( input_tag.id ) );
	}

	input_tag.onblur();
}

FormTips.run = function()
{
	var f = 'formtips.js';
	var s = document.getElementsByTagName( 'script' );

	for( var i = 0, n = s.length; i < n; i ++ )
	{
		if( s[ i ].src.match( f ) )
		{
			var span_element = document.createElement( 'span' );
			span_element.innerHTML = '<a href="' + s[ i ].src + '" />';
			FormTips.path = span_element.firstChild.href.replace( f, '' );
		}
	}

	var input_tags = document.getElementsByTagName( "input" );

	for( var i = 0, j = input_tags.length; i < j; i ++ )
	{
		var input_tag = input_tags[ i ];

		if( ( input_tag.type == 'text' || input_tag.type == 'password' ) && input_tag.className.match( 'formtip' ) )
		{
			FormTips.configure( input_tag );
		}
	}

	var textarea_tags = document.getElementsByTagName( "textarea" );

	for( var i = 0, j = textarea_tags.length; i < j; i ++ )
	{
		var textarea_tag = textarea_tags[ i ];

		if( textarea_tag.className.match( 'formtip' ) )
		{
			FormTips.configure( textarea_tag );
		}
	}

	FormTips.getInstance();
}

if( window.addEventListener )
{
    window.addEventListener( 'load', FormTips.run, false );
}
else if( window.attachEvent )
{
    window.attachEvent( 'onload', FormTips.run );
}

