/*
Name: addEventHandler
Purpose: Adds an eventhandler for an element's events.
Arguments:
    element - The element to attach eventhandler to.
    event - Name of the event to attach (without leading "on")
    functionName - The function that should be called when the event occurs
*/
function addEventHandler(element, event, functionName) {
    if (element.attachEvent) { //ie
        element.attachEvent('on' + event, functionName);
    }else if(element.addEventListener) {
        element.addEventListener(event, functionName, false);
    }else {
        element['on' + event] = functionName;
    }
}

/*
Name: getTargetElement
Purpose: Returns the element that an event has occured in.
Arguments:
    e - The occured event.
*/
function getTargetElement(e){
	var targ = null;
	if (!e){ e = window.event;}
	if (e.target){
        targ = e.target;
	}else if (e.srcElement){ //IE
        targ = e.srcElement;
    }
    return targ;
}


//isToggleActivated - If toggle is activated or not.
var isToggleActivated = true;
/*
Name: toggleDescription
Purpose: Toggles helptexts for an element on page.
Arguments: e - fired event.
*/
function setFontWeight(element, value){
  element.style.fontWeight = value;
}

function setTextDecoration(element, value){
  element.style.textDecoration = value;
}

function addStringToElement(element, string, position){

  if(position == 0){
    if(element.innerHTML)
      element.innerHTML = string + element.innerHTML;
  }
  else{
    if(element.innerHTML)
      element.innerHTML = element.innerHTML + string;
  }
}

function removeStringFromElement(element, regexpPattern){
  element.innerHTML = element.innerHTML.replace(regexpPattern, "");
}

function toggleDescription(e) {
    //Get target element (where event fired)
    var targ = getTargetElement(e);

    var style = document.getElementById("description_" + targ.id).style;
    var targElement = document.getElementById("description_" + targ.id);
    var element = document.getElementById(targ.id);

    if (style.display == 'block') {
        if (isToggleActivated) {

          style.display = 'none';
          setFontWeight(element, "normal");
          removeStringFromElement(element, /»\ /i)

          /* If targ.id contains the text "FAQ" then the text "Svar" will be removed from the childs text */
          if(targ.id.indexOf("FAQ") > -1)
            removeStringFromElement(targElement, /\<b\>Svar:\<\/b\>\ /i)

          /* If targ.id contains the text "EndArrow" an arrow (») is appended at the end of the text */
          if(targ.id.indexOf("EndArrow") > -1)
            addStringToElement(element, "&raquo; ", 1)

          setTextDecoration(element, "underline");
        }
    } else {
        style.display = 'block';
        setFontWeight(element, "bold");

        /* If targ.id contains the text "EndArrow" all arrows (») will be removed from the childs text */
        if(targ.id.indexOf("EndArrow") > -1) //Temporary solution for "Anmäl installation - förklaring" handles the arrow
          removeStringFromElement(element, /»/i);

        /* If targ.id contains the text "FAQ", the string "<b>Svar</b>" will be appended at the beginning of the childs text */
        if(targ.id.indexOf("FAQ") > -1)
          addStringToElement(targElement, "<b>Svar:</b> ", 0);

        addStringToElement(element, "&raquo; ", 0);
        setTextDecoration(element, "none");
    }
}

/*
Name: hideDescription
Purpose: Hides helptext for an element on page.
Arguments: e - fired event.
*/
function hideDescription(e) {
    //Get target element (where event fired)
    var targ = getTargetElement(e);
    var elem = targ.parentNode;

    var style = elem.style;
    if (style.display == 'block') {
        style.display = 'none';
    }
}


/*
Name: prepareToggleDescription
Purpose: Adds eventhandlers for toggling descriptions (helptexts).
Arguments: None.
*/
function prepareToggleDescription() {
    var labels = document.getElementsByTagName("h3");
    var divs = document.getElementsByTagName("div");

    //Add eventhandlers for label-elements with correct classname.
    for (var i = 0; i < labels.length; i++) {
        //Add eventhandlers for groups of descriptions that need to hide others
        if (labels[i].className.indexOf("hideOthers") != -1) {
            addEventHandler(labels[i], "click", showHideOthersInGroup);
        }
        if (labels[i].className.indexOf("descriptionShow") != -1 || labels[i].className.indexOf("float_descriptionShow") != -1) {
            addEventHandler(labels[i], "click", toggleDescription);
        }
    }
    //Add eventhandlers for div-elements with correct classname.
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className == "descriptionClose") {
            addEventHandler(divs[i], "click", hideDescription);
        }
        if (divs[i].className.indexOf("descriptionShow") != -1) {
            addEventHandler(divs[i], "click", toggleDescription);
        }
        if (divs[i].className.indexOf("descriptionShow") != -1 || divs[i].className.indexOf("float_descriptionShow") != -1) {
            addEventHandler(divs[i], "click", toggleDescription);
        }
    }
}


