﻿var FormName
var FormClientSide
var FormButtonsImagePath
var FormDirty = false
var FormDirtyMsg

function form_unload(action) {
	if(FormDirty) {
		if(confirm(FormDirtyMsg)) {
			eval(action?action:'form_ok()')
			// [TODO] sistemare il caso in cui non passa il form_onok()...
			// che se ne va lo stesso dalla pagina!
			// (da' il messaggio di errore ma poi cambia comunque pagina!)
			// Provare con la riga seguente, che pero' ha altri effetti collaterali!
			// document.location = document.location
		}
	}
}
function form_init(name, clientside, imagepath, formdirtymsg) {
	FormName = name
	FormClientSide = clientside
	FormButtonsImagePath = imagepath
	FormDirtyMsg = formdirtymsg
}
function form_error(msg) {
	if(FormClientSide)
		alert(msg)
	else
		form_onerror(encodeURIComponent(FormName), encodeURIComponent(msg.replace(/\n/g, '<br>')))
}
function form_bad_field(field, msg) {
	if(self.form_onerror_found)
		form_onerror_found()
	if(field && field.type!='hidden')
		field.focus()
	form_error(msg)
}
function form_null_field(field) {
    field.value = field.value.replace(/\s*$/,"").replace(/^\s*/,"")
	return field.value==''
}
function form_number_field(field, nullable, isfloat, min, max) {
	var value
	return nullable && form_null_field(field) || 
	       (!isfloat && field.value.search(/^\s*(\+|-)?\d+\s*$/)!=-1 && !isNaN(value=parseInt(field.value, 10)) ||
		    isfloat && field.value.search(/^\s*(\+|-)?\d+(\.\d+)?\s*$/)!=-1 && !isNaN(value=parseFloat(field.value)))
	       && (min==null || value>=min)
	       && (max==null || value<=max)
}
function form_numeric_field(field, nullable, isfloat, min, max, decimals) {
	var value
	return form_number_field(field, nullable, isfloat, min, max)
	        && (nullable && form_null_field(field) || parseInt(parseFloat(field.value)*Math.pow(10,decimals), 10)==parseFloat(field.value)*Math.pow(10,decimals))
}
function form_numericcode_field(field, nullable, numchars) {
	return nullable && form_null_field(field) || 
	       eval('field.value.search(/^\\d' + (numchars!=null?'{' + numchars + '}':'+') + '$/)')!=-1
}
function form_upccode_field(field, nullable) {
	return form_numericcode_field(field, nullable, 10) || form_numericcode_field(field, nullable, 11) || form_numericcode_field(field, nullable, 12)
}
function form_datetime_field(field, nullable) {
	var day, month, year, hours, minutes, seconds, date
	return nullable && form_null_field(field) || 
	       (field.value.search(/^\s*(\d{1,2})-(\d{1,2})-(\d{1,4})\s*$/)!=-1 && !isNaN(day=parseInt(RegExp['$2'], 10)) && day>=1 && day<=31 && !isNaN(month=parseInt(RegExp['$1'], 10)) && month>=1 && month<=12 && !isNaN(year=parseInt(RegExp['$3'], 10)) && year>=1900 && (date=new Date(year, month-1, day, 0, 0, 0, 0)).getDate()==day && date.getMonth()==month-1) ||
	       (field.value.search(/^\s*(\d{1,2})-(\d{1,2})-(\d{1,4}) (\d{1,2}):(\d{1,2}):(\d{1,2})\s*$/)!=-1 && !isNaN(day=parseInt(RegExp['$2'], 10)) && day>=1 && day<=31 && !isNaN(month=parseInt(RegExp['$1'], 10)) && month>=1 && month<=12 && !isNaN(year=parseInt(RegExp['$3'], 10)) && year>=1900 && (date=new Date(year, month-1, day, 0, 0, 0, 0)).getDate()==day && date.getMonth()==month-1 && !isNaN(hours=parseInt(RegExp['$4'], 10)) && hours<=23 && !isNaN(minutes=parseInt(RegExp['$5'], 10)) && minutes<=59 && !isNaN(seconds=parseInt(RegExp['$6'], 10)) && seconds<=59)
}
function form_valuedatetime_field(fieldvalue) {
	var day, month, year, hours, minutes, seconds, date
	return (fieldvalue.search(/^\s*(\d{1,2})-(\d{1,2})-(\d{1,4})\s*$/)!=-1 && !isNaN(day=parseInt(RegExp['$2'], 10)) && day>=1 && day<=31 && !isNaN(month=parseInt(RegExp['$1'], 10)) && month>=1 && month<=12 && !isNaN(year=parseInt(RegExp['$3'], 10)) && year>=1900 && (date=new Date(year, month-1, day, 0, 0, 0, 0)).getDate()==day && date.getMonth()==month-1) ||
	       (fieldvalue.search(/^\s*(\d{1,2})-(\d{1,2})-(\d{1,4}) (\d{1,2}):(\d{1,2}):(\d{1,2})\s*$/)!=-1 && !isNaN(day=parseInt(RegExp['$2'], 10)) && day>=1 && day<=31 && !isNaN(month=parseInt(RegExp['$1'], 10)) && month>=1 && month<=12 && !isNaN(year=parseInt(RegExp['$3'], 10)) && year>=1900 && (date=new Date(year, month-1, day, 0, 0, 0, 0)).getDate()==day && date.getMonth()==month-1 && !isNaN(hours=parseInt(RegExp['$4'], 10)) && hours<=23 && !isNaN(minutes=parseInt(RegExp['$5'], 10)) && minutes<=59 && !isNaN(seconds=parseInt(RegExp['$6'], 10)) && seconds<=59)
}
function form_comparedate_fields(fromdate, todate) {
	var fromday, frommonth, fromyear, today, tomonth, toyear, fdate, tdate
	fromdate.value.search(/^\s*(\d{1,2})-(\d{1,2})-(\d{1,4})\s*$/)
	fromday = parseInt(RegExp['$2'], 10)
	frommonth = parseInt(RegExp['$1'], 10)
	fromyear = parseInt(RegExp['$3'], 10)
	todate.value.search(/^\s*(\d{1,2})-(\d{1,2})-(\d{1,4})\s*$/)
	today = parseInt(RegExp['$2'], 10)
	tomonth = parseInt(RegExp['$1'], 10)
	toyear = parseInt(RegExp['$3'], 10)
	fdate=new Date(fromyear, frommonth-1, fromday, 0, 0, 0, 0)
	tdate=new Date(toyear, tomonth-1, today, 0, 0, 0, 0)
	return tdate<fdate?-1:(tdate>fdate?1:0)
}
function form_email_field(field) {
	return field.value+''=='' || (field.value+'').search(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9]{2,}$/)==0
}
function form_phone_field(field) {
	var ret
	ret = (field.value+'').search(/^[0-9\*\#\,-]*$/)==0 && (field.value+'').substr(0,2) != '00'
	return ret
}
function form_ok(actionvalue) {
	FormDirty = false
	if(form_oncheck() && form_onok()) {
		document.frmForm.Action.value = (actionvalue==null?'ok':actionvalue)
		document.frmForm.submit()
	}
}
function form_cancel() {
	if(self.opener!=null)
		self.close()
	else {
		form_enable()
		document.frmForm.reset()
	}
	if(self.form_oncancel)
		form_oncancel()
}
function form_select_change(name) {
	document.frmForm[name].value=document.frmForm['S'+name].options[document.frmForm['S'+name].selectedIndex].value
}
function form_change() {
	FormDirty = true
	form_enable()
}
function form_enable() {
	if(self.form_onchange)
		form_onchange()
}
function form_changeimage(name, src) {
	ImageChange(name, src)
}
function form_onbrowse(name, value, text, force) {
	if(force || document.frmForm[name].value!=value) {
		document.frmForm[name].value=value
		document.frmForm['text'+name].value=text
		if(document.frmForm['hidden'+name]!=null)
			document.frmForm['hidden'+name].value=text
		form_change()
	}
	return true
}
function form_onclear(name) {
	return form_onbrowse(name, '', '')
}
function offset_left(obj) {
	return obj ? obj.offsetLeft + offset_left(obj.offsetParent) : 0
}
function offset_top(obj) {
	return obj ? obj.offsetTop + offset_top(obj.offsetParent) : 0
}
function form_oninit() {
	if(self.form_custominit)
		form_custominit()
	form_enable()
}
