﻿/* -------------------------- validazione ----------------------------------------------------------------- */
var CPT_Validator = function() {
    this.lista = new Array();
    this.clear = function() { this.lista = new Array(); }
    this.add = function(element, errore) {
        if (element && element.length==0) element = undefined;
        this.lista.push({ el: element, err: errore });   
    }
}

var CPT_EsitoValidazione = new CPT_Validator();

function CPT_ValidateRequired(inputel) {
    if (inputel.length==0) return true;
    if ( inputel.filter('input:radio').length>0 ){
        if (inputel.filter(':checked').length==0){ CPT_EsitoValidazione.add(inputel, "uno è richiesto"); return false; }
    } else if ( inputel.filter('input:checkbox').length>0 ){
        if (!inputel.is(':checked')){ CPT_EsitoValidazione.add(inputel, "richiesta la spunta"); return false; }
    } else {
        var v = $.trim(inputel.val());
        if (v.length == 0){ CPT_EsitoValidazione.add(inputel, "campo richiesto"); return false; }
    }
    return true;
}

function CPT_ValidateRequiredEx(el, ok, obbligatorio) { 
    var obb = obbligatorio ? obbligatorio : false
    if (obb && el.length==0) { CPT_EsitoValidazione.add(undefined, 'campo "' + el.attr('name') + '" richiesto.'); return false; } 
    if (el.length > 0 && (el.hasClass('CPTREQ') || obb)) if (!CPT_ValidateRequired(el)) return false;
    return ok
}

function CPT_VerificaEmail(v) {
    if (v.search(/^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$/) != -1) return true;
    return false;
}

function CPT_VerificaImporto(v) {
    if (!v) return true;
    if (v.length == 0 ) return true;
    var vNumber = CPT_UnformatCurrency(v);
    if (isNaN(vNumber) || vNumber <= 0) return false;
    return true;
}

function CPT_UnformatCurrency(value) {
    var vg = 0, v = '';
    for (var index = 0; index < value.length; index++) {
        switch (value.charAt(index)) {
            case '.': 
                break;
            case ',':
                v = v + ".";
                if (vg++) return NaN;
                break;
            case '+':
            case '-':
                if (v.length) return NaN;
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                v = v + value.charAt(index);
                break;
            default:
                return NaN;
        }
    }
    return parseFloat(v);
}        



function CPT_VerificaCfPiva(codice) {
    if (codice.length==0) return true;
    var p = codice.substring(0,1);
    if ((p>='0') && (p<='9')) return CPT_VerificaPIVA(codice);
    else return CPT_VerificaCodFisc(codice);
}

function CPT_VerificaCodFisc(codice) {
    if (codice.length==0) return true;
    var ok = true;
    var cf = codice.toUpperCase();
    var i;

    if (cf.length != 16) ok = false;
    else {
        var validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        for (i = 0; i < 16; i++) { if (validi.indexOf(cf.charAt(i)) == -1) ok = false; }
    }

    if (ok) {
        var set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
        var s = 0;
        for (i = 1; i <= 13; i += 2) s += setpari.indexOf(set2.charAt(set1.indexOf(cf.charAt(i))));
        for (i = 0; i <= 14; i += 2) s += setdisp.indexOf(set2.charAt(set1.indexOf(cf.charAt(i))));
        if (s % 26 != cf.charCodeAt(15) - 'A'.charCodeAt(0)) ok = false;
    }

    return ok;
}

function CPT_VerificaPIVA(codice) {
    if (codice.length==0) return true;
    var ok = true;
    var pi = codice;
    var i;

    if (pi.length != 11) ok = false;
    else {
        var validi = "0123456789";
        for (i = 0; i < 11; i++) { if (validi.indexOf(pi.charAt(i)) == -1) ok = false; }
    }

    if (ok) {
        var s = 0;
        for (i = 0; i <= 9; i += 2) s += pi.charCodeAt(i) - '0'.charCodeAt(0);
        for (i = 1; i <= 9; i += 2) {
            c = 2 * (pi.charCodeAt(i) - '0'.charCodeAt(0));
            if (c > 9) c = c - 9;
            s += c;
        }
        if ((10 - s % 10) % 10 != pi.charCodeAt(10) - '0'.charCodeAt(0)) ok = false;
    }

    return ok;
}

