var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}
String.prototype.strip = function() { return this.replace(/^\s*|\s*$/g, ''); }
function extend(subClass, baseClass) {
   function inheritance() {}
   inheritance.prototype = baseClass.prototype;
   subClass.prototype = new inheritance();
   subClass.prototype.constructor = subClass;
   subClass.baseConstructor = baseClass;
   subClass.superClass = baseClass.prototype;
}
var HTMLUtil = {
	addEvent: function(obj, evType, fn) {
		if (obj.addEventListener) {
			obj.addEventListener(evType, fn, false);
			return true;
		} else if (obj.attachEvent) {
			var r = obj.attachEvent("on" + evType, fn);
			return r;
		} else {
			return false;
		}
	},
	getPageSize: function() {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		// for small pages with total height less then height of the viewport
		if (yScroll < windowHeight) {
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
		// for small pages with total width less then width of the viewport
		if (xScroll < windowWidth){	
			pageWidth = windowWidth;
		} else {
			pageWidth = xScroll;
		}
		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return arrayPageSize;
	},
	linkRelEvents: function(linkRelEvents) {
		var link;
		for (var i = 0; (link = document.getElementsByTagName('a')[i]); i++) {
            for (var j = 0; j < linkRelEvents.length; j += 2) {
				if (link.rel == linkRelEvents[j]) {
				    if (linkRelEvents[j+1] instanceof Array) {
				        link.onclick = linkRelEvents[j+1][0];
				        linkRelEvents[j+1][1](link);
				    } else {
    					link.onclick = linkRelEvents[j+1];
					}
					break;
				}
            }
		}
	},
	scrollToAnchor: function(anchor) {
		if (window.location.href.indexOf('#') >= 0)
			window.location = window.location.href.split('#')[0] + '#' + anchor;
		else
			window.location = window.location + '#' + anchor;
	}
}
var URL = {
    parameter: function(name) {
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var tmpURL = window.location.href;
        var results = regex.exec( tmpURL );
        if (results == null)
            return "";
        else
            return results[1];
    },
    encode: function(str) {
        return escape(str).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27');
    },
    decode: function(str) {
        return unescape(str).replace('%2B', '+').replace('%22', '"').replace('%27', "'");
    }
}
var HTMLDOMUtil = {
	addClass: function(element, classAdd) {
		if (element.className.indexOf(classAdd) >= 0)
			return;
		element.className += element.className ? ' ' + classAdd : classAdd;
	},
	removeClass: function(element, className) {
		if (element.className.indexOf(className) < 0)
			return;
		var replace = element.className.match(' ' + className) ? ' ' + className : className;
		element.className = element.className.replace(replace, '');
	},
    toggleClass: function(element, className) {
        if (element.className.indexOf(className) >= 0)
            HTMLDOMUtil.removeClass(element, className);
        else
            HTMLDOMUtil.addClass(element, className);
    },
	getElementsByClassName: function(className, tagName, rootNode) {
		if (tagName == null) tagName = '*';
		if (rootNode == null) rootNode = document;
		var elements = (tagName == "*" && rootNode.all)? rootNode.all : rootNode.getElementsByTagName(tagName);
		var nodes = new Array();
		var regexp = new RegExp('^(.*?\\s)?' + className + '(\\s.*)?$');
		for (var i = 0; i < elements.length; i++)
			if (regexp.exec(elements[i].className))
				nodes[nodes.length] = elements[i];
		return nodes;
	},
	createElement: function(tagName, className, id, content, extraAttributes) {
		className = className || null;
		id = id || null;
		content = content || null;
		var attr = extraAttributes || null;
		var el = document.createElement(tagName);
		if (className != null) el.className = className;
		if (id != null) el.id = id
		if (content != null)
			if (typeof(content) == 'string')
				el.innerHTML = content;
			else
				el.appendChild(content);
		if (attr != null)
			for (var i = 0; i < attr.length; i += 2)
				el[attr[i]] = attr[i+1];
		return el;
	},
    removeIfExists: function(id) { 
          var el = $(id); 
 
          if (el != null) 
               el.parentNode.removeChild(el); 
    },
	wrap: function(element, wrapTag, wrapId, wrapClass) {
		if (element == null || element.parentNode == null)
			return;
		wrapTag = wrapTag || 'div';
		var parent = element.parentNode;
		var radios = HTMLDOMUtil.innerInputs(element);
		var checkboxes = HTMLDOMUtil.innerInputs(element, 'checkbox');
		var next = element.nextSibling;
		while (next != null && next.nodeType != 1) next = next.nextSibling;
		parent.removeChild(element);
		var wrapper = HTMLDOMUtil.createElement(wrapTag, wrapClass, wrapId, element);
		wrapper.isInsertedDynamically = true;
		if (next != null)
			parent.insertBefore(wrapper, next);
		else
			parent.appendChild(wrapper);
		HTMLDOMUtil.preserveInputs(radios);
		HTMLDOMUtil.preserveInputs(checkboxes);
	},
	unwrap: function(element) {
		if (!element.parentNode.isInsertedDynamically)
			return false;
		if (element == null || element.parentNode == null || element.parentNode.parentNode == null)
			return;
		var radios = HTMLDOMUtil.innerInputs(element);
		var checkboxes = HTMLDOMUtil.innerInputs(element, 'checkbox');
		var el = element;
		var remove = element.parentNode;
		remove.parentNode.insertBefore(el, remove);
		remove.parentNode.removeChild(remove);
		HTMLDOMUtil.preserveInputs(radios);
		HTMLDOMUtil.preserveInputs(checkboxes);
	},
	innerInputs: function(root, type) {
		type = type || 'radio';
		var radios = new Array();
		var inputs = root.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; i++)
			if (inputs[i].type == type && inputs[i].checked)
				radios[radios.length] = inputs[i];
		return radios;
	},
	preserveInputs: function(inputs) {
		for (var i = 0; i < inputs.length; i++)
			inputs[i].checked = true;
	}
}
ExtendFunctions = {
    addClassName: function(className) { HTMLDOMUtil.addClass(this, className); },
    removeClassName: function(className) { HTMLDOMUtil.removeClass(this, className); },
    toggleClassName: function(className) { HTMLDOMUtil.toggleClass(this, className); },
    wrap: function(wrapTag, wrapId, wrapClass) { HTMLDOMUtil.wrap(this, wrapTag, wrapId, wrapClass); },
    unwrap: function() { HTMLDOMUtil.unwrap(this); }
}
// Based on prototypes implementation
function $(element) {
    if (element instanceof Array) {
        for (var i = 0, elements = [], el = null; (el = element[i]); i++)
            elements.push($(el));
        return elements;
    }
    if (typeof element == 'string')
        element = document.getElementById(element);
    if (element)
        for (var func in ExtendFunctions)
            element[func] = ExtendFunctions[func];
    return element;
}
var $C = HTMLDOMUtil.getElementsByClassName;
var $A = function(collection, cb) {
    if (cb != null) {
        for (var i = 0, arr = []; i < collection.length; i++) {
            arr.push(collection[i]);
            cb(collection[i]);
        }
    } else {
        for (var i = 0, arr = []; i < collection.length; i++)
            arr.push(collection[i]);
    }
    return arr;
};
Array.prototype.each = function(cb) {
    if (cb == null) return;
    for (var i = 0; i < this.length; i++)
        cb(this[i]);
};
var FormUtil = {
	get: function(elementId) {
		var element = null;
		if (elementId instanceof Array) {
			var elements = new Array();
			for (el in elementId)
				elements[elements.length] = FormUtil.get(elementId[el]);
			return elements;
		}
		if (typeof(elementId) == 'object')
			element = elementId;
		if (typeof(elementId) == 'string') {
			element = document.getElementById(elementId);
			if (element && element.id != elementId)
				element = null;
		}
		if (!element) {
			element = new Array();
			var n = 0;
			var input = null;
			for (var i = 0; input = document.getElementsByTagName('input')[i]; i++)
				if (input.name == elementId)
					element[n++] = input;
			if (element.length == 0)
				element = null;
			else
				return element;
		}
		if (!element)
			element = elementId;
		if (!element.tagName || !element.tagName.toLowerCase() == 'input' ||
			 !element.tagName.toLowerCase() == 'select' ||
			 !element.tagName.toLowerCase() == 'textarea')
			return null;
		return element;
	},
	hide: function(element) {
		HTMLDOMUtil.addClass(element, 'hidden');
		if (element.tagName.toLowerCase() == 'input' && element.type == 'text') {
			element.rememberedValue = element.value;
			element.value = '';
		} else if (element.tagName.toLowerCase() == 'input' && element.type == 'radio') {
			element.rememberedChecked = element.checked;
			element.checked = false;
		} else if (element.tagName.toLowerCase() == 'select') {
			element.rememberedSelectedIndex = element.selectedIndex;
			element.selectedIndex = -1;
		}
	},
	show: function(element) {
		HTMLDOMUtil.removeClass(element, 'hidden');
		if (element.tagName.toLowerCase() == 'input' && element.type == 'text' &&
			element.rememberedValue) {
			element.value = element.rememberedValue;
			element.value.rememberedValue = '';
		} else if (element.tagName.toLowerCase() == 'input' && element.type == 'radio' &&
				   element.rememberedChecked) {
			element.checked = element.rememberedChecked;
			element.rememberedChecked = false;
		} else if (element.tagName.toLowerCase() == 'select' && element.rememberedSelectedIndex) {
			element.selectedIndex = element.rememberedSelectedIndex;
			element.rememberedSelectedIndex = -1;
		}
	}
}
// Courtesy of http://www.thefutureoftheweb.com/blog/2006/6/adddomloadevent
// Usage: addDOMLoadEvent((function() { /* Some func */ });
function addDOMLoadEvent(f){if(!window.__ADLE){var n=function(){if(arguments.callee.d)return;arguments.callee.d=true;if(window.__ADLET){clearInterval(window.__ADLET);window.__ADLET=null}for(var i=0;i<window.__ADLE.length;i++){window.__ADLE[i]()}window.__ADLE=null};if(document.addEventListener)document.addEventListener("DOMContentLoaded",n,false);/*@cc_on @*//*@if (@_win32)document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");var s=document.getElementById("__ie_onload");s.onreadystatechange=function(){if(this.readyState=="complete")n()};/*@end @*/if(/WebKit/i.test(navigator.userAgent)){window.__ADLET=setInterval(function(){if(/loaded|complete/.test(document.readyState)){n()}},10)}window.onload=n;window.__ADLE=[]}window.__ADLE.push(f)}
/* TODO: Rewrite to Cookie-object */
/* Functions to handle cookies, e.g. for login issues */ 
function createCookie(n,value,days) {
   if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
   }
   else var expires = "";
   dom = "; domain=.spp.se";
   document.cookie = n+"="+value+expires+"; path=/"+dom; }
