/**********************************************************************************************
Copyright 2007/2008/2009 by 
Fredi Hartmann (Cologne Germany) 
Dr. Mateo Hermel (Cologne Germany)
Alle Rechte vorbehalten.
**********************************************************************************************/
var actuallink;
var maintextheight;

function loadpage(url, target, async) {
	element=target; // $("maintext");
	element.steptrans(.04,0);
	
	new Ajax.Request( url, {
		method: 'get',
		asynchronous: async || true,
		onSuccess: function(transport) {
				element=$("maintext");
				element.update(transport.responseText);
				
				if (actuallink) 
					$(actuallink).setOpacity(1);
					
				var nodes=$$("#maintext .content a");
				addfunc(nodes);
				
				element.steptrans(.025,1,0);
				return element;
			},
		on404: function(transport) {
				element=$("maintext");
				element.update("Not found");
				return false;
			},
		onError: function(transport) {
				alert("Not Found "+url);
				return false;
			}
		}
	)
}

var myMethods = {
	moving: false,
	movecnt: 0,
	movestart: 0,
	movedistance:0,
	opacity: false,
	isblinking: false,
	isSelected:false,
	movecallback: false,
	
	softmove: function(element, target, position) {
		var element=$(element);
		var delay=1000/40;
		if (!element.moving) {
			element.movestart=parseInt(element.getStyle("left"));
			element.movedistance=Math.abs(target-element.movestart);
			position=element.movestart;
			element.movecnt=0;
			step=1;
		}
		var togo=Math.abs(target-position);
		var step=20*(20/(togo/2));
		var step=1+togo/6;
		element.movecnt+=1;
		
		if (element.movestart>target) {
			position-=step;
			if (position<target) position=target;
		} else {
			position+=step;
			if (position>target) position=target;
		}

		
		element.setStyle({left:Math.round(position)+"px"});

		if (position!=target) 
			element.moving=window.setTimeout(function(){
												element.softmove(target, position);
											}, delay);
		else {
			element.moving=false;
			element.movecnt=0;
			if (element.movecallback) element.movecallback();
			element.movecallback=false;
		}
		
		return element;
	},
	
	stepmove: function(element, steps, stepto) {
		var element=$(element);
		var x=parseInt(element.getStyle("left"));
		x+=steps;
		var delay=10;

		if (steps>0) {
			if (x<stepto)  {
				element.moving=window.setTimeout(
						function() { element.stepmove(steps,stepto); }, delay);
				element.movecnt+=1;
			} else {
				x=stepto;
				element.moving=false;
				element.movecnt=0;
				if (element.movecallback) element.movecallback();
				element.movecallback=false;
			}
		} else {
			if (x>stepto) {
				element.moving=window.setTimeout(
						function() { element.stepmove(steps,stepto); }, delay);
				element.movecnt+=1;
			} else {
				x=stepto;
				element.moving=false;
				element.movecnt=0;
				if (element.movecallback) element.movecallback();
				element.movecallback=false;
			}
		}
		element.setStyle({left:Math.round(x)+"px"});
		return element;
	},
	
	cancelmoving: function(element, steps, stepto) {
		var element=$(element);
		if (element.moving) window.clearTimeout(element.moving);
		element.moving=false;
		element.movecnt=0;
		element.movecallback=false;
		return element;
	},
	
	steptrans: function(element, steps, stepto, trans) {
		var element=$(element);
		if (!trans) {
			trans = element.getStyle("opacity");
		}
		trans+=steps;
		var delay=1000/50;
		if (steps>0) {
			if (trans<stepto) element.opacity=window.setTimeout(
						function() { element.steptrans(steps,stepto,trans); }, delay);
			else {
				trans=stepto;
				element.opacity=false;
			}
		} else {
			if (trans>stepto) element.opacity=window.setTimeout(
						function() { element.steptrans(steps,stepto,trans); }, delay);
			else {
				trans=stepto;
				element.opacity=false;
			}
		}
		element.setOpacity(trans);
		return element;
	},
	
	stoptrans: function(element,showhide) {
		var element=$(element);
		if (!element.opacity) return;
		window.clearTimeout(element.opacity);
		element.opacity=false;
		if (showhide) element.setOpacity(showhide);
		return element;
	},

	softblink: function(element,step,minval,maxval) {
		var element=$(element);
		var trans=element.getStyle("opacity");
		trans+=step;
		if (trans>maxval) {
			trans=maxval; step=-step;
		} else if (trans<minval) {
			trans=minval; step=-step;
		}
		element.setOpacity(trans);
		element.isblinking=window.setTimeout(
			function() { element.softblink(step,minval,maxval); }, 30);
		return element;
	},
	
	stopblink: function(element) {
		var element=$(element);
		window.clearTimeout(element.isblinking);
		element.isblinking=false;
		element.setOpacity(1);
		return element;
	},
	
	flash: function(element, interval, op) {
		var element=$(element);
		if (! op) {
		    op=element.getStyle("opacity");
		} else {
		    element.steptrans(.001,0);
		    element.steptrans(.001,op);
		}
		element.isflashing=window.setTimeout(function() {element.flash, interval, -op});
		return element;
	},

	ajaxUpdate: function(element, url, cb){
		var element = $(element);

		new Ajax.Request(url, {
				method: 'get',
				onSuccess: function(transport) {
					if (cb) {
						var d=new Element("div", {id:"newcontent"});
						d.update(transport.responseText);
						d.setOpacity(0);
						element.update(d);
						cb();
					} else element.update(transport.responseText);
				},

				onFailure: function(transport) {
					if (cb) cb();
					alert("AJAX failure");
				}
		});

		return element;
	}	
}

// ---------------------------------------------------------------------	


function addfunc(nodes) {
	if (nodes.length!=0) {
		for (var i=0; i<nodes.length; i++) {
			var id=Element.identify(nodes[i]);
			var element=$(nodes[i]);
			element.setOpacity(.5);
			
			if (id=="hplink") {
				$(id).onclick=function() {
					return true;
				}

			} else {
				$(id).onmouseover=function() {
					if (this==actuallink) return;
					this.setOpacity(1);
					this.softblink(.05,.5,1);
				}
				$(id).onmouseout=function() {
					this.stopblink();
					op=(this==actuallink) ? 1 : .5;
					this.setOpacity(op);
				}
				$(id).onclick=function() {
					if (actuallink) actuallink.setOpacity(.5);
					actuallink=this;
					this.stopblink();
					
					if (this.hasClassName("extern")) {
						window.open(this.href);
						
					} else if (this.href.indexOf("index.html")>0) {
						loadpage(this.href, $("body"));
					} else {
						loadpage(this.href, $("maintext"));
					}
					return false;
				}
			}
		}
	}
}

function doInit() {
	var nodes=$$("a");
	addfunc(nodes);
	Element.addMethods(myMethods);
}

function reposition() {
	w=document.viewport.getWidth();
	h=document.viewport.getHeight();

	t=0; l=0;
	if (h>600) t=parseInt((h-600)/2);
	if (w>800) l=parseInt((w-800)/2); 
	
	w=800; h=600;
	topheight=20; footerheight=20;
	
	element=$("stage");
	element.setStyle({"width":w+"px",
					  "left":l+"px",
					  "top":t+"px"
				    });

	maintextheight=$("maintext").getHeight()-40;
}


document.observe("dom:loaded", function() {reposition();});
window.onload= function() {doInit()};
window.onresize= function() {reposition()};


