/* **********************************************
**	CORE FORM INPUTs
** ******************************************* */
function initInput() {

	$("._inputStandard").bind("focus", function(event) {
		if ($(this).hasClass('_inputError'))
			$(this).removeClass('_inputError');
		if ($(this).hasClass('_inputWarning'))
			$(this).removeClass('_inputWarning');

		$(this).removeClass('_inputStandard');
		$(this).addClass('_inputActive');
	});

	$("._inputStandard").bind("blur", function(event) {
		$(this).removeClass('_inputActive');
		$(this).addClass('_inputStandard');
	});

};

function initInputFile() {

	$(".inputTypeFile").filestyle({
		image: "images/choosefile.gif",
		imageheight: 22,
		imagewidth: 82,
		width: 250
	});

}
/*$(document).ready(function() {
	$('._fDate').each(function() {
		$(this).mask('99/99/9999', {
			placeholder:'_'
		});

		$(this).datepicker({
			dateFormat: 'dd/mm/yy',
			firstDay: 1,
			gotoCurrent:true,
			showOn: 'button',
			showAnim: 'fadeIn',
			showOptions: {duration: 300 },
			buttonImage: 'images/calendar.png',
			buttonText: 'Click here to show the calendar',
			buttonImageOnly: true,
			dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
			dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
			monthNames: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
			monthNamesShort: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
	  	});
	});
	)};*/
function initInputDate() {

	$("._inputTypeDate").each(function (event) {
		var myID = this.id;

		Calendar.setup(
		{
    		inputField  : myID,
			ifFormat    : "%d/%m/%Y",
			button      : "btn_"+myID,
			showsTime   : false,
			firstDay    : 1,
			weekNumbers : false
  		});

  		$("#btn_"+myID+"_delete").bind("click", function(event) {
			$("#"+myID).val('');
		});
	});

};
function initInputDate() {

	$("._inputDate").each(function (event) {
		

		Calendar.setup(
		{
    		inputField  : 'inputdate',
			ifFormat    : "%d/%m/%Y",
			button      : "date",
			showsTime   : false,
			firstDay    : 1,
			weekNumbers : false
  		});

  		
	});

};
function initInputTinyMCE (pmSelector, pmButtons) {

	if (!pmButtons) {
		var pmButtons = new Array();
		pmButtons[0] = "bold,italic,underline,strikethrough,|,cut,copy,paste,pastetext,pasteword,|,undo,redo,|,link,unlink,|,code";
		pmButtons[1] = "";
		pmButtons[2] = "";
		pmButtons[3] = "";
	}

	if (pmSelector) {

		tinyMCE.init({
			mode : "textareas",
			theme : "advanced",
			editor_selector : pmSelector,
			plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups",

			// Theme options
			theme_advanced_buttons1 : pmButtons[0],
			theme_advanced_buttons2 : pmButtons[1],
			theme_advanced_buttons3 : pmButtons[2],
			theme_advanced_buttons4 : pmButtons[3],
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "bottom",
			theme_advanced_resizing : false
		});

	} else {

		tinyMCE.init({
			mode : "textareas",
			theme : "advanced",
			plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups",

			// Theme options
			theme_advanced_buttons1 : pmButtons[0],
			theme_advanced_buttons2 : pmButtons[1],
			theme_advanced_buttons3 : pmButtons[2],
			theme_advanced_buttons4 : pmButtons[3],
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "bottom",
			theme_advanced_resizing : false
		});

	}
}

function initMask() {
	$("input").each(function (event) {
		fieldMask = $(this).attr('fieldMask');
		if (fieldMask != undefined) {
			$("#"+this.id).mask(fieldMask);
		}
	});
}

/* **********************************************
**	CORE LINKs
** ******************************************* */
function initLinkContainers(pmClass) {

	$("."+pmClass).each(function (element) {
		if ($(this).attr('link')) {
			$("."+pmClass).bind("click",
				function(event) {
					location.href = $(this).attr('link');
				}
			);
		};
	});
}

