/*
 * jQuery tsign rotator
 */
(function($) {
$.widget('tsign.paginator', {

	_init: function() {
		//this._markers = this.element.find('h5');
		this._pages = new Array();
		this._isFullView = false;
		this._initPagination();
		this._renderArticleControl();
		this._renderPagination();
		this._currentPage = this.options.show;
		var self = this;
		$(this.element).html(this._pages[this._currentPage]);
		if(this._pages.length <= 1) {
			$("#fullArticle").hide();
			$("#paginationControl").hide();
		}
		
		//$('#'+this.options.articleControlContainerId).stickyfloat({ duration: 400 });
		//console.log($('#'+this.options.articleControlContainerId));
		//el.$('#menu').stickyfloat({ duration: 400 });

	},
	
	showFullArticle: function() {
		var element = $(this.element);
		if(this._isFullView) {
			this._isFullView = false;
			this._currentPage = 1;
			this._showPage(0);
			$('#'+this.options.paginationControlId).show();
		} else {
			$(this.element).css({height: 'auto'});
			this._isFullView = true;
			$(this.element).fadeOut('slow', function(){
				if(jQuery.browser.msie ) {
					this.style.removeAttribute('filter');
				}
			});
			element.html("");
			$.each(this._pages ,function(){
				this.show();
				element.append(this);
			});
			$(this.element).fadeIn('slow', function(){
				if(jQuery.browser.msie ) {
					this.style.removeAttribute('filter');
				}
			});
			$('#'+this.options.paginationControlId).hide();
		}
		$.each(this._links, function(){
			$(this).parent().removeClass("active");
		});
	},
	
	_toUpper: function(str) {
	    var a = str.split(/\s+/g); // split the sentence into an array of words
	    for (i = 0 ; i < a.length ; i ++ ) {
	    	var firstLetter = a[i].substring(0, 1).toUpperCase();
	        var restOfWord = a[i].substring(1).toLowerCase();
	        a[i] = firstLetter + restOfWord; // re-assign it back to the array and move on
	    }
	    return a.join(' '); // join it back together
	},

	
	_initPagination: function() {
		var self = this;
		//this._pageBreak = this.element.find('hr');
		this._pageCount = this.element.find('hr').length + 1;
		this._pageMarkers = new Array();
		for(i=0;i<this._pageCount;i++) {
			this._pages[i] = $('<div class="page" id="page'+i+'"></div>');
			this._pageMarkers[i] = new Array();
			this._paginationItems = new Array();
		}
		var pageTrigger = 0;
		var markerTrigger = 0;
		var trigger = 0;
		var count = $(this.element).children().size();
		$(this.element).children().each(function(i){
			if($(this)[0].tagName != 'HR') {
				if ($(this)[0].tagName == 'H5') {
					var marker = this;
					marker.id = trigger++;
					self._pageMarkers[pageTrigger][markerTrigger] = this;
					markerTrigger++;
				}
				var tmp = self._pages[pageTrigger];
				tmp.append($(this));
				if(i == (count-1)) {
					tmp.append('<div class="clear"></div>');
				}
			} else {
				$(this).hide();
				markerTrigger = 0;
				self._pages[pageTrigger].append('<div class="clear"></div>');
				pageTrigger++;
			}
		});
	},
	
	_showMarker: function(marker) {
		var page = 0;
		var self = this;
		for(i=0;i<this._pageMarkers.length;i++) {
			for(x=0;x<this._pageMarkers[i].length; x++) {
				if(marker.id == this._pageMarkers[i][x].id) {
					page = i;
					break;
				}
			}
		}
		this._showPage(page, marker)
	},
	
	_showPage: function(pageId, marker) {
		var self= this;
		var wait = true;
		this._paginationItems[pageId].addClass('active');
		$.each(this._links, function(){
			$(this).parent().removeClass("active");
		});
		if(this._currentPage != pageId) {
			this._paginationItems[this._currentPage].removeClass('active');
			if(!this._isFullView) {
				$(this.element).css({height: ($(this._pages[this._currentPage]).height() + 20)});
				$('#'+this.options.articleControlContainerId).parent().css({height: ($(this._pages[this._currentPage]).height() + 20)});
				$(this._pages[this._currentPage]).fadeOut('slow', function(){
					if(jQuery.browser.msie ) {
						this.style.removeAttribute('filter');
					}
					$(self.element).html(self._pages[pageId].hide());
					$(self._pages[pageId]).fadeIn('slow', function(){
						if(jQuery.browser.msie ) {
							this.style.removeAttribute('filter');
						}
					});
					var height = $(self._pages[pageId]).height() + 20;
					if(marker == null) {
						$.scrollTo($(self.element), 1000);
					} else {
						$.scrollTo(marker, 1000);
					}
					$(self.element).css({'height': height});
				});
			} 
			else if(marker != null) {
				$.scrollTo(marker, 1000);
			}
			
			this._currentPage = pageId;
		}
		
		return false;
	},
	
	previous: function() {
		var page = ((this._currentPage - 1) < 0) ? (this._pages.length - 1) : this._currentPage - 1;
		this._showPage(page);
	},
	
	next: function() {
		var page = ((this._currentPage + 1) >= this._pages.length) ? 0 : this._currentPage + 1;
		this._showPage(page);
	},
	
	_renderPagination: function() {
		var self = this;
		var element = $('#'+this.options.paginationControlId);
		var previousLi = $('<li class="item previous"></li>');
		var nextLi = $('<li class="item next"></li>');
		var previous = $('<a href="#">Previous<a/>');
		previous.click(function(){
			self.previous();
			return false;
		});
		
		var next = $('<a href="#">Next<a/>');
		next.click(function(){
			self.next();
			return false;
		});
		
		element.append(previousLi.append(previous));
		this._pages.each(function(o,i){
			var page = i;
			var cssClass = '';
			if(page == 0) {
				liCssClass = "first";
			} 
			else if(page == (self._pages.length -1)) {
				cssClass = "last";
			}
			
			var li = $('<li class="item '+cssClass+'"></li>');
			var a = $('<a href="#">'+(page+1)+'</a>');
			if(i == self.options.show) {
				a.addClass("active");
			}
			a.click(function(){
				self._showPage(page);
				return false;
			});
			self._paginationItems[page] = a;
			element.append(li.append(a));
		});
		element.append(nextLi.append(next));
	},
	
	_renderArticleControl: function() {
		var self = this;
		element = $('#'+this.options.articleControlId);
		this._links = new Array();
		var counter = 0;
		$.each(this._pageMarkers, function(x) {
			$.each(self._pageMarkers[x], function(i) {
				var marker = this;
				var pattern = $('<li></li>');
				self._links[counter] = $('<a href="#">'+$(marker).html()+'</a>'); 
				$(self._links[counter]).click(function(){
					self._showMarker(marker);
					$.each(self._links, function(){
						$(this).parent().removeClass("active");
					});
					$(this).parent().addClass("active");
					return false;
				});
				element.append(pattern.append(self._links[counter]));
				counter ++;
			});
		});
	}

});
paginator = $.extend($.tsign.paginator, {
	version: '1.10',
	getter: 'value',
	defaults: {
		show: 0
	}
});

})(jQuery);