/********** Get params *********/
// Get params
var getParams = function(object) {
	if(!object.params){
		object.params = new Object();
		object.params.length = 0;
	}
	var cssclass = object.className.split(" ");
	// Create object entries
	for (var i = 0; i < cssclass.length; i++) {
		if (cssclass[i].indexOf(":") != -1) {
			// Store params
			var key = cssclass[i].split(":")[0];
			var value = cssclass[i].split(":")[1];
			object.params[key] = value;
			// Has at least one param stored
			object.params.length++;
			// Remove class
			$(object).removeClassName(cssclass[i]);
			if(object.className.length == 0){
				object.removeAttribute("class");
			}
		}
	}
	return object.params;
}
// Add params
var addParam = function(key,value,object){
	if(!object.params){
		object.params = new Object();
		object.params.length = 0;
	}
	object.params[key] = value;
	object.params.length++;
}

/**********  UL accordion **********/
document.overtimer = null;
$$("ul.accordion").each(function(o,i){
	// Store
	o.uls = o.getElementsByTagName("ul");
	o.active = null;
	
	// Set
	for(var i=0; i<o.uls.length; i++){
		var ul = o.uls[i];
		var span = Element.previous(ul);
		if(!Element.hasClassName(ul.parentNode,"on")){
			Element.hide(ul);
			span.className = "close";
		} else {
			o.active = ul.parentNode;
			span.className = "open";
			ul.parentNode.removeAttribute("class");
			Element.removeClassName(ul.parentNode,"on")
		}
		// Events
		if(Element.hasClassName(o,"mouseover")){
			Event.observe(span,"mouseover",function(){
				clearTimeout(document.overtimer);
				document.overitem = this.parentNode;
				document.overtimer = setTimeout(ulAccordionShow,500);
			});
			Event.observe(span,"mouseout",function(){
				clearTimeout(document.overtimer);
			});
		} else {
			Event.observe(span,"click",function(){
				ulAccordionShow(this.parentNode);
			});
		}
	}
	// Default
	if(!Element.hasClassName(o,"defaultclose")){
		if(!o.active){
			var first = o.uls[0];
			var span = Element.previous(first);
			Element.show(first);
			span.className = "open";
			// Event
			ulAccordionShow(span.parentNode);
		}
	}
});
function ulAccordionShow(o){
	var li = (!o || typeof(o) == "number")? document.overitem : o;
	var parent = li.parentNode;
	
	if(parent.active != li){
		if(parent.active != null){
			var old = $(parent.active).down().next();
			Effect.BlindUp(old,{ duration:0.5 });
			var oldspan = Element.previous(old);
			oldspan.className = "close";
		}
		var next = $(li).down().next();
		Effect.BlindDown(next,{ duration:0.5 });
		var nextspan = Element.previous(next);
		nextspan.className = "open";
		parent.active = li;
	}else{
		var next = $(li).down().next();
		Effect.BlindUp(next,{ duration:0.5 });
		var nextspan = Element.previous(next);
		nextspan.className = "close";
		parent.active = null;
	}
}


/********** uiFieldcleaner **********/
document.fieldtocheck = null;
$$(".fieldcleaner").each(function(o){
	// Style
	Element.addClassName(o,"tobefilled");
	// Default
	document.fieldtocheck = o;
	checkField();
	o.timer = null;
	// Event
	o.label = Element.previous(o);
	o.onfocus = function(){
		clearInterval(this.timer);
		document.fieldtocheck = this;
		this.timer = setInterval(checkField,50);
		Element.addClassName(this.label,"filling");
	}
	o.onblur = function(){
		clearInterval(this.timer);
		document.fieldtocheck = null;
		Element.removeClassName(this.label,"filling");
	}
});
function checkField(){
	var _field = document.fieldtocheck;
	if(_field.value == ""){
		Element.removeClassName(document.fieldtocheck,"filled");
	} else {
		Element.addClassName(document.fieldtocheck,"filled");
	}
}

