/*!
 * Digiworks - Lucy
 * 2011-06
 * Mil-Clasificados - Anuncios/Buscador (Ads)
 */

var myObject = function() {
        this.callback = function(cbObj) {
              
        	var phpjs = new Phpjsorg();
        	//var p = document.getElementById(cbObj.elem.id + "-horizontalWrapper").getElementsByTagName("span")[0];
        	var p = document.getElementById(cbObj.elem.id + "-label-horizontalWrapper").getElementsByTagName("input")[0];
        	var num = phpjs.number_format(cbObj.value,0,',','.');
            //p.innerHTML = num + ' €';
            p.value = num;
        	// p.value = cbObj.value;
        };
        return this;
}();

//The function creates the paragraph tag used within the update callback
function setUpHorizontalSliderOutput(cbObj) {
        // Dynamically create the paragraph 
        var p = document.createElement("p");
        // Give it a little className spice
        p.className = "res";        
        // Append it to the wrapper div
        document.getElementById(cbObj.elem.id + "-horizontalWrapper").appendChild(p);
        // Stop IE6 memory leaks
        p = null;         
};




var Filters = new Class({

	Extends : Application,
	test : 0,
	_fromPage : 'other',
	_test : 0,
	_currentFrom : null,
	_currentTo : null,
	_updatePhotoCount : true,

	// contructor //////////////////////////////
	initialize : function (options) {

			this.parent(options);
			
			if($defined(this.options.fromPage)) this._fromPage = this.options.fromPage;
			
			this.initFilters();
			
			if(this._fromPage == 'list'){
				fdSliderController.removeOnLoadEvent();
				this.createSlider('priceFrom', this.options.maxRangePrice);
				this.createSlider('priceTo', this.options.maxRangePrice);
			}
			
	},
	
	// /contructor //
	// ***************************************************
	
	//initFilters //////////////////////////////
	initFilters : function(){
		
		//CHECKBOX-----------------------------------------
		$$('.search-filters input[type=checkbox]').addEvent('click',(function(event){
			
			var el = event.target;
			var value = 0;
			
			if(el.getProperty('class') == 'not-checked unic'){
				if(el.getProperty('checked') == true) value = 1 ;
			}else{
				value = el.getProperty('value');
			}
			
			this.sendFilterValues(el.getProperty('name'), value);
		
		}).bind(this));
		
		//RADIO-----------------------------------------
		$$('.search-filters input[type=radio]').addEvent('click',(function(event){
			
			var el = event.target;
			
			if(el.getProperty('name') == 'files') this._updatePhotoCount = false;
			
			this.sendFilterValues(el.getProperty('name'), el.get('value'));
		
		}).bind(this));
		
		//SELECT------------------------------------------
		$$('.search-filters select').addEvent('change',(function(event){
			
			var el = event.target;
			
			if(el.getProperty('id') == 'switchSubdomain' ) return;
			
			if(el.getProperty('name') == 'category'){
				$$('input[name=searchString]').set('value','');
				var array = new Array('category','province');
				this.resetFilters(array);
			}
			
			this.sendFilterValues(el.getProperty('name'), el.get('value'));
			
			
		}).bind(this));
	
		
		
			$$('#search-btn').addEvent('click',(function(event){
			
				if($$('input[name=searchString]').get('value') == '') return;
				
				var el = $$('input[name=searchString]');
				this.sendFilterValues('searchString', el.get('value'));
				
				this.resetFilters();
				
				
			}).bind(this));
			
			$$('input[name=searchString]').addEvent('keydown',(function(event){
				
				if (event.key == 'enter') {
					var el = $$('input[name=searchString]');
					this.sendFilterValues('searchString', el.get('value'));
					
					this.resetFilters();
				}
				
			}).bind(this));
		
	},
	// /initFilters //
	// ***************************************************
	
	sendFilterValues : function (filter, value){
		
		var url = baseUrl + '/ads/filter';
		var datasend = 'filter=' + filter + '&value=' + value + '&frP=' + this._fromPage;
		
		var request = new Request({

			method		: 'post',
			url			: url,
			data        : datasend,
			onFailure	: function(){alert('error');},
			onRequest	: function(){
				byo.overlay.displayLoading(0.1);
			},
			onSuccess : this.filterResponse.bind(this)
		});

		request.send();
		
		return false;
	},
	
	//filterResponse //////////////////////////////
	filterResponse : function(response){
		//alert(response);
		//byo.overlay.hideLoading(); 
		//return;
		
		if(this._fromPage == 'other'){
			//tools.load(baseUrl + '/resultados/busqueda' ,'#page-container .center',null,true);
			window.location = baseUrl + '/resultados/busqueda';
			return;
		}
		
		$$('table.list tbody tr').dispose();
		
		response= this.decodeAjaxResponse(response);
		
		$$('#breadCrumbs').set('text', ', ' + response.breadCrumbs);
		
		$$('span#viewing').set('text', response.session['viewing']);
		$$('span#totalRows').set('text', response.session['totalRows']);
		
		if(this._updatePhotoCount == true) {
			$$('span#adsYesPhoto').set('text', response.adsYesPhoto);
			$$('span#adsNoPhoto').set('text', response.adsNoPhoto);
			$$('span#adsAllPhoto').set('text', response.session['totalRows']);
		}else{
			this._updatePhotoCount = true;
		}
		
		
		if($('add-rows')){
			if((response.session['viewing'] >= response.session['totalRows']) || response.countItems == 0) {
				$('add-rows').setStyle('display','none');
			}else if(response.session['viewing'] < response.session['totalRows']){
				$('add-rows').setStyle('display','block');
			}
		}
		
		
		if(response.changedFilter != 'files' && response.changedFilter != 'price'){
			
			fdSliderController.destroySlider('priceFrom');
			this.createSlider('priceFrom', response.maxRangePrice);
			this.createSlider('priceTo', response.maxRangePrice);
			
			$$('.list thead th').removeClass('activeorder');
			$$('.list thead th').removeClass('desc');
			$$('.list thead th').removeClass('asc');
			
			$$('.list thead th#activationDate').addClass('activeorder desc');
		}
		
		
		if(response.changedFilter == 'searchString'){
			this.updateSelectFilter(response.categories,'categories');
			this.updateSelectFilter(response.provinces,'provinces');
		}
		
		this.appendAd(response.items);
		byo.overlay.hideLoading();
		
		
		return;
	},
	
	// /filterResponse //
	// ***************************************************
	
	
	// appendAd ////////////////////////////////////
	appendAd : function (items, enlargingList) {
		
		var phpjs = new Phpjsorg();
	
		//byo.overlay.hideLoading();
				
		var ctTable = $$('table.list tbody');
		$$('table.list tr').removeClass('nextRow');
		
		var t = 1;
		
		
		$each(items,function(item){
			
			//if(item.relevance > 0){
			//alert(item.title);
			classStyle = '';
			if(enlargingList) classStyle = 'nextRow'; 
			
			var ctTr = new Element('tr',{
				'id' : item.id,
				'class' : classStyle
			});
			
			var tdThumb = new Element('td',{
				'class' : 'thumb',
				'width' : '75'
			});
			
			if(t == 1) tdThumb.setProperty('id','firstNext');
			
			var divImg = new Element('div');
			tdThumb.adopt(divImg);
			
			var imgUrl = baseUrl + '/themes/default/graphics/icon-camera.jpg';
			var alt = 'no imagen';
			if(item.idfile != null){
				imgUrl = baseUrl + '/data/ads/images/' + item.idfile + '_s.' + item.ext;
				alt = '';
			}
			
			divImg.adopt(new Element('img',{
				'src' : imgUrl,
				'alt' : alt
			}));
			
			ctTr.adopt(tdThumb);
			
			
			var tdTitle = new Element('td',{
				'class' : 'name',
				'width' : '340',
				'id'    : item.titleToUrl
			});
			
			var titleHtml = '<b>' + phpjs.ucfirst(item.typeName) +  ' ' + item.title + '</b><br/>';
			titleHtml += '<font size="1"><b>' + item.subcategoryName + '</b> (' + item.categoryName + ')</font><br/>';
			titleHtml += '<font size="1">' + item.municipalityName + ', ' + item.provinceName + '</font>';
			
			tdTitle.adopt(new Element('a',{
				'class' : 'goto',
				'href'  : baseUrl + '/id-' + item.id + '-' + item.titleToUrl,
				//'text'  : item.relevance + ' ' + item.title
				'html'  :  titleHtml
			}));
			
			
			ctTr.adopt(tdTitle);
			
			ctTr.adopt(new Element('td',{
				'class' : 'time',
				'width' : '120',
				'html' : '<b>' + item.activetime + '</b>'
			}));
			
			var str = item.price;
			price = phpjs.number_format(str,2,',','.');
			
			var ex = price.split(',');
			var p1 = ex[0];
			var p2 = null;
			
			if(ex[1] == 0 ){  p2 = '' }else{ p2 = ',' + ex[1] }
			
			price = p1 + p2 + '€';
			
			if(p1 + p2 == 0) price = 'consultar';
			
			ctTr.adopt(new Element('td',{
				'class' : 'price',
				'html' : '<b>' + price + '</b>'
			}));
			
			
			ctTable.adopt(ctTr);
			
			t ++;
	
		
		});// each
		
		
			this.initList();
	
		
		
		if(enlargingList){
		//Scroll page
		
				new Fx.Scroll(window,{
				    duration: 1500,
				    wait: false,
				    offset:{
						x: 0,
						y: -20
					}
				}).toElement('firstNext', 'y').chain(function(){
				
					$$('table.list td.thumb').removeProperty('id');
					
					$$('table.list tr.nextRow').each(function(el){
						var myFx = new Fx.Tween(el);
						myFx.start('background-color', '#fffddf');
					});
					
				});
			//}
		}		
		
	},
	
	// /appendAd //
	// ***************************************************
	// initList //////////////////////////////
	initList : function (){
		
		$$('.list tbody tr').addEvent('click',function(event){
			event.stop();
			tools.load(baseUrl + '/id-' + this.getProperty('id') + '-' + this.getElement('td.name').getProperty('id'),'#detail-container',loadDetailContent(),false);
			this.setStyle('background-color','#f5f0fb');
		});
		
		$$('.list a.goto').addEvent('click',function(event){
			event.stop();
			tools.load(this.getProperty('href'),'#detail-container',loadDetailContent(),false);
			this.getParent('tr').setStyle('background-color','#f5f0fb');
			return false;
		});

		function loadDetailContent (){
			
			var divid = 'detail-container';
			var Yheight = 550;
			var scrolledY;
			
			if( self.pageYoffset ) {
				scrolledY = self.pageYoffset;
			} else if( document.documentElement && document.documentElement.scrollTop ) {
				scrolledY = document.documentElement.scrollTop;
			} else if( document.body ) {
				scrolledY = document.body.scrollTop;
			}

			// Next, determine the coordinates of the center of browser's window
			var centerY;
			if( self.innerHeight ) {
				centerY = self.innerHeight;
			} else if( document.documentElement && document.documentElement.clientHeight ) {
				centerY = document.documentElement.clientHeight;
			} else if( document.body ) {
				centerY = document.body.clientHeight;
			}

			var topoffset = (scrolledY + (centerY - Yheight) / 2) -130;
			var o=document.getElementById(divid);
			var r=o.style;
			r.top = topoffset + 'px';
			
			$$('#detail-container .crl-loading').setStyle('display','block');
			$j('#detail-container').animate({
			    width: '100%'
			 }, 500, function() {
			    // Animation complete.
			});
		}// onComplete
		
		$$('.list tbody tr').addEvent('mouseover',function(event){
			var td = this.getElement('td.name');
			var tdThumb = this.getElement('td.thumb');
			td.getElement('a').setStyles({
				'color': '#eda10f',
				'text-decoration' : 'underline'
			});
			tdThumb.getElement('div').setStyles({
				'border-color': '#eda10f'
			});
		});
		
		$$('.list tbody tr').addEvent('mouseout',function(event){
			var td = this.getElement('td.name');
			var tdThumb = this.getElement('td.thumb');
			td.getElement('a').setStyles({
				'color': '#0b567c',
				'text-decoration' : 'none'
			});
			tdThumb.getElement('div').setStyles({
				'border-color': '#eae7c9'
			});
		});
		
	},
	// /initList //
	// resetFilters///////////////////////////////////
	resetFilters : function (exept){
		
		var phpjs = new Phpjsorg();
		
		$$('.search-filters input[type=checkbox]').each(function(el){
			if(!phpjs.in_array(el.getProperty('name'),exept)){
				el.removeProperty('checked');
			}
		});
		
		$$('.search-filters select').each(function(el){
			if(!phpjs.in_array(el.getProperty('name'),exept)){
				el.set('value','');
			}
		});
		
		$$('.search-filters input[type=radio]').each(function(el){
			if(!phpjs.in_array(el.getProperty('name'),exept)){
				el.removeProperty('checked');
			}
		});
		
		
		
	},
	// /resetFilters //
	// ***************************************************
	
	// createSlider /////////////////////////////
	createSlider : function (elId, maxRangePrice){
	

		var increment = Math.round(maxRangePrice / 100);
		if(increment == 0) increment = 1;
		
		var phpjs = new Phpjsorg();
		
		var options = {
				// A reference to the input
		        inp :   $(elId),
		        // A String containing the increment value (and the return precision, in this case 2 decimal places "x.20")
		        inc :   "" + increment + "",
		        // Maximum keyboard increment (automatically uses double the normal increment if not given)
		      //  maxInc:         "",
		        // Numeric range
		        range :  [ 0, maxRangePrice ],
		        // Callback functions
		        callbacks:  { "update":[myObject.callback], "create":[setUpHorizontalSliderOutput, myObject.callback] },
		        // String representing the classNames to give the created slider
		        classNames   : "horizontalclass",
		        // Tween the handle onclick?
		        tween        : true,
		        // Is this a vertical slider
		        vertical     : false,
		        // Do we hide the associated input on slider creation
		        hideInput    : true,
		        // Does the handle jump to the nearest click value point when the bar is clicked (tween cannot then be true)
		        clickJump    : false,
		        // Full ARIA required
		        fullARIA     : false,
		        // Do we disable the mouseWheel for this slider
		        noMouseWheel : false,
		       	
			};
	
				fdSliderController.createSlider(options);
				
				fdSliderController.addEvent(document,'mousedown', function(e){
					
					this._currentFrom = $$('#fd-slider-priceFrom button').getProperty('aria-valuenow')*1;
					this._currentTo = $$('#fd-slider-priceTo button').getProperty('aria-valuenow')*1;
					
				}.bind(this));	
		
				fdSliderController.addEvent(document,'mouseup', function(e){
					
					var fromV = $$('#fd-slider-priceFrom button').getProperty('aria-valuenow')*1;
					var toV = $$('#fd-slider-priceTo button').getProperty('aria-valuenow')*1;
					
					if(this._currentFrom == fromV && this._currentTo == toV) return;
					
						if(fromV > toV ){
								 
								 $$('input#priceFrom').setProperty('value','0');
								 fdSliderController.updateSlider('priceFrom');
								 	
								 return;
							 }
						
						 var value = $$('#fd-slider-priceFrom button').getProperty('aria-valuenow') + '-' + $$('#fd-slider-priceTo button').getProperty('aria-valuenow');
						 this.sendFilterValues('price', value);
						
				}.bind(this));
				
				$('priceFrom-usr').addEvent('keyup',(function(e){
					if(e.key == 'enter'){
						this._currentFrom = $('priceFrom-usr').getProperty('value');
						
						this._currentFrom = this._currentFrom.replace('.','');
						this._currentFrom = this._currentFrom.replace(',','');
						
					    $$('input#priceFrom').set('value',this._currentFrom);
					    fdSliderController.updateSlider('priceFrom');
					    
					    var value = $$('#fd-slider-priceFrom button').getProperty('aria-valuenow') + '-' + $$('#fd-slider-priceTo button').getProperty('aria-valuenow');
					    this.sendFilterValues('price', value);
					}
					//this._currentFrom = $('priceFrom-usr').getProperty('value');
				   // $$('input#priceFrom').set('value',this._currentFrom);
					
					 //fdSliderController.updateSlider('priceFrom');
					 	
					 return;
				}).bind(this));
				
				$('priceTo-usr').addEvent('keyup',(function(e){
					
					if(e.key == 'enter'){
						
						this._currentTo = $('priceTo-usr').getProperty('value');
						this._currentTo = this._currentTo.replace('.','');
						this._currentTo = this._currentTo.replace(',','');
						
						
					    $$('input#priceTo').set('value',this._currentTo);
					    fdSliderController.updateSlider('priceTo');
					    
					    var value = $$('#fd-slider-priceFrom button').getProperty('aria-valuenow') + '-' + $$('#fd-slider-priceTo button').getProperty('aria-valuenow');
					    this.sendFilterValues('price', value);
					} 	
					 return;
				}).bind(this));
				
		},
		
		/*
		 *  updateSelectFilter()
		 */
		updateSelectFilter: function (items,type){
			
			var phpjs = new Phpjsorg();
			
			switch(type){
				
				case 'categories':
					$$('select[name=category] option').each(function (item, key) {
						if (item.get('value') != '') {
							item.destroy();
						}
					});
				
					var catGroup = Array();
					var subcatGroup = Array();
					var i = 1;
					
					
					$each(items,function(item){
						
						$each(item,function (value,key){
							
							
							if(!phpjs.in_array(value['categoryId'], catGroup)){
								phpjs.array_push(catGroup, value['categoryId']);
								i = 0;
							}//if
							
							if(i == 0){
								
								$$('select[name=category]').adopt(new Element('option',{
									'text'  : '---' + value['categoryName'].toUpperCase() + '---',
									'value' : 'category:::' + value['categoryId'],
									'class' : 'category'
								}));
							}
							
							if(phpjs.in_array(value['subcategoryId'], subcatGroup)){
								//nothing
							}else{
								
								phpjs.array_push(subcatGroup, value['subcategoryId']);
								
								$$('select[name=category]').adopt(new Element('option',{
									'text'  :  value['subcategoryName'],
									'value' : 'subcategory:::' + value['subcategoryId'],
									
								}));
								
								i ++;
							}
							
							
						});// each
					});//each
					
				break;
				
				case 'provinces':
					
					$$('select[name=province] option').each(function (item, key) {
					
						item.destroy();
					
					});
					
					$$('select[name=province]').adopt(new Element('option',{
						'text'  : 'Seleccionar...',
						'value' : '',
					}));
					
					$each(items,function(item,key){
					
						$$('select[name=province]').adopt(new Element('option',{
							'text'  : item.name,
							'value' : key,
						}));
					});//each	
						
				break;
				
			}// switch
			
		}
	
	
});


