// Validations.js
// libreria di funzioni generiche per la validatione dei dati
// fornendo in alcune funzioni un messaggio di alert.

// Restituisce un alert se il campo di testo passato risulta vuoto
//
// @param:  psObject Campo di testo da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il campo di testo è vuoto, altrimenti false
//
function fnIfEmpty (psObject, psMsg) {
	var inputStr = psObject.value;
	if (inputStr == null || inputStr == "") {
		if(psMsg != "") {
			alert(psMsg);		
			psObject.focus();
			if (psObject.type == "text") psObject.select();
		}
		return true;
	}
	return false;
}

// Restituisce un alert se il campo di testo passato risulta non vuoto
//
// @param:  psObject Campo di testo da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il campo di testo non è vuoto, altrimenti false
//
function fnIfNotEmpty (psObject, psMsg) {
	var inputStr = psObject.value;
	if (inputStr == null || inputStr == "") {
		return false;
	}
	else {
		if(psMsg != "") {
			alert(psMsg);
			psObject.focus();
			if (psObject.type == "text") psObject.select();
		}
		return true;
	}
}

// Restituisce un alert se il campo di testo passato non contiene numeri positivi
//
// @param:  psObject Campo di testo da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il campo di testo contiene numeri negativi, altrimenti false
//
function fnIfNotPosInteger(pnObject, psMsg) {
	inputStr = pnObject.value.toString();
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i);
		if (oneChar < "0" || oneChar > "9") {
			if(psMsg != "") {
				alert(psMsg);
				pnObject.focus();
				pnObject.select();
			}
			return true;
		}
	}
	return false;
}

// Restituisce un alert se il campo di testo passato non contiene numeri interi
//
// @param:  psObject Campo di testo da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il campo di testo non contiene numeri interi, altrimenti false
//
function fnIfNotInteger(pnObject, psMsg) {
	inputVal = pnObject.value;	
	if (inputVal != parseInt(inputVal)) {
		if(psMsg != "") {
			alert(psMsg);
			pnObject.focus();
			pnObject.select();
		}
		return true;
	}
	return false;
}

// Restituisce un alert se il campo di testo passato non contiene numeri reali
//
// @param:  psObject Campo di testo da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il campo di testo non contiene numeri reali, altrimenti false
//
function fnIfNotFloat(pnObject, psMsg) {
	inputVal = pnObject.value;
	inputVal = inputVal.replace(",",".");
	pnObject.value = inputVal	
	if (inputVal != parseFloat(inputVal)) {
		if(psMsg != "") {
			alert(psMsg);
			pnObject.focus();
			pnObject.select();
		}
		return true;
	}
	return false;
}

// Restituisce un alert se il radiobutton passato non è selezionato
//
// @param:  psObject Radiobutton da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il radiobutton non è selezionato, altrimenti false
//
function fnIfNotRadioChecked(pbObject, psMsg){
	var vbState = true;
	inputVal = pbObject;
	for(var i = 0; i < inputVal.length; i++){ 
		if (inputVal[i].checked){
			vbState = false;
		}		
	}
	if (vbState == true){
		if(psMsg != "") {
			alert(psMsg);
			pbObject[0].focus();
		}
	}
	return vbState;
}

// Restituisce un alert se il checkbox passato non è selezionato
//
// @param:  psObject Checkbox da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il checkbox non è selezionato, altrimenti false
//
function fnIfNotChecked(pbObject, psMsg){
	inputVal = pbObject;
	if (inputVal.checked){
		return false;
	} else	
	{
		if(psMsg != "") {
			alert(psMsg);
			pbObject.focus();
		}
		return true;
	}
}

// Restituisce un alert se il checkbox passato è selezionato
//
// @param:  psObject Checkbox da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se il checkbox è selezionato, altrimenti false
//
function fnIfChecked(pbObject, psMsg){
	inputVal = pbObject;
	if (inputVal.checked){
		if(psMsg != "") {
			alert(psMsg);
			pbObject.focus();
		}
		return true;
	} else	
	{
		return false;
	}
}

// date field validation
function fnDaysInMonth(pnYear, pnMonth) {
	with (new Date(pnYear, pnMonth, 1)) {
		setDate(0);
		return getDate();
    }
}
      
