/*
 * $Id: common.js 49 2009-07-13 07:10:51Z root $ 
 */
function newWindow(mypage,myname,w,h,features) {
	if(screen.width){
		var winl = (screen.width-w)/2;
		var wint = (screen.height-h)/2;
	}
	else{winl = 0;wint =0;}
	if (winl < 0) winl = 0;
	if (wint < 0) wint = 0;
	
	var settings = 'height=' + h + ',';
	settings += 'width=' + w + ',';
	settings += 'top=' + wint + ',';
	settings += 'left=' + winl + ',';
	settings += features;
	win = window.open(mypage,myname,settings);
	win.window.focus();
}function PrezentDomApi() {
    this.version = '0.1';
};

// Static domloader variables
PrezentDomApi.domLoad = [];
PrezentDomApi.domLoaderSet = false;

/**
 * TagEvent class.
 * @version 1.0
 */
PrezentDomApi.TagEvent = function (tagName, className, act, func) {
    this.tagName = tagName.toLowerCase();
    this.className = className;
    this.act = act;
    this.func = func;
}
PrezentDomApi.TagEvent.prototype.matches = function(tagName, className) {
    if (tagName.toLowerCase() != this.tagName) {
        return false;
    }
    return (this.className == null || new RegExp(this.className+"[\\W\\s]?").test(className));
};

/**
 * ActionAttacher class.
 * attaches events to tags by their tagName / classname.
 * Use actionAttacher.addTagEvent to add an event to a tag / className combination.
 */
PrezentDomApi.ActionAttacher = function() {
    this.tagEvents = [];
    this.counter = 0;
}

/* Runs onload to attach all TagEvents */
PrezentDomApi.ActionAttacher.prototype.attach = function() {
    var tagEvents = this.tagEvents;
    var tags = [], elems, len, j;

    // Loop trough all tagEvents to retreive tag
    for (var k=0; k < tagEvents.length; k++) {
        if (typeof tags[tagEvents[k].tagName] != 'undefined') {
            continue;
        }
        // add HTMLCollection to tags array
        tags[tagEvents[k].tagName] = document.body.getElementsByTagName(tagEvents[k].tagName);
    }

    // Loop trough all tags where events should be attached to
    for (j in tags) {
        elems = tags[j];
        len = elems.length;

        for (var i=0; i < len; i++) {
			if (typeof elems[i] != 'undefined') {
	            // Loop trough events
	            for (k=0; k < tagEvents.length; k++) {
	                // check if we have a tag- and classname match
	                if (tagEvents[k].matches(elems[i].tagName, elems[i].className)) {
	                    // Add event on match
	                    pDomApi.addEvent(elems[i], tagEvents[k].act, tagEvents[k].func);
	                }
	            }
	        }
        }
    }

};
/* Add tag event to action attacher */
PrezentDomApi.ActionAttacher.prototype.addTagEvent = function (tEvent) {
    this.tagEvents.push(tEvent);
    return this.counter++;
};

/* Runs on dom load if needed */
PrezentDomApi.domLoaded = function() {

    if (arguments.callee.done) return;
    arguments.callee.done = true;

    for (var i = 0;i < PrezentDomApi.domLoad.length;i++) {
        PrezentDomApi.domLoad[i]();
    }
};


var pDomApi = new PrezentDomApi();

/**
 * Sets a classname for element elem, eventually replacing other classname(s)
 * @param   HTMLElement     elem
 * @param   String          className
 * @param   String/Array    replace
 * @since   0.1
 */
PrezentDomApi.prototype.setClassName = function(elem, className, replace) {
    var replaceArr = [className];
    var newClassName = elem.className;

    // determine replace parameter type (note that it can also be undefined, that case is not handled)
    switch ((typeof replace).toLowerCase()) {
        case 'string':
            replaceArr.push(replace);
            break;
        case 'object':
            replaceArr = replaceArr.concat(replace);
            break;
    }

    // replace all classNames in the replaceArray with a space
    for (var i = 0; i < replaceArr.length; i++) {
        newClassName = newClassName.replace(new RegExp("(^|\\s)" + replaceArr[i] + "(\\s|$)", "g"), ' ');
    }
    // set the new classname
    elem.className = newClassName.trim() + (newClassName.length > 0 ? ' ' : '') + className;
};