function CPT_HideError( inputel ){
    inputel.removeClass('invalid').removeData("CPT_Error");
    var tooltip = inputel.data("tooltip"); if ( tooltip ) tooltip.hide();
}

function CPT_HideErrors( parentel ){
    parentel.find('.invalid').removeClass('invalid').removeData("CPT_Error").each(function(i){ var tooltip = $(this).data("tooltip"); if ( tooltip ) tooltip.hide(); });
}        

function CPT_SvuotaForm( frm ){
    frm.find('input[type="text"]').val('');
    frm.find('textarea').val('');
    frm.find('input[type="checkbox"]').attr('checked', false);
}

function CPT_ShowErrors() {
    var GblErr = '';        
    $.each(CPT_EsitoValidazione.lista, function(index, value) { 
        var err = value.err;
        if (value.el && value.el.data('title')) {
            var txt = value.el.data("CPT_Error");
            if ( txt && txt.length>0 ) err = txt + "; "+ err;
            value.el.addClass('invalid').data("CPT_Error",err).blur(function(){ CPT_HideError( value.el ); });
            var tooltip = value.el.data("tooltip");
            if ( tooltip ) tooltip.show();
        } else {
            if (value.el) GblErr = GblErr + '"' + value.el.attr('name') + '" ' + err + '\n';
            else GblErr = GblErr + err + '\n';
        }
    });
    if (GblErr != '') alert(GblErr);
}

function CPT_SetFormTooltip(FrmSelector) {
	$(FrmSelector + " [title]").tooltip({ 
		tipClass:'tooltip registrazione_tooltip' , position:'center right' 
		, onBeforeShow: function(){
			var inputel = this.getTrigger();
			var tipel = this.getTip();
			if ( inputel.hasClass('invalid') ){
				tipel.html( '<div>'+ inputel.data("CPT_Error")+ '</div>' );
				tipel.attr('class','errtip registrazione_err');
			} else {
				tipel.html( '<div>'+ inputel.data('title')+ '</div>' );
				tipel.attr('class','tooltip registrazione_tooltip');
			}
		}
	});
}



/* ------------------------ */
function REGNL_Submit(elx) {
    var frm=$(elx).closest('form');
    var ok = true;
    CPT_HideErrors(frm);     
    CPT_EsitoValidazione.clear(); 

    var de = frm.find('input[name="TXT"]').val();
    var el = frm.find('[name="email"]');
    ok = CPT_ValidateRequiredEx(el, ok, true);
    var v = el.val();
    if (v==de) {
        ok = false; CPT_EsitoValidazione.add(el, 'email non valida.'); 
    } else if (v!='') {
        if (!CPT_VerificaEmail(el.val())) { ok = false; CPT_EsitoValidazione.add(el, 'email non valida.'); } 
    }

    if (!ok) REGNL_ShowErrors();

    if (ok) {
        CPT_Ajax.execute({
            form: frm,
            onReturn: function(options, data) {
                if (data.esito) {
                    CPT_Popup.popup.openAlert({ title: 'Registrazione Newsletter', source: '<span class="MsgInfo">Grazie, La richiesta è stata inoltrata correttamente.<br /><br />Riceverai quanto prima un email per convalidare la tua richiesta.</span>',onClose: function(pop) { frm.find('input[type="text"]').val(''); }});
                } else {
                    if ( data.rc ){
                        for (i=0; i<data.rc.length; i++) {
                            switch (data.rc[i]) {
                                case 1: CPT_EsitoValidazione.add(frm.find('[name="email"]'), 'campo richiesto'); break;
                                case 2: CPT_EsitoValidazione.add(frm.find('[name="email"]'), 'e-mail non valida'); break;
                                case 3: CPT_EsitoValidazione.add(frm.find('[name="nlide"]'), 'campo richiesto'); break;
                                case 4: CPT_EsitoValidazione.add(frm.find('[name="nlide"]'), 'newsletter non valida'); break;
                                case 5: CPT_EsitoValidazione.add(frm.find('[name="email"]'), 'e-mail già iscritta'); break;
                                case 6: CPT_EsitoValidazione.add(frm.find('[name="email"]'), 'e-mail non iscritta'); break;
                                default: CPT_EsitoValidazione.add(undefined, "Errore #"+ data.rc[i]);
                            }
                        }
                    } else {
                        CPT_EsitoValidazione.add(undefined, 'Errore di sistema senza codici di ritorno.');
                    }
                    REGNL_ShowErrors();
                }
            }
        }); 
    }
}

