/* INTERFACCIA JS PER GESTIRE UTENTI */

// Variabili Globali
var url_xml_rpc;			// indirizzo per chiamare la call.php
var form_obj;				// form principale
var iso_encoding;			// variabile che conterrà la codifica della struttura/xml
var fields_to_display = new Array();    // array che contiene i campi da visualizzare a seconda dell'utente
var directory;                           // variabile che contiene la directory da richiamare dopo aver effettuato tutto




// Controlla il corretto inserimento dei campi dell'utente
function user_field_control(callback, reload_url) {
	reset_errors();
	
	// controllo eventuali select siano state settate e non lasciate sull'opzione 'scegli'
	var arraycampi = document.getElementsByTagName('select');
	for (i = 0; i < arraycampi.length; i++) {
		elem_id = arraycampi[i].getAttribute('id');
		elem_value = arraycampi[i].value;
		if(elem_value == '***' && document.getElementById('err_'+elem_id) && arraycampi[i].parentNode.parentNode.style.display != 'none') {
			document.getElementById('err_'+elem_id).innerHTML = ' '+js_dic_ERRORNOTYPE;
			return false;
		}
	}
	
	// controllo che i campi obbligatori non siano vuoti e la correttezza di eventuali mail
	var arraycampi = document.getElementsByTagName('input');
	for (i = 0; i < arraycampi.length; i++) {
		elem_type = arraycampi[i].getAttribute('type');
		if(elem_type != "button" && elem_type != "hidden" && elem_type != "reset") {
			elem_id = arraycampi[i].getAttribute('id');
			elem_name = arraycampi[i].getAttribute('name');
			elem_value = arraycampi[i].value;
			// controllo solo i campi non nascosti
			if(arraycampi[i].parentNode.parentNode.style.display != 'none') {
				if(elem_value == '' && document.getElementById('err_'+elem_name)) {
					document.getElementById('err_'+elem_name).innerHTML = ' '+js_dic_ERRORCOMPULSORYFIELD;
					return false;
				}
				if(elem_name == 'email') {
					if(!emailControl(elem_value)) {
						document.getElementById('err_'+elem_name).innerHTML = ' '+js_dic_ERRORWRONGMAIL;
						return false;
					}
				}
				// controllo che username e password abbiano un numero giusto di caratteri e non ci siano apici
				if(elem_name == 'user' || elem_name == 'password') {
					if(!lenght_control(elem_value)) {
						document.getElementById('err_'+elem_name).innerHTML = ' '+js_dic_ERRORWRONGLENGHT;
						return false;
					}
					if(elem_value.match("'")) {
						document.getElementById('err_'+elem_name).innerHTML = ' '+js_dic_ERRORAPOS;
						return false;
					}
				}
			}
		}
	}
	
	// controllo che il campo password e la conferma coincidano se esistono
	if(document.getElementById('password').value != document.getElementById('pwdconfirm').value) {
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		document.getElementById('err_pwdconfirm').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		return;
	}
	
	callback(reload_url);
}

function user_registration(dir){
	directory = dir;
	
	struct_param['query'] = new Array();
	struct_param['header']['product'] = 'users';
	struct_param['header']['type'] = 'user_insert';
	struct_param['query']['function'] = 'registration';
	
    // controllo che il campo password e la conferma coincidano e abbiano lunghezza minima 6 caratteri
	if(document.getElementById('password').value != document.getElementById('pwdconfirm').value) {
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		document.getElementById('err_pwdconfirm').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		return;
	}
	if(!length_pwd(document.getElementById('password').value)){
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDSHORT;
		return;
	}
    
    // raccolgo i campi
	var fields = form_obj.getElementsByTagName('input');
	var elem_name;
	var elem_value;
	var elem_type;
	for (i = 0; i < fields.length; i++){
		elem_type = fields[i].getAttribute('type');
		elem_name = fields[i].getAttribute('name');
		if(elem_type != "reset" && elem_type != "button" && elem_type != "hidden" && elem_name != "pwdconfirm"){
			elem_value = fields[i].value;
			if(elem_value != '' && fields[i].parentNode.parentNode.style.display != 'none')     // passo solo i campi non vuoti e non nascosti da js
				struct_param['query'][elem_name] = elem_value;
		}
	}
	
	var fields = form_obj.getElementsByTagName('select');
	for (i = 0; i < fields.length; i++) {
		if(fields[i].parentNode.parentNode.style.display != 'none') {     // passo solo i valori delle select non nascoste da js
			elem_name = fields[i].getAttribute('name');
			elem_value = fields[i].value;
			struct_param['query'][elem_name] = elem_value;
		}
	}
    
	// se sono sulla pagina del manager dei ditributori inserisco un utente per il distributore loggato
	if (dir.match('distributor')) {
        struct_param['query']['type'] = 'distributor';
        struct_param['query']['distributor'] = js_user_info_distributor;
    }
    else {
    
    	struct_param['query']['type'] = 'private';
        struct_param['query']['distributor'] = js_global_default_distributor;
    }
	

	xml_request(struct_param, url_xml_rpc, iso_encoding, callbacks_xml_request);
}


