Epson.SearchPagination = 
{
    data: [],
	currentPage: 0,	
	view_all: false,
	
	
	setup: function()
	{
		
		//Epson.SearchPagination.callJson();

		//sort on change
		jQuery( '#sr_sort' ).bind( 'change', Epson.SearchPagination.callJson )
		// bind events to all pagination elements inside the pagination strip
		jQuery( '#ArticlePagination ul li a' ).bind( 'click', Epson.SearchPagination.Pagination.paginate );		
	},
	callJson: function()
	{
		var param = jQuery( '#sr_sort' ).val();
		var url = jQuery( '#ArticlePagination' ).attr( 'class' ).match( /srch-url-([^\s]+)/ );
		if ( url ) url = url[1];
		if ( param )
		{
			url=url + '&sortparam=' + param;
		}
		jQuery.getJSON( url, null, function( json ) { Epson.SearchPagination.handleResult( json ) } );
		
	},
	handleResult: function(json)
	{
		if ( json.results )
		{
			Epson.SearchPagination.data = [];
			jQuery.each( json.results, function(){				
				Epson.SearchPagination.data.push( this );				
			});
			Epson.SearchPagination.UI.renderItems();			
		}
	},
	Pagination:
	{		

		paginate: function(e)
		{
			Epson.SearchPagination.Pagination.pages = parseInt ( Epson.SearchPagination.data.length/Epson.SearchPagination.pagination_number + 1);
						
			var page = jQuery( this ).parent('li').attr('class');
			var pageNumber; //holds the text that displays the page number

//			Epson.SearchPagination.Pagination.view_all = false;
						
			if ( page.match( /next/ ) ) Epson.SearchPagination.currentPage = Epson.SearchPagination.currentPage < Epson.SearchPagination.Pagination.pages ? Epson.SearchPagination.currentPage + 1 : Epson.SearchPagination.currentPage ;
			else if ( page.match( /previous/ ) ) Epson.SearchPagination.currentPage = Epson.SearchPagination.currentPage > 1 ? Epson.SearchPagination.currentPage - 1 : 1 ;
			else if ( page.match( /all/i ) ) { Epson.SearchPagination.Pagination.page = 0; Epson.SearchPagination.Pagination.view_all = Epson.SearchPagination.Pagination.view_all ? false : true  }
			else Epson.SearchPagination.currentPage = jQuery(this).text();
			
			// display items
			Epson.SearchPagination.UI.renderItems();
			// update pagination bar
			if ( !Epson.SearchPagination.Pagination.view_all )
			{
				
				var searchIndex = Epson.SearchPagination.Pagination.page > 1 ? 1 : Epson.SearchPagination.Pagination.page;
				
				// setup the two page LIs for placeholder and included text
				if ( Epson.SearchPagination.currentPage < Epson.SearchPagination.Pagination.pages )
				{
					currentIndex = 1;
					pageNumber = parseInt( Epson.SearchPagination.currentPage );
					if ( Epson.SearchPagination.currentPage == 1 ) 
					{
						jQuery( 'li.previous a' ).css('cursor','default').bind( 'click', function(){  return false } );
						jQuery( 'li.next a' ).css('cursor','pointer');
					}
					else 
					{
						jQuery('li.previous a').css('cursor','pointer')
						jQuery( 'li.next a' ).css('cursor','pointer');
					}
				} else {
					currentIndex = 2;
					pageNumber = parseInt( Epson.SearchPagination.currentPage - 1 );
					jQuery( 'li.next a' ).css('cursor','default').bind( 'click', function(){ return false })
					jQuery( 'li.previous a' ).css('cursor','pointer');
				}
				
				// condition that text does not overflow the total no of pages
				Epson.SearchPagination.currentPage = Epson.SearchPagination.currentPage > Epson.SearchPagination.Pagination.pages ? Epson.SearchPagination.currentPage - 1 : Epson.SearchPagination.currentPage;

				// render display of page nos.
				jQuery( jQuery('#ArticlePagination li' )[1] ).html( '<a href="#filterBbar">' + ( pageNumber  ) + '</a>' );
				jQuery( jQuery('#ArticlePagination li' )[2] ).html( '<a href="#filterBbar">' + ( pageNumber + 1 ) +'</a>' );
				
				jQuery( '#ArticlePagination li.current' ).removeClass( 'current' );
				jQuery( jQuery( '#ArticlePagination li' )[currentIndex] ).addClass( 'current' );
				jQuery( jQuery( '#ArticlePagination li' )[currentIndex] ).find( 'a' ).replaceWith( jQuery( '<strong>' + jQuery( jQuery( '#ArticlePagination li' )[currentIndex] ).find( 'a' ).text() + '</strong>' ) );

				jQuery( '#ArticlePagination ul li a' ).bind( 'click', Epson.SearchPagination.Pagination.paginate );	

				// reset show all button
				jQuery( '#ArticlePagination li[class!="all"]' ).css( { display:'' } );
				jQuery( '#ArticlePagination li[class="all"] a' ).removeClass( 'buttonMinus' ).addClass( 'buttonPlus' ).find( 'span' ).text( Epson.Localisation.ExpandableList.TXT002 );

			}
			else
			{
				// hide all pagination except for show 16 button
				jQuery( '#ArticlePagination li[class!="all"]' ).css( { display:'none' } );
				jQuery( '#ArticlePagination li[class="all"] a' ).removeClass( 'buttonPlus' ).addClass( 'buttonMinus' ).find( 'span' ).text( Epson.Localisation.ExpandableList.TXT001 );
			}
		}
	},


	UI:
	{
		renderItems: function()
		{
			// clear product browser
			jQuery( '.keywordSearchResult ul' ).empty();
			jQuery( 'ul.articleSearchResults' ).empty();
			jQuery( '.reviews ul.more' ).empty();

			jQuery( 'li.previous a' ).css('cursor','default').bind( 'click', function(){  return false } );
			jQuery( 'li.next a' ).css('cursor','pointer');

			// write in new products to browser
			var lowerLimit = Epson.SearchPagination.pagination_number * (Epson.SearchPagination.currentPage - 1); 
			var upperLimit = lowerLimit + Epson.SearchPagination.pagination_number  > Epson.SearchPagination.data.length ? Epson.SearchPagination.data.length : lowerLimit + Epson.SearchPagination.pagination_number ; 

			if (Epson.SearchPagination.Pagination.view_all) 
			{
				lowerLimit = 0;
				upperLimit = Epson.SearchPagination.data.length;
			}
		
			if ( Epson.SearchPagination.data.length>0 )
			{
				jQuery ( '.keywordSearchResult p' ).text( Epson.Localisation.ProductBrowser.TXT003 + ' ' + (lowerLimit+1)+' - '+( upperLimit ) + ' ' +  Epson.Localisation.ProductBrowser.TXT006 + ' ' + Epson.SearchPagination.data.length );
			}			

			for ( var x = lowerLimit; x < upperLimit; x++ )
			{
				if ( !Epson.SearchPagination.data[x] ) break;

				var result = Epson.SearchPagination.data[x];
				
				var title = result.title;
				var date = result.date;
				var url = result.url;
				var description = result.description;
				
				if ( jQuery('.reviews ul.more').length )
				{
					
					var rating = result.rating;
					var citation = result.citation;
					

					var htmlString = '<li><p class="rating">';

					for ( i=0;i<rating;i++ )
					{
						htmlString += '<img height="11" width="11" alt="*" src="assets/images/ico_ratingstar_on.png"/>';
					}

					for ( i=rating;i<5 ;i++ )
					{
						htmlString += '<img height="11" width="11" alt="-" src="assets/images/ico_ratingstar_off.png"/>'
					}
										
					htmlString += '</p><p class="rating"><a href="' + url + '">' + title + '</a></p><cite>Written by, ' + citation + ', ' + date + '</cite><blockquote>' + description + '</blockquote></li>'
					
					var item = jQuery(htmlString);

					jQuery( '.reviews ul.more' ).append(item);
				} 
				else 
				{
					var alt=result.alt;
					var img = result.image;					
					
					if ( jQuery( '.keywordSearchResult' ).length) //for index page articles
					{
						var htmlString = '<li class="clear">'
					
						if ( img != '' ) { htmlString += '<a href="' + url + '"><img class="floatLeft" alt="' + alt + '" src="' + img + '"/></a>'; }

						htmlString += '<div class="txtDarkSmall">'+date+'</div><h4><a href="' + url + '">'+title+'</a></h4><p>'+description+'</p></li>'
						
						var item = jQuery(htmlString);
						
						jQuery( '.keywordSearchResult ul' ).append( item );	
					
					} else { //for Search Results

						var htmlString = '<li>';
						
						htmlString += '<h3><a href="' + url + '">' + title + '</a></h3><p>' + description + '</p></li>';
						
						var item = jQuery(htmlString);
						
						jQuery( 'ul.articleSearchResults' ).append( item );	

					}
				}				
			}			
		}
	}
}