/**
 * Delaer Managment
 * 
 * @author Fabio Cazzadore <fabio.cazzadore@gmail.com>
 * @version 0.9.5
 * 
 */

/******************************************************************************
 * Configuration
 ******************************************************************************/
 
var configConc = 	{
						concClassName 		: 	'concCLS',
						provConcClassName 	: 	'provConcCLS',
						concID				:	'conc',
						provID				:	'province',
						fullDataHidden		:	'fullconcdata'
					}



/******************************************************************************
 * Events
 ******************************************************************************/

$(document).ready(function(){
	
	$("."+configConc.concClassName).bind('change',function(){
			getConcDataCodAgAndProvince($(this).val(),$('.'+configConc.provConcClassName).attr('id'),configConc.fullDataHidden);
	});	
		
});
					
/******************************************************************************
 * Generic Functions
 ******************************************************************************/


/**
 * ajaxRequest permette di effettuare una chiamata ajax
 *
 * @param string page	pagina da chiamare
 * @param array dataValues array da passare alla pagina come valore di post/get
 * @param boolean isAsync permette di specificare se la chiamata è sincrona o meno (true=asincrona)
 * @param string callType permette di specificare la chiamata POST o GET
 * @return string result della chiamata
 */
 function ajaxRequest(page,dataValues,isAsync,callType){
	var result =$.ajax({
					 url	:	page,
					 type	:	callType,
					 data	: 	dataValues,
					 async	: 	isAsync
				}).responseText;
	return result;
}

/**
 * getSelectedText permette di recuperare il valore del testo selezionato in una select
 *
 * @param string id	id della select html
 * @return string testo della select
 */
function getSelectedText(id){
	var selObj = document.getElementById(id);
	var selIndex = selObj.selectedIndex;
	return selObj.options[selIndex].text;
}

/**
 * clearString pulisce la stringa da caratteri particolari
 *
 * @param string stringToClear	stringa da pulire
 * @return string stringa pulita
 */
