function getElementById (the_id)
{
  if (typeof the_id != 'string')                      return the_id;
  if (typeof document.getElementById != 'undefined')  return document.getElementById(the_id);
  else if (typeof document.all != 'undefined')        return document.all[the_id];
  else if (typeof document.layers != 'undefined')     return document.layers[the_id];
  else                                                return null;
}


// div utilities
function switchDiv( from, to )
{
  divFrom = getElementById( from );
  divTo   = getElementById( to );

  divFrom.style.display = 'none';
  divTo.style.display = 'inline';
}


function switchTo( baseName, c, target )
{
  var divs=new Array();
  for( i = 0; i < c; i++)
  {
    divs[i] = getElementById( baseName+"_"+i );
    if( i != target )
    {
        divs[i].style.display = 'none';
    }
    else
    {
	divs[i].style.display = 'inline';
    }
  }
}




function go( url )
{
  window.location.href=url;
}



function showErrors( errors )
{
  if( errors.length == 0 )
    return;	
  
  var error = "";
  for( i = 0; i < errors.length; i++ )
  {
  	error += errors[i]+"<br />";
  }

  var errorDiv = getElementById( "d4_msgs" );
  
  errorDiv.innerHTML = error;
  errorDiv.style.display = "block";
}

function showMessagesAlert( messages, id )
{
	var message = "";
	for( var i = 0; i < messages.length; i++ )
	{
		message += messages[i]+"\n";
	}
	alert(message);
}



// string utilities

String.prototype.ltrim = function()
{
	var re = /\s*((\S+\s*)*)/g;
	return this.replace(re, "$1");
}

String.prototype.rtrim = function()
{
	var re = /((\s*\S+)*)\s*/g;
	return this.replace(re, "$1");
}

String.prototype.trim = function()
{
	return this.ltrim().rtrim();
}

// date utilities
function checkDate( date, dateFormat, toDate, toField, toDateFormat, compare )
{
	var d1 = Date.parseDate( date, "Y-m-d");
	var d2;
	if( toDate )	d2 = Date.parseDate( toDate, "Y-m-d");
	else		d2 = Date.parseDate( toField.value, "Y-m-d");

  switch( compare )
  {
    case "lt" :
      return d1 < d2;
    break;
    case "le" :
      return d1 <= d2;
    break;
    case "gt" :
      return d2 < d1;
    break;
    case "ge" :
      return d2 <= d1;
    break;
    case "eq" :
      return d2 <= d1 && d2 >= d1;
    break;
  }
}



// msgs utilities
function formatMessage(message, params, paramNo)
{

  if(paramNo < params.length)
  {
    var regexp = new RegExp("{" + paramNo + "[,a-zA-Z]*}", "g");
    message = message.replace(regexp, params[paramNo]);
    message = formatMessage(message, params, ++paramNo);
  }
  return message;
}

function MessageResource()
{
}


MessageResource.prototype.initMessages = function ( msgs )
{
  this.messages = msgs;
}


MessageResource.prototype.getMessage = function (messageId, params)
{
  var result = this.messages[messageId];

  if(typeof params != typeof undefined )
  {
    if( typeof params == "string" )
    {
      result = formatMessage(result, [ params ], 0);

    }
    else if (params.length > 0)
    {
      result = formatMessage(result, params, 0);
    }
  }
  return result;
}



function checkValidEmail( email )
{

	if( email == "" )
		return true;

	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test( email );
}

