/* 

ui.js  

*/
var ILMARINEN = {};

function init() {
	roundedCorners('li','highlight');
	roundedCorners('div','highlight');
	textSize();	
	createTableStripes();
	print_window();
	//ILMARINEN.SetEqualHeightColumns.Init({id:'customer_categories', tag:'div', css:'links'});
}

function print_window() {
	var el = document.getElementById('print');
	
	el.onclick = function() {
		window.print();
		return false;
	};
}

function openPopupWindow(url,width,height) {
	var windowSize = 'height=' + height + ',width=' + width;
	var popupWindow = window.open(url,"popup","" + windowSize + "");
	if (window.focus) { popupWindow.focus() }
	return false;
}

function createTableStripes() {	
	var tables = document.getElementsByTagName("table");  

	for(var x=0;x!=tables.length;x++){
		var table = tables[x];
		if (! table) { return; } 

		var tbodies = table.getElementsByTagName("tbody");

		for (var h = 0; h < tbodies.length; h++) {
			var odd = true;
			var trs = tbodies[h].getElementsByTagName("tr");

			for (var i = 0; i < trs.length; i++) {
				/*if (table.className != 'no-hover') {
					trs[i].onmouseover=function(){
						this.className += " ruled"; return false
					}
					trs[i].onmouseout=function(){
						this.className = this.className.replace("ruled", ""); return false
					}
				}*/

				if(odd)
				  trs[i].className += " odd";

				odd = !odd;
			}
		}
	}
}

function textSize() {
	var el = document.getElementById('fontsize-selector');
	if (!el) {
		return;
	}
	
	var elContent = el.innerHTML;
	el.innerHTML = elContent + '<a href="#" id="font_decrease" class="smaller" title="Pienempi kirjaisinkoko">a</a> | <a href="#" id="font_increase" class="bigger" title="Suurempi kirjaisinkoko">A</a>';
	
	var elDecrease = document.getElementById('font_decrease');
	var elIncrease = document.getElementById('font_increase');
	var elBody = document.getElementById('ilmarinen');
	
	// if cookie is set use large font
	if (readCookie('textsize')) {
		setClass(elBody, 'large_font');
	}
	
	elDecrease.onclick = function() {
		// delete cookie
		eraseCookie('textsize');
		removeClass(elBody, 'large_font');
		return false;
	};
	elIncrease.onclick = function() {
		//create cookie
		createCookie('textsize','large');
		setClass(elBody, 'large_font');
		return false;
	};
}

/* Create rounded corners */

function roundedCorners(tagName, cssClass) {

	// Check for DOM complience
	if(!Array.prototype.push || !document.getElementById) {
		return;
	}
	
	// Which tags are generated in the footer and header
	// Generated content gets their CSS classnames according to the container
	var elBodyTag = 'div',
		elFootTag = 'div',
		elFootContentTag = 'span',
		elHeadTag = 'div',
		elHeadContentTag = 'span',
		elClass = 'highlight',
		elBodyClass = elClass+'body',
		elHeadClass = elClass+'head',
		elFootClass = elClass+'foot',
		elContainerTag = '*',
		elements, 
		i, 
		elContent;
	
	// Which tag to look for. If no tagname is provided the script will look for all tags.
	if(tagName != '') {
		elContainerTag = tagName;
	}
	
	// Which CSS class to look for. If no CSS class is provided the script will look for the default CSS class 'highlight';
	if(cssClass != '') {
		elClass = cssClass;
	}
	
	elements = document.getElementsByTagName(elContainerTag);
	
	for (i = 0; i < elements.length; i++) {

		if(hasClass(elements[i], elClass)) {
			
			setClass(elements[i], 'highlightcontainer');
			if(hasClass(elements[i], 'selected')) {
				setClass(elements[i], 'highlight_selected');
			}
			
			// Create new container
			elContent = elements[i].innerHTML;
			elements[i].innerHTML = '<'+elHeadTag+' class="' + elHeadClass + '"><'+elHeadContentTag+'></'+elHeadContentTag+'></'+elHeadTag+'><'+elBodyTag+' class="' + elBodyClass + '">' + elContent + '</'+elBodyTag+'><'+elFootTag+' class="' + elFootClass + '"><'+elFootContentTag+'></'+elFootContentTag+'></'+elFootTag+'>';

		}

	}

}

/*

Function for selected navigation element

*/

function setSelectedNavi(){
	var elem = document.getElementById('header');
	var links = elem.getElementsByTagName('a');
	for (var j=0; j < links.length; j++) {
		if(hasClass(links[j], 'selected')) {
			var parentElem = links[j].parentNode;
			while (parentElem.tagName.toLowerCase() != 'li' || parentElem.nodeType != 1) {
				parentElem = parentElem.parentNode;
			}
			setClass(parentElem, 'selected');
		}
	}		
}

