String.prototype.trim = function()
{ 
  return (this.replace(/^\s*/, ''));
}

function setFocus(fieldName)
{
	setTimeout("document.getElementById(\"" + fieldName + "\").focus()", 0);
}

function removeErrorHTML(errorDiv)
{
	if (errorDiv)
	{
		errorDiv.innerHTML = "";
		errorDiv.className = "";
	}
}

function removeErrorIndex(index)
{
	var errorDiv = document.getElementById('errorDiv' + index);
	
	if (errorDiv)
	{
		var bitMap = document.getElementById('errBitMap');
		if (bitMap)
		{
			if ((bitMap.value & Math.pow(2, index-1)) != 0)
				bitMap.value = bitMap.value ^ Math.pow(2, index-1);
			
			if (bitMap.value == 0)
			{
		   		var submitErrorEl = document.getElementById('submitError');
				removeErrorHTML(submitErrorEl);
			}
		}
		
		removeErrorHTML(errorDiv);
	}
}

function setErrorHTML(errorDiv, msg)
{
	if (errorDiv)
	{
		errorDiv.innerHTML = msg;
		errorDiv.className = "error";
	}
}

function setErrorSubmit(errorDiv, msg)
{
	if (errorDiv)
	{
		errorDiv.innerHTML = msg;
		errorDiv.className = "submiterror";
	}
}

function setErrorIndex(index, msg, fieldName)
{
	var errorDiv = document.getElementById('errorDiv' + index);
	
	if (errorDiv)
	{
		var bitMap = document.getElementById('errBitMap');
		if (bitMap)
			bitMap.value = bitMap.value | Math.pow(2, index-1);
			
		setErrorHTML(errorDiv, msg);
		setFocus(fieldName);
	}
}

function getErrorBitMap()
{
	var bitMap = document.getElementById('errBitMap');
	if (bitMap)
		return bitMap.value;
	else
		return 0;
}

function setLastUpdated()
{
	document.getElementById('lastUpdated').value=getSimpleDate();
}

function validateNumber(index, fldName, type)
{
	var field = document.getElementById(fldName);
	if (isNaN(field.value))
	{
	   	setErrorIndex(index, "invalid number", fldName);
	   	return false;
	}
	else 
	{
		if (type=='int' && field.value!='')
		{
			field.value = Math.floor(field.value);
		}
	   	removeErrorIndex(index);
	   	return true;
	}
}

function validateIP(index)
{
	var http_request = false;
	var responseText;
	var value = document.getElementById('IPAddressRange'+index).value
	
	if (value == "")
	{
		removeErrorIndex(index);
		return true;
	}
	
	if (window.XMLHttpRequest)
	{
		// Mozilla, Safari,...
		http_request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// IE
		http_request = new ActiveXObject("Microsoft.XMLHTTP");
	}

  	if ((value.indexOf("/") != -1) || (value.substr(0,1) == "*") || value.length == 0)
  	{
    	setErrorIndex(index, "Invalid IP address format", 'IPAddressRange'+index);
    	return false;
  	}

	http_request.open('GET', '/webservices/registry/validateIP?ipAddress=' + value, false);
	http_request.send(null);
	var responseText = http_request.responseText;
	if (http_request.status == 200 && responseText.length > 0)
	{
		setErrorIndex(index, http_request.responseText, 'IPAddressRange'+index);
		return false;
	}
	else
	{
		removeErrorIndex(index);
		return true;
	}
}

function validateUrl(url, index)
{
	var pattern = /^([A-Za-z]+:\/\/)?[A-Za-z0-9-]+\.[A-Za-z0-9]+.*$/
	var value = url.value.trim();
	url.value = value;
	
	if ("" != value && !pattern.test(value))
	{
		setErrorIndex(index, "Invalid URL", url.id);
		return false;
	}
	else
	{
		removeErrorIndex(index);
        return true;
	}
}

function validateEmailAddr(email, index)
{
	var pattern = /(.+)@(.*)\.(.+)/
	var value = email.value.trim();
	email.value = value;
	
	if ("" != value && !pattern.test(value))
	{
		setErrorIndex(index, "Invalid email address.", email.id);
		return false;
	}
	else
	{
		removeErrorIndex(index);
        return true;
	}
}

function validateNotEmpty(field, index, optionalErrorText)
{
	var pattern = /\S/
	var value = field.value;

	if (!pattern.test(value))
	{
		if (optionalErrorText == undefined)
   			setErrorIndex(index, "Field cannot be blank.", field.id);
   		else
   			setErrorIndex(index, optionalErrorText, field.id);
   			
		return false;
	}
	else
	{
		removeErrorIndex(index);
        return true;
	}
}

function activeElementOnChange()
{
	if (document.activeElement && document.activeElement.onchange)
	{
		document.activeElement.onchange();
	}
}

function validateForm()
{
	// cause current element to be validated (some browsers do not do this on the submit)
	activeElementOnChange();

	var submitErrorEl = document.getElementById('submitError');
	if (getErrorBitMap() != 0)
	{
		setErrorSubmit(submitErrorEl, "Please fix the problems highlighted above before submitting.");
		return false;
	}

	setLastUpdated();
	removeErrorHTML(submitErrorEl);
	return true;
}
