/* mha_functions.js
 * Global javascript functions
 * Copyright (c) 2002 Martin Hintzmann Andersen (martin@hintzmann.dk)
*/
/////////////////
// Namespacing //
/////////////////
if (!dk) {
  var dk = {} ;
  dk.hintzmann = {} ;
  dk.hintzmann.functions = {};
} else if (!dk.hintzmann) {
  dk.hintzmann = {};
  dk.hintzmann.functions = {};
} else {
  dk.hintzmann.functions = {};
}
var mha = dk.hintzmann.functions;

/////////////////////
// Element-handler //
/////////////////////
mha.getElById = function(elID) {
  var el = null;
	if (document.getElementById) { el = document.getElementById(elID); }
	else if (document.all) { el = document.all[elID]; }
	else if (docuemnt.layers) { alert('Not supported yet!'); }
	return el;
}
mha.getElByTagName = function (tagName) { /* !!! not finish !!! */
  var eleArray;
	if (document.getElementsByTagName) eleArray = document.getElementsByTagName(tagName);
	else if (document.all) eleArray = document.all.tags(tagName);
	else if (docuemnt.layers) { alert('Not supported yet!'); }
/*
  if (is.opera) eleArray = document.body.getElementsByTagName(tagName);
  else if (is.ie4) eleArray = document.all.tags(tagName);
  else if (is.ie5up || is.gecko || is.nav5up) eleArray = document.getElementsByTagName(tagName);
  
*/ 
  return eleArray;
}	
//////////////////////////////////
// Get Elements With Class Name //
//////////////////////////////////
mha.getElementsWithClassName = function (el,className) {
	var nodeList;
	var searchObj = new Array();
	nodeList = el.all || el.getElementsByTagName("*");
		for (var i = 0, c = null, cn; (document.all ? c = nodeList(i) : c = nodeList.item(i)); i++) {
//		if (c.nodeType == 1) { // if (c==tag) not supported by opera (speed up)
				cn = c.className.split(" ");
				for (j = 0; j < cn.length; j++) {
					if (cn[j]==className) {
						searchObj[searchObj.length] = c;
					}
				}
//		}
		}
  return searchObj;
}
///////////////////
// Event-handler //
///////////////////
mha.addEvent = function (oEl, sEvent, sFunction, useCapture) {	
	if (oEl) {
		if (window.addEventListener) { // MOZ
			oEl.addEventListener(sEvent,sFunction,useCapture);
			return true;
		} else if (window.attachEvent) { // IE5
			var r = oEl.attachEvent("on"+sEvent,sFunction);
			return r;
		} else if (document.all) { // IE4
			eval('oEl.on'+sEvent+'='+sFunction+';');
		} else {
		  alert("Handler could not be attached");
		}
	}
}
mha.removeEvent = function (oEl, sEvent, sFunction, useCapture){
  if (oEl.removeEventListener){
    oEl.removeEventListener(sEvent, sFunction, useCapture);
    return true;
  } else if (oEl.detachEvent){
    var r = oEl.detachEvent("on"+sEvent, sFunction);
    return r;
  } else {
    alert("Handler could not be removed");
  }
} 

//////////////////
// querystrings //
//////////////////
/* array mf.getQueryArgs([boolean global]) 
 * args mf.getQueryArgs(true)
 * http//yourdomain.com/book.cgi?chapter=10&page=33
 * var current_chapter = args["chapter"];
 * var current_page = args["page"];
*/
mha.getQueryArgs = function(global) {
  var args = {};
  var loc = window.location.href;
  var q = loc.indexOf("?");
  if (q==-1) return false;
  loc = loc.substring(q+1);
  var pairs = loc.split("&");
  for (var i=0; i<pairs.length;i++){
    if (global) eval(pairs[i]);
    var keyval = pairs[i].split("=");
    args[keyval[0]] = unescape(keyval[1]);
  }
  return args;
}
//////////////////////////////
// link to javascript-files //
//////////////////////////////
mha.link2JS = function(uri) { 
	if (document.createElement && document.getElementsByTagName) { // Checks for DOM1 support
		var oScript = document.createElement('script'); // Create a new script
		oScript.setAttribute('type','text/javascript'); 
		oScript.setAttribute('src',uri); 
		var oHead = document.getElementsByTagName('head').item(0); 
		oHead.appendChild(oScript); // Append script to current site
	}
} 
//////////////////////
// Link to CSS-file //
//////////////////////
mha.link2CSS = function(uri) { 
	if (document.createElement && document.getElementsByTagName) { // Checks for DOM1 support
		var oLink = document.createElement('link'); // Create a new script
		oLink.setAttribute('rel','stylesheet'); 
		oLink.setAttribute('type','text/css'); 
		oLink.setAttribute('href',uri); 
		var oHead = document.getElementsByTagName('head').item(0); 
		oHead.appendChild(oLink); // Append script to current site
	}
} 
/////////////
// Cookies //
/////////////
mha.saveCookie = function(name,value,days) {
  if (days) {
    var d = new Date();
    d.setTime(d.getTime()+(days*24*60*60*1000));
    var ex = "; expires="+d.toGMTString();
  } else {
    var ex = "";
  }
  document.cookie = name+"="+value+ex+"; path=/";
}
mha.readCookie = function(name) {
  var eq = 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(eq) == 0) return c.substring(eq.length,c.length);
  }
  return null;
}
mha.eraseCookie = function (name) {
  mha.saveCookie(name,"",-1);
}

/////////////
// Windows //
/////////////
mha.winOpen = function(url, width, height, name, returnFunc, args) {
	this.returnedValue = '';
	this.returnFunc = returnFunc;
	this.args = args;
	this.winUrl = url;
	this.winWidth = width;
	this.winHeight = height;
	this.winTop  = Math.round((self.screen.height - this.winHeight) / 2);
	this.winLeft = Math.round((self.screen.width - this.winWidth) / 2);
	if (!name) { this.winName = (new Date()).getSeconds().toString() || name;}
	this.winFeatures = 'width='+this.winWidth+
										 ',height='+this.winHeight+
										 ',top='+this.winTop+
										 ',left='+this.winLeft+
										 ',status=1,menubar=0,toolbar=0,resizable=1';
		
	this.openWin = function(){
		if (!this.win || (this.win && this.win.closed)) {
			this.win = window.open(this.winUrl, this.winName, this.winFeatures);
			this.win.focus();
		} else {
			this.win.focus();
		}
	}
}

//////////////
// precache //
//////////////
mha.precache = function(url) {
		var im = new Image();
		im.src = url;
		return im;
}

String.prototype.endsWith = function() {
var bOk = false
for (var i = 0; i < arguments.length; i++) {
if (this.indexOf(arguments[i]) == this.length - arguments[i].length) {
bOk = true
break
}
}
return bOk
}