function fnY2k(pnYear) { 
	return (pnYear < 1000) ? pnYear + 1900 : pnYear; 
}
function fnCheckDate(pnGG,pnMM,pnYYYY){
    var vdToday = new Date();
    pnYYYY = ((!pnYYYY) ? fnY2k(vdToday.getYear()):pnYYYY);
    pnMM   = ((!pnMM) ? vdToday.getMonth():pnMM-1);
    if (!pnGG) return false
    var vdTest = new Date(pnYYYY,pnMM,pnGG);
    if ((pnYYYY == fnY2k(vdTest.getYear())) && (pnMM == vdTest.getMonth()) && (pnGG == vdTest.getDate()) ){
		return true;
	}
    else{
        return false;
	}
}

// Restituisce un alert se l'ora non è stata inserita nel formato "hh:mm" o "hh:mm:ss"
//
// @param:  psObject Campo di testo da verificare da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se ci sono errori nel formato ora, altrimenti false
//
function fnIfNotTimeRight(psObject, psMsg){
	var vsTime = psObject.value;
	var vsArray = new Array(3);
	var vsArrayTime = vsTime.split(':');
	
	var vsHourPath = /^(.+)\:(.+)\:(.+)$/;
	var vsHourPath2 = /^(.+)\:(.+)$/;
	var vsResult2 = vsTime.match(vsHourPath2);
	var vsResult = vsTime.match(vsHourPath);
	
	if ((vsResult == null) && (vsResult2 == null)) {
		alert("inserire l'ora nel formato hh:mm:ss o hh:mm");
		psObject.focus();
		return true;  
	}
	
	vsArray[0] = vsArrayTime[0];
	vsArray[1] = vsArrayTime[1];
	vsArray[2] = vsArrayTime[2];
		
	if (vsArray[2] == "" ){
		vsArray[2] = 0;
		}
	if ((vsArray.length == 3 ) && ( vsArray[0] != "" )){
		var vnHour   = parseInt(vsArray[0]);
		var vnMinute = parseInt(vsArray[1]);
		var vnSecond = parseInt(vsArray[2]);
			
		if (( vnHour > 24 ) || ( vnHour < 0) ||  ( vnMinute > 59 ) 
		 || ( vnMinute < 0) ||  ( vnSecond > 59 ) || (vnSecond < 0)){
			
			alert(psMsg);
			psObject.focus();
			return true;	  
		}else{
		return false;
		}
		
	}else{
		
	alert(psMsg);
	
	return true;
	}
	return false;	
}

// Restituisce un alert se la data non è stata inserita nel modo corretto
//
// @param:  psObject Campo di testo da verificare da verificare
// @param:  psMsg    Messaggio da visualizzare nell'alert in caso di errore
//
// @return: true se ci sono errori nel formato data, altrimenti false
//
function fnIfNotDateValid(psObject, psMsg){
	var vsDate = psObject.value;
	var vsDateArray = vsDate.split('/');
	if (vsDateArray.length !=3) vsDateArray = vsDate.split('-');
	if (vsDateArray.length !=3) vsDateArray = vsDate.split(' ');	
	if (vsDateArray.length !=3) vsDateArray = vsDate.split('.');	
	if (vsDateArray.length ==3){
		if (fnCheckDate(vsDateArray[0],vsDateArray[1],vsDateArray[2])) {
			return false;
		}
		else{
			if(psMsg != "") {
				alert(psMsg);
				psObject.focus();
				psObject.select();
			}
			return true;
		}

	}
	else{
		if(psMsg != "") {
			alert(psMsg);
			psObject.focus();
			psObject.select();
		}
		return true
	}
}

function fnShowWait(psIdLayer) {
	var objLay = document.getElementById(psIdLayer);
	var vnW = document.body.clientWidth;
	var vnH = document.body.clientHeight;
		
	objLay.style.top  = (vnH - parseInt(objLay.style.height, 10)) / 2 + document.body.scrollTop;
	objLay.style.left = (vnW - parseInt(objLay.style.width, 10)) / 2 + document.body.scrollLeft;
	objLay.style.visibility = 'visible';
}

function fnHideWait(psIdLayer) {
	var objLay = document.getElementById(psIdLayer);
	objLay.style.visibility = 'hidden';
}