/**
 * Sets a classname for element elem, eventually replacing other classname(s)
 * @param   Array           elems       Array of HTMLElements
 * @param   String          className
 * @param   String/Array    replace
 * @since   0.1
 */
PrezentDomApi.prototype.setClassNames = function(elems, className, replace) {
    for (var i in elems) {
        this.setClassName(elems[i]);
    }
};

// elem: (string || object) string of elements id, or a reference to the element itself
// act:  (string) eventname without the 'on' prefix. (load, click, mouseover, etc.)
// func: (unquoted string) functionname of the function to execute on event fire.
PrezentDomApi.prototype.addEvent = function(elem, act, func) {

    if(typeof elem == 'string') {
        elem = document.getElementById(elem);
    }

    if(!elem) return false;

    if (act == 'domload' && elem == window) {
        this.addDomLoadEvent(func);
    }

    if(window.addEventListener) {
       elem.addEventListener(act, func, false);
    }
    else if(window.attachEvent) {
        elem.attachEvent('on'+act, func);
    }
    else return false;
    return true;
};

PrezentDomApi.prototype.addDomLoadEvent = function(func) {

    PrezentDomApi.domLoad.push(func);
    if (PrezentDomApi.domLoaderSet) {
        return false;
    }

	if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", PrezentDomApi.domLoaded, null);
    }
	if (/KHTML|WebKit/i.test(navigator.userAgent)) {
		var _timer = setInterval(function()	{
			if (/loaded|complete/.test(document.readyState)) {
				clearInterval(_timer);
				delete _timer;
				PrezentDomApi.domLoaded();
			}
		}, 25);
	}
	/*@cc_on @*/
	/*@if (@_win32)
	var proto = "src='javascript:void(0)'";
	if (location.protocol == "https:") proto = "src=//0";
	document.write("<scr"+"ipt id=__ie_onload defer " + proto + "><\/scr"+"ipt>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
	    if (this.readyState == "complete") {
	        PrezentDomApi.domLoaded();
	    }
	};
	/*@end @*/
   this.addEvent(window, 'load', PrezentDomApi.domLoaded);
   PrezentDomApi.domLoaderSet = true;
};

// Call this function with the same arguments as you did with AddEvent
// to remove the eventlistener.
PrezentDomApi.prototype.removeEvent = function(elem, act, func) {
    if(typeof elem == 'string') {
        elem = document.getElementById(elem);
    }

    if(!elem) return false;

    if(window.removeEventListener) {
       elem.removeEventListener(act, func, false);
    }
    else if(window.detachEvent) {
        elem.detachEvent('on'+act, func);
    }
};

/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/
PrezentDomApi.prototype.getElementsByClassName = function(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.childNodes)? oElm.childNodes : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = [];
    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);
};

PrezentDomApi.prototype.hasClassName = function(oElm, strClassName) {
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    return oRegExp.test(oElm.className);
};

PrezentDomApi.prototype.showHide = function(elem, hide, show) {
    var hide = hide == undefined ? 'hide' : hide;
    var show = show == undefined ? 'show' : show;

    elem.className = new RegExp(hide).test(elem.className) ?
        elem.className.replace(new RegExp(hide), show) :
        elem.className.replace(new RegExp('\\s?'+ show), '') + ' ' + hide;

};

PrezentDomApi.prototype.preventDefault = function(event) {
    if (event.preventDefault) {
        event.preventDefault();
    } else {
        event.returnValue = false;
    }
};