/*

Sets Equal height to columns

Initialize by calling ILMARINEN.SetEqualHeightColumns.Init which accepts a JavaScript object or an array of Javascript objects as a parameter

Objects passed as parameters must contain attributes:
	id: columns element parent id in HTML (str)
	tag: column tagnames (str)
	css: CSS classes (str) from which columns are identified

Example: ILMARINEN.SetEqualHeightColumns.Init({id:'reference', tag:'div', css:'column'});

*/

ILMARINEN.SetEqualHeightColumns = function () {
	
	var ELEMENTS = {},
		BROWSER_LT_IE7 = false,
		MONITOR_FONT_SIZE = true,
		MONITOR_FONT_SIZE_INTERVAL = 500,
		UA = navigator.userAgent,
		DISPLAY_TABLE_SUPPORT = false;
	
	// Returns true if browser is IE and version is < 7
	function ieCheck() {
		
		return (UA.indexOf('MSIE') > -1 && UA.indexOf('Opera') === -1) ? ((parseFloat(navigator.appVersion.split('MSIE')[1]) < 7) ? true : false) : false;
		
	}
	
	// Set height or minHeight. Height if browser < IE 7
	function setHeight(el, h) {
		
		return (BROWSER_LT_IE7) ? el.style.height = h : el.style.minHeight = h;
		
	}
	
	// Set equal height elements according to the highest element
	function setEqualHeight() {

		var	refHeight = 0,
			height, 
			columns, 
			i, j;
		
		for (i in ELEMENTS) {
		
			if (ELEMENTS.hasOwnProperty(i)) {
				
				columns = ELEMENTS[i];
				
				for (j = 0; j < columns.length; j++) {
					
					// Reset height
					setHeight(columns[j], '1%');
					
					// Get element heights
					height = columns[j].clientHeight;
					
					// Get highest element
					if (height > refHeight) {
						refHeight = height;
					}

				}
				
				// set column heights to highest
				for (j = 0; j < columns.length; j++) {
					setHeight(columns[j], refHeight + 'px');
				}
			
			}
		
		}
			
		return null;
		
	}
	
	// Monitor if font size has changed using a refenence element height
	function monitorFontSizeChange() {
		
		var ref = document.getElementById('ref'), 
			refElement = document.createElement('div'),
			refHeight = 0,
			newHeight = 0;

		// Create refernce element if none exists
		if (!ref) {
			refElement.id = 'ref';
			document.getElementsByTagName('body')[0].appendChild(refElement);
		}
		else {
			refElement = ref;
		}
		
		// Get element height
		refHeight = refElement.clientHeight;
		
		// Periodiacally check for reference element size changes
		window.setInterval(function () {
			
			// Check if reference element height has changed
			newHeight = refElement.clientHeight;
			if (newHeight !== refHeight) {
				refHeight = newHeight;
				setEqualHeight();
			}
		
		}, MONITOR_FONT_SIZE_INTERVAL);
		
		return null;
	
	}
			
	// Initialize
	//  @param obj : JavaScript object or an array oy objects 
	//	obj.id	: columns parent element id
	//	obj.tag: column tags inside columns element
	//	obj.css :  CSS classname of the column element
	function init(obj) {
				
		var arr,
			cols_parent,
			cols,
			matches = false,
			css_display_table_support = false,
			i, j;

		// If obj is not an array make one
		if (typeof obj[0] === 'undefined') {
			obj = [obj];
		}
		
		// Browser check
		BROWSER_LT_IE7 = ieCheck();
		
		// Loop through objects
		for (i = 0; i < obj.length; i++) {
			
			// Check if element can be found
			cols_parent = document.getElementById(obj[i].id);
		
			if (!cols_parent) {
				return;
			}
			
			// See if display:table is supported
			if (DISPLAY_TABLE_SUPPORT) {
				try {
					cols_parent.style.display = 'table';
					cols_parent.className += ' table-row';
					css_display_table_support = true;
				}
				catch (e) {}
			}
			
			arr = [];
			cols = cols_parent.getElementsByTagName(obj[i].tag);
			
			// CSS classes must match
			for (j = 0; j < cols.length; j++) {
				if (cols[j].className.match(obj[i].css)) {
					
					if (!css_display_table_support) {
						arr.push(cols[j]); 
					}
					else {	
						cols[j].className += ' table-cell';
					}
					matches = true;
				}			
			}
			
			// No matching elements found
			if (!matches) {
				return;
			}
			
			if (!css_display_table_support) {
			
				// Add to list of elements to be updated
				ELEMENTS[cols_parent.id] = arr;
			
			}
		
		}
		
		// Use display table  instead of JavaScript if user's browser supports it
		if (!css_display_table_support) {
		
			// Set equal height columns
			setEqualHeight();

			// Monitor font size changes if enabled
			if (MONITOR_FONT_SIZE) {
				monitorFontSizeChange();
			}
		
		}
		
		return null;
		
	}
	
	return {
		
		Init: function (obj) {
			return init(obj);
		}
	
	};	

}();

Initializers.add(init);