// =======================================================================
// EndlessPage - implement endless page with will_paginate plugin
//
// Author: Shawn Veader (shawn@veader.org)
//
// Parameters:
// 		total_page: total number of pages, found in @collection.page_count
//		url: URL used to request more data
//		auth_token: the authenticity token needed for Rails 2.X
//
// Requires: Prototype for Javascript and will_paginate plugin for Rails
// =======================================================================
//var EndlessPage = new function();//Class.create();\

function EndlessPage() {
	//this.page_str = vars['page'] == undefined ? "page" : vars.page;
	return {
		initialize: function(total_pages, url, auth_token, seed, vars){
			this.timer = null;
			this.current_page = 2;
			this.total_pages = total_pages;
			this.ajax_path = url;
			this.interval = 1000; // 1 second
			this.scroll_offset = 200;//0.6; // 60%
			this.auth_token = auth_token;
			this.seed = seed;

			//this.total_premium_pages = total_premium_pages;
			//this.total_free_pages = 999;//total_free_pages == null? 1000 : total_free_pages;
			this.end_listings = false;
			
			this.s_type = vars["type"];
			this.s_loc = vars["loc"];
			this.s_price = vars["price"];
			
			this.getFree = "-1";
			
			// start the listener
			this.start_listener();
		},
		
		stop_listener: function(){
			this.timer = null;
		},
		
		start_listener: function(){
			this.timer = setTimeout('ep._check_scroll()', this.interval);
		},
		
		_check_scroll: function(){
			
			//if(this.xhr != undefined) this.xhr.abort(); //force existing requests to stop
			try
			{
				if(this.xhr != undefined && this.xhr.readyState != 4)
				{
					//in progress
					this.stop_listener();
					this.start_listener();
					return;
				}
			}
			catch(ex) {}
		
			
			if (this.timer == undefined || this.end_listings) {
				// listener was stopped or we've run out of pages
				return;
			}
			this.stop_listener();
			
			
			if(this.getFree == "first")
			{
				this.current_page = 1; //already did first page...
				this.getFree = "more";
			}
			
			// distance to end of page
	    var distance = $(document).height()-$(window).scrollTop()-$(window).height();
	    // if slider past our scroll offset, then fire a request for more data
	    if(distance < this.scroll_offset) {
			
				this.current_page++; // move to next page
				//alert('here');
				
				//alert(this.total_free_pages);
				//alert(this.current_page);
				//if(this.total_free_pages != 999 && this.current_page > 1) this.getFree = "-1";
				
				if($("#spinner").get(0) == undefined)
				{
					$("#results").append("<img id='spinner' src='/images/ajax-loader.gif' />");
				}
				
				var args = {
							authenticity_token: this.auth_token,
							//this.page_str: this.current_page,
							page: this.current_page,
							seed: this.seed,
							get_free_listings: this.getFree.toString(),
							type: this.s_type,
							location: this.s_loc,
							price: this.s_price
						};
				//args[this.page_str] = this.current_page;
				
				this.xhr = $.get(this.ajax_path, args,
						function(data){
							//hide spinner
							$("#spinner").remove();
						}
				);
				
				//if(this.getFree == "true") this.getFree = "-1";
				/*new Ajax.Request(this.ajax_path, {
					parameters: {
						authenticity_token: this.auth_token,
						page: this.current_page
					}
				});*/
			}
			
			// start the listener again
			
			this.start_listener();
		}
	}
};
