var initSite = function (o)
{
	YAHOO.util.Event.on("logo", "click", function ()
	{
		window.location.href = root_url;
	});	
	YAHOO.util.Dom.setStyle("logo", "display", "absolute");
	YAHOO.util.Dom.setXY("logo", YAHOO.util.Dom.getXY("logo"));
};

var closebtn;

function createBubble(contentHtml, with_closebtn, arrow_pos)
{
	if (typeof arrow_pos == "undefined")
		arrow_pos = "top";
	
	var rand = Math.floor(Math.random()*11);
	
	var bubble = document.createElement("div");

	bubble.id = "bubble" + rand;
	bubble.className = "bubble";
	YAHOO.util.Dom.setStyle(bubble, "display", "none");
	YAHOO.util.Dom.setStyle(bubble, "visibility", "hidden");
	document.body.appendChild(bubble);
	
	var arrow = document.createElement("div");
	
	switch(arrow_pos)
	{
		case "top":
			arrow.className = "arrow_top";
			bubble.appendChild(arrow);
		break;
		default:
			arrow.className = "arrow_bottom";
	}
	
	var content = document.createElement("div");
	content.className = "content";
	bubble.appendChild(content);
	
	if (with_closebtn)
	{
		closebtn = document.createElement("div");
		closebtn.className = "close_btn";
		closebtn.id = "close_btn_" + rand; 
		content.appendChild(closebtn);
		closebtn.innerHTML = "x";
		YAHOO.util.Event.on(closebtn, "click", function(e){ close_bubble(bubble); });
	}
	content.innerHTML += contentHtml;
	
	if (arrow_pos == "bottom")
	{
		bubble.appendChild(arrow);
	}
	
	return bubble;
}

function repositionBubble(bubble, x, y)
{
	bubble.style.top = (y+7) + "px";
	bubble.style.left = (x-20) + "px";
}

function showBubble(bubble)
{
	anim_show(bubble, 1);
}

function close_bubble(bubble)
{
	anim_hide(bubble, 1);
}

function url_friendly(string) {
	return string.toLowerCase()
		.replace(/^\s+|\s+$/g, "")
		.replace(/[_|\s]+/g, "-")
		.replace(/[^a-z0-9-]+/g, "")
		.replace(/[-]+/g, "-")
		.replace(/^-+|-+$/g, "");
}

function anim_show(element, speed) {
	if (typeof speed == "undefined")
		speed = 2;
	YAHOO.util.Dom.setStyle(element, "opacity", "0");
	YAHOO.util.Dom.setStyle(element, "visibility", "visible");
	YAHOO.util.Dom.setStyle(element, "display", "block");
	YAHOO.util.Dom.setStyle(element, "height", "auto");
	
	new YAHOO.util.Motion(element, {
		"opacity": {
			from: 0,
			to: 1
		}
	}, speed, YAHOO.util.Easing.easeOutStrong).animate();
}

function anim_hide(element, speed) {
	if (element == null)
		return;
	if (typeof speed == "undefined")
		speed = 2;
	var anim = new YAHOO.util.Motion(element, {
		"opacity": {
			to: 0
		},
		"height": {
			to: 0,
			unit: "px"
		}
	}, speed, YAHOO.util.Easing.easeOut);
	
	
	anim.onComplete.subscribe(function(s, o)
	{
		YAHOO.util.Dom.setStyle(element, "display", "none");
	});
	
	anim.animate();
	
}

var loader = new YAHOO.util.YUILoader({ 
	require: ["dom", "animation", "event"], 
	loadOptional: true,
	onSuccess: initSite
}).insert();

var show_left_input = function(e)
{
	YAHOO.util.Dom.setStyle("plus_left", "visibility", "hidden");
	YAHOO.util.Dom.setStyle("input_left", "visibility", "visible");
	
	new YAHOO.util.Motion("input_left", {
		"points": {
			by: [-40,0],
			unit: "px"
		},
		"opacity": {
			from: 0,
			to: 1
		}
	}, 1, YAHOO.util.Easing.easeOutStrong).animate();
};

var show_right_input = function(e)
{
	YAHOO.util.Dom.setStyle("plus_right", "visibility", "hidden");
	YAHOO.util.Dom.setStyle("input_right", "visibility", "visible");

	var move_logo = new YAHOO.util.Anim("logo", {
		"margin-left": { to: 235 },
		"width": {to: 285, unit: "px" }
	}, 1, YAHOO.util.Easing.easeOutStrong).animate();
	
	YAHOO.util.Dom.setStyle("big_logo", "float", "left");
	var fadeout_big = new YAHOO.util.Anim("big_logo", {
		"opacity": {
		from: 1,
		to: 0
	}
	}, 1, YAHOO.util.Easing.easeOut);
	
	fadeout_big.onComplete.subscribe(function(s, o)
	{
		YAHOO.util.Dom.setStyle("big_logo", "display", "none");
	});
	
	fadeout_big.animate();
	
	YAHOO.util.Dom.setStyle("small_logo", "display", "block");
	
	new YAHOO.util.Anim("small_logo", {
		"opacity": { to: 1 }
	}, 1, YAHOO.util.Easing.easeOut).animate();
	
	new YAHOO.util.Motion("input_left",
	{
		"points": {
			by: [75,0]
		}
	},1, YAHOO.util.Easing.easeOutStrong).animate();

	new YAHOO.util.Motion("input_right",
	{
		"points": {
			by: [80, 0]
		},
		"opacity": {
			from: 0,
			to: 1
		}
	}, 1, YAHOO.util.Easing.easeOutStrong).animate();
};

