/**
 * Class Ajax paging
 *
 * [2009-10-01 js] created
 *
 * $Rev: 480 $ Revision of last commit
 * $Author: jan $ Author of last commit
 * $Date: 2008-09-26 08:30:09 +0200 (Fr, 26 Sep 2008) $ Date of last commit
 */

/**
 * requires min. jquery version: jquery-1.3.2.min.js
 */
var Paging = function(url, source, target, entries) {

	// private area
	var

		// current page
		page = 1,

		// sort paramter
		sort_by,

		// order paramter:
		// after request it changes between asc/desc
		order_by,

		// filter parameter
	  filter_by,

	  // save xmlHttp object
	  request = null,

  // private functions
	refresh = function() {

		// prevent flooding
		if ( request ) {
			request.abort();
		}

		request = $.ajax({
		  type: "POST",
		  url: url,
		  dataType: "json",
	    data: { entries: entries,
	            current_page : page,
	            type: source,
	            sort_by: sort_by,
	            order_by: order_by,
	    				filter: filter_by
	    },

		  success: function(data) {

		  	// set new input
		  	$('#'+target).html(data.entries);
		  	//$("#test123").text(data.entries);

		  	// set the current page
		  	page = data.current_page;

		  	// visuell details
				$('.current_page_' + source).text(data.current_page);
				$('.page_count_' + source).text(data.page_count);

				// layout resize
				if ( shop != false) {

					resize_layout();
				}
		  },
		  error: function (data) {

		  	//alert("__ERROR__\n\n" + data.responseText);
		  }
		});

	}

	// public area
  return {

  	/**
  	 * paging function
  	 */
  	move: function(move) {

  		// setting up the movment
  		switch(move) {
  			case "next": page++; break;
  			case "prev": page--; break;
  		}

  		// return Paging
  		return this;
  	},
  	/**
  	 * sort by function
  	 */
  	sort: function(type, default_order) {

  		var predefined_order,
  		    sort_down = false, sort_up = false;

  		// set current sort_by type
  		sort_by = type;

  		// switch arrows
  		var sort = $("#" + source + "_order_by_" + type);

  		// only for arrow effect
  		if ( sort ) {

	  		if ( default_order == "asc" ) {

	  			sort_up = true;
	  		}
	  		else if ( default_order == "desc" ) {

	  			sort_down = true;
	  		}
	  		else if ( sort.hasClass("order_by_up") ) {

	  			sort_down = true;
	  			predefined_order = "desc";
	  		}
	  		else if ( sort.hasClass("order_by_down") ) {

	  			sort_up = true;
	  			predefined_order = "asc";
	  		}

	  		// toggle classes between up and down
	  		sort.toggleClass("order_by_up", sort_up);  	 // true, up is set
	  		sort.toggleClass("order_by_down", sort_down ); // true, down is set
  		}

			// set default order:
			// if no default order is defined, take predefined order by css class
			order_by = default_order || predefined_order;

  		// return Paging
  		return this;
  	},
  	/**
  	 * filter by function
  	 */
  	filter: function(filter) {

  		filter_by = filter;
  	},
  	/**
  	 * refresh the page
  	 */
  	update: function() {

  		// refresh the page
  		refresh();
  	}
  }
};
