// CMS Libraries v. 1.0.4

var E4Core = {};

/**  Events **/

if (document.addEventListener) {
  E4Core.addEventListener = function(target, type, listener)
  {
    target.addEventListener(type, listener, false);
  };

  E4Core.removeEventListener = function(target, type, listener)
  {
    target.removeEventListener(type, listener, false);
  };

  E4Core.preventDefault = function(event)
  {
    event.preventDefault();
  };

  E4Core.stopPropagation = function(event)
  {
    event.stopPropagation();
  };
} else if (document.attachEvent) {
  E4Core.addEventListener = function(target, type, listener)
  {
    if (E4Core._findListener(target, type, listener) != -1) return;
    var listener2 = function()
    {
      var event = window.event;

      if (Function.prototype.call) {
        listener.call(target, event);
      } else {
        target._currentListener = listener;
        target._currentListener(event)
        target._currentListener = null;
      }
    };
    target.attachEvent("on" + type, listener2);
    var listenerRecord ={target: target,type: type,listener: listener,listener2: listener2};
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;
    var listenerId = "l" + E4Core._listenerCounter++;
    if (!targetWindow._allListeners) targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;
    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;
    if (!targetWindow._unloadListenerAdded) {
      targetWindow._unloadListenerAdded = true;
      targetWindow.attachEvent("onunload", E4Core._removeAllListeners);
    }
  };

  E4Core.removeEventListener = function(target, type, listener)
  {
    var listenerIndex = E4Core._findListener(target, type, listener);
    if (listenerIndex == -1) return;
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;
    var listenerId = target._listeners[listenerIndex];
    var listenerRecord = targetWindow._allListeners[listenerId];
    target.detachEvent("on" + type, listenerRecord.listener2);
    target._listeners.splice(listenerIndex, 1);
    delete targetWindow._allListeners[listenerId];
  };

  E4Core.preventDefault = function(event)
  {
    event.returnValue = false;
  };

  E4Core.stopPropagation = function(event)
  {
    event.cancelBubble = true;
  };

  E4Core._findListener = function(target, type, listener)
  {
    var listeners = target._listeners;
    if (!listeners) return -1;
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;
    for (var i = listeners.length - 1; i >= 0; i--) {
      var listenerId = listeners[i];
      var listenerRecord = targetWindow._allListeners[listenerId];
      if (listenerRecord.type == type && listenerRecord.listener == listener) {
        return i;
      }
    }
    return -1;
  };

  E4Core._removeAllListeners = function()
  {
    var targetWindow = this;
    for (id in targetWindow._allListeners) {
      var listenerRecord = targetWindow._allListeners[id];
      listenerRecord.target.detachEvent(
          "on" + listenerRecord.type, listenerRecord.listener2);
      delete targetWindow._allListeners[id];
    }
  };

  E4Core._listenerCounter = 0;
}

E4Core.getTarget  = function(event) {
	var target;
  if(event.srcElement) {
		target=event.srcElement;
	} else {
	  target=event.target;
	}
	return target;
}

E4Core.start = function(runnable)
{
  E4Core.addEventListener(window, "load", runnable.init);
}

/**  Classes **/

E4Core.addClass = function(target, theClass)
{
  if (!E4Core.hasClass(target, theClass)) {
    if (target.className == "") {
      target.className = theClass;
    } else {
      target.className += " " + theClass;
    }
  }
}

E4Core.getElementsByClass = function(theClass)
{
  var elementArray = [];
  if (document.all) {
    elementArray = document.all;
  } else  {
    elementArray = document.getElementsByTagName("*");
  }
  var matchedArray = [];
  var pattern = new RegExp("(^| )" + theClass + "( |$)");
  for (var i = 0; i < elementArray.length; i++) {
    if (pattern.test(elementArray[i].className)) {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }
  return matchedArray;
}

E4Core.hasClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");
  if (pattern.test(target.className)) {
    return true;
  }
  return false;
}

E4Core.removeClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");
  target.className = target.className.replace(pattern, "$1");
  target.className = target.className.replace(/ $/, "");
}

E4Core.getComputedStyle = function(element, styleProperty)
{
  var computedStyle = null;
  if (typeof element.currentStyle != "undefined") {
    computedStyle = element.currentStyle;
  } else {
    computedStyle = document.defaultView.getComputedStyle(element, null);
  }
  return computedStyle[styleProperty];
}

E4Core.hasTrigger = function(target,triggerFunctionName) {
  var pattern = new RegExp("(^| )" + triggerFunctionName + "(-| |$)");
	if (pattern.test(target.className)){
    return true;
  }
  return false;
}

E4Core.getTriggerParams = function(target,triggerFunctionName) {
	var params=[];
	var classes=target.className.split(' ');
	for (var i=0;i<classes.length;i++) {
	 if (classes[i].indexOf(triggerFunctionName+'-')!=-1) {
	 		params=classes[i].split('-');
			params.shift();
			break;
	 }
	}
	return params
}

/** Cookies **/

E4Core.setCookie = function(name,value) 
{
	if (name !='' && value !='') {
		var theCookie=name+'='+escape(value);
		
		document.cookie=theCookie;
	}
} 

E4Core.getCookie = function(name) 
{ 
	var Res={found:false,value:''};
	var cookies = document.cookie.split(';'); 
	for (var i=0;i<cookies.length;i++) {
		var namevaluepair=cookies[i].split('=');
		var cookieName=E4Core.trim(namevaluepair[0]);
		if (cookieName==name) {
			Res.found=true;
			Res.value=unescape(namevaluepair[1]);
			break;
		} 
	}  
	return Res;
}

/**  Language extension **/

E4Core.getValueOfElement = function(element) {
	var res;
		switch (element.type) {
			case 'select-one':
					res=element.value;
					break;
			case 'text':
					res=element.value;
					break;
			case 'hidden':
					res=element.value;
					break;
			case 'password':
					res=element.value;
					break;
			case 'file':
					res=element.value;
					break;
			case 'radio':
					var gruppenavn=element.name;
					var formelement=element.form;
					var knapgruppe=document.formelement.name;
					for (var i=0;i<knapgruppe.length;i++) {
						if (knapgruppe[i].checked) {
							res=knapgruppe[i].value;
							break;
						}
					}
					break;
			case 'checkbox':
					res = (element.checked) ? true:false;
					break;
			default:
					res='';
					break;
		}
	return res;
}

E4Core.concatArrays = function(array1,array2) 
{
	var res=array1;
	for (var i=0;i<array2.length;i++) {
		res.push(array2[i]);
	}
	return res;
}

E4Core.trim = function(text) 
{
    return text.replace(/^\s*|\s*$/g,'');
}

/**  Utilities **/

E4Core.getTriggerParts = function(theClass) 
{
	var triggerParts= {trigger:'',triggerParams:[]};
	var classParts=theClass.split('-');
	triggerParts.trigger=classParts[0];
	classParts.shift();
	triggerParts.triggerParams=classParts;
	return triggerParts;
}

