/**********\

* LOADER *

\**********/

var AddDelay = 6;

var Loader = Class.create({

	initialize: function() {

		// Parameter für den HTTP-Request
		this.param = new Hash();
		this.partei = new Hash();
		this.errorInfo = false;

		this.active = true;
		this.start = true;
		this.sid = true;
		this.voted = true;
		this.votes = 0;
		this.observer();
		this.load();

		function handle() {
			if ($('content').visible()) {
				var docHeight = document.body.getHeight();
				var docWidth = document.body.getWidth();
				var elHeight = $('content').getHeight();
				var elWidth = $('content').getWidth();

				var top = (docHeight/2)-(elHeight/2);
				var left = (docWidth/2)-(elWidth/2);

				$('content').setStyle({left:left,top:top});
			}
		}
		new Event.observe(window, 'resize', handle.bindAsEventListener(this));
	},
	getParameters: function () {
		return this.param.toQueryString();
	},

	load: function () {
		this.param.set('p', 'start');

		new Ajax.Request('interface.php',{
			method: 'post',
			parameters: this.getParameters(),
			onComplete: function (transport) {
				json = transport.responseText.evalJSON();
				this.jsonSwitch(json);
			}.bind(this)
		});
		this.param = new Hash();
	},

	vote: function (handle){
		this.param.set('p', 'vote');
		this.param.set('vote', handle);
		this.param.set('sid', this.sid);
		new Ajax.Request('interface.php',{
			method: 'post',
			parameters: this.getParameters(),
			onComplete: function (transport) {
				json = transport.responseText.evalJSON();
				this.jsonSwitch(json);
			}.bind(this)
		});
		this.param = new Hash();
	},
	loadContent: function (handle){
		this.param.set('p', 'load');
		this.param.set('load', 'content');
		this.param.set('sid', this.sid);
		new Ajax.Request('interface.php',{
			method: 'post',
			parameters: this.getParameters(),
			onComplete: function (transport) {
				json = transport.responseText.evalJSON();
				if (json.html != "") {

					$$('.bubble').each(function(element){
						if (element.visible()==true) {
							Effect.Fade(element, {duration:0.3});
						}
					});

					new Effect.Opacity($('content'), { from: 0, to: 0.0000000001, duration: 0 });

					$('content').innerHTML = json.html;

					var docHeight = document.body.getHeight();
					var docWidth = document.body.getWidth();
					var elHeight = $('content').getHeight();
					var elWidth = $('content').getWidth();

					var top = (docHeight/2)-(elHeight/2);
					var left = (docWidth/2)-(elWidth/2);

					$('content').setStyle({left:left,top:top});

					$('twitter_update_desitination').innerHTML = $('twitter_update_list').innerHTML;
					Effect.Appear($('content'),{duration:0.2});
					this.active = false;
				}

			}.bind(this)
		});
		this.param = new Hash();
	},

	reset: function (){
		this.animate();
	},
	observer: function () {
		// allgemeiner Observer
		function handle(e) {

			var elementObj = Event.element(e);

			var parent = elementObj.parentNode.nodeName.toLowerCase();
			var parentId = elementObj.parentNode.id.toLowerCase();

			var parentParentId = elementObj.parentNode.parentNode.id.toLowerCase();

			var element = elementObj.tagName.toLowerCase();
			var elementId = elementObj.id.toLowerCase();

			if (this.active == true) {
				if ($(elementId).hasClassName('spd')) {
					this.vote("spd");
				} else if ($(elementId).hasClassName('union')) {
					this.vote("union");
				} else if ($(elementId).hasClassName('fdp')) {
					this.vote("fdp");
				} else if ($(elementId).hasClassName('gruene')) {
					this.vote("gruene");
				} else if ($(elementId).hasClassName('linke')) {
					this.vote("linke");
				} else if ($(elementId).hasClassName('andere')) {
					this.vote("andere");
				}

				if (elementId.search('weiter') != -1) {
					this.loadContent();
				}
				if (elementId.search('reset') != -1) {
					this.param.set('aj', true);
					this.param.set('pwd', "910069bf56abfa978b8c7fd0bdb44d09");
					new Ajax.Request('reset.php',{
						method: 'post',
						parameters: this.getParameters(),
						onComplete: function (transport) {
							json = transport.responseText.evalJSON();
							this.jsonSwitch(json);
							this.load();
						}.bind(this)
					});
				}
			} else {
				var elt = $(Event.element(e)).up('div#vote');
				if (elt != null) {
					Effect.Fade($('content'),{duration:0.2});
					this.active = true;
				}
			}

		}
		// allgemeiner Observer
		function over(e) {

			var elementObj = Event.element(e);
			var element = elementObj.tagName.toLowerCase();
			var elementId = elementObj.id.toLowerCase();
			var parent = elementObj.parentNode.nodeName.toLowerCase();
			var parentId = elementObj.parentNode.id.toLowerCase();
			if (this.active == true) {
				if (elementId.search('bubble_') != -1) {
					key = elementId.sub('bubble_','');

					if ($('bubble_'+key).visible() == false) {
						$$('.bubble').each(function(element){
							if (element.visible()==true) {
								Effect.Fade(element, {duration:0.3});
							}
						});
						Effect.Appear($('bubble_'+key), {duration:0.3});
					}
				}
				else if (elementId.search('container_') != -1) {
					key = elementId.sub('container_','');

					offset = $(elementId).positionedOffset();
					dimension = $(elementId);
					dimensionImg = $('bubble_'+key);

					var left = offset[0]+(dimension.getWidth()/2) -(dimensionImg.getWidth()/2);
					var top = ((dimension.getHeight()/2)-(dimensionImg.getHeight()/2))+120;
				/*	if (left < 0) {
						left = $("ichwaehle").getWidth()-(dimensionImg.getWidth()/2)-20;
					}*/

					$('bubble_'+key).setStyle({left:left+"px"});
					if ($('bubble_'+key).visible() == false) {
						$$('.bubble').each(function(element){
							if (element.visible()==true) {
								Effect.Fade(element, {duration:0.3});
							}
						});
						Effect.Appear($('bubble_'+key), {duration:0.3});
					}
				}
				else if (elementId.search('ichwaehle') != -1) {
					key = 5;

					offset = $("container_"+key).positionedOffset();
					dimension = $("container_"+key);
					dimensionImg = $('bubble_'+key);

					var left = $("ichwaehle").getWidth()-(dimension.getWidth()/2) -(dimensionImg.getWidth()/2);
					var top = ((dimension.getHeight()/2)-(dimensionImg.getHeight()/2))+120;

					if (left < 0) {
						left = $("ichwaehle").getWidth()-(dimensionImg.getWidth()/2)-20;
					}
					$('bubble_'+key).setStyle({left:left+"px"});
					if ($('bubble_'+key).visible() == false) {
						$$('.bubble').each(function(element){
							if (element.visible()==true) {
								Effect.Fade(element, {duration:0.3});
							}
						});
						Effect.Appear($('bubble_'+key), {duration:0.3});

					}
				}
			}
		}
		new Event.observe(document.body, 'click', handle.bindAsEventListener(this));
		new Event.observe(document.body, 'mouseover', over.bindAsEventListener(this));

	},

	animate: function () {
		var lastVote = 0;
		var ex = 0;
		var keys = this.partei.keys();
		keys.each(function(key) {
			key = parseInt(key)+"";
			if (key.search("NaN") != -1) {
			} else {
				key = parseInt(key);
				var partei = this.partei.get(key);
				//alert(partei.handle);
				var container = "container_"+key;
				var elementObj = $(container);
				//alert(container);
				var handle = partei.handle;
				var part = partei.part;
				var name = partei.name;
				var color = partei.color;

				if (partei.part == null) {
					var vote = parseFloat(partei.vote);
				}
				else {
					var vote = parseFloat(partei.part);
				}

				if (key > 0) {
					ex += $("container_"+(key-1)).getWidth();
					this.lastOffset = $("container_"+(key-1)).getDimensions();
				} else {
					this.lastOffset = $("container_"+(key)).getDimensions();
				}
				//lastVote = ($("ichwaehle").getWidth()/$("container_"+key).getWidth());

				if (this.voted==true && this.start == false) {
					var time = ((Math.abs(0.05*(vote-lastVote))>1)?Math.abs(0.05*(vote-lastVote)):1);
				} else {
					var time = 0;
				} if (this.voted==true) {
					Effect.Appear($("weiter"), {duration:0.3});
					Effect.Fade($("schatten"), {duration:0.3});
				}

				className = elementObj.classNames();
				if (Object.isArray(className) == true) {
					className.each(function (className) {
						elementObj.removeClassName(className);
					});
				} else {
					elementObj.removeClassName(className);
				}
				elementObj.addClassName(handle);

				new Effect.Morph(elementObj, {
					style: "background-color:"+color+";width: "+vote+"%;",
					duration: time,
					transition: Effect.Transitions.sinoidal,
					beforeStart: function (){
						Effect.Fade($('bubble_'+key), {duration:0.0});
					}.bind(key),
					afterFinish: function (){
					}.bind(key)
				});

				if (this.voted==true) {
					$("bubble_"+key).src = "result.php?item="+handle;
					$("bubble_"+key).alt = part+"%";
				} else {
					$("bubble_"+key).src = "layout/img/"+handle+".png";
					$("bubble_"+key).alt = name;
				}
			}
		}.bind(this));

		this.start = false;
	},

	jsonSwitch: function(json) {
		var keys = Object.keys(json);

		if (keys.indexOf("voted") != -1) {
			// Bereich ist klickbar
			this.voted = json.voted;
		}
		if (keys.indexOf("value") != -1) {
			this.partei = $H(json.value);
			this.animate();
		}
		if (keys.indexOf("sid") != -1) {
			this.sid = json.sid;
		}

	}
});
String.prototype.entitiesDecode = function () { return this.sub('&amp;',"&").sub('&lt;',"<").sub('&gt;',">").sub('&auml;','ä').sub('&ouml;','ö').sub('&uuml;','ü').sub('&szlig;','ß').sub('&Auml;','Ä').sub('&Ouml;','Ö').sub('&Uuml;','Ü'); };


function showVote(element,time,stop) {
	if (time > stop+100) {
		clearTimeout();
	}
	time += 10;

	value = Math.round(100/(Math.ceil($("ichwaehle").getWidth()/$(element).getWidth())));

	/*$(element).down("span.value").update(value+"%");*/
	window.setTimeout("function(element,time,stop){showVote(element,time,stop);};", 10);
}