// Inserimento di un utente
function user_insert(dir) {
	directory = dir;
	
	struct_param['query'] = new Array();
	struct_param['header']['product'] = 'users';
	struct_param['header']['type'] = 'user_insert';
	struct_param['query']['function'] = 'insert';
	
    // controllo che il campo password e la conferma coincidano e abbiano lunghezza minima 6 caratteri
	if(document.getElementById('password').value != document.getElementById('pwdconfirm').value) {
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		document.getElementById('err_pwdconfirm').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		return;
	}
	if(!length_pwd(document.getElementById('password').value)){
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDSHORT;
		return;
	}
    
    // raccolgo i campi
	var fields = form_obj.getElementsByTagName('input');
	var elem_name;
	var elem_value;
	var elem_type;
	for (i = 0; i < fields.length; i++){
		elem_type = fields[i].getAttribute('type');
		elem_name = fields[i].getAttribute('name');
		if(elem_type != "reset" && elem_type != "button" && elem_type != "hidden" && elem_name != "pwdconfirm"){
			elem_value = fields[i].value;
			if(elem_value != '' && fields[i].parentNode.parentNode.style.display != 'none')     // passo solo i campi non vuoti e non nascosti da js
				struct_param['query'][elem_name] = elem_value;
		}
	}
	
	var fields = form_obj.getElementsByTagName('select');
	for (i = 0; i < fields.length; i++) {
		if(fields[i].parentNode.parentNode.style.display != 'none') {     // passo solo i valori delle select non nascoste da js
			elem_name = fields[i].getAttribute('name');
			elem_value = fields[i].value;
			struct_param['query'][elem_name] = elem_value;
		}
	}
    
	// se sono sulla pagina del manager dei ditributori inserisco un utente per il distributore loggato
	if (dir.match('distributor')) {
        struct_param['query']['type'] = 'distributor';
        struct_param['query']['distributor'] = js_user_info_distributor;
    }
    else {
    
    	struct_param['query']['type'] = 'private';
        struct_param['query']['distributor'] = js_global_default_distributor;
    }
	

	xml_request(struct_param, url_xml_rpc, iso_encoding, callbacks_xml_request);
}

// Modifica di un utente
function user_update(dir) {
	directory = dir;
	struct_param['query'] = new Array();
	struct_param['header']['product'] = 'users';
	struct_param['header']['type'] = 'user_update';
	struct_param['query']['function'] = 'update';
	
	
    // controllo che il campo password e la conferma coincidano e abbiano lunghezza minima 6 caratteri
	if((document.getElementById('password')) && document.getElementById('password').value != document.getElementById('pwdconfirm').value) {
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		document.getElementById('err_pwdconfirm').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
		return;
	}
	if((document.getElementById('password')) && !length_pwd(document.getElementById('password').value)){
		document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDSHORT;
		return;
	}
    
	var fields = form_obj.getElementsByTagName('input');
	var elem_name;
	var elem_value;
	var elem_type;
	for (i = 0; i < fields.length; i++){
		elem_type = fields[i].getAttribute('type');
		elem_name = fields[i].getAttribute('name');
		if(elem_type != "reset" && elem_type != "button" && elem_name != "pwdconfirm"){
			elem_value = fields[i].value;
			if(elem_value != '' && fields[i].parentNode.parentNode.style.display != 'none')     // passo solo i campi non vuoti e non nascosti da js
				struct_param['query'][elem_name] = elem_value;
		}
	}
	
	var fields = form_obj.getElementsByTagName('select');
	for (i = 0; i < fields.length; i++){
		if(fields[i].parentNode.parentNode.style.display != 'none') {     // passo solo i valori delle select non nascoste da js
			elem_name = fields[i].getAttribute('name');
			elem_value = fields[i].value;
			struct_param['query'][elem_name] = elem_value;
		}
	}
	
	struct_param['query']['id'] = document.getElementById('id').value;
	struct_param['query']['old_user'] = document.getElementById('old_user').value;
	xml_request(struct_param, url_xml_rpc, iso_encoding, callbacks_xml_request);
}