String.prototype.trim = function() {
    var str = this.replace(/^\s\s*/, ''),
        ws = /\s/,
        i = str.length;
    while (ws.test(str.charAt(--i)));
    return str.slice(0, i + 1);
};/**
 * Default Drop Menu.
 * These functions can be used to create a (dropdown) menu from a list of items.
	* An UL element that is inside an LI-element will be shown on mouse over of the LI element,
 * the UL element is hidden on mouse out of the parent LI element.
 * Usage: Give the root of a menu the className 'dropMenu':
 * <ul className="dropMenu">
 *   <li><a>item 1</a></li>
 *   <li><a>item 2</a>
 *       <ul>
 *         <li><a>sub item 1</a></li>
 *       </ul>
 *   </li>
 * </ul>
 */

/**
 * mnuShowHide()
 * Shows/hides the childList in an LI element.
 *
 * Customized for ECNC left menu
 */
var currentElem = null;
function mnuShowHideClick(e, showHide) {
		if (! e) { var e = window.event; }
		var elem = e.target ? e.target : e.srcElement;
		var i;

		if (!pDomApi.hasClassName(elem, 'parentItem')) {
			return false;
		}
		
		elem = elem.parentNode;

		if (elem != currentElem) {
			hideAllSubMenus();
			currentElem = elem;
		}

		elem.show = (elem.show) ? true : false;
		showHide = (elem.show) ? 'show' : 'hide';

		for (i=0; i < elem.childNodes.length; i++) {
			if (elem.childNodes[i].nodeType == 1 && elem.childNodes[i].tagName.toLowerCase() == 'ul') {
				pDomApi.showHide(elem.childNodes[i],showHide);
				break;
			}
		}
}

function hideAllSubMenus() {

	var elem = document.getElementById('dropMenu');

	for (var i=0; i < elem.childNodes.length; i++) {
		if (pDomApi.hasClassName(elem.childNodes[i], 'hasChildren')) {
			for (var j=0; j < elem.childNodes[i].childNodes.length; j++) {
				if ( (elem.childNodes[i].childNodes[j].tagName.toLowerCase() == 'ul') 
						&& (elem.childNodes[i].childNodes[j]!=currentElem) ) {
					pDomApi.setClassName(elem.childNodes[i].childNodes[j], 'hide', 'show');
				}
			}
		}
	}
}

if (typeof actionAttacher == 'undefined') {
		var actionAttacher = new PrezentDomApi.ActionAttacher();
		pDomApi.addEvent(window, 'domload', function() { actionAttacher.attach(); });
}

var mnuClassName = 'dropMenu';

//actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('ul', mnuClassName, 'mouseover', function (e) { hideAllSubMenus(); mnuShowHideClick(e, 'show'); }));
actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('li', 'hasChildren', 'click', function (e) { mnuShowHideClick(e, 'hide'); }));


/**
 * mnuShowHide()
 * Shows/hides the childList in an LI element.
 */
function mnuShowHide(e, showHide) {
    if (! e) { var e = window.event; }
    var elem = e.target ? e.target : e.srcElement;
    var i,j;

    while (! pDomApi.hasClassName(elem, mnuClass)) {
        if (elem.tagName.toLowerCase() == 'li') {
            for (i=0; i < elem.childNodes.length; i++) {
                if (elem.childNodes[i].nodeType == 1 && elem.childNodes[i].tagName.toLowerCase() == 'ul') {
                    pDomApi.setClassName(elem.childNodes[i], showHide, showHide == 'show' ? 'hide' : 'show');
                    break;
                }
            }
        }
        elem = elem.parentNode;
    }
}

function showHideSelects(hide) {
	var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;

	if (IE6) {
    	var selects = document.getElementsByTagName('select');

    	for (j=0; j < selects.length; j++) {
    		if (hide) {
				selects[j].style.visibility = 'hidden';
			} else {
				selects[j].style.visibility = 'visible';
			}
    	}
    }
}

var mnuClass = 'dropDownMenu';

actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('ul',mnuClass, 'mouseover', function (e) { mnuShowHide(e, 'show'); showHideSelects(true); }));
actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('ul',mnuClass, 'mouseout', function (e) { mnuShowHide(e, 'hide'); showHideSelects(false); }));

actionAttacher.addTagEvent(new PrezentDomApi.TagEvent('a', 'print', 'click', function (e) { window.print(); }));