// -----------------------------------------------------------------------------------
//	PageTrans v 0.1.3 - 2006-12-13
//	by Sindre Wimberger - http://www.sindre.at
//
//  v 0.1.3 - improved variable usage
//  v 0.1.2 - added support for loadingcontainer used when allready in HTML
//            disabled multiple clicks/pagetrans starts before finish
//  v 0.1.1 - added support for loadingcontainer insert selection
//            removed some prototype dependencies
//
//	For more information on this script, visit:
//	
//
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//	
//	Credit also due to those who have helped, inspired, and made their code available to the public.
//	Including:  Elisabeth Kühr and others.
// -----------------------------------------------------------------------------------
//
// PageTrans.init("x1",x2,x3,x4,"x5",'x6');
//
// Configuration
// x1 || Container ID which content should be changed. must be identical in all sader links
// x2 || 1 - Fade/Appear, 2 - BlindUp/BlindDown, 3 - SlideUp/SlideDown, 4 - Shrink/Grow [Buggy], 5 - Pulsate
// x3 || true - loadingcontent appears, false - no loading message
// x4 || ID - loadingcontainer will be inserted in element with #ID, body - loadingcontainer will be inserted at body end 
// x5 || ID of the lodingcontainer 
// x6 || HTML which will be insertet in the lodingcontainer 
// -----------------------------------------------------------------------------------
var PageTrans = {	
	clickstate: 0,
	init: function(ContainerID,effect,loadStatus,loadLocation,loadID,LoadContent) {
		PageTrans.ContainerID = ContainerID;
		PageTrans.fx = effect;
		PageTrans.LStatus = loadStatus; 
		if (loadLocation == "" || loadLocation == null) {PageTrans.LLocation = "body";} else {PageTrans.LLocation = loadLocation;}
//		alert(PageTrans.LLocation);
		PageTrans.LID = loadID;
		PageTrans.LContent = LoadContent; 
		PageTrans.getLinks();
	},
    getLinks: function() {
		if (!document.getElementsByTagName || !document.getElementById){ return; }
		if (PageTrans.LStatus == true) {PageTrans.LoaderInit();}
		var anchors = document.getElementsByTagName('a');
		// loop through all anchor tags
		for (var i=0; i<anchors.length; i++){
			var anchor = anchors[i];
			var relAttribute = String(anchor.getAttribute('rel'));
			// use the string.match() method to catch 'sader' references in the rel attribute
			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('pagetrans'))){
				anchor.onclick =  
				function() {
					if (PageTrans.clickstate==0) {
						PageTrans.clickstate = 1;
						PageTrans.disappearFX(this.getAttribute('href'));
					}
					return false; 
			     }
		    }
		}		
	}, 	
    request: function(url) {
		if (PageTrans.LStatus == true) {PageTrans.LoaderAppear();}		
//         alert("request");		 
		new Ajax.Request(url, {
			onFailure : function(resp) {PageTrans.redirect(url,resp.responseText);},
			onException : function(resp) {PageTrans.redirect(url,resp.responseText);},
			onComplete:function(req){				
				PageTrans.insert(req.responseText);
			}});
	},
    insert: function(html) {
//         alert(html);		 		
		var responsestrip = PageTrans.getMarkupById(html);
//         alert("1");		 		
		var responsestitle = PageTrans.getTitle(html);
//         alert("2");		 		
		var responsesbodyclass = PageTrans.getBodyClass(html);
   //      alert("3");		 		
		PageTrans.$(PageTrans.ContainerID).innerHTML = responsestrip;
//		Element.update(PageTrans.ContainerID, responsestrip);
		document.body.className = responsesbodyclass;
		document.title = responsestitle;
		if (PageTrans.LStatus == true) {
			PageTrans.LoaderDISAppear();			
		} else {
        	PageTrans.appearFX();
		}
	},
    disappearFX: function(url) {
		if (PageTrans.fx==1) {new Effect.Fade(PageTrans.ContainerID,
									 { duration:'0.5',
 									   afterFinish: function(){PageTrans.request(url)},
									   queue: { scope: 'aktive', position: 'front'}
									 });
		}
		if (PageTrans.fx==2) {new Effect.BlindUp(PageTrans.ContainerID,
									 { duration:'1.2',
									   afterFinish: function(){PageTrans.request(url)},
									   queue: { scope: 'aktive', position: 'front'}
									 });
		}
		if (PageTrans.fx==3) {new Effect.SlideUp(PageTrans.ContainerID,
									 { duration:'1.2',
									   afterFinish: function(){PageTrans.request(url)},
									   queue: { scope: 'aktive', position: 'front'}
									 });
		}
		if (PageTrans.fx==4) {new Effect.Shrink(PageTrans.ContainerID,
									{ duration:'1.2',
									  afterFinish: function(){PageTrans.request(url)},
									  queue: { scope: 'aktive', position: 'front'}
									});
		}
		if (PageTrans.fx==5) {PageTrans.request(url);}
		
	},
    appearFX: function() {
		if (PageTrans.fx==1) {new Effect.Appear(PageTrans.ContainerID,
									 { duration:'0.5',
 									   afterFinish: function(){PageTrans.functionJS();},
									   queue: { scope: 'aktive', position: 'end'}
									 });
		}
		if (PageTrans.fx==2) {new Effect.BlindDown(PageTrans.ContainerID,
									 { duration:'1.2',
 									   afterFinish: function(){PageTrans.functionJS();},
									   queue: { scope: 'aktive', position: 'end'}
									 });
		}
		if (PageTrans.fx==3) {new Effect.SlideDown(PageTrans.ContainerID,
									 { duration:'1.2',
 									   afterFinish: function(){PageTrans.functionJS();},
									   queue: { scope: 'aktive', position: 'end'}
									 });
		}
		if (PageTrans.fx==4) {new Effect.Grow(PageTrans.ContainerID,
									 { duration:'1.2',
 									   afterFinish: function(){PageTrans.functionJS();},
									   queue: { scope: 'aktive', position: 'end'}
									 });
		}
		if (PageTrans.fx==5) {new Effect.Pulsate(PageTrans.ContainerID,
									 { duration:'1.2',
 									   afterFinish: function(){PageTrans.functionJS();},
									   queue: { scope: 'aktive', position: 'end'}
									 });
		}
	},
    getMarkupById: function(markup) {
		var pattern =
		new RegExp("<(\\w+)[^>]*id=\"(|')?" + PageTrans.ContainerID + "\"?[^>]*>((\\r\\n|\\r|\\n|.)*?)</\\1>\<!-- \/" + PageTrans.ContainerID + " --\>", "gi");
		var result = pattern.exec(markup);
		if(!result) {
			return null;
		} else {
			return result[3];
		}
	}, 
    getTitle: function(markup) {
		var pattern = new RegExp("<title>([^<]*)<\/title>", "i");
		var result = pattern.exec(markup);
		if(!result) {
			return null;
		} else {
			return result[1];
		}
	}, 
    getBodyClass: function(markup) {
		var pattern = new RegExp("<body.+class=\"([^<]*)\"", "i");
		var result = pattern.exec(markup);
		if(!result) {
			return "pagetrans";
		} else {
			return result[1]+" pagetrans";
		}
	}, 
    LoaderInit: function() {
		if (!PageTrans.$(PageTrans.LID)){
			if (PageTrans.LLocation=="body") {var objBody = document.getElementsByTagName("body").item(0);}
			else {var objBody = PageTrans.$(PageTrans.LLocation);}
			objLoading = document.createElement("div");
			objLoading.setAttribute('id',PageTrans.LID);
			objLoading.style.display = "none";
			objLoading.innerHTML = PageTrans.LContent;
			objBody.appendChild(objLoading);
		} else {
			objLoading = $(PageTrans.LID);			
			objLoading.style.display = "none";
		}		
	},	
    LoaderAppear: function() {
		objLoading.style.display = "block";
	},
    LoaderDISAppear: function() {
		objLoading.style.display = "none";
		PageTrans.appearFX();
	},
    redirect: function(url,res) {
//		alert(res);
		window.location.href = url;
	},
	functionJS: function(){
	  PageTrans.clickstate = 0;		
	  PageTrans.getLinks();
	  googlemaps();
	  (function(){ /*Use Object Detection to detect IE6*/ var m = document.uniqueID /*IE*/ && document.compatMode /*>=IE6*/ && !window.XMLHttpRequest /*<=IE6*/ && document.execCommand ; try{ if(!!m){ m("BackgroundImageCache", false, true) /* = IE6 only */ } }catch(oh){}; })();	  
	},	
	/*
	addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
	*/
	addEvent:function( obj, type, fn ) {
		if (obj.addEventListener)
			obj.addEventListener( type, fn, false );
		else if (obj.attachEvent)
		{
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent( "on"+type, obj[type+fn] );
		}
	},	
	$:function(strId){
		return document.getElementById(strId);
	}	
};



//saddEvent(window, 'load', getSaderLinks);
PageTrans.addEvent(window, 'load', function(){PageTrans.init("c-parent",3,true,"","pagetransloading",'<p class="center"><img src="/media/kube/assets/content/ajax-loader.gif" alt="Laden" /><br /><br />Seite wird geladen...</p>');});

