var Form = new Class({
	form_name :     "",
	validate_code : null,
	submit_code : null,

	options : {
		validate_code : null,
		submit_code : null
	},

	initialize : function(form_name, options) {
		this.setOptions(options);

		this.form_name = form_name;

		if (this.options.validate_code != null)
			this.validate_code = this.options.validate_code;
		if (this.options.submit_code != null)
			this.submit_code = this.options.submit_code;

		//document.forms[this.form_name].addEvent('submit', this.submit.bind(this)); // does not work under IE
		$(this.form_name).addEvent('submit', this.submit.bind(this));
	},

	_validSelect : function(strSelectName){
		return (document.forms[this.form_name].elements[strSelectName].value!="")?false:true
	},

	_isDefaultValueField : function(strFieldName, defValue){
		if (!defValue)
			return (document.forms[this.form_name] && document.forms[this.form_name].elements[strFieldName] && document.forms[this.form_name].elements[strFieldName].value!= document.forms[this.form_name].elements[strFieldName].defaultValue)?false:true;
		else {
			return (document.forms[this.form_name] && document.forms[this.form_name].elements[strFieldName] && document.forms[this.form_name].elements[strFieldName].value!= defValue)?false:true;
		}
	},

	_isEmptyField : function(strFieldName){
		return (document.forms[this.form_name] && document.forms[this.form_name].elements[strFieldName] && document.forms[this.form_name].elements[strFieldName].value!="")?false:true;
	},

	_isNumberField : function(strFieldName) {
		return (document.forms[this.form_name] && document.forms[this.form_name].elements[strFieldName] && document.forms[this.form_name].elements[strFieldName].value.search(/^([0-9])+$/) != -1)?true:false;
	},

	_isEmailField : function(strFieldName) {
		if(document.forms[this.form_name] && document.forms[this.form_name].elements[strFieldName] && document.forms[this.form_name].elements[strFieldName].value!=""){
			intPointPos=document.forms[this.form_name].elements[strFieldName].value.lastIndexOf(".");
			intArobPos=document.forms[this.form_name].elements[strFieldName].value.indexOf("@");
			strLen=document.forms[this.form_name].elements[strFieldName].value.length;
			return (intArobPos>1 && intPointPos>intArobPos && intPointPos<strLen-2)?true:false;
		}
		return false;
	},


	_validRadio : function (strRadioGroup) {
		if (!document.forms[this.form_name] || !document.forms[this.form_name].elements[strRadioGroup]) return false;
		selected = false;
		for (var i=0; i < document.forms[this.form_name].elements[strRadioGroup].length; i++) {
			  if(document.forms[this.form_name].elements[strRadioGroup][i].checked == true) selected = true;
		}
		return selected;
	},

	_fieldsMatch : function(strFieldName, strFieldNameConfirmation) {
		return (document.forms[this.form_name] && document.forms[this.form_name].elements[strFieldName] && document.forms[this.form_name].elements[strFieldNameConfirmation] && document.forms[this.form_name].elements[strFieldName].value == document.forms[this.form_name].elements[strFieldNameConfirmation].value)?true:false;
	},

	_isValidDate : function(dateVector) {
		var day;
		var month;
		var year;
		if (dateVector['day'] && dateVector['month'] && dateVector['year']) {
		      if(!document.forms[this.form_name] || !document.forms[this.form_name].elements[dateVector['day']] )
			      return false;
		      if(!document.forms[this.form_name] || !document.forms[this.form_name].elements[dateVector['month']] )
			      return false;
		      if(!document.forms[this.form_name] || !document.forms[this.form_name].elements[dateVector['year']] )
			      return false;
		      day = document.forms[this.form_name].elements[dateVector['day']].value;
		      month = document.forms[this.form_name].elements[dateVector['month']].value -1;
		      year = document.forms[this.form_name].elements[dateVector['year']].value;
		      //alert(year+","+month+","+day);
		      source_date = new Date(year, month, day);

		      if (year != source_date.getFullYear() || month != source_date.getMonth() || day != source_date.getDate() ){
			      //alert(source_date.getFullYear()+","+source_date.getMonth()+","+source_date.getDate())
			      return false;
		      }
		} else {
		      alert("Not implemented input processing");
		      return false;
		}

		return true;
	},

	validate : function() {
		if($type(this.validate_code) == 'function') {
			return this.validate_code.call(this);
		} else {
			return true;
		}
	},

	submit : function() {
		if($type(this.submit_code) == 'function') {
			this.submit_code.call(this);
		}
	}

});
Form.implement(new Options);