/* **********************************************
**	CORE CONTENT
** ******************************************* */
function slideActivate(pmClass) {

	$("."+pmClass).each(function (event) {
		var myID = this.id;
		var tmp = myID.split("_");

		$('#'+myID).slideToggle('slow',
			function() {
				if ($("#"+myID+"_title").hasClass('open_section')) {
					$("#"+myID+"_title"+pmIdx).removeClass('sezione_aperta');
					$("#"+myID+"_title"+pmIdx).addClass('sezione_chiusa');
//					$('#slideIcon_'+pmIdx).attr("src","images/icons/slideDown.gif");
				} else {
					$("#"+myID+"_title"+pmIdx).removeClass('sezione_chiusa');
					$("#"+myID+"_title"+pmIdx).addClass('sezione_aperta');
//					$('#slideIcon_'+pmIdx).attr("src","images/icons/slideUp.gif");
				}
			}
		);
	});

};

function loadContent(pmContainer, pmURL) {

	var tmp = pmURL.split('?',2 );

	var oldContent = $("#"+pmContainer).html();
	$.ajax({
		type: "POST",
		url: tmp[0],
		data: tmp[1],
		async: true,
		success: function(content) {
			$("#"+pmContainer).html(content);
			return true;
		},
		error: function () {
			$("#"+pmContainer).html(oldContent);
		}
	});
}


/* **********************************************
**	CORE FORM
** ******************************************* */
var __FORM_ERROR_MESSAGES = {};

function loadErrorMessage(pmLang) {

	pmLang = pmLang || 'it';

	$.ajax({
		type: "POST",
		url: "core/ajax.getFormErrors.php",
		data: "lang="+pmLang,
		success: function(errorMessages) {
			var errors = errorMessages.split('||');
			var err;
			for (e=0; e<errors.length; e++) {
				err = errors[e].split('-->');
				__FORM_ERROR_MESSAGES[err[0]] = err[1];
			}
		},
		error: function () {
			return 'TRE-001 - Internal Error!!!';
		}
	});
	

}
function getErrorMessage(pmCode, pmExtra) {

	pmExtra = pmExtra || '';

	error = __FORM_ERROR_MESSAGES[pmCode];

	if (pmExtra != '') {
		substitutions = pmExtra.split('&');
		for (s=0; s<substitutions.length; s++) {
			replace = substitutions[s].split('=', 2);
//			error = error.replace(new RegExp("§§"+replace[0]+"§§"), replace[1]);
//			error = error.replace("§§NUMCHAR§§", replace[1]);
			error = error.replace("$$"+replace[0]+"$$", replace[1]);
		}
	}

	return error;

}

function checkPartitaIVA(pmValue) {
	if(pmValue.length != 11)
		return getErrorMessage('LENEXA', 'NUMCHAR=11');
	validi = "0123456789";
	var invalidi = "";
	for(i=0; i<11; i++) {
		if(validi.indexOf(pmValue.charAt(i)) == -1 )
			invalidi = invalidi+pmValue.charAt(i);
	}
	if (invalidi != '') {
		return getErrorMessage('CHRINV', 'INVCHAR='+invalidi);
	}
	s=0;
	for(i=0; i<=9; i+=2)
		s += pmValue.charCodeAt(i) - '0'.charCodeAt(0);
	for(i=1; i<=9; i+=2){
		c = 2*( pmValue.charCodeAt(i) - '0'.charCodeAt(0) );
		if(c > 9)
			c = c-9;
		s += c;
	}
	if((10 - s%10)%10 != pmValue.charCodeAt(10) - '0'.charCodeAt(0) )
		return getErrorMessage('IVA');
	return "";
}

