// $Id: common.js,v 1.9 2007/11/12 15:47:21 kralja Exp $
// requires: yui.connect, yui.dom

Gui = {
	// select tab 
	selectTab: function(obj) {
		var tabsObj, tabs;
		
		// get tabs container
		tabsObj = obj;
		while (tabsObj && tabsObj.nodeName.toLowerCase()!='ul' && tabsObj.nodeName.toLowerCase()!='ol')
			tabsObj = tabsObj.parentNode;
		
		// reset selected tab
		tabs = tabsObj.getElementsByTagName('li');
		for (i=0; i<tabs.length; i++) {
			YAHOO.util.Dom.removeClass(tabs[i], 'active');
			YAHOO.util.Dom.removeClass(tabs[i], 'loading');
		}
		
		while (obj && obj.nodeName.toLowerCase()!='li')
			obj = obj.parentNode;
		YAHOO.util.Dom.addClass(obj, 'active');
		YAHOO.util.Dom.addClass(obj, 'loading');

	},
	
	changeSection: function(obj, containerId) {
		if (obj==null)
			return false;
		var i, list, links, divs;
		var id = obj.href.substr(obj.href.indexOf('#')+1);
		var container = (containerId) ? document.getElementById(containerId) : document.body;
		
		// reset shown section		
		divs = container.getElementsByTagName('div');
		for (i=0; i<divs.length; i++) {
			YAHOO.util.Dom.removeClass(divs[i], 'active');
		}

		// reset tabs
		list = obj.parentNode;
		while(list && list.nodeName.toLowerCase()!='ul')
			list = list.parentNode;

		links = list.getElementsByTagName('li');
		for (i=0; i<links.length; i++) {
			YAHOO.util.Dom.removeClass(links[i], 'active');
		}

		// set active link and section
		activeLink = obj.parentNode;
		while(activeLink && activeLink.nodeName.toLowerCase()!='li')
			activeLink = list.parentNode;

		YAHOO.util.Dom.addClass(activeLink, 'active');
		YAHOO.util.Dom.addClass(document.getElementById(id), 'active');		
	},
	
	changeTooltip: function(obj, containerId, elType) {
		if (!elType || elType==null)
			elType = 'img';
		
		if (obj!=null) {
			var tabImg = obj.getElementsByTagName(elType)[0];
			var tooltip = tabImg.title;
		}
		else 
			var tooltip = '&nbsp;';

		var container = document.getElementById(containerId);
		container.innerHTML = tooltip;
	},
	
	// IE nav hover support
	applyIEHover: function(id) {
		if (document.getElementById(id))
	   		var lievi = document.getElementById(id).getElementsByTagName("li");
		else
			return false;
				
		for (i=0; i<lievi.length; i++) {
			if (lievi[i].className.indexOf('parent')!=-1) {
				lievi[i].onmouseover=function() {
					YAHOO.util.Dom.addClass(this, 'iehover');
				}
				lievi[i].onmouseout=function() {
					YAHOO.util.Dom.removeClass(this, 'iehover');
				}
			}
		}
	}
}

Utils = {
	getTimeStamp: function() {
		var now = new Date();
		return now.getHours()+''+now.getMinutes()+''+now.getSeconds()+''+now.getMilliseconds();
	},
	
	openGallery: function(obj, width, height) {
		if (obj!=null) {
			var uri = obj.href;
			
			if (!width || width==null)
				width = '370';
			if (!height || height==null)
				height = '450';	
				
			var params = 'width='+width+'px, height='+height+'px, resizable=1 ,scrollbars=yes';

			window.open(uri, 'gallery', params);
		}
	},
	
	goToPage: function(uri) {
		if (uri!=null && uri.value!='') {
			window.location.href = uri;
		}
	},
	
	toggleDisplay: function(id) {
		obj = document.getElementById(id);
		if (obj!=null) {
			if (YAHOO.util.Dom.hasClass(obj, 'hidden'))
				YAHOO.util.Dom.removeClass(obj, 'hidden');
			else
				YAHOO.util.Dom.addClass(obj, 'hidden');
		}
	},
	
	// read cookie value
	readCookie: function(name) {
		var cookies = document.cookie.split(';');
		for(var i in cookies) {
			var c = cookies[i];
			while (c.charAt(0)==' ') 
				c = c.substring(1, c.length);
			if (c.indexOf(name+'=') == 0) 
				return c.substring(name.length+1, c.length);
		}
		return null;
	},
	
	// decode and read cookie
	readDecodedCookie: function(name, src) {
		var dumpbyte=32; var hibyte=16; var databytes=15;
		var P=-1; var Q=-1; var c=0;
		var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-";
		var decoded = '';
		var encoded = this.readCookie(src);
		
		if (encoded==null)
			return false;
		
		for(i=0; i<encoded.length; i++){
			var token = encoded.charAt(i);
	
			c = chars.indexOf(token);
			if ((c & hibyte)==hibyte)
				P = c & databytes ;
			else
				Q = c & databytes;
			
			if ((c & dumpbyte)==dumpbyte)
				decoded += String.fromCharCode( (P<<4) + Q);
		}
		
		if (decoded.indexOf(name)>-1) {
			var cookie = decoded.substring(decoded.indexOf(name)+name.length);
			cookie = cookie.substring(cookie.indexOf('=')+1, cookie.indexOf('\n'));
			while (cookie.charAt(0)==' ') 
					cookie = cookie.substring(1, cookie.length);
		
			return cookie;
		}
		
		return false;
	},
	
	// generic async request
	fetchPage: function(uri, container, loader, method) {
		var page;
		if (uri.search(/\/async/)<0)
			uri = uri.replace(/(http:\/\/[\w\.]{2,}[:\d]{0,})/g, "$1/async");

		if (uri.search(/\?/)>=0)
			uri += '&ts='+this.getTimeStamp();
		else
			uri += '?ts='+this.getTimeStamp();

		var requestCallback = {  	
			success: Utils.showPage,
			failure: Utils.fetchFailure,
			scope: Utils,
			argument: [container, loader, method]
		};
		
		page = $C.asyncRequest('GET', uri, requestCallback);
	},

	// generic async success callback
	showPage: function(o) {
		var container = o.argument[0];
		var loader = o.argument[1];
		var onload = o.argument[2];

		container.innerHTML = o.responseText;
		if (loader!=null)
			YAHOO.util.Dom.removeClass(loader, 'loading');
		if (onload!=null)
			onload();
	},	
	
	// generic async failure callback
	fetchFailure: function() {
		// the "silent dead" type
	}
}

// getElementsByAttribute; original script by Dustin Diaz (www.dustindiaz.com)
YAHOO.util.Dom.getElementsByAttribute = function(values, tag, root) {
	var method = function(el) {
		var match = false;
		
		for (atr in values) {
			var re = new RegExp('(?:^|\\s+)' + values[atr] + '(?:\\s+|$)');
			if ( el.getAttribute(atr) && re.test(el.getAttribute(atr)) ) {
				match = true;
			}
		}
		return match;
	};
	
	return this.getElementsBy(method, tag, root);
};