//******************************************************************************
// MooDataTable 0.1: A data table for MooTools 1.2
// License: MIT License 
// Copyright (c) 2008 Jean-Nicolas Jolivet [http://www.silverscripting.com]

var SearchPager = new Class({
	options: {
		url: 'search.php',
		pager: "articlePager",
		container: "articleContent",
		query: "",
		sort: "relevance",
		method: 'get',
		pages: 1,
		page: 1,
		secid: 0,
		type: "article",
		scroll: "articleScroll",
		prefix: ""
	},
	
	initialize: function(el, options) {
		this.setOptions(options);
		this.pages = this.options.pages;
		this.page= this.options.page;
		this.query= this.options.query;
		this.sort= this.options.sort;
		this.secid= this.options.secid;
		this.PaginationContainer = $(this.options.pager);
		this.mainContainer = $(this.options.container);
		this.type = this.options.type;
		this.prefix = this.options.prefix;
		this.goTo = this.options.scroll;
		
		this.paginate();
	},
	
	pageClicked: function(page) {
		if($type(page) === "string") {
			if(page === "next" && this.page < this.pages) {
				this.requestData(this.page + 1);
			}
			else if(page === "prev" && this.page > 1) {
				this.requestData(this.page - 1);
			}
			else if(page === "first" && this.page != 1) {
				this.requestData(1);
			}
			else if(page === "last" && this.page != this.pages) {
				this.requestData(this.pages);
			}
		}
		else {
			if(page > 0 && page <= this.pages) {
				this.requestData(page);
			}
		}
	},
	
	requestData: function(page) {
		// initiate the ajax request...
		
		var ajaxRequest = new Ajax(this.options.url, {
            method: 'post',
            data: {page:page, query:this.query, sort:this.sort, secid:this.secid, type:this.type, prefix:this.prefix },
            onComplete: function(resp) {
            	if(resp == null) {
					return false;
				} else {
					this.parseData(resp);
				}
            }.bind(this)
        }).request();
		this.page = page;
	},
	
	parseData: function(response) {
		this.mainContainer.empty();
		this.mainContainer.innerHTML = response;
		this.scroll();
		this.paginate();
	},
	
	scroll: function() {
		if(this.goTo != ""){
			var  scroll =  new Fx.Scroll(window,  { 
				wait: false, 
				duration: 1000,
			    transition: Fx.Transitions.Quad.easeInOut  
			}); 
			var xcoord = $$(this.goTo).getPosition()[0].x;
			var ycoord = $$(this.goTo).getPosition()[0].y;
			scroll.scrollTo(xcoord,ycoord);
		}else
			return false;
	},

	paginate: function() {
		// clear the old pagination...
		//alert(this.page + " " + this.pages);
		this.PaginationContainer.empty();
		
		if(this.pages == 1) {
			return;
		}
		else {
			if(this.page > 1) {
				// previous link
				var prevLink = new Element('a', {
					'href': "#",
					'class': 'articlePagination',
					'events': {
						'click': function(event) {
							if(event.preventDefault) event.preventDefault();
							this.pageClicked("prev");
							return false;
						}.bind(this)
					}
				});
				prevLink.appendText('‹');
				prevLink.inject(this.PaginationContainer);
			}
			// First page
			if(this.page == 1) {
				// We are on the first page so, non-clickable...
				var page1Span = new Element('span', {
					'class': 'splitFirst selected'
				});
				page1Span.appendText('1');
				page1Span.inject(this.PaginationContainer);
			} else {
				// Not on first page so... clickable...
				var page1Link = new Element('a', {
					'href': "#",
					'class': 'splitFirst',
					'events': {
						'click': function(event) {
							if(event.preventDefault) event.preventDefault();
							this.pageClicked("first");
							return false;
						}.bind(this)
					}
				});
				page1Link.appendText('1');
				page1Link.inject(this.PaginationContainer);
			}
			

			if(this.page > 2) {
				//var leftSpacer = new Element('span', {});
				//leftSpacer.appendText('...');
				//leftSpacer.inject(this.PaginationContainer);
				if(this.page == this.pages && this.pages > 3) {
					var minusTwo = new Element('a', {
						'href': "#",
						'events': {
							'click': function(event) {
								if(event.preventDefault) event.preventDefault();
								this.pageClicked(this.page - 2);
								return false;
							}.bind(this)
						}
					});
					minusTwo.appendText(this.page - 2 + "");
					minusTwo.inject(this.PaginationContainer);
				}
				var minusOne = new Element('a', {
					'href': "#",
					'events': {
						'click': function(event) {
							if(event.preventDefault) event.preventDefault();
							this.pageClicked(this.page - 1);
							return false;
						}.bind(this)
					}
				});
				minusOne.appendText(this.page - 1 + "");
				minusOne.inject(this.PaginationContainer);
			}
			if(this.page != 1 && this.page != this.pages) {
				var current = new Element('span', {
						'class': 'selected'
					});
					current.appendText(this.page + "");
					current.inject(this.PaginationContainer);
			}
			if(this.page < this.pages - 1) {
				
				var plusOne = new Element('a', {
					'href': "#",
					'events': {
						'click': function(event) {
							if(event.preventDefault) event.preventDefault();
							this.pageClicked(this.page + 1);
							return false;
						}.bind(this)
					}
				});
				plusOne.appendText(this.page + 1 + "");
				plusOne.inject(this.PaginationContainer);
				
				if(this.page == 1 && this.pages > 3) {
					var plusTwo = new Element('a', {
						'href': "#",
						'events': {
							'click': function(event) {
								if(event.preventDefault) event.preventDefault();
								this.pageClicked(this.page + 2);
								return false;
							}.bind(this)
						}
					});
					plusTwo.appendText(this.page + 2 + "");
					plusTwo.inject(this.PaginationContainer);
				}
				// spacer
				//var rightSpacer = new Element('span', {});
				//rightSpacer.appendText("...");
				//rightSpacer.inject(this.PaginationContainer);
			}
			if(this.page == this.pages) {
				var lastPageSpan = new Element('span', {
					'class': 'splitLast selected'
				});
				lastPageSpan.appendText(this.pages + "");
				lastPageSpan.inject(this.PaginationContainer);
			} else {
				var lastPageLink = new Element('a', {
					'href': "#",
					'class': 'splitLast',
					'events': {
						'click': function(event) {
							if(event.preventDefault) event.preventDefault();
							this.pageClicked("last");
							return false;
						}.bind(this)
					}
				});
				lastPageLink.appendText(this.pages + "");
				lastPageLink.inject(this.PaginationContainer);
			}
			
			if(this.page < this.pages) {
				var nextLink = new Element('a', {
					'href': "#",
					'events': {
						'click': function(event) {
							if(event.preventDefault) event.preventDefault();
							this.pageClicked("next");
							return false;
						}.bind(this)
					}
				});
				nextLink.appendText("›");
				nextLink.inject(this.PaginationContainer);
			}
		}
	}
});

SearchPager.implement(new Options);