/********** Opened / Collapsed **********/
document.opened = null;
$$(".opened, .collapsed").each(function(o){
	var player = Element.select(o,".player");
	if(Element.hasClassName(o,"opened") && document.opened == null){
		// Store current
		document.opened = o;
		// Default view
		if(player.length > 0){
			Element.select(o,".media").each(function(m){
				Element.hide(m);
			});
		}
		Element.select(o,".button").each(function(b){
			Element.hide(b);
		});
	} else {
		// Default view
		if(player.length > 0){
			Element.select(o,".player").each(function(p){
				Element.hide(p);
			});
		}
		Element.select(o,".texts").each(function(t){
			Element.hide(t);
		});
	}
	// Events
	Element.select(o,".button a").each(function(l){
		l.removeAttribute("href");
		Element.setStyle(l,{ cursor:"pointer" });
		Event.observe(l,"click",function(){
			openBox(o);
		});
	});
	Element.select(o,".open a").each(function(l){
		l.removeAttribute("href");
		Element.setStyle(l,{ cursor:"pointer" });
		Event.observe(l,"click",function(){
			openBox(o);
		});
	});
	Element.select(o,".close a").each(function(l){
		l.removeAttribute("href");
		Element.setStyle(l,{ cursor:"pointer" });
		Event.observe(l,"click",function(){
			closeBox(o);
			document.opened = null;
		});
	});
});
function openBox(box){
	var current = document.opened;
	if(current != box){
		// Hide
		if(current != null){
			closeBox(current);
		}
		// Show
		Element.addClassName(box,"opened");
		Element.removeClassName(box,"collapsed");
		var player = Element.select(box,".player");
		if(player.length > 0){
			player.each(function(p){
				Element.show(p);
			});
			Element.select(box,".media").each(function(m){
				Element.hide(m);
			});
		}
		Element.select(box,".open").each(function(b){
			Element.hide(b);
		});
		Element.select(box,".close").each(function(b){
			b.style.display = "block";
		});
		Element.select(box,".texts").each(function(t){
			Element.show(t);
		});			
		// Store current
		document.opened = box;
	}
}
function closeBox(box){
	Element.removeClassName(box,"opened");
	Element.addClassName(box,"collapsed");
	var player = Element.select(box,".player");
	if(player.length > 0){
		player.each(function(p){
			Element.hide(p);
		});
		Element.select(box,".media").each(function(m){
			Element.show(m);
		});
	}
	Element.select(box,".button").each(function(b){
		Element.show(b);
	});
	Element.select(box,".texts").each(function(t){
		Element.hide(t);
	});			
}

/********** Calendar **********/
$$(".calendar").each(function(o){
	// Parse
	o.current = null;
	o.events = Element.select(o,".event");
	o.events.each(function(e,i){
		if(Element.hasClassName(e,"on") && o.current == null){
			o.current = i;
		} else {
			Element.hide(e);
		}
	});
	// Default
	if(o.current == null){
		o.current = 0;
		Element.show(o.events[0]);
	}
	// Set tools
	if(o.events.length > 0){
		Event.observe(window,"load",function(){
			Element.insert(o,{top:"<div class=\"tools\"><div class=\"prev\"></div><div class=\"next\"></div></div>"});
			// Events
			Element.select(o,".prev").each(function(p){
				Event.observe(p,"click",function(){
					prevEvent(o);
				});
			});
			Element.select(o,".next").each(function(n){
				Event.observe(n,"click",function(){
					nextEvent(o);
				});
			});
		});
	}
});
function nextEvent(o){
	var next = (o.current+1 < o.events.length)? o.current+1 : 0;
	Element.hide(o.events[o.current]);
	Element.show(o.events[next]);
	o.current = next;
}
function prevEvent(o){
	var next = (o.current-1 >= 0)? o.current-1 : o.events.length-1;
	Element.hide(o.events[o.current]);
	Element.show(o.events[next]);
	o.current = next;
}

