/** ------------------------------------------------------------------------------------------------------------------------------------

															[Navigation functionality   3.0 ] 

 ------------------------------------------------------------------------------------------------------------------------------------ **/

NS.Package('NS.Site.Pagination');
/** ----------------------------------------------------------------------------------------------------------------------
	* @param (Object) = options
  	* @option[target] 			(String)	the target holder waar de paginatie in zit 							default :"div.pagination"
 	* @option[ajax] 			(Object)	de ajax jquery object integrateed in the pagination function	
	* @option[ajax][type]		(String)   	the type data request POST ot GET									defailt "POST"
	* @option[ajax][dataType]	(String)   	respons data type default "json"
	* @option[ajax][url]		(String)   	URL request handler no defaults is 									requered!
	* @option[ajax][data]		(Object)   	optional data to add to the request									optional
	* @option[ajax][success]	(Function)  execute by success													optional
	* @option[ajax][beforeSend]	(Function)  execute on before													optional
	
	* object reurns methods:
	setEvents()					zet alle listenerns op alle navigation buttons
	
	boorbeeld functie:
	----------------------------------------------------------------------------------------------------------------------
	$(document).ready(function(){
		
		var _pagination = Site.Pagination({
			ajax : {
				url : 'request/temp.php',
				dataType : 'html',
				success : function(data, param){
					$$(param);
					$('#content').html(data);
					_pagination.setEvents();
				}
			}
		});
	
	});
	

	---------------------------------------------------------------------------------------------------------------------- **/
(function($){
	NS.Site.Pagination = function(options){
		
		var _options = {};
		var _private = {
			
			/** --------------------------------[ init function ]----------------------------------- **/
			init : function(opt){
				opt = opt || {};
				return {
					target : opt.target || 'div.pagination',
					ajax : (opt.ajax == undefined)? false : {
						type 		: opt.ajax.type 		|| 'POST',
						dataType 	: opt.ajax.dataType 	|| 'json',
						url  		: opt.ajax.url  		|| 'request/handler.php',
						data  		: opt.ajax.data  		|| false,
						success 	: opt.ajax.success      || false,
						beforeSend 	: opt.ajax.beforeSend   || false
					}				
				}
			},
			
			/** --------------------------[ request controller ajax ]------------------------------- **/
			requestController : function(data){
			
				if(_options.ajax){
					_options.ajax.data = $.extend(_options.ajax.data, data);
					$.ajax({
					  type			: _options.ajax.type,
					  url			: _options.ajax.url,
					  data			: _options.ajax.data,
					  dataType		: _options.ajax.dataType,
					  beforeSend 	: function(){

					  	if(_options.ajax.beforeSend){
					  		_options.ajax.beforeSend();
					  	}
					  },
					  success		: function(respons){
					  	if(_options.ajax.success){
					  		_options.ajax.success(respons, _options.ajax.data);
					  	}					  	
					  }
					});
				} 
			},
			/** ----------------------------[ set events on buttons ]--------------------------------- **/
			setButtonEvents : function(){
				
				var _target = $(_options.target);
					_target.find('.nav, .thisNav').bind('click.pagination', function(){
						var _self 	= $(this);
						var _url 	= $(this).attr('href');
										
						if(_self.hasClass('navButtons')){			
							_self.removeClass('nav').addClass('thisNav');
						}
						_private.requestController( NS.Site.Tools.getUrlVars(_url) );
						return false;
					});
					_target.find('#navSelect').bind('change.paginationSelect', function(){
						
						var _selected  = parseInt($(this).find('option:selected').val());
						_private.requestController({
							'selected'  : _selected,
							'end' 		: _selected
						});
					});
			}		
		};
		
		_options = _private.init(options);			
		_private.setButtonEvents();
		return {
			setEvents : _private.setButtonEvents
		}
	};
})(jQuery);



