﻿// JScript File

var Category =
{
	m_categSelectID : 0, 
	m_changefn: null,
	m_catName : null,
	m_breadcrumb : null,
	m_waitingAsyncServiceCall : false,

	Init:function( thechangefn, theID )
	{
		this.m_categSelectID = 0; 
		this.m_changefn = thechangefn;
		if( typeof theID !== "undefined" )
			this.m_categSelectID = theID;
		this.m_breadcrumb = $get("headerleft").innerHTML;
	},
	
	Load:function(  ) 
	{
		ServiceClasses.CategoryService.set_timeout(10000);
		ServiceClasses.CategoryService.set_defaultFailedCallback( this.failedCallback );

		if( typeof Listing !== 'undefined' )
		{
			var container1 = $get("category1container"); 
			if( container1 != null ) 
			{
				$clearHandlers( container1 );
				$addHandler( container1, "click", this.cat1Click );
			}
			var container2 = $get("category2container"); 
			if( container2 != null ) 
			{
				$clearHandlers( container2 );
				$addHandler( container2, "click", this.cat2Click );
			}
			var headerleft = $get("headerleft"); 
			if( headerleft != null ) 
			{
				$clearHandlers( headerleft );
				$addHandler( headerleft, "click", this.crumbClick );
			}
		}
		
		ret = ServiceClasses.CategoryService.GetAllCategories( Category.getPageType( ), this.selectedCategory( ), Map.m_zoneID, this.selectionSuccessCallback   );
		this.m_waitingAsyncServiceCall = true;
	},

	selectedCategory:function( )
	{
		return this.m_categSelectID;
	},
	
	clear:function(  )
	{
		this.m_categSelectID = 0;
		this.setButton( null );

		var ctrlcontainer = $get("category2container");
		if( ctrlcontainer != null ) ctrlcontainer.innerHTML = "";
		
		if( $get("headerleft") != null )
			ret = ServiceClasses.CategoryService.GetBreadCrumb( Category.getPageType( ), this.selectedCategory( ), Map.m_zoneID, this.crumbSuccessCallback   );
	},
	
	selectionClick:function(  )
	{
		ret = ServiceClasses.CategoryService.GetAllCategories( Category.getPageType( ), Category.selectedCategory( ), Map.m_zoneID, Category.selectionSuccessCallback   );
		Category.m_waitingAsyncServiceCall = true;
	},

	cat1Click:function( eventElement )
	{
		if( eventElement.target.tagName == "A" && eventElement.target.childNodes[1] )
		{ 
			Category.m_categSelectID = eventElement.target.childNodes[1].getAttribute( "value" );
			Category.m_catName = Master.getElementText( eventElement.target );
			Category.setButton( Category.selectedCategory( ) );
			if( typeof Search !== 'undefined' )
				Search.clear( true );
				
			ret = ServiceClasses.CategoryService.GetChildCategories( Category.getPageType( ), Category.selectedCategory( ), Map.m_zoneID, Category.catSuccessCallback   );
			if( Category.m_changefn != null ) 
				Category.m_changefn( ); 
		}
		return Master.stopDefault( eventElement );
	},

	cat2Click:function( eventElement )
	{
		if( eventElement.target.tagName == "A" && eventElement.target.childNodes[1] )
		{ 
			Category.m_categSelectID = eventElement.target.childNodes[1].getAttribute( "value" );
			Category.m_catName = Master.getElementText( eventElement.target );
			if( typeof Search !== 'undefined' )
				Search.clear( true );

			ret = ServiceClasses.CategoryService.GetChildCategories( Category.getPageType( ), Category.selectedCategory( ), Map.m_zoneID, Category.catSuccessCallback   );
			if( Category.m_changefn != null ) 
				Category.m_changefn( ); 
		}
		return Master.stopDefault( eventElement );
	},

	crumbClick:function( eventElement )
	{
		var id = null;
		if( eventElement.target.tagName == "A" )
		{ 
			var params = eventElement.target.getAttribute( "href" );
			if( params == null )
				return true;
			if( params.indexOf( "Information.aspx" ) >= 0 )
				return true;

			var pos1 = params.lastIndexOf( "_c-" ); 
			var pos2 = params.lastIndexOf( ".aspx" ); 
			if( pos1 >= 0 && pos2 >= 0 )
				id = params.substring( pos1+3, pos2 );

			if( id != null )
			{
				Category.m_categSelectID = id; 
				Category.m_catName = Master.getElementText( eventElement.target );
			}
			else
			{
				Category.m_categSelectID = 0;
				Category.setButton( 0 );
				Category.m_catName = "";
			}
			ret = ServiceClasses.CategoryService.GetChildCategories( Category.getPageType( ), Category.selectedCategory( ), Map.m_zoneID, Category.catSuccessCallback   );
			if( Category.m_changefn != null ) 
				Category.m_changefn( ); 
		}
		return Master.stopDefault( eventElement );
	},

	setButton:function( value )
	{
		var anchors = $get("category1container").getElementsByTagName("A" );
		for( var i = 0; i < anchors.length; i++ )
		{
			if( anchors[i].className.startsWith( "menu" ) )
			{
				if( anchors[i].childNodes[1].getAttribute( "value" ) == value )
					anchors[i].className = "menu menuselect";
				else
					anchors[i].className = "menu";
			}
		}
	},

	updateUI:function( result, crumbonly )
	{
		if( result.ID == null ) Category.m_categSelectID = 0;
		else Category.m_categSelectID = result.ID;
		if( result.RootID != null ) Category.setButton( result.RootID );
		Category.m_catName = result.Name;
	
		if( typeof(Listing) !== 'undefined' )
		{
			if( Listing.m_detailpanel.style.display == "block" )
				return;
			$get("headerleft").innerHTML = result.BreadCrumb;
			this.m_breadcrumb = result.BreadCrumb; 
		}
		if( crumbonly )	return;

		if( typeof Search === 'undefined' || Search.m_searchtext == "" )
		{	var ctrlcontainer = $get("category2container");
			if( ctrlcontainer != null ) ctrlcontainer.innerHTML = result.HTML;
		}
	},

	catSuccessCallback:function( result ) 
	{
		if( result == null ) return;
		var obj = Sys.Serialization.JavaScriptSerializer.deserialize( result ); 

		Category.updateUI( obj, false );
	},

	crumbSuccessCallback:function( result ) 
	{
		if( result == null ) return;
		var obj = Sys.Serialization.JavaScriptSerializer.deserialize( result ); 

		Category.updateUI( obj, true );
	},

	selectionSuccessCallback:function( result )
	{
		if( result != null ) 
		{
			var obj = Sys.Serialization.JavaScriptSerializer.deserialize( result ); 

			Category.updateUI( obj, false );

			var anchors = $get("category1container").getElementsByTagName("A" );
			for( var i=1; i < anchors.length; i++ )
			{
				var found = false;
				if( obj.Validcats != null )
				{
					var id = anchors[i].childNodes[1].getAttribute( "value" );
					for( j=0; j < obj.Validcats.length; j++ )
					{
						if( id == obj.Validcats[ j ] )
						{ found = true; break; }
					}
				}
				if( found )	anchors[i].style.display = "";
				else anchors[i].style.display = "none";
			}
		}		
		Category.closemodalmap( );
	},

	finished:function( )
	{
		return (Category.m_waitingAsyncServiceCall == false);
	},
	
	closemodalmap:function( )
	{
		Category.m_waitingAsyncServiceCall = false;

		var themodalmap = $get( "modalmap" );
		if( themodalmap != null && themodalmap.style.display != "none" )
		{
			if( ( typeof(Info) === 'undefined'  || Info.finished( ) ) &&
				 ( typeof(Listing) === 'undefined'  || Listing.finished( ) ) )
				Map.hideModalMap( null ); 
		}
	},
	
	getPageType:function( )
	{
		var pagetype = null;
		if( typeof Listing !== 'undefined' ) pagetype = Listing.m_pageType;
		else if( typeof Info !== 'undefined' ) pagetype = Info.m_pageType;
		return pagetype;
	},
	
	failedCallback:function( error )
	{
		Category.closemodalmap( );
	}
}

// Notify ScriptManager that this is the end of the script.
if ( typeof(Sys) !== 'undefined' ) Sys.Application.notifyScriptLoaded( );

