/*
*
* last updated: 2004-Feb-13
*
*/

/* supporting javascript for lib/form.class.php */

// hacks for JS 5.0
 if (!Array.prototype.push) Array.prototype.push = function(val) { this[this.length] = val; }

/**
*
* FormHandler Object 
* 
**/
function FormHandler(oForm) {
	this.form = oForm;
	this.toValidate = new Array();
}

/* instance methods */
FormHandler.prototype.validate = function() {
	this.errors = new Array();
	for (i=0;i<this.form.elements.length;i++) {
		var sInput = this.form.elements[i].name;
//		if (sInput in this.toValidate) {
//			alert(sInput + " : " + this.toValidate[sInput].type);
//			this.isValid(this.form.elements[i],this.toValidate[sInput]);
//		}
	}
	if (this.errors.length > 0) {
//		alert("FORM ERRORS:\n" + this.errors.join("\n"));
		return false;
	}
	return true;
}

FormHandler.prototype.addValid = function(oInput) {
	this.toValidate[oInput.name] = oInput;
}

FormHandler.prototype.isValid = function(oInput,oData) {

	// check for optional displayName parameter
	var name = ((typeof(oData.displayName) == "string") && (oData.displayName != '')) ? oData.displayName : oData.name;

// check if it's empty
	if ((oData.isNull == false) && (oInput.value == '')) {
		if ((typeof(oData.errorMsg) == "string") && (oData.errorMsg != '')) {
			this.errors.push(oData.errorMsg);
		} else {
			this.errors.push(name + ' cannot be empty');
		}
		return;
	}

// string
	if (oData.type == 'string') {
		if ((typeof(oData.match) == "string") && (oData.match != '')) {
			var r = new RegExp("^"+oData.match+"$");
			if (oInput.value.search(r) < 0) {
				if (typeof(oData.errorMsg) == "string") {
					this.errors.push(oData.errorMsg);
				} else {
					this.errors.push(name + '\'s value of "' + oInput.value + '" does not match allowed pattern');
				}
				return;
			}
		}

// number	
	} else if (oData.type == 'number') {
		if (typeof(oData.min) == "number") {
			if (parseFloat(oInput.value) < oData.min) {
				if (typeof(oData.errorMsg) == "string") {
					this.errors.push(oData.errorMsg);
				} else {
					this.errors.push(name + ' must be equal or bigger than ' + oData.min);
				}
				return;
			}
		}
		if (typeof(oData.max) == "number") {
			if (parseFloat(oInput.value) > oData.max) {
				if (typeof(oData.errorMsg) == "string") {
					this.errors.push(oData.errorMsg);
				} else {
					this.errors.push(name + ' must be equal or smaller than ' + oData.max);
				}
				return;
			}
		}

// textarea
	} else if (oData.type == 'textarea') {

// select
	} else if (oData.type == 'select') {

// checkbox
	} else if (oData.type == 'checkbox') {

// radio
	} else if (oData.type == 'radio') {

// password
	} else if (oData.type == 'password') {

// file
	} else if (oData.type == 'file') {
	}
}

/* class methods */

FormHandler.toggleOption = function(oSelect) {
}

FormHandler.clearSelect = function(oItem,sSelect) {
	o = oItem.form[sSelect];
	for (i=0;i<o.options.length;i++) {
		o.options[i].selected = false;
	}
}


FormHandler.DaySelect = function(oItem, sType, bShowMinutes) {
	var aDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	var sName = oItem.name.substring(0,oItem.name.lastIndexOf ('['));

	var oDayField = oItem.form[sName + '[nDay]'];
	var oMonthField = (sType == 'month') ? oItem : oItem.form[sName + '[nMonth]'];
	var oYearField = (sType == 'year') ? oItem : oItem.form[sName + '[nYear]'];
	var nSelected = oDayField.selectedIndex;
	var nMonth = oMonthField.options[oMonthField.selectedIndex].value.toString();
	var nYear = oYearField.options[oYearField.selectedIndex].value.toString();
	var nMonth = eval(nMonth);
	var nYear = eval(nYear);
	var oHourField = (bShowMinutes == true) ? oItem.form[sName + '[nHour]'] : oItem ;
	var oMinField = (bShowMinutes == true) ? oItem.form[sName + '[nMinute]'] : oItem ;

	if (oItem.selectedIndex == 0) {
		oDayField.selectedIndex = 0;
		oMonthField.selectedIndex = 0;
		if (bShowMinutes == true) {
			oHourField.selectedIndex = 24;
			oMinField.selectedIndex = 60;
		}
	}

	if (nMonth > 0) {
		oDayField.options.length = 0;
		
		oDayField.options[oDayField.options.length] = new Option('Day',0);
		
		for (i=1;i<=aDays[nMonth-1];i++) {
			var sValue = (i.toString().length < 2) ? ('0' + i.toString()) : i;
			oDayField.options[oDayField.options.length] = new Option(i,sValue);
		}
		
		if ((nYear > 0 && nYear % 4 == 0) && nMonth == 2) oDayField.options[oDayField.options.length] = new Option('29', 29);
		
		if (nSelected >= oDayField.options.length) {
			oDayField.options[0].selected = true;
		} else {
			oDayField.options[nSelected].selected = true;
		}

	} else {
		oDayField.options[0].selected = true;
	}
}

FormHandler.clearNullFlag = function(field, name) {
	var sName = field.name.substring (0, field.name.lastIndexOf ('['));
	var oCheckbox = field.form[sName + '[' + name + '_null]'];
	if ((field.value != "" ) && ( oCheckbox.checked )) {
		oCheckbox.checked = false;
	}
}

FormHandler.clearField = function(field, name,type) {
	var sName = field.name.substring (0, field.name.lastIndexOf ('['));
	var oField = field.form[sName+'['+name+']'];
	if (
		(type == "string") ||
		(type == "int") ||
		(type == "real") ||
		(type == "blob") ||
		(type == "timestamp") ||
		(type == "time") ||
		(type == "year")
	) {
		oField.value = '';
	}
}