/*===============
Name: openWin
Purpose: Open windows of different types.
         Can be called with optional nr of parameters (except for mandatory pseWinType and url).
Parameters:
    pseWinType (Object) - type of window that should be opened
    url (String) - url in new window
    width (Number)
    height (Number)
    title (String) unique name for window if it's important not to reuse eventual previously opened windows
    top (Number)
    left (Number)
Example of usage:
    onclick="openWin(pseWin.SCROLLRESIZE,'/elin_v2/main_do.jsp',500,400,'elinWinPopup',10,10);"
Return value: if window was opened or not, inverse, so it can stop an normal open
===============*/
var pseWin = new Object();
pseWin.SIMPLE = 1;
pseWin.SCROLL = 2;
pseWin.SCROLLRESIZE = 3;
pseWin.FULLSIZE = 4;
pseWin.COMPLETE = 5;
pseWin.PRINT = 6;

// Complete is like _blank on anchor.. Scroll, resize, menubar,location and statusbar.

function openWindow(pseWinType, url, width, height, title, top, left) {
    var prefs = "";

    if (title == null) {
        //window title is null, set default
        title = "winTitle";
    }
    if (pseWinType == pseWin.FULLSIZE && window.screen) {
        //If window should be of type FULLSIZE, set width and height highest possible (according to screen)
        prefs = "width=" + (screen.availWidth - 10) + ",height=" + (screen.availHeight - 30);
    } else if (width == null || height == null) {
        //Width or height not specified, set default values.
        prefs = "width=500,height=300";
    } else {
        //Width and height specified.
        prefs = "width=" + width + ",height=" + height;
    }

    if (pseWinType == pseWin.FULLSIZE) {
        //If window should be of type FULLSIZE, set position to 0,0.
        top = 0;
        left = 0;
    }
	//Set Top pref if it's supplied
	if( top != null ){
		prefs += ",screenY=" + top + ",top=" + top;
	}
	//Set Left pref if it's supplied
	if( left != null ){
		prefs += ",screenX=" + left + ",left=" + left;
	}

    switch (pseWinType) {
        case 1: //SIMPLE
            prefs += ',toolbar=0,scrollbars=no,status=no,resizable=no';
            break;
        case 2: //SCROLL
            prefs += ',toolbar=0,scrollbars=yes,status=no,resizable=no';
            break;
        case 3: //SCROLLRESIZE
            prefs += ',toolbar=0,scrollbars=yes,status=no,resizable=yes';
            break;
        case 4: //FULLSIZE
            prefs += ',toolbar=0,scrollbars=yes,status=no,resizable=yes';
            break;
        case 5: //COMPLETE, ALL FEATURES
            prefs += ',location=1,toolbar=1,menubar=1,scrollbars=yes,status=yes,resizable=yes';
        case 6: //PRINT FEATURES
            prefs += ',location=0,toolbar=1,menubar=1,scrollbars=yes,status=yes,resizable=yes';
    }

    var newWin = window.open(url, title, prefs);
	// Check if pop-up was blocked
	if( newWin ){
		//Put focus on opened window.
		newWin.focus();
		// return false so the browser don't follows the link
		return false;
	} else {
		// return true so the browser will follow the link
		return true;
	}
}

function getParent(e){
  if(e.parentNode){   //Mozilla
    return e.parentNode;
  }
  else{
    if(e.parentElement){
      return e.parentElement;
    }
  }
}

var pic, pic2;
pic = new Image();
pic2 = new Image();

function preloadImages(element){
  var image = element;
  pic.src = image.src.replace(/2.gif/, ".gif");
  pic2.src = image.src.replace(/.gif/, "2.gif");
}

function doImgChange(e){
  var image = getTargetElement(e);

  if(image.src.charAt(image.src.length -5) == "2")
    image.src = pic.src;
  else
    image.src = pic2.src;
}

function doImgChangePeer(){
  var image = document.getElementById("imgChange");
  if(image){
    if(image.src.charAt(image.src.length -5) == "2")
      image.src = pic.src;
    else
      image.src = pic2.src;
  }
}