// Rimozione di un utente
function user_remove(id, dir) {
	directory = dir;
	struct_param['query'] = new Array();
	struct_param['header']['product'] = 'users';
	struct_param['header']['type'] = 'user_remove';
	struct_param['query']['function'] = 'remove';
	struct_param['query']['id'] = id;
	
	xml_request(struct_param, url_xml_rpc, iso_encoding, callbacks_xml_request);
}

// Funzione per la gestione dei valori ritornati
function callbacks_xml_request(response, type) {
	switch(type){
		case 'user_insert':
  		case 'user_update':
		case 'user_remove':
		case 'user_validate':
			switch (response){
				case 'failure':
					print_error(js_dic_ERRORDB); break;
				case 'foreign_key':
					print_error(js_dic_ERRORFOREIGNKEY); break;
				case 'existing_user':
					print_error(js_dic_ERROREXISTINGUSER); break;
				case 'existing_email':
					print_error(js_dic_ERROREXISTINGEMAIL); break;
				default:
					window.location = js_global_root_url+directory; break;
			} 
			break;
	}

}

// Funzione che reinvalida un utente che era stato eliminato
function user_validate(id, dir){
	directory = dir;
	struct_param['query'] = new Array();
	struct_param['header']['product'] = 'users';
	struct_param['header']['type'] = 'user_validate';
	struct_param['query']['id'] = id;
	xml_request(struct_param, url_xml_rpc, iso_encoding, callbacks_xml_request);
}

// Funzione che mostra anche GLI UTENTI non validi
function show_not_valid(){
	var tr = document.getElementsByTagName('tr');
	for (var i=0; i<tr.length; i++){
		if (tr[i].getAttribute('id') && (tr[i].getAttribute('id')).substr(0,9) == 'not_valid'){
			document.getElementById(tr[i].getAttribute('id')).style.display = display_for_browser();
		}
	}
	document.getElementById('show').style.display = 'none';
}
/*
 autore : MN
 release 1 20090325
 descrizione         : funzione di salvataggio dati dell'utente. Vengono inizializzati i valori per la chiamata a db
                        della struct_param
 parametri           : reload_url = path del file da richiamare dopo l'esecuzione della funzione
 funzioni richiamate : validate_field() in utilities.js valida i campi del documento
                       read_data_write_param() in utilities.js legge i dati del documento e li inserisce nella array
                       struct_param per formare la query
                       xml_request() in utilities.js formatta i dati in xml
*/
function user_save(reload_url){
    directory = reload_url;
    if(validate_field() && validate_user_psw()){
       read_data_write_param();
       struct_param['header']['product'] = 'users';
       if(document.getElementById('id').value != ''){
           struct_param['header']['type'] = 'user_update';   
       }else {
           struct_param['header']['type'] = 'user_insert';
           // struct_param['query']['type'] = 'private'
       }         
       
       xml_request(struct_param, url_xml_rpc, iso_encoding, callbacks_xml_request);
    }
}

function validate_user_psw(){

    // controllo che il campo password e la conferma coincidano e abbiano lunghezza minima 6 caratteri
    if(document.getElementById('password') != null && document.getElementById('pwdconfirm') != null){

       if(document.getElementById('password').value != document.getElementById('pwdconfirm').value) {
           document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
           document.getElementById('err_pwdconfirm').innerHTML = ' '+js_dic_ERRORPWDCONFIRM;
           return false;
       }
       if(!length_pwd(document.getElementById('password').value)){
           document.getElementById('err_password').innerHTML = ' '+js_dic_ERRORPWDSHORT;
           return false;
       }
    }
    return true ;
}

function control_flow_user(dir){
	id = document.getElementById('id').value;
	old_user = document.getElementById('old_user').value;
	if(id != ""  && old_user != ""){
		user_update(dir);
	} else {
		user_registration(dir);
	}
}