/********** Legend / Bio **********/
$$(".legend").each(function(l){
	// Params & setting
	var frames = new Array();
	addParam("parent",l.parentNode,l);
	addParam("current",null,l.parentNode);
	Element.setStyle(l.params.parent,"position:relative");
	addParam("offset",Element.select(Element.up(l,".media"),"img")[0].offsetLeft,l);
	// Store & parse
	Element.select(l,"strong").each(function(s){
		var params = getParams(s);
		// Dedault hidden
		Element.hide(params.id);
		// Create frame
		if(params.x && params.y && params.w && params.h){
			var frame =  document.createElement("div");
			Element.setStyle(frame,{ "position":"absolute", "top":params.y+"px", "left":params.x+"px", "width":params.w+"px", "height":params.h+"px" });
			Element.addClassName(frame,"frame");
			frames.push(frame);
			// Params
			addParam("sync",s,frame);
			addParam("sync",frame,s);
			addParam("parent",l.parentNode,s);
			// Events
			Element.setStyle(s,{"cursor":"pointer"});
			frame.onmouseover = s.onmouseover = function(){
				Element.addClassName(this,"over");
				Element.addClassName(this.params.sync,"over");
			}
			frame.onmouseout = s.onmouseout = function(){
				Element.removeClassName(this,"over");
				Element.removeClassName(this.params.sync,"over");
			}
			frame.onclick = s.onclick = function(){
				var ref = (this.params.id)? this : this.params.sync;
				var current = ref.params.parent.params.current;
				if(current != ref.params.id){
					if(current != null){
						Element.hide(current);
					}
					Element.show(ref.params.id);
					ref.params.parent.params.current = ref.params.id;
				}
			}
		}
	});
	// Onload
	if(frames.length > 0){
		Event.observe(window,"load",function(){
			for(var i=0; i<frames.length; i++){
				Element.insert(l.params.parent,{top:frames[i]});
			}
		});
	}
});

/********** Tabs **********/
$$(".tabbed").each(function(t){
	// Params & setting
	var tabs = new Array();
	addParam("current",null,t);
	// Parse
	var contents = Element.select(t,".tab");
	addParam("contents",contents,t);
	contents.each(function(tt){
		// Store tab button
		var btn = Element.select(tt,".tabbtn")[0];
		addParam("btn",btn,tt);
		addParam("content",tt,btn);
		addParam("parent",t,btn);
		// Is active
		if(Element.hasClassName(tt,"on") && t.params.current == null){
			Element.addClassName(btn,"on");
			t.params.current = btn;
		} else {
			Element.hide(tt);
		}
		// Event 
		btn.onclick = function(){
			var parent = this.params.parent;
			var current = parent.params.current;
			if(this != current){
				// Hide current
				Element.hide(current.params.content);
				Element.removeClassName(current.parentNode,"on");
				// Show new
				Element.show(this.params.content);
				Element.addClassName(this.parentNode,"on");
				// Store current
				parent.params.current = this;
			}
		}
		tabs.push(btn);
	});
	// Default
	if(t.params.current == null){
		var current = t.params.contents[0];
		Element.show(current);
		Element.addClassName(current.params.btn,"on");
		t.params.current = current.params.btn;
	}
	// Onload
	if(tabs.length > 1){
		Event.observe(window,"load",function(){
			// Container
			var tabbtns = document.createElement("div");
			tabbtns.className = "tabbtns";
			var ul = document.createElement("ul");
			tabbtns.appendChild(ul);
			// Tabs
			for(var i=0; i<tabs.length; i++){
				var li = document.createElement("li");
				// Is on
				if(Element.hasClassName(tabs[i],"on")){
					li.className = "on";
					Element.removeClassName(tabs[i],"on");
				}
				li.appendChild(tabs[i]);
				ul.appendChild(li);
			}
			Element.insert(t,{top:tabbtns});
		});
	}
});

