var regFormSubmitted = false;
function checkFRM(frm){
	// campi che terminano con __*   => Campi obbligatori
	// campi che iniziano con $		 => Campi crittati	
	var tmpName;
	var naz = "";
	var oCountry = document.getElementById("select_country");
	if(oCountry)
		naz = (oCountry.options[oCountry.selectedIndex].value||"").toUpperCase();
	
	var userTypeID = "";
	var oUserType = document.getElementById("select_userTypeID");
	if(oUserType)
		userTypeID = oUserType.options[oUserType.selectedIndex].value||"";
	
	var pIVA = "";
	tmpName = cryptString("companyCode");
	var oPIVA = frm[tmpName] || frm[tmpName+"__*"];
	if(oPIVA)
		pIVA = oPIVA.value||"";
	
	var emptyFields = [];
	var wrongFields = [];
	var bEmptyField;
	var bWrongField;
	var signedField;
	for(var i=0,fldName='',requiredField,disabledField;i<frm.elements.length;i++){
		fldName = frm.elements[i].name;
		disabledField = frm.elements[i].disabled;
		if( !fldName || disabledField ) 
			continue;
		
		requiredField = fldName.split("__*").length==2;
		bEmptyField = false;
		bWrongField = false;
		fldName = frm.elements[i].name.replace(/__\*$/,"");
		fldName = decryptString(fldName);
		signedField = frm.elements[i];
		
		switch(fldName){
			case "companyCode":
				requiredField = requiredField || userTypeID.charAt(0)=="1";
				if( requiredField || frm.elements[i].value.length )
					bWrongField = checkFldIVA(frm.elements[i],naz);
			break;
			case "personCode":
				requiredField = requiredField || userTypeID.charAt(1)=="1";
				if( requiredField || frm.elements[i].value.length )
					bWrongField = checkFldPersoneCode(frm.elements[i],naz,pIVA);
			break;
			case "postalCode":
				if( requiredField || frm.elements[i].value.length )
					bWrongField = checkPostalCodeFld(frm.elements[i],naz);
			break;
			case "birthDate":
				if( requiredField || frm.elements[i].value.length )
					bWrongField = !isDate(frm.elements[i].value);
			break;
			case "mail":
				if( requiredField || frm.elements[i].value.length )
					bWrongField = !isMail(frm.elements[i].value);
			break;
			case "mail_2": case "pwd_2":
				if( requiredField || frm.elements[i].value.length )
					bWrongField = frm.elements[i].value!=frm.elements[i-1].value;
			break;
			case "uploadFile":
				signedField = document.getElementById("file_uploadUploader"); // il campo per l'upload e' hidden
																			 // quindi segnalo il pulsante
			break;
			// LIBERI SEMPRE
			case "cmd_OK": case "cmd_RESET":
				requiredField = false;
			break;
		}
		
		fieldChecked(signedField); // mostro campi corretti
		
		// se il campo so gia' che e' errato lo aggiungo all'elenco e proseguo
		if( bWrongField ){
			fieldChecked(signedField,true);
			// wrongFields.push(frm.elements[i]);
			// IE5 non supporta il push
			wrongFields[wrongFields.length] = frm.elements[i];
			continue;
		}
		
		if( requiredField ){
			switch(frm.elements[i].type){
				case "checkbox":
				case "radio":
					var checked = false;
					var list = frm[frm.elements[i].name];
					if(list && list.length){
						for(var r=0;r<list.length;r++){
							checked = list[r].checked;
							if(checked)
								break;
						}
					}else
						checked = frm.elements[i].checked;
					bEmptyField = !checked;
				break;
				case "select-one":
					bEmptyField = frm.elements[i].selectedIndex==0;
				break;
				default:
					bEmptyField = isEmpty(frm.elements[i].value);
				break;
			}
			if(bEmptyField){
				fieldChecked(signedField,true);
				//emptyFields.push(frm.elements[i]);
				// IE5 non supporta il push
				emptyFields[emptyFields.length] = frm.elements[i];
			}
		}
	}
	
	if(emptyFields.length || wrongFields.length){
		alert(window["formFieldsErrorMessage"]);
		return false
	}else{
		if( regFormSubmitted==false ){
			regFormSubmitted = true;
			return true;
		}else
			return false;
	}
}

function checkFldIVA(fld,naz){
	var bWrongField = false;
	switch(naz){
		case "I": case "IT": case "ITA":
			bWrongField = !ControllaPIVA(fld.value);
		break;
	}
	return bWrongField;
}
function checkFldPersoneCode(fld,naz,pIVA){
	var bWrongField = false;
	switch(naz){
		case "I": case "IT": case "ITA":
			bWrongField = !ControllaCF(fld.value) && !ControllaPIVA(fld.value);
		break;
	}
	return bWrongField;
}
function checkPostalCodeFld(fld,naz){
	var bWrongField = false;
	switch(naz){
		case "I": case "IT": case "ITA":
		case "SM": case "RSM":
			var re = eval("/^\\d{5}$/");
			bWrongField = fld.value.search(re)==-1;
		break;
	}
	return bWrongField;
}

function showHideProvince(){
	//var frm = document.forms['registrationMainForm'];
	var select_province = document.getElementById("select_province");
	var text_province = document.getElementById("text_province");
	var country = document.getElementById("select_country");
	var bDisplay = false;
	if( country ){
		country.onchange = showHideProvince;
		switch( (country.options[country.selectedIndex].value||"").toUpperCase() ){
			case "I": case "IT": case "ITA":
				bDisplay = true;
			break;
		}
	}
	if( select_province && text_province ){
		var name;
		if( bDisplay ){
			name = text_province.getAttribute("name");
			text_province.setAttribute("name","");
			select_province.setAttribute("name",name);
			text_province.style.display = "none";
			select_province.style.display = "";
			select_province.className = "";
		}else{
			name = select_province.getAttribute("name"); 
			text_province.style.display = "";
			select_province.style.display = "none";
			// finche' non e' stato assegnato il name alla select non bisogna cambiare nulla
			if(name){
				select_province.setAttribute("name","");
				text_province.setAttribute("name",name);
				text_province.className = "";
			}
		}
		
		// tolgo l'icona di segnalazione all'ultimo posto
		var ico = document.getElementById(name+"_check");
		if(ico)
			ico.parentNode.removeChild(ico);
	}
	
}

function ControllaCF(cf){
	var validi, i, s, set1, set2, setpari, setdisp;
    if( cf == '' )  return true;
    cf = cf.toUpperCase();
    if( cf.length != 16 )
		return false;
    validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for( i = 0; i < 16; i++ ){
        if( validi.indexOf( cf.charAt(i) ) == -1 )
          return false;
    }
    set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
    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) )
       return false;
    return true;
}

function ControllaPIVA(pi){
    if( pi == '' )  return true;
    if( pi.length != 11 )
     	return false;
    validi = "0123456789";
    for( i = 0; i < 11; i++ ){
        if( validi.indexOf( pi.charAt(i) ) == -1 )
           return false;
    }
    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) )
        return false;
    return true;
}



