/*******************************************************************************************
 * jquery.wh.pagecontrol.js
 * Ersetze PageControl Links durch Ajax Requests
 * @autor   Cornelius Rittner
 * @date    02.12.2010
 * @version 1.0
 * @lastmodified 26.01.2011
 *
 * Beispiel für HTML Code:
	<div id="autorenliste_24">
		<div class="pagecontrol">
			<a href="/?page=21">next</a>
		</div>
	</div>
 *
 * Um beim Laden der Webseite gewünschte Links durch die Ajax-Versionen zu ersetzen,
 * muss die Funktion in die allgemeine Javascript-Datei der Seite eingesetzt werden.
 * Beispiel wie das aussehen kann:
 *
	$(document).ready(function() {
		$(".autorenliste").wh_pageControlListener({
			 pagingLinks: ".pagecontrol a"
			,ajaxurl: "/ajax_autorenliste.cfm"
		});
		$("#titelliste_2").wh_pageControlListener();
	});
 * 
 *******************************************************************************************/
jQuery.fn.wh_pageControlListener = function(set_options) {
	/***************************************************************************************
	 * Default Options
	 ***************************************************************************************/
	if (set_options == null) set_options = {};
	var options = {
		 pagingLinks:			set_options.pagingLinks				|| ".paging a"
		,ajaxurl:				set_options.ajaxurl					|| "ajax_widget_titelliste.html"
		,widget_id_required:	set_options.widget_id_required	|| true
		,widget_id_replace:	set_options.widget_id_replace		|| /[^0-9]/g
		,urlreferer:			set_options.urlreferer				|| true
		,
	};
	/***************************************************************************************
	 * Initialisierung
	 ***************************************************************************************/
	$(this).each(function(){
		var myElement = $(this);
		var myElementID = myElement.attr("id");
		$(this).find(options.pagingLinks).click(function(){
			var strLinkString = $(this).attr("href");
			var strHashString = "";
			if (strLinkString.indexOf("#") > 0) {
				strHashString = strLinkString.substr(strLinkString.indexOf("#"));
				strLinkString = strLinkString.substring(0,strLinkString.indexOf("#"));
			}
			var strQueryString = strLinkString.substr(strLinkString.indexOf("?")+1);
			var strRefUriString = strLinkString.substring(0,strLinkString.indexOf("?"));
			var strRefQueryString = strQueryString;
			// Query String zusammen bauen
			if (options.widget_id_required) {
				var content_widget_id = myElementID.replace(options.widget_id_replace,"");
				strQueryString += (strQueryString != "" ? "&" : "");
				strQueryString += "content_widget_id=" + content_widget_id;
				// return out, wenn kein dynamisches Widget
				if (content_widget_id == "" || content_widget_id <= 0) {
					return true;
				}
			}
			if (options.urlreferer) {
				strQueryString += (strQueryString != "" ? "&" : "");
				strQueryString += "urlreferer=" + encodeURIComponent(strRefUriString + "?" + strRefQueryString);
			}
			// Element ausgrauen
			myElement.css("position","relative").append("<div class='ajax_loader' style='width:"+myElement.width()+"px;height:"+myElement.height()+"px'></div>").css("opacity",.3);
			// Wenn AjaxError, rufe URL normal auf, kein Ajax!
			myElement.ajaxError(function(){
				// $(this).css("opacity",1).find(".ajax_loader").remove();
				window.location.href = strLinkString + strHashString;
			});
			// Ajax Laden
			$.get(strRefUriString + options.ajaxurl + "?" + strQueryString, function(data){
				// altes Element ersetzen
				myElement.replaceWith(data);
				// neues Element mit WH Dropdowns und Ajax PageControl ersetzen
				$("#" + myElementID).wh_pageControlListener(options).find("select").wh_dropdown({speed: "fast"});
				// external links
				$("a.external, a[rel*=external]").attr("target","_blank");
				// zum Anker springen
				var titelliste_position = $("#" + myElementID).offset();
				window.scrollTo(titelliste_position.left,titelliste_position.top);
			});
			return false;
		});
	});

	return this;
}
