/**
* Site.search
*
* @author Szijártó Tamás ( szicsu )
**/
Site.Search = new function(){

    var self=this;
    var keresObj; 
	var oHistory = {};
	self.actRequest = false;


    this.init = function( activeIconId ){

		
        keresObj = $('#pageTopSearchBox');
        
		
		activeIconId = activeIconId || 'icon_simple_motorbike';

        /**
        * Index módosítások ill az autoClose
        **/
        if( /(index)+/.test( $('body').attr('class') ) ){
            self.runIndexModify();
			if( activeIconId == 'reszletesKereso' ){
				activeIconId = 'icon_simple_motorbike';
			}
        }
        else if( /(tesztek|motorboltok|miteramotorom|partnerek|klubok|lopottmotorok|hirdetesekEgyedi)+/.test( $('body').attr('class') ) ){
            self.formContainerToggle('none');
        }

		
		
		
        /**
        * ikonEvents
        **/
        keresObj.find('a.searchIcons, a.complexSearchIcon').bind('click.formToggle', Site.Search.formToggle );


        /**
        * kereses gomb
        **/
        keresObj.find('a.resetSearch').bind('click', this.resetSearch );

        /**
        * Kuldes
        **/
        keresObj.find('input.submitSearch').bind('click', this.submitSearch );


        /**
        * DobozHedaer gombok
        **/
        $('#headerSearch > h1').find('a').bind('click', function(){

            $('#' + $(this).attr('rel') ).trigger('click.formToggle');
            return false;
        });

       
        /**
        * toggleElemets bind
        **/
        keresObj.find('.searchToggle').bind('click', function(){
            return self.formContainerToggle();
        });


		/**
		* Complex Search
		**/
		keresObj.find('a.complexSearchIcon').bind('click', function(){
			
			//$('#icon_simple_motorbike').trigger('click');
			Site.UserSearchs.show();
			self.toggleComplexForm('block');
			return false;	
		});

		
        /**
        * induljon a móka :)
        **/
        $('#' + activeIconId , keresObj).trigger('click');
		
    }

	this.destruct = function(){
		self.storRequest();
		self.saveAllFormToCookie();
		$('*', keresObj).unbind('click');
		keresObj = null;
	}
	
	
	this.toggleComplexForm = function( dispType ){
	
		divObj = $('#pageTopSearchBoxComplexBikeFormSegment');
		
		
		if( dispType == 'none' ){
			divObj.hide();
			$(':input', divObj).addClass('noSearchItem');
        }
        else{
           divObj.show();
		   $(':input', divObj).removeClass('noSearchItem');
        }
		
		delete divObj;
		
	}
	
    this.formContainerToggle = function( dispType ){

        formDivObj = $('#pageTopSearchBoxFormDiv');
        buttonDivObj = $('#pageTopSearchBoxButtonDiv');


        if( !dispType ){
            dispType = formDivObj.is(':hidden')? 'block' : 'none' ;
        }

        if( dispType == 'none' ){
            formDivObj.hide();
            buttonDivObj.show();

        }
        else{
            formDivObj.show();
            buttonDivObj.hide();
        }
		
		delete formDivObj;
		delete buttonDivObj;
		
		return false;
    }


    this.formToggle = function( e ){

		Site.UserSearchs.hide();
	
		if( e.target.id == 'reszletesKereso' ){
			self.toggleComplexForm('block');
		}
		else{
			self.toggleComplexForm('none');
		}
		
	
        obj = $(this);
        $('a.searchIcons',keresObj ).find('span').removeClass( 'activeicon' );
        obj.find('span').addClass( 'activeicon' );

        $('form', keresObj).hide();

        formObj = $('#' + obj.attr('alt') );
        formObj.show();

        self.formInit( formObj );
        formObj.find('select').eq(0).trigger('change');
        self.feladasLinkChanger( obj );
		
		
		delete obj;
        delete formObj;
		return false;
    }




    this.formInit = function( formObj ){

        if( formObj.hasClass('inited') ){
            return true;
        }
		
        formObj
            .find('input:text')
                .bind('blur', self.sendSearch )
            .end()
            .find('select:not(.noSearch)')
                .bind('change', self.sendSearch )
            .end()
            .find('input:checkbox')
                .bind('click', self.sendSearch )
            .end()
            .find('input:radio')
                .bind('click', self.sendSearch )
            ;
				
        formObj.addClass('inited');
    }

    this.getActiveForm = function(){
        return keresObj.find('form:visible');
    }

	this.storRequest = function(){

		try{
			self.actRequest.abort();
		}catch(e){}
	}
	
    this.get = function( rUrl, postData ,callBack){
		
	        self.actRequest = $.ajax({
	            url: '/ajaxsearch/' + rUrl,
	            data: postData,
				async: true,
	            dataType: "json",
	            success: function( data ){
					if( typeof callBack == 'function' ){
						callBack( data );
					}
	            }
	           
	        });
		
		return false;
    }

    this.sendSearch = function( event, data ){
	
		/*
		Cookiból visszatöltés butítás
		if( data && typeof data == 'object'  ){
			searchData = data.data;
		}
		else if( self.getActiveForm().hasClass('restoreData') ){
            searchData = self.getSearchData( false, true );
        }
		else{
			
			cookieData = self.getCookie();
			activeFormId = self.getActiveForm().attr('id');
			try{
				searchData = cookieData[activeFormId].data || self.getSearchData( false, true );
			}
			catch( e ){
				searchData = self.getSearchData( false, true );
			}
			self.getActiveForm().addClass('restoreData');
		}
		*/
		
		if( self.initedHistory() && $(this).is('select.jsFilter') ){
			self.addHistory( $(this).attr('name') );
		}
		
		if( data && typeof data == 'object'  ){
			searchData = data.data;
		}
		else{
			searchData = self.getSearchData( false, true );
		}
	
        self.lockForm();		
		

		
		self.get( 'search', searchData , function( retData ){ 
			self.setSerachData( retData, false, searchData );
			self.setAdCount( retData.adCount );
			self.unLockForm();
		});
    }


    this.getSearchData = function( formObj, isVisibiles ){

       var data = {};
        formObj = formObj || self.getActiveForm();
		formObj = formObj.find(':input');
		
		if( isVisibiles ){
			formObj = formObj.not('.noSearchItem');
		}

        formObj.each(function(){
            field = $(this);

            switch( field.attr('type') ){

                case 'radio':
                case 'checkbox':
					
					if( field.attr('checked') == true ){
						data[ field.attr('name') ] = $.trim( field.val() );
					}
                break;

                default:
					if( $.trim( field.val() ) ){
						data[ field.attr('name') ] = $.trim( field.val() );
					}		
                break;
            }
			
			
        });
		formObj = null ;
        return data;
    }

    this.setSerachData = function( data, formObj, restoredData ){

        formObj = formObj || self.getActiveForm();
        formObj.find(':input').each(function(){

            itemName = $(this).attr('name');

            if( data[itemName] && !self.hasHistory( itemName ) ){
               if( typeof data[itemName] == 'object' ){
					
					if( typeof restoredData == 'object' ){
						restoreItem = restoredData[ itemName ];
					}
					else{
						restoreItem = false;
					}
                    Site.Component.Select.newOptions( $(this) ,  data[itemName], restoreItem );
                }
                else{

                    switch ( $(this).attr('type') ) {
                        case 'radio' :
						case 'checkbox':
                                if ( $(this).val() == data[itemName] )  {
                                    $(this).attr('checked' , 'checked');
                                }
                        break;
                        default:
                            $(this).val(  data[itemName] );
                        break;
                    }
                }
            }
        });
		
		formObj = null;
    }

    this.resetSearch = function(){

        formObj = self.getActiveForm();

        formObj[0].reset();
        formObj.find('select').each(function(){
			this.selectedIndex = 0;
		});
		formObj.find('select').eq(0).trigger('change');
		
		self.resetHistory();
		
		delete formObj;
        return false;
    }

    this.submitSearch = function(){
        self.storRequest();
		self.getActiveForm().submit();
    }

    this.setAdCount = function( count ){
        $('div.kereses_talalatszam', keresObj).html( "Találatok:&nbsp;<strong>"+ parseInt( count) +"</strong>&nbsp;db" );
    }

    this.lockForm = function(){
        formObj = self.getActiveForm();
        if (typeof(formObj) != 'undefined')
          formObj.find(':input').attr('readOnly','readOnly');
        $('div.kereses_talalatszam', keresObj).html('<img  src="/image/ajaxloader.gif" />');
		
		delete formObj;
		return;
    }

    this.unLockForm = function(){
        formObj = self.getActiveForm();
        formObj.find(':input').removeAttr( 'readOnly' );
		
		delete formObj;
		return;
    }

    this.feladasLinkChanger = function( obj ){
        param = $.trim( obj.attr('title') ).toLowerCase().replace('é','e');
        aObj = $('#H_feladas > a');
        hrefArr = aObj.attr('href').split('/');
        hrefArr[ (hrefArr.length -1) ] = param;
        aObj.attr( 'href',  $.trim ( hrefArr.join('/') ) );
        
		delete param;
		delete hrefArr;
		delete aObj;
		return false;
    }


    this.backupFormById = function( formId ){
        return {
            id: formId,
            data: self.getSearchData( $('#' + formId ) )
        };
    }
	
    this.saveAllFormToCookie = function(){

        allData = {};
        formIds = [];

        $('form', keresObj).each(function(){
            formIds.push( $(this).attr('id') );
        });

        for( var i in  formIds ){
            tempId = formIds[i];
            allData[ tempId ] = self.backupFormById( tempId );
        }

        allData.activeForm = self.getActiveForm().attr('id');
        self.setCookie( $.toJSON( allData ) );

    }
	
	this.getActiveFormOfCookie = function(){
		
			cookieData = self.getCookie();
			if( typeof cookieData != 'object' || !cookieData ){
				return false;
			}
			return cookieData.activeForm;
	}

	this.getActiveIconIdOfCookie = function(){
		
		activeFormId = self.getActiveFormOfCookie();
	
		if( !activeFormId ){
			return false;
		}
		return $("a.searchIcons[alt='"+ activeFormId +"']").attr('id');
		
	}	
	
	
    this.getCookie = function(){
        
		try{
            return $.evalJSON( $.cookie( 'searchforms' ) );
        }
        catch( e ){
			return false;
		}	
    }

    this.setCookie = function( value ){
        $.cookie( 'searchforms', value, {path: '/' });
    }
	


	this.formDataCopy = function( sourceFormId, destFormId){
		tempData = self.backupFormById( sourceFormId );
		self.setSerachData( tempData.data, $('#' +  destFormId) );
		
		delete tempData;
		return $("a.searchIcons[alt='"+destFormId+"']").attr('id');
	}
	
	
    this.runIndexModify = function(){

        keresObj
			.find('.searchToggle').hide().end() 
			.find('#reszletesKereso').removeClass('searchIcons').removeClass('complexSearchIcon').end()
			.find('#keresesMentese').show();
		
    }
	
	
	
	this.addHistory = function( sName ){

 // console.log( sName, self.getHistory() );

		if( ( i = $.inArray( sName, self.getHistory() ) ) == -1 ){
			oHistory[self.getActiveForm().attr('id')].push( sName );
		}
		else{
			self.resetSelectByNames( self.getHistory().slice( i+1, self.getHistory().length ) );
			self.setHistory( self.getHistory().slice( 0, i+1) );
		}
		
 // console.log( i, self.getHistory() );

	}
	
	this.getHistory = function(){
		
		return oHistory[self.getActiveForm().attr('id')];
	}
	
	this.setHistory = function( aData ){
		oHistory[self.getActiveForm().attr('id')]=aData; 
	}

	this.resetHistory = function(){
		
		return self.setHistory([]);
	}
	
	this.hasHistory = function( sName ){
		return  $.inArray( sName, self.getHistory() ) != -1;
	}
	
	this.initedHistory = function(){
		
		var sId = self.getActiveForm().attr('id');
		
		if( !(sId in oHistory) ){
			oHistory[sId]=[];
			return false;
		}
		return true;
	}
	
	this.resetSelectByNames = function( aName ){
		$.each(aName, function(){
			$("select[name='"+this+"']", self.getActiveForm()).val('');
		});
	}
}

