﻿// JScript File
var Search = 
{
	m_state : 0, 
	m_searchtype : 0,
	m_searchtext : "",
	m_changefn: null,
	m_textbox : null,
	m_waitingAsyncServiceCall : false,
		
    Init:function( thechangefn, thetextbox, thetype, thetext  )
    {        
		this.m_changefn = thechangefn;
		this.m_textbox = $get( thetextbox ); 
		if( typeof( thetype ) !== 'undefined' ) this.m_searchtype = thetype;
		if( typeof( thetext ) !== 'undefined' ) this.m_searchtext = thetext; 
	},

	Load:function( )
	{
		ServiceClasses.SearchService.set_timeout(10000);
		ServiceClasses.SearchService.set_defaultFailedCallback( this.failedCallback );
		$addHandler( $get("stdoptions"), "click", this.optionClick );
		$clearHandlers( $get("searchbutton") );
		$addHandler( $get("searchbutton"), "click", this.searchClick );
		$addHandler( $get("advbutton"), "click", this.advClick );
		$addHandler( this.m_textbox, "keypress", this.enterClick );
		$addHandler( $get("pagetabdropdown"), "change", this.tabChange );
		
		var obj = $find( "AutoSearch" );
		if( obj != null ) obj.set_completionSetCount( Map.m_zoneID );

		if( this.m_searchtext != "" && this.m_searchtype != 0 )
			ret = ServiceClasses.SearchService.LogSearch(  this.getPageType( ), this.m_searchtext );
	},
	
	optionClick:function( eventElement )
	{
		Search.m_searchtype = eventElement.target.value;
		Search.changeMethod( );
	},
	
	searchClick:function( eventElement )
	{
		Search.m_searchtext = Search.m_textbox.value.trim( );

		if( Search.m_changefn != null && !Search.m_waitingAsyncServiceCall ) 
		{
			var retvalue = Search.m_changefn( );
			if( retvalue == true && Search.m_searchtext != "" )  
				ServiceClasses.SearchService.LogSearch(  Search.getPageType( ), Search.m_searchtext );
		}
		return Master.stopDefault( eventElement );
	},
	
	advClick:function( eventElement )
	{
		if( Search.m_state == 0 )
		{
			Search.m_state = 1;
			$get("stdoptions" ).className = "searchselectbtns searchselectbtnsadv";
			$get("pagetabdropdown" ).style.display = "inline";
			$get("searchesdropdown" ).style.display = "block";
			Master.hoverMenu( $get( "advbutton" ), "pushbuttonselect" );

			ret = ServiceClasses.SearchService.GetSearchStats(  Search.getPageType( ), Search.successCallback );
		}
		else
		{
			Search.m_state = 0;
			$get("stdoptions" ).className = "searchselectbtns";
			$get("pagetabdropdown" ).style.display = "none";
			$get("searchesdropdown" ).style.display = "none";
			Master.unhoverMenu( $get( "advbutton" ) );
		}
		return Master.stopDefault( eventElement );
	},
	
	enterClick:function( eventElement )
	{
		if( eventElement.charCode == 13 )
			return Search.searchClick( eventElement );
		return true;
	},
	
	tabChange:function( eventElement )
	{
		Search.changeMethod( );
		$get( "popular" ).innerHTML = "<select style='color:Gray; width:100%;'><option>Loading.....</option></select>";
		$get( "recent" ).innerHTML = "<select style='color:Gray; width:100%;'><option>Loading.....</option></select>";
		ret = ServiceClasses.SearchService.GetSearchStats(  Search.getPageType( ), Search.successCallback );
	},
	
	searchSelect:function( ctrl )
	{
		Search.m_textbox.value = ctrl.value;
		return true;
	},
	
	clear:function( includetextbox )
	{
		this.m_searchtext = "";
		if( includetextbox == true )
			this.m_textbox.value = "";
	},
	
	changeMethod:function(  )
	{
		var obj = $find( "AutoSearch" );
		if( obj != null )
		{ 
			var method = "AutoSearch";

			var pagetype = Search.getPageType( );
			if( pagetype == 3 || pagetype == "3" ) method = method + "Community";
			else if( pagetype == 4 || pagetype == "4" ) method = method + "Shopping";
			else if( pagetype == 5 || pagetype == "5" ) method = method + "Trade";

			if( Search.m_searchtype == 1 )
				method = method + "Category"; 
			else
				method = method + "Listing"; 

			obj.set_serviceMethod( method );
			obj.set_completionSetCount	( Map.m_zoneID );
			obj._cache = null; 
		}
	},
	
	getPageType:function( )
	{
		var pagetype = null;
		if( Search.m_state == 1 )
			pagetype = $get( "pagetabdropdown" ).value;
		else if( typeof Listing !== 'undefined' ) pagetype = Listing.m_pageType;
		else if( typeof Info !== 'undefined' ) pagetype = Info.m_pageType;
		return pagetype;
	},
	
	successCallback:function( result ) 
	{
		if( result == null ) return;
		var obj = Sys.Serialization.JavaScriptSerializer.deserialize( result ); 
		$get( "popular" ).innerHTML = obj.Mostpopular;
		$get( "recent" ).innerHTML = obj.Mostrecent;
	},

	failedCallback:function( error )
	{ // Do nothing
	},


	summarySearch:function( ) 
	{
		if( Search.m_searchtext == "")
			return false;

		Master.showoverlay( 3 );
		ServiceClasses.ListingsService.set_timeout(10000);
		ret = ServiceClasses.ListingsService.GetListingsSummary( Map.m_zoneID, Search.m_searchtype, Search.m_searchtext, 
									Search.summaryCallback, Search.summaryfailedCallback  );
		Search.m_waitingAsyncServiceCall = true;
		return true;
	},    

	summaryCallback:function( result ) 
	{
		Master.hideoverlay( );
		Search.m_waitingAsyncServiceCall = false;
		if( result != null ) 
		{
			$get( "homelistingcontentpanel" ).style.display = "none";
			$get( "resultspanel" ).style.display = "block";
			$get( "resultspanel" ).innerHTML = result;
		}
	},

	summaryfailedCallback:function( error )
	{
		Master.showoverlay( 2 );
		Search.m_waitingAsyncServiceCall = false;
	}
}

// Notify ScriptManager that this is the end of the script.
if ( typeof(Sys) !== 'undefined' ) Sys.Application.notifyScriptLoaded( );