function checkCodiceFiscale(pmValue) {
	var validi, invalidi, i, s, set1, set2, setpari, setdisp;
	pmValue = pmValue.toUpperCase();
	if(pmValue.length != 16 )
		return getErrorMessage('LENEXA', 'NUMCHAR=16');
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	invalidi = "";
	for(i=0; i<16; i++ ) {
		if( validi.indexOf( pmValue.charAt(i) ) == -1 )
			invalidi = invalidi+pmValue.charAt(i)
	}
	if (invalidi != '')
		return getErrorMessage('CHRINV', 'INVCHAR='+invalidi);
	set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
	s = 0;
	for(i=1; i<=13; i+=2)
		s += setpari.indexOf( set2.charAt( set1.indexOf( pmValue.charAt(i) )));
	for(i=0; i<=14; i+=2)
		s += setdisp.indexOf( set2.charAt( set1.indexOf( pmValue.charAt(i) )));
	if(s%26 != pmValue.charCodeAt(15)-'A'.charCodeAt(0) )
		return getErrorMessage('COF');
	return "";
}

function checkEmail(pmValue) {

//	if (typeof(formInput) != "object") {
//        alert("Validation not supported on this browser.");
//        return(false);
//    }

    if (pmValue.length < 1) { // String Empty
        return getErrorMessage('EML');
    } else if (pmValue.indexOf ('@', 0) == -1) { // No @ sign
        return getErrorMessage('EML');
    } else if (pmValue.indexOf ( '@', 0 ) < 1) { // Nothing before @
        return getErrorMessage('EML');
    } else if (pmValue.indexOf ( '[', 0 ) == -1 && pmValue.charAt (pmValue.length - 1) == ']') { // No left brachet [
        return getErrorMessage('EML');
    } else if (pmValue.indexOf ( '[', 0 ) > -1 && pmValue.charAt (pmValue.length - 1) != ']') { // No right brachet [
        return getErrorMessage('EML');
    } else if (	!(pmValue.indexOf ( '@', 0 ) > 1 && pmValue.charAt (pmValue.length - 1 ) == ']') // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
			&& 	(pmValue.indexOf ( '.', 0 ) == -1)) { // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
        return getErrorMessage('EML');
    } else if (!(pmValue.indexOf('@', 0) > 1 && pmValue.charAt(pmValue.length - 1) == ']') ){ // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
		// CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
		var len = pmValue.length;
		var pos = pmValue.lastIndexOf ( '.', len - 1 ) + 1;
		if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
			return getErrorMessage('EML');
		}
    }

    return '';;
}
function IsNumeric(sText)

