function validate(form) {	

	var border = true;
	var submit = true;

	var colors = new Object();
	colors['error'] = new Object();
	colors['default'] = new Object();
	
	colors['error']['label'] = '#ff144f';
	colors['error']['border'] = '#ff144f';
	colors['default']['label'] = '#000000';
	colors['default']['border'] = '#000048';

	var self = this;
	if (typeof inputFields == 'undefined') inputFields = new Object();
	if (typeof inputFieldGroup == 'undefined') inputFieldGroup = new Object();	
	if (typeof selectBoxes == 'undefined') selectBoxes = new Object();
	if (typeof checkBoxes == 'undefined') checkBoxes = new Object();
	if (typeof radioButtons == 'undefined') radioButtons = new Object();
	if (typeof checkBoxGroup == 'undefined') checkBoxGroup = new Object();


	this.setBorder = function(flag){
		border=flag;
	}
	
	this.setSubmit = function(flag){
		submit=flag;
	}	
	
	this.setLabelColor = function(defaultcolor,errorcolor){
		
		colors['error']['label'] = errorcolor;
		colors['default']['label'] = defaultcolor;
	}
	
	this.setBorderColor = function(defaultcolor,errorcolor){
		
		colors['error']['border'] = errorcolor;
		colors['default']['border'] = defaultcolor;
	}
	
	this.getLabelErrorColor = function(){
		
		return colors['error']['label'];
	}
	
	this.getBorderErrorColor = function(){
		
		return colors['error']['border'];
	}
	
	this.getLabelColor = function(){
		
		return colors['default']['label'];
	}
	
	this.getBorderColor = function(){
		
		return colors['default']['border'];
	}	

	this.addInputField = function (id,pattern){
	
		if (typeof inputFields[form] == 'undefined') inputFields[form] = new Array();
		
		i = inputFields[form].length;

		inputFields[form][i] = new Object();
		inputFields[form][i]['id'] = id;
		inputFields[form][i]['pattern'] = pattern;
	}
	
	this.addInputFieldGroup = function (id,pattern,group){
		
		if (typeof inputFieldGroup[form] == 'undefined') inputFieldGroup[form] = new Array();	
		if (typeof inputFieldGroup[form][group] == 'undefined') inputFieldGroup[form][group] = new Array();
		
		i = inputFieldGroup[form][group].length;

		inputFieldGroup[form][group][i] = new Object();
		inputFieldGroup[form][group][i]['id'] = id;
		inputFieldGroup[form][group][i]['pattern'] = pattern;
	}	

	this.addSelectBox = function (id){
	
		if (typeof selectBoxes[form] == 'undefined') selectBoxes[form] = new Array();
		
		i = selectBoxes[form].length;

		selectBoxes[form][i] = new Object();
		selectBoxes[form][i]['id'] = id;
	}
	
	this.addCheckBox = function (id){
	
		if (typeof checkBoxes[form] == 'undefined') checkBoxes[form] = new Array();
		
		i = checkBoxes[form].length;

		checkBoxes[form][i] = new Object();
		checkBoxes[form][i]['id'] = id;
	}
	
	this.addCheckBoxGroup = function (id, group){

		if (typeof checkBoxGroup[form] == 'undefined') checkBoxGroup[form] = new Object();
		if (typeof checkBoxGroup[form][group] == 'undefined') checkBoxGroup[form][group] = new Array();
		
		i = checkBoxGroup[form][group].length;

		checkBoxGroup[form][group][i] = new Object();
		checkBoxGroup[form][group][i]['id'] = id;
	}	

	this.addRadioButton = function (id){
	
		if (typeof radioButtons[form] == 'undefined') radioButtons[form] = new Array();
		
		i = radioButtons[form].length;

		radioButtons[form][i] = new Object();
		radioButtons[form][i]['id'] = id;
	}	

	this.checkInputField = function(id,pattern){
		
		var reg = new RegExp(pattern);
		
		with (document.getElementById(id)) {
		
			return reg.test(value);
		}
	}
	
	this.checkCheckBox = function(id){
	
		return document.getElementById(id).checked;
	}	
	
	this.checkRadioButton = function(id){
		
		var checked = false;
		
		for (var i = 1; document.getElementById(id + i) && checked == false; i++) {
		
			if (document.getElementById(id + i).checked == true) {
			
				checked = true;
			}
		}
		return checked;
	}	
	
	this.checkInputFieldGroup = function(group){
	
		grouperror = 1;
		
		for (var i = 0; i < inputFieldGroup[form][group].length && grouperror != 0; i++) {
			
			if (self.checkInputField(inputFieldGroup[form][group][i]['id'],inputFieldGroup[form][group][i]['pattern'])){
			
				grouperror = 0;
			}
		}	
		return grouperror;
	}	
	
	this.checkCheckBoxGroup = function(group){
	
		setflag=0;
		grouperror = 1;
		
		for (var i = 0; i < checkBoxGroup[form][group].length && grouperror != 0; i++) {
			
			if (document.getElementById(checkBoxGroup[form][group][i]['id'])){
			
				setflag=1;
				
				if (self.checkCheckBox(checkBoxGroup[form][group][i]['id'])){
				
					grouperror = 0;
				}
			}
		}
		if (setflag==1)	return grouperror;	
		else return 0;
	}
		
	this.checkSelectBox= function(id){
	
		if (document.getElementById(id)) {
		
			if (document.getElementById(id).value == '') {
			
				return false;
				
			}
			else 
				return true;
		}
	}
	
	this.changeLabelColor = function(id, labelcolor){
		
		if (document.getElementById(id + '_label')) {
		
			document.getElementById(id + '_label').style.color = labelcolor;		
		}	
	}
	
	this.changeBorderColor = function(id, bordercolor){
		
		if (document.getElementById(id) && border==true){

			if (document.getElementById(id).type != 'radio')
			document.getElementById(id).style.border = '1px solid ' + bordercolor;
		}	
	}	
	
	this.hideErrorMsg = function(id){
		
		if (document.getElementById(id + "_error")){

			document.getElementById(id + "_error").style.display = 'none';
		}	
	}
	
	this.showErrorMsg = function(id){
		
		if (document.getElementById(id + "_error")){

			document.getElementById(id + "_error").style.display = 'block';
		}	
	}	
	
	this.setError = function(id){
		if (document.getElementById(id)) {
			self.showErrorMsg(id);
			if (document.getElementById(id).type != 'checkbox') self.changeBorderColor(id, colors['error']['border']);
			self.changeLabelColor(id, colors['error']['label']);
		}
	}
	
	this.removeError = function(id){
		if (document.getElementById(id)){
			self.hideErrorMsg(id);
			if (document.getElementById(id).type != 'checkbox') self.changeBorderColor(id, colors['default']['border']);
			self.changeLabelColor(id, colors['default']['label']);
		}
	}				
	
	this.checkInput = function(){
	
		var error = 0;

		if (typeof inputFields[form] != 'undefined'){
	
			for (var i = 0; i < inputFields[form].length; i++) {
				
				if (document.getElementById(inputFields[form][i]['id'])) {
				
					if (!self.checkInputField(inputFields[form][i]['id'], inputFields[form][i]['pattern'])) {
					
						self.setError(inputFields[form][i]['id']);
						error = 1;
					}
					else {
						self.removeError(inputFields[form][i]['id']);
					}
				}
			}
		}
		
		if (typeof checkBoxes[form] != 'undefined'){
	
			for (var i = 0; i < checkBoxes[form].length; i++) {
				
				if (document.getElementById(checkBoxes[form][i]['id'])) {
					if (!self.checkCheckBox(checkBoxes[form][i]['id'])) {
					
						self.setError(checkBoxes[form][i]['id']);
						error = 1;
					}
					else {
						self.removeError(checkBoxes[form][i]['id']);
					}
				}
			}
		}		
		
		if (typeof radioButtons[form] != 'undefined'){

			for (var i = 0; i < radioButtons[form].length; i++) {

				if (document.getElementById(radioButtons[form][i]['id'])) {
				
					if (!self.checkRadioButton(radioButtons[form][i]['id'])) {
					
						for (var j = 1; document.getElementById(radioButtons[form][i]['id'] + j); j++) {
						
							self.setError(radioButtons[form][i][j]['id']);
						}
						error = 1;
						
					}
					else {
					
						for (var j = 1; document.getElementById(radioButtons[form][i]['id'] + j); j++) {
						
							self.removeError(radioButtons[form][i][j]['id']);
						}
					}
				}
			}
		}			
		
		if (typeof inputFieldGroup[form] != 'undefined'){
	
			var grouperror_if = 0;
			
			for (var i = 0; i < inputFieldGroup[form].length; i++) {
				
				if (self.checkInputFieldGroup(i)){

					error = 1;
					grouperror_if = 1;
				}
			}	
			if (grouperror_if==1){
			
				for (var i = 0; i < inputFieldGroup[form].length; i++) {
				
					for (var j = 0; j < inputFieldGroup[form][i].length; j++) {
					
						self.setError(inputFieldGroup[form][i][j]['id']);
					}
				}
			}else{
				
				for (var i = 0; i < inputFieldGroup[form].length; i++) {
				
					for (var j = 0; j < inputFieldGroup[form][i].length; j++) {
						
						self.removeError(inputFieldGroup[form][i][j]['id']);				
					}
				}			
			}
		}
		
		if (typeof checkBoxGroup[form] != 'undefined'){
	
			var grouperror_cb = 0;
			
			for (var i in checkBoxGroup[form]) {
		
				if (self.checkCheckBoxGroup(i)){

					error = 1;
					
					for (var j = 0; j < checkBoxGroup[form][i].length; j++) {
					
						self.setError(checkBoxGroup[form][i][j]['id']);				
					}
				}else{
					
					for (var j = 0; j < checkBoxGroup[form][i].length; j++) {
					
						self.removeError(checkBoxGroup[form][i][j]['id']);				
					}
				}		
			}	
		}
								
		if (typeof selectBoxes[form] != 'undefined'){
	
			for (var i = 0; i < selectBoxes[form].length; i++) {
				
				if (document.getElementById(selectBoxes[form][i]['id'])) {
				
					if (!self.checkSelectBox(selectBoxes[form][i]['id'])) {
					
						self.setError(selectBoxes[form][i]['id']);
						error = 1;
					}
					else {
					
						self.removeError(selectBoxes[form][i]['id']);
					}
				}
			}
		}

		delete(inputFields);
		delete(inputFieldGroup);
		delete(selectBoxes);
		delete(checkBoxes);
		delete(radioButtons);
		delete(checkBoxGroup);
		
		if (error != 0){
			if (submit == false) return error;
		}else{
			if (submit == true) document.getElementById(form).submit();
			else return error;
		} 
		
	}
}