function readCookie(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;
}
function eraseCookie(name) {
   if(readCookie(name))
      createCookie(name,"nothingatall",-1);
}
//(PMU 17.10.2011: Ny cookie for SM R12) Inlagt av Katarina Berg 2011-10-27
function saveSMCookie(domain) {
                var date = new Date();
                date.setTime(date.getTime()+(600*1000));
                var expires = "; expires="+date.toGMTString();
                document.cookie = "logonURL="+encodeURI(window.location.href)+expires+"; domain="+domain+"; path=/";
}
function eraseSMCookies()
{
                eraseCookie('LtpaToken');
                eraseCookie('SMSESSION');
                eraseCookie('SMIDENTITY');
                eraseCookie('INTERNALSMSESSION');
                eraseCookie('LogonURL');
}
function checkForm() {
   eraseSMCookies();
   saveSMCookie(".spp.se");
   createCookie('LtpaToken', 'nothingatall', -1);
    var feil = "";       
                ant = 0;
                if (document.frmLogin.USER.value=="")  {
                                ant +=1;
                                feil +=  "- Användarnamn \n";
                }
                if (document.frmLogin.PASSWORD.value=="")  {
                                ant +=1;
                                feil +=  "- Lösenord \n";                       
                }
    if (feil != "") {
      if (ant==1) {
         alert("För att logga in på SPPs Internettjänst måste du ange: \n\n" + feil);
         feil="";
         ant=0;
         return false;
         }
      if (ant>=2) {
         alert("För att logga in på SPPs Internettjänst måste du ange:\n\n" + feil);
         feil="";
         ant=0;
         return false; 
         }
      }
                  return true;            
}

