/*
	GSK DTC CMS 
	Toolbox - misc useful functions
	Author: emakina\fde
*/

/* dom utility */

// getElement(s)ById()
function $() {
	var elements = new Array();
	
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		
		if (arguments.length == 1)
			return element;
	
		elements.push(element);
	}
	
	return elements;
}

var dom = {
	// nodetypes
	ELEMENT_NODE:1,	ATTRIBUTE_NODE:2, TEXT_NODE:3,
	
	// unobstrusive addEvent
	addEvent: function(obj, evType, fn){
		if (obj.addEventListener){
			obj.addEventListener(evType, fn, false/*use bubbling*/);
			return true;
		} else if (obj.attachEvent){
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} else {
			return false;
		}
	},
	
	getElementsByClassName: function (oElm, strTagName, strClassName){
	    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];      
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	},
	
	// returns parent html element of given tag, or null if not found
	getParent: function(el, sTagName)
	{
		if (el == null) {
			return null;
		}
		// gecko bug, supposed to be uppercase
		else if (el.nodeType == dom.ELEMENT_NODE && el.tagName.toLowerCase()==sTagName)
		{
			return el;
		}else{
			return dom.getParent(el.parentNode, sTagName);
		}
	}
}


/* testing */

var GSK_CONSOLE_ENABLED = true;
var GSK_CONSOLE_ID = 'DBGConsole_DEBUG';

function DBGConsole() {	this.debugCounter = 0; }
DBGConsole.prototype.log = function(message)
{
	if (!GSK_CONSOLE_ENABLED) return;
    this.debugCounter++;

	var found = !!document.getElementById(GSK_CONSOLE_ID);
	if (!found) {
		// create the debugging div
		d = document.createElement('div');
		d.id = GSK_CONSOLE_ID;
		d.style.border = '2px solid #dc0000';
		d.style.background = '#fff5f5';
		d.style.padding = '5px';
		d.style.font = 'bold 10px Verdana;';
		d.style.textAlign = 'left';
		d.style.color = '#000';
		d.style.font = '12px Courier New, monospace;';
	}
	var t = document.createTextNode(''+this.debugCounter + ': ' + message);
    var br = document.createElement('br');
	d.appendChild(t);
    d.appendChild(br);
	if (!found) {
		document.getElementsByTagName('body')[0].appendChild(d);
	}
}

/* cookies */

var cookies = {
	
	create: function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else {
			expires = "";
		}
		document.cookie = name+"="+value+expires+"; path=/";
	},

	read: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') {
				c = c.substring(1,c.length);
			}
			if (c.indexOf(nameEQ) == 0) {
				return c.substring(nameEQ.length,c.length);
			}
		}
		return null;
	}
}


/* font resizing */

var fontSize = {
	
	currentsize:11, minsizepx:8, maxsizepx:15,
	
	getDefaultSize: function() { return 11; },
	
	setActiveSize: function(n) {
		if (!document.getElementsByTagName) return;
		var b = document.getElementsByTagName('body')[0];
		b.style.fontSize = n+'px';
	},
	
	changeSize: function (n){
		this.currentsize = this.currentsize + n;
		if(this.currentsize>this.maxsizepx){this.currentsize=this.maxsizepx;}else if(this.currentsize<this.minsizepx){this.currentsize=this.minsizepx;}
		this.setActiveSize(this.currentsize);
		this.saveSize();
	},
	
	loadSize: function() {
		var cookie = cookies.read("fontsize");
		this.currentsize = cookie ? parseInt(cookie) : this.getDefaultSize();
		if (this.currentsize == 'null')
			this.currentsize = this.getDefaultSize();
		if (this.currentsize != this.getDefaultSize())
			this.setActiveSize(this.currentsize);
	},
	
	saveSize: function() {
		cookies.create("fontsize", this.currentsize, 30);
	}
}

// If FireBug's console is present, but we want to turn it off, overwrite it with our own
// In IE, always create it (so the console calls do not generate errors)
// Test for some methods to detect a non-FireBug "console" object that we should replace (Apple Safari)
if (!console || (!GSK_CONSOLE_ENABLED && console.log && console.assert) ) {
	var console = new DBGConsole();
}

/*
function gskPageInit() {
	fontSize.loadSize();
}
dom.addEvent(window, 'load', gskPageInit);
*/






function openFooter( page ){
	var footerPath = "http://www.rokote.fi/";
	window.open( footerPath + page + ".html" , "disease", "scrollbars=yes,resizable=yes,width=402,height=460" );
}


// This function gets the last document modification date and prints it out using the output format given as a parameter.
// NOTE: The document.lastModified property relys on file timestamps on the server. This means you should take care of the
// necessary time zone shifts by editing the localized outputs.
function getLocalModDate(locale){
	if(document.lastModified && document.lastModified != "undefined"){
		var wholeDateAsString = document.lastModified;
		var wholeDateArray = wholeDateAsString.split(" ");
		var dateParts = wholeDateArray[0].split("/");
		var timeParts = wholeDateArray[1].split(":");
		
		var retval = "";
		
		
		
		// Locale switch
		switch(locale){
			
			default:
				// var formattedDate = dateParts[1] + "." + dateParts[0] + "." + dateParts[2] + " klo" + timeParts[0] + "." + timeParts[1];
				var formattedDate = dateParts[1] + "." + dateParts[0] + "." + dateParts[2]; // Changed 17.1.2006
				retval = "Päivitetty " + formattedDate;
				break;
		}
		
		
		
		return retval;
	}
	else{
		return "";
	}
}



// This function fixes the differences in date.getYear() between IE and other browsers
function getFixedYear(paramDate){
	if(!paramDate || paramDate == "undefined")
		paramDate = new Date();
	var retval = paramDate.getYear();
	if(paramDate.getYear() < 1900){
		retval = paramDate.getYear() + 1900;
	}
	
	return retval;
}