function REGNL_ShowErrors() {
    var GblErr = '';        
    $.each(CPT_EsitoValidazione.lista, function(index, value) { 
        var err = value.err;
        if (value.el && value.el.data('title')) {
            var txt = value.el.data("CPT_Error");
            if ( txt && txt.length>0 ) err = txt + "; "+ err;

            value.el.addClass('invalid').data("CPT_Error",err).blur(function(){ CPT_HideError( value.el ); });

            var tooltip = value.el.data("tooltip");
            if ( tooltip ) tooltip.show();
        } else {
            if (value.el) GblErr = GblErr + '"' + value.el.attr('name') + '" ' + err + '<br />';
            else GblErr = GblErr + err + '<nr />';
        }
    });
    if (GblErr != '') { CPT_Popup.popup.openAlert({ title: 'Errore', source: '<span class="MsgError">' + GblErr + '</span>'}); }
}



/* ------------------------ */


function REGDELNL_Submit( xel, tipo ){
    var frm=$(xel).closest('form');
    var ok = true;
    CPT_HideErrors(frm);     
    CPT_EsitoValidazione.clear(); 

    var titolo;
    if (tipo=='i') titolo='Conferma iscrizione newsletter';
    else titolo = 'Rimozione dalla newsletter';

    var el = frm.find('input[name="ticket"]');
    ok = CPT_ValidateRequiredEx(el, ok, true);
    
    if (!ok) REGNL_ShowErrors();

    if (ok) {
        CPT_Ajax.execute({
            form: frm,
            onReturn: function(options, data) {
                if (data.esito) {
                    var m='Grazie, operazione effettuata.';
                    CPT_Popup.popup.openAlert({ title: titolo, source: '<span class="MsgInfo">' + m + '</span>',onClose: function(pop) { frm.find('input[type="text"]').val(''); }});
                } else {
                    if ( data.rc ){
                        for (i=0; i<data.rc.length; i++) {
                            switch (data.rc[i]) {
                                case 5: CPT_EsitoValidazione.add(undefined, 'Iscrizione già effettuata in precedenza.'); break;
                                case 6: CPT_EsitoValidazione.add(undefined, 'Non risulta alcuna iscrizione da cancellare.'); break;
                                case 9: CPT_EsitoValidazione.add(frm.find('[name="ticket"]'), 'campo richiesto'); break;
                                case 10: CPT_EsitoValidazione.add(frm.find('[name="ticket"]'), 'codice sblocco non valido o scaduto'); break;
                                default: CPT_EsitoValidazione.add(undefined, "Errore #"+ data.rc[i]);
                            }
                        }
                    } else {
                        CPT_EsitoValidazione.add(undefined, 'Errore di sistema senza codici di ritorno.');
                    }
                    REGNL_ShowErrors();
                }
            }
        }); 
    }
}





function CON_Print(url) {
    var u = url + '&l=' + escape(window.location.href);
    CPT_Popup.popup.open({
        title: 'Stampa',
        position: [ 'center', 'center', '935', '90%' ],
        modal: true, 
        source: '<iframe class="USRIF" frameborder="0" style="border: none; margin:0px;" src="' + u + '"> </iframe>',
        onOpen: function(s) { 
            var ct = s.element.find('.CPT_CONTENT');
            var h = ct.innerHeight() - 5;
            var el = s.element.find('.USRIF');
            el.css({ 'height':h+'px', 'width':'100%' });

            var b = s.element.find('.CPT_BUTTONS');
            if (b.length>0) {
                var a = $('<a href="#"><span>Stampa</span></a>');
                a.click(function() {
                    var i = $(this).closest('.CPT_POPUP').find('.USRIF');
                    i[0].contentWindow.focus();
                    i[0].contentWindow.print();
                    return false;
                });
                b.prepend(a);
            }
        },
        buttons: true
    });
}