/***** Banners *****/
$$(".banners").each(function(b){
	// Params & settings
	var pages = new Array();
	var params = getParams(b);
	var item = Element.select(b,".item");
	addParam("timer",null,b);
	addParam("current",null,b);
	// Style
	Element.setStyle(b,{"position":"relative","overflow":"hidden"});
	// Each
	item.each(function(i){
		// Page
		var span = document.createElement("span");
		addParam("item",i,span);
		addParam("parent",b,span);
		addParam("index",pages.length,span);
		// Is first ?
		if(b.params.current == null){
			span.className = "on";
			b.params.current = span;
			Element.setStyle(i,{"zIndex":"3"});
		}
		// Event
		Event.observe(span,"click",showBanner);
		pages.push(span);
		// Style
		Element.setStyle(i,{"position":"absolute"});
	});
	addParam("pages",pages,b);
	// Events
	b.params.timer = setInterval(function(){
		autoBanner(b);
	},b.params.delay*1000);
	Event.observe(b,"mouseover",function(){
		clearInterval(b.params.timer);
	});
	Event.observe(b,"mouseout",function(){
		clearInterval(b.params.timer);
		b.params.timer = setInterval(function(){
		autoBanner(b);
	},b.params.delay*1000);
	});
	// Onload
	if(pages.length > 1){
		Event.observe(window,"load",function(){
			// Container
			var div = document.createElement("div");
			div.className = "pager";
			// Prev
			var prev = document.createElement("span");
			prev.className = "prev";
			addParam("parent",b,prev);
			div.appendChild(prev);
			// Pages
			for(var i=0; i<pages.length; i++){
				div.appendChild(pages[i]);
			}
			// Next
			var next = document.createElement("span");
			next.className = "next";
			addParam("parent",b,next);
			div.appendChild(next);
			// Events
			Event.observe(prev,"click",switchBanner);
			Event.observe(next,"click",switchBanner);
			// Append
			Element.insert(b,div);
			new Effect.Morph(div, { style: 'bottom:0;', duration: 0.5, fps:18, delay:1 });
		});
	}
});
function showBanner(s){
	var _this = (!s.tagName)? this : s;
	var parent = _this.params.parent;
	var current = parent.params.current;
	if(_this != current){
		var old = current.params.item;
		var next = _this.params.item;
		// Hide current
		Element.setStyle(old, {"zIndex":2 });
		Element.removeClassName(current,"on");
		// Show next
		Element.setStyle(next,{"zIndex":3, "opacity":0 });
		new Effect.Morph(next, { style: "opacity:1;", duration: 0.8, fps:18, afterFinish:function(){
			Element.setStyle(old, {"zIndex":1 });
		}});
		Element.addClassName(_this,"on");
		// Store current
		parent.params.current = _this;
	}
}
function autoBanner(b){
	var current = b.params.current;
	var max = b.params.pages.length-1;
	var to = (current.params.index+1 <= max)? current.params.index+1 : 0;
	showBanner(b.params.pages[to]);
}
function switchBanner(){
	var parent = this.params.parent;
	var current = parent.params.current;
	var max = parent.params.pages.length-1;
	if(this.className == "prev"){
		var to = (current.params.index-1 >= 0)? current.params.index-1 : max;
	} else {
		var to = (current.params.index+1 <= max)? current.params.index+1 : 0;
	}
	showBanner(parent.params.pages[to]);
}

/***** Application *****/
$$(".applications .box").each(function(a){
	Element.hide(a);
});
function applicationZone(zone){
	if(document.opened){
		Element.hide(document.opened);
	}
	var next = $$("#zone"+zone)[0];
	if(next){
		Element.show(next);
		document.opened = next;
	} else {
		document.opened = null;
	}
}
