(function($) {
	Number.prototype.formatMoney = function(c, d, t){
		var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
		return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
	};
	var List = function(element,options) {
		var defaults = {
			cols : [],
			filters : {},
			rows : 20,
			start : 0,
			page : 10,
			id : 'idAnnuncio',
			order : 'prezzo',
			url : 'ajax_backend.php',
			action : 'get_annunci_vendite',
			http_request : 'raw_html'
		};

		var css = {

		};
		var opts = $.extend(defaults, options);
		var opts_orig = $.extend(true,{},opts);
		var table;
		var thead;
		var tnavbar;
		var torderbar;
		var tbody;
		var filterDiv;
		var colmap = {};

		var toString = function(obj) {
			var str='';
			for(prop in obj)
			{
				str += prop + ': ' + obj[prop] + '<br>';
			}
			return str;
		}
		
		var loadRemoteData = function() {
			table.block({
						message : '<div style="margin: 5px; padding: 10px;"><img src="img/indicator.gif" align="base"> Loading...</div>'
						});
			opts.where = $.toJSON(opts.filters);
			table.ajaxError(function(event, request, ajaxOptions, thrownError){
				table.block({message: 'Errore: '+request.responseText});
			});
			$.post(opts['url'], opts, function(data) {
				if(opts.filters.vetrina != null && opts.filters.vetrina == 'S'){
					buildVetrina(data);
				}
				else{
					buildOrderBar(data);
					buildNavbar(data);
					buildBody(data);
				}
				
				table.unblock();
			}, 'json');
		};
		var navbar = function(start, rows, total) {
			curpage = Math.floor(start / rows);
			curgroup = Math.floor(curpage / opts.page);

			nb = '';

			if (curgroup > 0) {
				nb += '<img src="img/p-first.gif" id="nav_first"> ';
				nb += '<img src="img/p-prev.gif" id="nav_prev"> ';
			}

			pages = new Array();
			for (p = curgroup * opts.page; p < (curgroup + 1) * opts.page
					&& p < Math.ceil(total / rows); p++) {
				pages.push('<span class="nav_page">' + (p + 1) + '</span>');
			}
			nb += pages.join(' | ');

			if (curgroup < Math.floor((total-1) / rows / opts.page)) {
				nb += ' <img src="img/p-next.gif" id="nav_next">';
				nb += ' <img src="img/p-last.gif" id="nav_last">';
			}

			return nb;
		};

		var buildNavbar = function(data) {
			nb = '<div style="float: right;">';
			nb += navbar(opts.start, opts.rows, data.count);
			nb += '</div>';
			$(tnavbar).html(nb);
			// Evidenzio la pagina corrente
			$(tnavbar).find('.nav_page:contains(' + (Math.floor(opts.start / opts.rows) + 1) + ')')
					.css('font-weight', 'bold');
			// Aggancio gli eventi per la navigazione
			$(tnavbar).find('#nav_first').click(function() {
				opts.start = 0;
				loadRemoteData();
			}).css('cursor', 'pointer');
			$(tnavbar).find('#nav_prev').click(function() {
				opts.start = Math.floor(opts.start/opts.rows/opts.page)*opts.rows*opts.page-1;
				loadRemoteData();
			}).css('cursor', 'pointer');
			$(tnavbar).find('.nav_page').click(function() {
				opts.start = ($(this).html() - 1) * opts.rows;
				loadRemoteData();
			}).css('cursor', 'pointer');
			$(tnavbar).find('#nav_next').click(function() {
				opts.start = Math.floor(opts.start/opts.rows/opts.page + 1)*opts.rows*opts.page;
				loadRemoteData();
			}).css('cursor', 'pointer');
			$(tnavbar).find('#nav_last').click(function() {
				opts.start = Math.floor(data.count/opts.rows/opts.page)*opts.rows*opts.page;
				loadRemoteData();
			}).css('cursor', 'pointer');
		
		};


		var buildBody = function(data) {
			$(tbody).html('');
			$.each(data.rows,
					function(idx, row) {
						trow = $('<tr></tr>').appendTo(tbody).attr('id',
								(row[opts.id]) ? row[opts.id] : '');
						if(row['descrizione'].length > 200){
							row['descrizione'] = row['descrizione'].substr(0,197) + '...';
						}	
						tcol = $('<td colspan="2"></td>').appendTo(trow);
						$(tcol).css({
							'padding-top' : '0px',
							'padding-bottom' : '0px'
						});
						var tr,td;
						var innerdiv = $('<div></div>').appendTo(tcol);
						$(innerdiv).css({
							'background-image' : 'url(immagini/box_elenco.gif)',
							'background-position' : ' top left',
							'background-repeat' : 'no-repeat',
							'padding-top' : '17px',
							'width' : '650px'
						});
						var innerTable = $('<table cellpadding="5" cellspacing="0" border="0" width="100%" ></table>').appendTo(innerdiv);
						
						$(innerTable).css({
							'margin' : '0 auto',
							'width' : '620px'
						});
						
						
						tr = $('<tr></tr>').appendTo(innerTable);
						td = $('<td width="150" rowspan="3" valign="top"><div><img width="140" src="librerie/resizer/resize.php?size=140x100&url=../../' + row['foto_preview'] +'" /></div></td>').appendTo(tr);
						td = $('<td style="text-transform:capitalize;" align="left"></td>').appendTo(tr);
						
						var link = $('<a href="javascript:void(0);"><b>'+row['comune'].toLowerCase() +'</b>, ' +row['zona'] +', ' +row['zona_meta'] + '</a>').appendTo(td);
						$(link).css({
							'font-size':'14px'
						});
						$(link).click(function(){
							open_record(row[opts.id]);
						});
						var link2 = $('<a href="javascript:void(0);"><b>Cod. '+row['cod_a'] + '</b></a>').appendTo(td);
						$(link2).css({
							'font-size':'14px',
							'float': 'right'
						});
						$(link2).click(function(){
							open_record(row[opts.id]);
						});
						var row_d = '<table width="100%"><tr><td width="33%">&euro; '+ parseFloat(row['prezzo']).formatMoney() +'</td><td width="33%">'+row['tipologia']+'</td><td width="33%">Vani&nbsp;'+row['vani']+'</td></tr></table>';
						tr = $('<tr></tr>').appendTo(innerTable);
						td = $('<td align="left">'+row_d+'</td>').appendTo(tr);
						
						$(td).css({
							'color' : '#666666',
							'font-weight' : 'bold',
							'font-size' : '120%'
						});
						tr = $('<tr></tr>').appendTo(innerTable);
						td = $('<td align="left">'+row['descrizione'] + '</td>').appendTo(tr);
					});
		};
		
		var buildVetrina = function(data){
		$(tbody).html('');
			$.each(data.rows,
					function(idx, row) {
						trow = $('<tr></tr>').appendTo(tbody).attr('id',
								(row[opts.id]) ? row[opts.id] : '');
						if(row['descrizione'].length > 100){
							row['descrizione'] = row['descrizione'].substr(0,97) + '...';
						}	
						tcol = $('<td colspan="2"></td>').appendTo(trow);
						$(tcol).css({
							'padding-top' : '0px',
							'padding-bottom' : '0px'
						});
						var tr,td;
						var innerTable = $('<table cellpadding="0" cellspacing="0" border="0" width="100%" ></table>').appendTo(tcol);
						$(innerTable).css({
							'border-bottom' : '1px dotted black'							
						});
						tr = $('<tr></tr>').appendTo(innerTable);
						td = $('<td style="text-transform:capitalize;" align="left"></td>').appendTo(tr);
						
						var link = $('<a href="javascript:void(0);"><b>'+row['comune'].toLowerCase() +'</b>, ' +row['zona'] +', ' +row['zona_meta'] + '</a>').appendTo(td);
						$(link).css({
							'font-size' : '12px'
						});
						$(link).click(function(){
							switch(opts.destinazione){
								case 'A' : 
									document.location = 'locazioni.html?view='+row[opts.id];
									break;
								case 'V' : 
									document.location = 'c_vendite.html?view='+row[opts.id];
									break;
							}
						});
						var row_d = '<table width="100%"><tr><td width="33%">&euro; '+ parseFloat(row['prezzo']).formatMoney() +'</td><td width="33%">'+row['tipologia']+'</td><td width="33%">Vani&nbsp;'+row['vani']+'</td></tr></table>';
						tr = $('<tr></tr>').appendTo(innerTable);
						td = $('<td align="left">'+row_d+'</td>').appendTo(tr);
						
						$(td).css({
							'color' : '#666666',
							'font-weight' : 'bold',
							'font-size' : '120%'
						});
						tr = $('<tr></tr>').appendTo(innerTable);
						td = $('<td align="left">'+row['descrizione'] + '</td>').appendTo(tr);
					});	
		};
		var buildOrderBar = function(data) {
			$(torderbar).html('<td id="ordinatore">Ordina Per:&nbsp;&nbsp<select id="order_list"></select>&nbsp;&nbsp</td>');
			var ordinatori = {
				vani : 'Vani',
				tipologia : 'Tipologia',
				prezzo : 'Prezzo',
				idComune : 'Comune'
			}
			
			var select = $('<select id="what_order"></select>').appendTo($('#ordinatore'));

			for(elem in ordinatori){
				var check = (opts.order.charAt(0) == '!') ? opts.order.substr(1) : opts.order;
				if(elem == check)
					$('<option selected value="' + elem + '">' + ordinatori[elem] + '</option>').appendTo($('#order_list'));
				else
					$('<option value="' + elem + '">' + ordinatori[elem] + '</option>').appendTo($('#order_list'));
			}

			if($('#order_list').val() == 'prezzo'){
				if(opts.order.charAt(0) == '!'){
					$('<option value="">Crescente</option>').appendTo(select);
					$('<option value="!" selected>Decrescente</option>').appendTo(select);
				}
				else{
					$('<option value="" selected>Crescente</option>').appendTo(select);
					$('<option value="!">Decrescente</option>').appendTo(select);
				}
			}
			else{
				$.getJSON(
					'ajax_backend.php',
					{
						'action' : 'get_distinct_of',
						'value' : $('#order_list').val(),
						'destinazione' : opts.destinazione
					},
					function(data){
						var lista = data.list;
						var html = '<option value="">Tutti</option>'
						for(var i = 0; i < lista.length; i++){
							var sel = (opts.filters[$('#order_list').val()] == '=' + lista[i].val) ? 'selected' : '';
							html += '<option value="'+lista[i].val+'" ' + sel + '>'+lista[i].et+'</option>';
						}
						$('#what_order').html(html);
					});
			}
			
			$(torderbar).find('#order_list').change(function(){
				if($('#order_list').val() == 'prezzo'){
					var w_order = '';
					if($('#what_order').val() != '' && $('#what_order').val() != '!'){
						 w_order = '';
					}
					else{
						 w_order = $('#what_order').val();
					}
					opts.order = w_order  + $('#order_list').val();
					loadRemoteData();
					
				}
				else{
					$.getJSON(
						'ajax_backend.php',
						{
							'action' : 'get_distinct_of',
							'value' : $('#order_list').val(),
							'destinazione' : opts.destinazione
						},
						function(data){
							var lista = data.list;
							var html = '<option value="">Tutti</option>'
							for(var i = 0; i < lista.length; i++){
								var sel = (opts.filters[$('#order_list').val()] == '=' + lista[i].val) ? 'selected' : '';
								html += '<option value="'+lista[i].val+'" ' + sel + '>'+lista[i].et+'</option>';
							}
							$('#what_order').html(html);
							var filt = $('#what_order').val();
							if($('#what_order').val() != ''){
								filt = '='+ $('#what_order').val();
							}
							for(var el in ordinatori){
								opts.filters[el] = '';
							}
							opts.filters[$('#order_list').val()] = filt;
							opts.order = $('#order_list').val();
							loadRemoteData();
						});
						
				}
				
				
			});
			$(torderbar).find('#what_order').change(function(){
				if($('#order_list').val() == 'prezzo'){
					opts.order = $('#what_order').val() + $('#order_list').val();
				}
				else{
					
						var filt = $('#what_order').val();
						if($('#what_order').val() != ''){
							filt = '='+ $('#what_order').val();
						}
						for(var el in ordinatori){
							opts.filters[el] = '';
						}
						opts.filters[$('#order_list').val()] = filt;
						opts.order = $('#order_list').val();
				}
				loadRemoteData();
			});
			
			
		};
		var buildTable = function() {
			thead = $('<thead></thead>').appendTo(table);
			tbody = $('<tbody></tbody>').appendTo(table);
			row_order = $('<tr></tr>').appendTo(thead);
			torderbar = $('<td width="60%"></td>').appendTo(row_order);
			$(torderbar).css({
				'padding-left': '10px'
			});
			trow = $('<tr></tr>').appendTo(thead);
			tnavbar = $('<td width="40%"></td>').appendTo(row_order);
			$(tnavbar).css({
				'padding-right': '10px'
			});
			loadRemoteData();
		};

		table = $(element);
		buildTable();
		return {
			reload: function() {
				loadRemoteData();
			}
		}
	};
	
	$.fn.list_annunci = function(options) {
		return this.each(function() {
			var element = $(this);
			if (element.data('list_annunci')) return;
			
			var list = new List(this,options);	
			element.data('list_annunci',list);
		});
	};
	
	$.fn.tagName = function() {
	    return this.get(0).tagName;
	}
})(jQuery);
