function openWindow(p_file,p_windowName,p_width,p_height) {
    	var p_windowOptions = '"toolbar=no,menubar=yes,scrollbars=yes,resizable=yes,'+p_width+','+p_height+'"';
    	newWindow = window.open(p_file,p_windowName,p_windowOptions);
    	newWindow.focus();
}

function validateForm(p_form, p_action) {
	p_form.ACTION.value=p_action;
	return true;
}

function toConfirm(msg) {
	confirm(msg);
}

function perform(p_form, p_action, p_anchor) {
	if (p_anchor)
		p_form.ANCHOR.value = '#'+p_anchor;
	p_form.target='_self';
	p_form.ACTION.value = p_action;
	if (p_form.TYPE)
		p_form.TYPE.value = '';
	p_form.submit();
}

function openPerform(aForm, actionName, windowName, p_width,p_height, pTarget) {
   	var p_windowOptions = '"toolbar=no,menubar=yes,scrollbars=yes,resizable=yes,'+p_width+','+p_height+'"';
	if (!pTarget) pTarget='';
	if (windowName=='')
	   	newWindow = window.open(pTarget,new Date().getTime(),p_windowOptions);
	else
	   	newWindow = window.open(pTarget,windowName,p_windowOptions);
   	newWindow.focus();
	aForm.target=newWindow.name;
	if (aForm.TYPE)
		aForm.TYPE.value = 'popup';
	aForm.ACTION.value = actionName;
	aForm.submit();
}

function go(aForm, actionName) {
	if (validateForm())
		perform(aForm, actionName);
}

function compareFields(input, refInput, span) {
	if (input.value!=refInput.value) {
		setError(input, '', span);
		return false;
	}
	resetColor(span);
	return true;
}

function checkFieldMinLength(input, inputLabel, minLength, span) {
	if (input.value.length>0 && input.value.length<minLength)
		setError(input, inputLabel, span);
	else
		resetColor(span);
}

function checkMandatoryField(input, inputLabel, span, aColor) {
	var isEmpty=true;
	
	if (input) {
		if (input.type=='select-one' || input.type=='select-multiple') {
			if (input.selectedIndex!=-1)
				isEmpty=false;
		}
		else if (input.length) {
			for (i=0; i<input.length; i++) {
				if ((input[i].type=='radio' || input[i].type=='checkbox')  && input[i].checked) {
					isEmpty=false;
					break;
				}
			}
		}
		else {
			if ((input.type=='radio' || input.type=='checkbox')) {
				if (input.checked)
					isEmpty=false;
			}
			else {
				input.value = trim(input.value);
				isEmpty=(input.value=='');
			}
		}
	}
	
	if (isEmpty)
		setError(input, inputLabel, span, aColor);
	else if (span)
		resetColor(span);
}

function getKey(e) {
	if (e.which)
		return e.which<32?0:e.which;
	return e.keyCode;
}

function filterUpper(e) {
	if (e.keyCode) {
		var result = String.fromCharCode(e.keyCode).toUpperCase();
		e.keyCode= result.charCodeAt(0);
	}
}

function filterFirstUpper(e, str) {
	if (e.keyCode && str=='') {
		var result = String.fromCharCode(e.keyCode).toUpperCase();
		e.keyCode= result.charCodeAt(0);
	}
}

function filterArea(area, maxlength, mesg) {
	var text = area.value;
	if ( text.length > maxlength ) {
		area.value = text.substring(0, maxlength);
		alert(mesg.replace(/\?/,maxlength));
	}
}

function formatFirstUpper(str) {
	var result = str.match(/^\s*\S/);
	if (result!=null)
		return str.replace(/^(\s*\S)/,result[0].toUpperCase());
	return str;
}

function trim(str) {
	str=str.replace(/^\s*/,'');
	return str.replace(/\s*$/,'');
}

function getElement(id) {
	if ( document.getElementById )
		return document.getElementById(id);
	if ( document.all )
		return document.all[id];
	if ( document.layers )
		return document.layers[id];
	return false;
}

function changeColor(id, aColor) {
	var element = getElement(id);
	if (element) {
		if (aColor)
			element.style.color=aColor;
		else
			element.style.color='red';
	}
}

function resetColor(id) {
	var element = getElement(id);
	if (element)
		element.style.color='';
}

function setError(input, inputLabel, span, aColor) {
	if (span)
		changeColor(span, aColor);
	if (formError=='' && error=='') {
		if (input) {
			if (input.select)
				input.select();
			if (input.focus)
				input.focus();
		}
	}
	if (span)
		error += '\n- ';
	error += inputLabel;
}

function checkEmail (emailStr, spanId) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	
	
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
		changeColor(spanId,'red');
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	
	// See if "user" is valid 
	if (user.match(userPat)==null) {
		changeColor(spanId,'red');
	    return false
	}
	
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
		    if (IPArray[i]>255) {
			changeColor(spanId,'red');
			return false
		    }
	    }
	    return true
	}
	
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		changeColor(spanId,'red');
	    return false
	}
	
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
	    domArr[domArr.length-1].length>3) {
       changeColor(spanId,'red');
	   return false
	}
	
	// Make sure there's a host name preceding the domain.
	if (len<2) {
  	   changeColor(spanId,'red');
	   return false
	}

	resetColor(spanId);
	return true;
}

function countSelectedOptions(obj) {
	var counter=0;
	for (var i=0; i<obj.options.length; i++) {
		if (obj.options[i].selected)
			counter++;
	}
	return counter;
}

function bufferizeOptions(obj) {
	var result = new Array(obj.options.length);
	for (var i=0; i<obj.options.length; i++) {
		result[i] = obj.options[i].value;
	}
	return result.toString();
}
