String.prototype.trim = function()
{
	return this.replace( /(^\s*|\s*$)/g, '' );
}

String.prototype.toDate = function()
{
	var date = new Date();
	
	dateStr = this;

	if( dateStr.indexOf( '-' ) > -1 )
	{
		dateStr = dateStr.replace( /-/g, '/' );
	}	
	
	date.setTime( Date.parse( dateStr ) );
	
	return date.format( 'dd/mm/yyyy' );
}

Date.prototype.format = function( f )
{
	if ( !this.valueOf() )
	{
		return '&nbsp;';
	}

	var d = this;

	return f.replace( /(yyyy|yy|mm|m|dd|d|hh|nn|ss|a\/p)/gi,
		function( m )
		{
			switch( m.toLowerCase() )
			{
				case 'yyyy': return d.getFullYear();
				case 'yy': return d.getFullYear().toString().substr(2,2);
				case 'mm': return (d.getMonth() + 1).zeroPad(2);
				case 'm': return (d.getMonth() + 1);
				case 'dd': return d.getDate().zeroPad(2);
				case 'd': return d.getDate();
				case 'hh': return ((h = d.getHours() % 12) ? h : 12).zeroPad(2);
				case 'nn': return d.getMinutes().zeroPad(2);
				case 'ss': return d.getSeconds().zeroPad(2);
				case 'am/pm': return d.getHours() < 12 ? 'am' : 'pm';
			}
		}
	);
}

String.prototype.leftPad = function( str, len )
{
	var newstr = this;
	while( newstr.length < len )
	{
		newstr = str + newstr;
	}
	return newstr;
}

String.prototype.rightPad = function( str, len )
{
	var newstr = this;
	while( newstr.length < len )
	{
		newstr = newstr + str;
	}
	return newstr;
}

Number.prototype.zeroPad = function( len )
{
	return this.toString().leftPad( '0', len );
}

Number.prototype.toCurrency = function()
{
	var blockSize = 3;
	var blockSeparator = '.';
	var decimalSeparator = ',';
	var negative = '';

	var val = this.toFixed( 2 ).toString().split('.');
	
	if( val[0].indexOf( '-' ) == 0 )
	{
		val[0] = val[0].substr( 1 );
		negative = '-';
	}
	
	var newVal = new String();
	var counter = val[0].toString().length;
	if(counter > 0)
	{
		for( ;counter > 0; counter -= blockSize )
		{
			newVal = val[0].substr( counter, blockSize ) + ( newVal.match( /[0-9]/ )? blockSeparator: '' ) + newVal;
		}
		newVal = val[0].substr( 0, blockSize + counter ) + ( newVal.match(/[0-9]/)? blockSeparator: '' ) + newVal;
	}

	return negative + newVal + decimalSeparator + val[1];
}

document.newTextField = function(name, size, value, id)
{
	var input = document.createElement('input');
	input.setAttribute('type', 'text');
	input.setAttribute('name', name);
	if(id)
	{
		input.setAttribute('id', id);
	}
	else
	{
		input.setAttribute('id', name);
	}
	input.setAttribute('size', size);
	input.setAttribute('value', value);
	return input;
}

document.newSelectField = function(name, selectedValue, id, items)
{
	var input = document.createElement('select');
	input.setAttribute('name', name);

	if(id)
	{
		input.setAttribute('id', id);
	}
	else
	{
		input.setAttribute('id', name);
	}

	for(var i = 0; i < items.length; i++)
	{
		var itemLabel = items[i][0];
		var itemValue = items[i][1];
		var selected = false;
		
		if(itemValue == selectedValue)
		{
			selected = true;
		}
		
		input.appendChild(document.newOption(itemLabel, itemValue, selected));
	}

	return input;
}

document.newOption = function(optionLabel, optionValue, selected)
{
	var option = document.createElement('option');
	option.setAttribute('value', optionValue);
	
	if(selected)
	{
		option.setAttribute('selected', 'selected');
	}
	
	option.appendChild(document.createTextNode(optionLabel));
	return option;
}

document.setupTable = function(id, columns)
{
	var table = document.createElement('table');
	table.setAttribute('cellspacing', 0);
	table.setAttribute('cellpadding', 2);
	table.setAttribute('width', '100%');
	table.setAttribute('id', id);
	
	var tbody = document.createElement('tbody');
	table.appendChild(tbody);
	
	var tr = document.createElement('tr');
	tbody.appendChild(tr);
	
	for(var i = 0; i < columns.length; i++)
	{
		var th = document.createElement('th');
		th.appendChild(document.createTextNode(columns[i]));
		tr.appendChild(th);
	}
	
	return table;
}	