/**
* Site.UserSearchs
*
* @author Szijártó Tamás ( szicsu )
**/
Site.UserSearchs = new function(){
	var self = this;
	self.inited = false;
	
	
	this.init = function(){
		
		$('#userSavesBtnSave', self.getDivObj() ).bind('click', function(){
			
			if( self.getLinks().size() < 3 ){
				return self.addLink();
			}
			else{
				return self.updateLink();
			}
		});
	
		self.inited = true;
	}
	
	this.destruct = function(){
		$('*', self.getDivObj() ).unbind('click');
	}
	
	
	this.addLink = function(){
		
		html = new Array(
			'<div class="ajaxUserSave">',
				'<label class="fp_label" id="label_postSaveNev" for="postSaveNev">Mentés neve:</label><br />',
				'<input type="text" name="postSaveNev" id="postSaveNev" class="fp_input" value="" /><br />',
			'</div>',
			'<div class="ajaxUserSaveButtons">',
				'<input type="button" id="btn_mehet" class="submit button" />',
				'<input type="button" id="btn_megse" class="cancel button" />',
				'<div class="clr">&nbsp;</div>',
			'</div>'
		);
		html = $.template( html.join('') ).apply();

		Site.Component.PopUp.open({
			height:200,
			width:130,
			template:'oldaltovabbkuldes',
			text:html
		},function( win ){
			$('#btn_mehet', win).bind('click',function(){

				return self.save({
					name: $('#postSaveNev', win).val()
				});
			});

			$('#btn_megse').bind('click' , Site.Component.PopUp.close );
		});
		
		delete html;
		return false;
	}
	
	this.updateLink = function(){
		
		html = new Array(
			'<div class="ajaxUserSave">',
				'<label class="fp_label" id="label_postSaveNev" for="postSaveNev">Mentés neve:</label><br />',
				'<input type="text" name="postSaveNev" id="postSaveNev" class="fp_input" value="" /><br />',
				'<label class="fp_label" id="label_postSaveId" for="postSaveId">Felülírni kívánt változat:</label><br />',
				'<select name="postSaveId" id="postSaveId" class="fp_input">{opts}</select><br />',
			'</div>',
			'<div class="ajaxUserSaveButtons">',
				'<input type="button" id="btn_mehet" class="submit button" />',
				'<input type="button" id="btn_megse" class="cancel button" />',
				'<div class="clr">&nbsp;</div>',
			'</div>'
		);
		
		linkData = self.getUserSaves();
		optsStr = '';
		for( var i in linkData ){
			optsStr+= '<option value="'+ linkData[i]['id'] +'">'+ linkData[i]['name'] +'</option>';
		}		
		html = $.template( html.join('') ).apply({opts: optsStr});

		Site.Component.PopUp.open({
			height:200,
			width:130,
			template:'oldaltovabbkuldes',
			text:html
		},function( win ){
			$('#btn_mehet', win).bind('click',function(){

				return self.save({
					name: $('#postSaveNev', win).val(),
					id: $('#postSaveId', win).val()
				});
			});

			$('#btn_megse').bind('click' , Site.Component.PopUp.close );
		});
		
		delete html;
		delete optsStr;
		delete linkData;
		
		return false;			
	}
	
	this.createLink = function( linkData){
		
		if( !linkData ){
			linkData = self.getUserSaves();
		}
		
		
		html = '<span class="mentetKereseseim">Elentett kereséseim: ';
		
		for( var i in linkData ){
			html+= '<a class="usersSaveLink" href="#" rel="'+ i +'">'+ linkData[i]['name'] +'</a> ';
		}
		
		html+= '</span>';
		
		self.getLinks().unbind('click');
		self.getDivObj()
			.find('.mentetKereseseim').remove().end()
			.append( html )
		self.getLinks().bind('click', self.loadForm);
		
		delete html;
		return;
	}
	
	
	this.save = function( saveData ){
		
		saveData.value = $.toJSON( Site.Search.backupFormById('complex_motorbike') );
		
		$.ajax({
			url: '/ajaxuserserachs/save',	            
			async: true,
			data: saveData,
			dataType: "json",
			success: function( data ){
				
				if( typeof data != 'object' || data.error ){
					Site.error( data.error );
				}
				else{
					self.setUserSaves( data );
					return self.createLink( data );
				}				
			}			
		});
		Site.Component.PopUp.close();
		return false;
	}
	
	
	this.show = function(){
		
		if( !self.inited ){
			self.init();
		}

		self.getDivObj().show();
		
		userData = self.getUserSaves();
		if( userData == false ){
			return false;
		}
		self.createLink( userData );
		
	}
	
	this.hide = function(){
		self.getDivObj().hide();
	}
	
	
	this.getDivObj = function(){
		return $('#pageTopSearchBoxSaveDiv');
	}
	
	this.getLinks = function(){
		return self.getDivObj().find('.usersSaveLink');
	}
	
	
	this.loadForm = function(){
		
		formData = self.getUserSaves()[ $(this).attr('rel') ];
		if( typeof formData != 'object' ||  !formData.value ){
			Site.error('Visszatöltési hiba');
		}
	
		//Site.Search.resetSearch();
		Site.Search.sendSearch( null, $.evalJSON(formData.value) );
		return false;
	}
	
	this.getUserSaves = function(){
		
		resData = self.getCookie();
		
		if(  typeof resData != 'object' || resData == null ){
			
			$.ajax({
				url: '/ajaxuserserachs/get',	            
				async: false,
	            dataType: "json",
	            success: function( data ){
					resData = data;
	            }			
			});		
		}
		
		if(  typeof resData == 'object' && !resData.error ){
			self.setUserSaves( resData );
			return resData;
		}
		else{
			return false;
		}
	}
	
	this.setUserSaves = function( retData ){
		
		if( typeof retData == 'object' ){
			value = $.toJSON( retData );
		}
		else{
			value = retData;
		}	
		self.setCookie( value );
		
		delete value;
		return;
	}
	
		
	this.getCookie = function(){
        
		try{
            return $.evalJSON( $.cookie( 'userlinks' ) );
        }
        catch( e ){
			return false;
		}	
    }

    this.setCookie = function( value ){
        $.cookie( 'userlinks', value, {path: '/' });
    }

}
