/*
    Trims whitespaces from a string
    usage: string.trim()
*/
String.prototype.trim = function () {
    var regexp = /^\s*|\s*$/g;
    return this.replace(regexp,"");
}

//Using info.js to add eventhandler.
addEventHandler(window, "load", prepareToggleInfo);


//isToggleActivated - If toggle is activated or not.
var isToggleActivated = true;
/*
Name: toggleInfo
Purpose: Toggles helptexts for an element on page.
Arguments: e - fired event.
*/
function toggleInfo(e) {
    //Get target element (where event fired)
    var targ = getTargetElement(e);
    var style = document.getElementById("info_" + targ.id).style;
    if (style.display == 'block') {
        if (isToggleActivated) {
            style.display = 'none';
        }
    } else {
        style.display = 'block';
    }
}

/*
Name: hideDescription
Purpose: Hides helptext for an element on page.
Arguments: e - fired event.
*/
function hideInfo(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: getForAttribute
Purpose: Get the for attribute for a given element (probably a label)
Arguments: element
Returns: for attribute
*/
function getForAttribute(element) {
    var attribute;
    if (element.getAttribute("for") == null) {
        attribute = element.attributes['for'].value; // Required by IE6 and IE7
    } else {
        attribute = element.getAttribute("for"); // Required by Safari (for Mac)
    }
    return attribute;
}

/*
Name: showHideOthersInGroup
Purpose: Show/hide a infotext and automatically hide others in the same group
Arguments: e - fired event.
*/
function showHideOthersInGroup(e) {
    var targ = getTargetElement(e);
    var labelForID = getForAttribute(targ);
    var groupName = document.getElementById(labelForID).name;
    var groupElements = document.getElementsByName(groupName);
    var labels = document.getElementsByTagName("label");

    for (var i = 0; i < groupElements.length; i++) {

        // Don't hide the helptext for the label that was clicked
        if (labelForID == groupElements[i].id) continue;
        // Get the group id
        var groupID = groupElements[i].getAttribute("id");

        // Hide other helptext info
        for (var j = 0; j < labels.length; j++) {
            // Find labels with the class "hideOthers"
            if (labels[j].className.indexOf("hideOthers") != -1) {
                // Get the label's for-attribute
                var tempForValue = getForAttribute(labels[j]);
                // Compare the for-attribute with the clicked
                if (tempForValue == groupID) {
                    // Get the found label's id-attribute
                    var foundLabelId = labels[j].getAttribute("id");
                    // Find the matching info layer using id-attribute and hide the layer
                    var style = document.getElementById("info_" + foundLabelId).style;
                    style.display = 'none';
                }
            }
        }
    }
    // Show / hide clicked label description
    toggleInfo(e);
}

/*
Name: prepareToggleInfo
Purpose: Adds eventhandlers for toggling descriptions (helptexts).
Arguments: None.
*/
function prepareToggleInfo() {
    var labels = document.getElementsByTagName("label");
    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 == "infoShow") {
            addEventHandler(labels[i], "click", toggleInfo);
        }
    }
    //Add eventhandlers for div-elements with correct classname.
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className == "infoClose") {
            addEventHandler(divs[i], "click", hideInfo);
        }
        if (divs[i].className == "infoShow") {
            addEventHandler(divs[i], "click", toggleInfo);
        }
    }
}

/*
Name: setFocusOnload
Purpose: functionality for setting focus on a formfield onload.
Arguments: the Id of the formfield
*/
function setFocus(elementId){
    document.getElementById(elementId).focus();
}

/*
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){ var e = window.event;}
	if (e.target){
        targ = e.target;
	}else if (e.srcElement){ //IE
        targ = e.srcElement;
    }
    return targ;
}