function clearString(stringToClear){
	var str = stringToClear;
	str = str.replace(/-/g,"");
	str = str.replace(/'/g,"");
	str = str.replace(/ /g,"");
	str = str.toLowerCase();
	return str;
}


/******************************************************************************
 * Dealer Functions
 ******************************************************************************/
 
 
/**
 * displayAddressByCodAg ritorna l'indirizzo di un concessionario
 * trovato in base al codice Ag
 *
 * @param string codAg	Codice Organizzato
 * @param string idDiv	Id di un oggetto del html in cui si vuole stampare il risultato
 * @return string indirizzo concessionario
 */
function displayAddressByCodAg(codAg,idDiv){
	$.each( dealers, function(key, value){
		$.each( value, function(subKey, subValue){
			if ($.trim(subKey) == $.trim(codAg)){
				$('#'+idDiv).html(subValue.address);
			}
		});
	});
}

/**
 * displayAddressByCodAg ritorna l'indirizzo di un concessionario
 * trovato in base al codice Ag e alla provincia
 *
 * @param string codAg	Codice Organizzato
 * @param string province	Provincia del concessionario
 * @param string idDiv	Id di un oggetto del html in cui si vuole stampare il risultato
 * @return string indirizzo concessionario
 */
function displayAddressByCodAgAndProvince(codAg,province,idDiv){
	if (dealers[clearString(getSelectedText(province))] != undefined){
		$.each( dealers[clearString(getSelectedText(province))], function(key, value){
			if ($.trim(key) == $.trim(codAg)){
				$('#'+idDiv).html(value.address);
			}
		});
	}
}

/**
 * fillDealerSelect riempie la select dei concessionari in base alla provincia selezionata
 *
 * @param string selectProvinceID	id della select delle provincie
 * @param string selectDealerClass	classe della select dei concessionari
 * @param string codAg	codiceAg da selezionare
 * @param string idDiv	id del componente html in cui visualizzare l'indirizzo
 */
function fillDealerSelect(selectProvinceID,selectDealerClass,selectedCodAg,idDiv){
	var i 			= 0;
	var selectStr 	= '';
	var options		= '';
	$("."+selectDealerClass).html('');
	
	if (dealers[clearString(getSelectedText(selectProvinceID))] != undefined){
		$.each( dealers[clearString(getSelectedText(selectProvinceID))], function(key, value){
			if ($.trim(selectedCodAg) != ''){
				if ($.trim(key) == $.trim(selectedCodAg)){
					selectStr = ' class="optSelectMe" SELECTED ';
				}else{
					selectStr = '';
				}
			}else{
				selectStr = (i==0) ? ' class="optSelectMe" SELECTED ' : '';
			}
			
			options += '<option value="' + key + '" '+ selectStr +' >' + value.ragsoc + ' - ' + value.city + '</option>';
			i++;
		});
		
	}else{
		options += '<option value="" class="optSelectMe" >-- -- -- -- -- --</option>';
	}
	
	$('.'+selectDealerClass).html(options);
	
	if (!$.browser.msie){
		$('.'+selectDealerClass).val($('.optSelectMe').val());
	}
	
	if ($.trim(idDiv) != ''){
		displayAddressByCodAgAndProvince($('.optSelectMe').val(),$('#'+selectProvinceID).attr('id'),idDiv);
	}
	
	getConcDataCodAgAndProvince($('.optSelectMe').val(),selectProvinceID,configConc.fullDataHidden);
}

/**
 * preselectConc riempie la select dei concessionari e delle province in base al valore
 * del concessionario che si vuole settare
 *
 * @param string selectProvinceClass	classe della select delle provincie concessionario
 * @param string selectDealerClass	classe della select dei concessionari
 * @param string provinceValue	value della select delle provincie (47,18,12... solitamente è un id)
 * @param string codAg	codiceAg da selezionare
 * @param string idDiv	id del componente html in cui visualizzare l'indirizzo
 */
function preselectConcByProv(selectProvinceClass,selectDealerClass,provinceValue,codAg,idDiv){
	$('.'+selectProvinceClass).val(provinceValue);
	fillDealerSelect($('.'+selectProvinceClass).attr('id'),selectDealerClass,codAg);
	if ($.trim(idDiv) != ''){
		displayAddressByCodAgAndProvince(codAg,$('.'+selectProvinceClass).attr('id'),idDiv);
	}
}

/**
 * preselectConc riempie la select dei concessionari e delle province in base al valore
 * del concessionario che si vuole settare
 *
 * @param string selectProvinceClass	classe della select delle provincie concessionario
 * @param string selectDealerClass	classe della select dei concessionari
 * @param string codAg	codiceAg da selezionare
 * @param string idDiv	id del componente html in cui visualizzare l'indirizzo
 */
function preselectConcByCodAg(selectProvinceClass,selectDealerClass,codAg,idDiv){

	$.each( dealers, function(key, value){
		$.each( value, function(subKey, subValue){
			if ($.trim(subKey) == $.trim(codAg)){
				$.each( $('option','.'+selectProvinceClass), function(keyProv, valProv){
					//alert("val prov" + $.trim(clearString($(valProv).html())) + " provincia " + $.trim(clearString(subValue.province)) + "\n");
					if ($.trim(clearString($(valProv).html())) == $.trim(clearString(subValue.province))){
						$(valProv).attr('selected','selected');
					}
				});
				fillDealerSelect($('.'+selectProvinceClass).attr('id'),selectDealerClass,codAg);
				if ($.trim(idDiv) != ''){
					displayAddressByCodAgAndProvince(codAg,$('.'+selectProvinceClass).attr('id'),idDiv);
				}
			}
		});
	});
}

/**
 * displayAddressByCodAg ritorna l'indirizzo di un concessionario
 * trovato in base al codice Ag e alla provincia
 *
 * @param string codAg	Codice Organizzato
 * @param string province	Provincia del concessionario
 * @return array concessionario
 */
function getConcDataCodAgAndProvince(codAg,province,hiddenField){
	if (dealers[clearString(getSelectedText(province))] != undefined){
		$.each( dealers[clearString(getSelectedText(province))], function(key, value){
			if ($.trim(key) == $.trim(codAg)){
				if($("#"+configConc.fullDataHidden).is('input')){
					var data = value.ragsoc + '|' + value.address + '|' + value.email + '|' + value.telephone;
					$("#"+hiddenField).val(data);
				}
				//alert(value.ragsoc + '|' + value.address + '|' + value.email + '|' + value.telephone);
				return value;
			}
		});
	}
}

