
var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.extend(String.prototype, {

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }
  
});



function makeRequest(url, getparams, postparams, successCallback, errorCallback)
{
	var httpRequest;

	if (window.XMLHttpRequest)
	{
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType)
		{
			httpRequest.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject)
	{
		try
		{
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e)
		{
			try
			{
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!httpRequest)
	{
		alert('Giving up :( Cannot create an XMLHTTP instance');
		return false;
	}
	
	httpRequest.onreadystatechange = function() { onRequestComplete(httpRequest, successCallback, errorCallback); };
	
	if(postparams)
	{
		httpRequest.open('POST', url, true);
		
		httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		httpRequest.setRequestHeader("Content-length", postparams.length);
		httpRequest.setRequestHeader("Connection", "close");
		httpRequest.send(postparams);
	}
	else
	{
		httpRequest.open('GET', url+'?'+getparams, true);
		httpRequest.send('');
	}
}

function onRequestComplete(httpRequest, successCallback, errorCallback)
{

	if (httpRequest.readyState == 4)
	{
		if (httpRequest.status == 200)
		{
			// success
			successCallback(httpRequest.responseXML);
		}
		else
		{
			// Problem with the server
			errorCallback();
		}
	}

}


function validateEmail(email)
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(email))
		return true;
	return false;
}