var radioButtonGroups = [];

function createRadioButtons(id_list)
{
	var rand = Math.floor(Math.random()*11);

	var group = radioButtonGroups[rand] = id_list;

	for (var i=0;i<id_list.length;i++)
	{
		YAHOO.util.Event.on(id_list[i], "click", checkRadioButton, group);
	}
	
	return group;
}

function createRadioButtonsByClassMembers(classname)
{
	var elements = document.getElementsByClassName(classname);
	var list = [];
	for(var i = 0; i<elements.length;i++)
	{
		list[i] = elements[i].id;
	}
	return createRadioButtons(list);
}

function checkRadioButton(e, id_list)
{
	for (var i=0;i<id_list.length;i++)
	{
		YAHOO.util.Dom.removeClass(id_list[i], "checked");
	}
	
	if (e.currentTarget.id == null)
	{
		alert("Your browser doesnt support this action.");
	}
	else
	{
		YAHOO.util.Dom.addClass(e.currentTarget.id, "checked"); // @todo "e.currentTarget.id ist null oder kein objekt"
	}
}

function checkOption(e, options)
{
	var group = options["group"];
	for (var i=0;i<group.length;i++)
	{
		YAHOO.util.Dom.removeClass(group[i], "checked");
		YAHOO.util.Dom.removeClass(document.getElementById(group[i]).parentNode.id, "with_bg");
	}
	
	YAHOO.util.Dom.addClass(options["checkbox"], "checked");
	YAHOO.util.Dom.addClass(e.currentTarget.id, "with_bg");
}

function getCheckGroupValue(group)
{
	for (var i=0;i<group.length;i++)
	{
		if (YAHOO.util.Dom.hasClass(group[i], 'checked'))
			return i;
	}
	return -1;
}

var clickStar = function (e, rating_bar_id)
{
	var bar = document.getElementById(rating_bar_id);
	
	if (bar && bar.hasChildNodes())
	{
		var add = true;
		for (var i=0;i<bar.childNodes.length;i++)
		{
			if (add == true)
			{
				YAHOO.util.Dom.addClass(bar.childNodes[i].id, "voted");
				YAHOO.util.Dom.removeClass(bar.childNodes[i].id, "greystar");
			}
			else 
			{
				YAHOO.util.Dom.removeClass(bar.childNodes[i].id, "voted");
				YAHOO.util.Dom.addClass(bar.childNodes[i].id, "greystar");
			}
			if (bar.childNodes[i].id == e.currentTarget.id)
			{
				add = false;
			}
		}
	}
};

function setup_star_rating(rating_bar_id)
{
	var bar = document.getElementById(rating_bar_id);
	if (bar && bar.hasChildNodes())
	{
		for (var i=0;i<bar.childNodes.length;i++)
		{
			bar.childNodes[i].id = rating_bar_id + '_' + i;
			YAHOO.util.Event.on(
				rating_bar_id + '_' + i, 
				"click", 
				clickStar, 
				rating_bar_id);
			/*YAHOO.util.Event.on(
				rating_bar_id + '_' + i, 
				"mouseover", 
				clickStar, 
				rating_bar_id);*/
		}
	}
}

function setup_star_readonly_rating(rating_bar_id)
{
	var bar = document.getElementById(rating_bar_id);
	if (bar.hasChildNodes())
	{
		for (var i=0;i<bar.childNodes.length;i++)
		{
			bar.childNodes[i].id = rating_bar_id + '_' + i;
		}
	}
}

function get_star_rating_value(rating_bar_id)
{
	var bar = document.getElementById(rating_bar_id);
	var value = -1;
	
	if (bar && bar.hasChildNodes())
	{
		for (var i=0;i<bar.childNodes.length;i++)
		{
			if (YAHOO.util.Dom.hasClass(bar.childNodes[i].id, "greystar"))
			{
				return value;
			}
			value = i/2;
		}
	}
	return value;	
}

function set_star_rating_value(rating_bar_id, value)
{
	var bar = document.getElementById(rating_bar_id);
	
	if (bar && bar.hasChildNodes())
	{
		for (var i=0;i<=value*2 && i<bar.childNodes.length;i++)
		{
			YAHOO.util.Dom.removeClass(bar.childNodes[i].id, "greystar");
			YAHOO.util.Dom.addClass(bar.childNodes[i].id, "voted");
		}
	}
}