{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

   for (i = 0; i < sText.length && IsNumber == true; i++) 
      {  
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return (IsNumber?'':getErrorMessage('INT'));
   
   }


function checkFieldType(pmValue, pmType, pmLang) {

	pmLang = pmLang || 'it';

	switch (pmType) {
		case "TXT": // Text
			break;
		case "INT": // Integer
		  return IsNumeric(pmValue);
			break;
		case "FLT": // Float
			break;
		case "EML": // E-Mail
				return checkEmail(pmValue);
			break;

		case "IVA": // Partita IVA
				return checkPartitaIVA(pmValue);
			break;

		case "COF": // Codice Fiscale (controllo formale)
				return checkCodiceFiscale(pmValue);
			break;

		case "CFI": // Codice fiscale o partiva IVA
				error = checkPartitaIVA(pmValue);
				if (error != '') {
					return checkCodiceFiscale(pmValue);
				} else {
					return '';
				}
			break;

		case "CFE": // Codice Fiscale (controllo esatto con comuni)
			break;
		case "DTA": // Date

			break;

		case "TIM": // Time
			break;
		case "DTM": // Date & Time
			break;
	}

	return true;
}


function checkForm(pmForm, pmLang) {

	pmLang = pmLang || 'it';

	var inputAttribute = new Array();

	var formAttribute = "";
	var error = "";
	var globalError = false, globalWarning = false;
	var __MANDATORY_FIELD_ERROR = getErrorMessage('FLDMAN');
	var __FIELD_CHECK_WARNING = getErrorMessage('FLDOPT');

	// Controllo gli input
	$('#'+pmForm+' input').each(function(element){

		if (this.id != '') {
			fieldType = $(this).attr('fieldType');
			if (fieldType != undefined)
				fieldChecks = fieldType.split('_');
			else
				fieldChecks = [];

			fieldMandatory = $(this).attr('fieldMandatory');
			if (fieldMandatory == undefined)
				fieldMandatory == 'N';

			if ($("#"+this.id).hasClass('_inputError')) {
				$("#"+this.id).removeClass('_inputError');
	//			$("#"+this.id).addClass('sezione_chiusa');
			}

			error = "";

			switch (this.type) {
				case "hidden": // Ha senso fare controlli sui tipi hidden?
					break;

				case "text":
						// Controllo obbligatorietà
						if (		fieldMandatory == 'Y'
								&& 	$('#'+this.id).val() == "") {

							$("#"+this.id).addClass('_inputError');
							error = error.concat(__MANDATORY_FIELD_ERROR+"\n");
							if (!globalError)
								globalError = true
						} else {
							// Controllo tipo campo
							for (c=0; c<fieldChecks.length; c++) {
								type = fieldChecks[c].substr(0,3);
								mandatoryCheck = fieldChecks[c].substr(3);
								tmpError = checkFieldType($('#'+this.id).val(), type);
								
								if (tmpError != ''){
									if (mandatoryCheck) {
										if ($("#"+this.id).hasClass('_inputWarning'))
											$("#"+this.id).removeClass('_inputWarning');
										$("#"+this.id).addClass('_inputError');
										error = error.concat(tmpError+"\n");
										if (!globalError)
											globalError = true
									} else {
										if (!$("#"+this.id).hasClass('_inputError'))
											$("#"+this.id).addClass('_inputWarning');
										error = error.concat(tmpError+" ("+__FIELD_CHECK_WARNING+")"+"\n");
										if (!globalWarning)
											globalWarning = true
									}
								}
							}
						}
					break;

				case "checkbox":
						// Controllo obbligatorietà
						if (		fieldMandatory == 'Y'
								&& 	$('#'+this.id).val() == "") {

							$("#"+this.id).addClass('_inputError');
							error = error.concat(__MANDATORY_FIELD_ERROR+"\n");
							if (!globalError)
								globalError = true
						} else { // Controllo tipo di campo
						}
					break;

				case "radio	":
						// Controllo obbligatorietà
						if (		fieldMandatory == 'Y'
								&& 	$('#'+this.id).val() == "") {

							$("#"+this.id).addClass('_inputError');
							error = error.concat(__MANDATORY_FIELD_ERROR+"\n");
							if (!globalError)
								globalError = true
						} else { // Controllo tipo di campo
						}
					break;
			}

			if (error != '') {
				$("#"+this.id).attr('title', error);
				$("#"+this.id).tooltip ({
					delay: 0,
					track: true,
				    showURL: false,
				    opacity: 1,
				    fixPNG: true,
				    showBody: " - ",
				    top: -15,
				    left: 5
				});
			}

		}

	});

	// Controlla i select
	$('#'+pmForm+' select').each(function(element){

		if (this.id) {
			fieldMandatory = $(this).attr('fieldMandatory');

			if ($("#"+this.id).hasClass('_inputError')) {
				$("#"+this.id).removeClass('_inputError');
	//			$("#"+this.id).addClass('sezione_chiusa');
			}

			error = "";

			// Controllo obbligatorietà
			if (		fieldMandatory == 'Y'
					&& 	$('#'+this.id).val() == "") {

				$("#"+this.id).addClass('_inputError');
				error = error.concat(__MANDATORY_FIELD_ERROR+"\n");
				if (!globalError)
					globalError = true
			} else { // Controllo tipo di campo (ha senso qui?)
			}

			if (error != '') {
				$("#"+this.id).attr('title', error);
				$("#"+this.id).tooltip ({
					delay: 0,
					track: true,
				    showURL: false,
				    opacity: 1,
				    fixPNG: true,
				    showBody: " - ",
				    top: -15,
				    left: 5
				});
			}
		}

	});

	if (globalError) {
		alert (getErrorMessage('FRMERR'));
		return false;
	} else {
		if (globalWarning) {
			return confirm(getErrorMessage('FRMWRN'));
		}
	}
}
