function newXMLRequest() {
  var result;

  try {
    result = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e) {
    try {
      result = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e) {
      try {
        result = new XMLHttpRequest();
      }
      catch (e) {
        result = false;
      }
    }
  }

  return result;
}

var isInternetExplorer = navigator.appName == "Microsoft Internet Explorer";

function isInternetExplorer6() {
    return navigator.userAgent.toLowerCase().indexOf("msie 6") != -1;
}

function startsWith(text, subText) {
    return text.substr(0, subText.length).toLowerCase() == subText.toLowerCase();
}

function escapeXMLCharacterData(xml) {
    var result = "";

    for (var i = 0; i < xml.length; i++) {
        var c = xml[i];

        if (c == ">")
            result += "&gt;";
        else if (c == "<")
            result += "&lt;";
        else if (c == "&")
            result += "&amp;";
        else
            result += c;
    }

    return result;
}

function escapeXMLAttributeValue(xml) {
    var result = "";

    for (var i = 0; i < xml.length; i++) {
        var c = xml[i];

        if (c == ">")
            result += "&gt;";
        else if (c == "<")
            result += "&lt;";
        else if (c == "&")
            result += "&amp;";
        else if (c == "\"")
            result += "&quot;";
        else if (c == "'")
            result += "&apos;";
        else
            result += c;
    }

    return result;
}

function showProperties(element, level, maximumLevel) {
    document.write("<ul>");

    for (var i in element) {
        document.write("<li>" + i);

        var propertyValue = element[i];

        if (typeof propertyValue == "object") {
            if (level < maximumLevel)
                showProperties(propertyValue, level + 1, maximumLevel);
        }
        else
            document.write(": " + escapeXMLCharacterData("" + propertyValue));

        document.write("</li>");
    }

    document.write("</ul>");
}

function getCurrentScript() {
    var scriptElements = document.getElementsByTagName("script");
    return scriptElements[scriptElements.length - 1];
}

function openURL(event, URL) {
    event = getEvent(event);

    if (!nodeIsInteractive(event.getSource()))
        window.location = URL;
}

function handleSelectFieldHttpResponse(http, selectFieldToChange) {
    if (http.readyState == 4) {
        var newSelectField = document.createElement("div");
        newSelectField.innerHTML = http.responseText;
        
        if (startsWith(http.responseText, "<select"))
            selectFieldToChange.parentNode.replaceChild(newSelectField.firstChild, selectFieldToChange);
    }
}

function formSelectFieldChanged(selectField, nameSelectFieldToChange) {
    var i = 0;

    while (i < selectField.form.elements.length && selectField.form.elements[i].name != nameSelectFieldToChange)
        i++;

    if (i < selectField.form.elements.length && selectField.form.elements[i].name == nameSelectFieldToChange) {
        var selectFieldToChange = selectField.form.elements[i];
        var request = newXMLRequest();

        request.open("get", "?SelectChanged=" + selectField.name + "&Value=" + selectField.value, true);
        request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
        request.onreadystatechange = function () { handleSelectFieldHttpResponse(request, selectFieldToChange); }
        http.send(null);
    }
}

function getParentNode(node, nodeName) {
    var result = node.parentNode;

	while (result != null && result.tagName.toLowerCase() != nodeName)
		result = result.parentNode;

	return result;
}

function getParentNodeWithClass(node, className) {
    var result = node.parentNode;

	while (result != null && !nodeHasClass(result, className))
		result = result.parentNode;

	return result;
}

function nodeHasClass(node, className) {
    var nodeClasses = node.className.split(" ");
    var result = false;
    var i = 0;
   
    while (!result && i < nodeClasses.length)
        if (nodeClasses[i] == className)
            result = true;
        else
            i++;
           
    return result;
}

function removeNodeClass(node, className) {
    var nodeClasses = node.className.split(" ");
    var newClasses = new Array();
   
    for (var i = 0; i < nodeClasses.length; i++)
        if (nodeClasses[i] != className)
            newClasses.push(nodeClasses[i]);
           
    node.className = newClasses.join(" ");
}

function addNodeClass(node, className) {
    var nodeClasses = node.className.split(" ");
    nodeClasses.push(className);
    node.className = nodeClasses.join(" ");
}

function assureNodeClass(node, className) {
	if (!nodeHasClass(node, className))
		addNodeClass(node, className);
}

function setNodeClassEnabled(node, className, enabled) {
	if (enabled)
		assureNodeClass(node, className);
	else
		removeNodeClass(node, className);
}

function toggleNodeClass(node, className) {
    if (nodeHasClass(node, className))
        removeNodeClass(node, className)
    else
        addNodeClass(node, className);
}

function toggleNodeClassPair(node, className) {
    toggleNodeClass(node, className);
    toggleNodeClass(node, "no-" + className);
}

function stripSuffix(value, suffix) {
    return value.substr(0, value.length - suffix.length);
}

function indexOf(array, value) {
    var result = -1;
    var i = 0;

    while (result == -1 && i < array.length) {
        if (array[i] == value)
            result = i;
        else
            i++;
    }

    return result;
}

function nodeIsInteractive(node) {
    return node.nodeName.toLowerCase() == "input";
}

function setHot(node, event, hot) {
  var source = getEvent(event).getSource();

  if (!nodeIsInteractive(source))
    setNodeClassEnabled(node, "hot", hot);
}

function getControlValue(control) {
    if (control.nodeName.toLowerCase() == "select")
        return control.options[control.selectedIndex].value;
    else
        return control.value;
}

function markChanged(control, originalValue) {
    var classes = control.className.split(" ");
    var updatedValueClass = indexOf(classes, "updatedValue");

    if (updatedValueClass != -1)
        classes.splice(updatedValueClass, 1);

    var value = getControlValue(control);

    if (value != originalValue)
        classes.push("updatedValue");

    control.className = classes.join(" ");
}

function selectTab(tabLinkNode) {
    var tabNodeToSelect = getParentNode(tabLinkNode, "li");
    var tabsNode = getParentNode(tabNodeToSelect, "ul");
    var tabNodes = tabsNode.getElementsByTagName("li");

    for (var i = 0; i < tabNodes.length; i++) {
        var tabNode = tabNodes[i];

        if (tabNode != tabNodeToSelect) {
            tabNode.className = "";
            var tabPrefix = stripSuffix(tabNode.id, "-tab");
            var tabPage = document.getElementById(tabPrefix + "-page");
            tabPage.style.display = "none";
        }
    }

    tabNodeToSelect.className = "selected";
    var tabPrefix = stripSuffix(tabNodeToSelect.id, "-tab");
    var tabPage = document.getElementById(tabPrefix + "-page");
    tabPage.style.display = "block";
}

function selectHelp(Name) {
    var helpText = document.getElementById(Name + "-help");

    if (helpText.className == "help-text-selected")
        helpText.className = "help-text-unselected";
    else
        helpText.className = "help-text-selected";

}

function getCaretPosition(textControl) {
	var caretPos = 0;

	if (document.selection) { // IE
		textControl.focus();
		var selection = document.selection.createRange();

		selection.moveStart("character", -textControl.value.length);
		caretPos = selection.text.length;
	}
	else if (textControl.selectionStart || textControl.selectionStart == "0") // Firefox
		caretPos = textControl.selectionStart;

	return caretPos;
}

function setCaretPosition(textControl, position) {
    if (textControl.setSelectionRange) {
    	textControl.focus();
		textControl.setSelectionRange(position, position);
	}
	else if (textControl.createTextRange) {
		var range = textControl.createTextRange();
		range.collapse(true);
		range.moveEnd("character", position);
		range.moveStart("character", position);
		range.select();
	}
}

function wrapSelectedText(textControl, before, after) {
    if (document.selection) {
        textControl.focus();
        var caretPosition = getCaretPosition(textControl);
        var selectedText = document.selection.createRange().text;
        document.selection.createRange().text = before + selectedText + after;
        textControl.focus();
        setCaretPosition(textControl, caretPosition);
        
    }
    else if (textControl.selectionStart >= 0) {
        var startPosition = textControl.selectionStart;
        var endPosition = textControl.selectionEnd;
        var selectedText = textControl.value.substring(startPosition, endPosition);
        var beforeSelectedText = textControl.value.substring(0, startPosition);
        var afterSelectedText = textControl.value.substring(endPosition, textControl.value.length);
        textControl.value = beforeSelectedText + before + selectedText + after + afterSelectedText;
        textControl.focus();
        setCaretPosition(textControl, startPosition + before.length + after.length + selectedText.length);
    }
}

function addTag(textControl, tag) {
    wrapSelectedText(textControl, "<" + tag + ">", "</" + tag + ">");
}

function addClosedTag(textControl, tag) {
    wrapSelectedText(textControl, "", "<" + tag + "/>");
}

function getForm(event) {
    event = getEvent(event);
    return getParentNode(event.getSource(), "form");
}

function getSiblingField(event, fieldName) {
    return getForm(event).elements[fieldName];
}

function createSimpleTag(event, fieldName, tag) {
    addTag(getSiblingField(event, fieldName), tag);
}

function createClosedTag(event, fieldName, tag) {
    addClosedTag(getSiblingField(event, fieldName), tag);
}

function resetPhotoTagCreator(form, fieldName) {
    form.elements["PhotoTagCreatorPhoto" + fieldName].value = "";
//    form.elements["PTCUseMap" + fieldName].checked = false;
//    hideMapOptions(form, fieldName);

//    document.getElementById("photoPreviewDiv").innerHTML = "- no photo selected";
    document.getElementById("PhotoTagCreator").style.display = "none";
}

function createPhotoTag(form, fieldName) {
    var textControl  = form.elements[fieldName];
    var img          = form.elements["PhotoTagCreatorPhoto" + fieldName].value;
//    var useMap       = form.elements["PTCUseMap" + fieldName].checked;

    var photoTag = "<photo id=\"" + img + "\"";
//    if (useMap) {
//        photoTag = photoTag + ">\n";
//        photoTag = photoTag + createMapTag(form, fieldName);
//        photoTag = photoTag + "\n</photo>";
//    }
//    else {
        photoTag = photoTag + "/>";
//    }

    wrapSelectedText(textControl, "", photoTag);
}

function createPhotoTagAndReset(event, fieldName) {
    var form = getForm(event);

    createPhotoTag(form, fieldName);
    resetPhotoTagCreator(form, fieldName);
}

// VIDEO TAG CREATOR

function resetVideoTagCreator(form, fieldName) {
    form.elements["VideoTagCreatorVideo" + fieldName].value = "";
    form.elements["VideoTagCreatorWidth" + fieldName].value = "";
    form.elements["VideoTagCreatorHeight" + fieldName].value = "";

    document.getElementById("VideoTagCreator").style.display = "none";
}

function createVideoTag(form, fieldName) {
    var textControl  = form.elements[fieldName];
    var video        = form.elements["VideoTagCreatorVideo" + fieldName].value;
    var width        = form.elements["VideoTagCreatorWidth" + fieldName].value;
    var height       = form.elements["VideoTagCreatorHeight" + fieldName].value;
    var widthTag     = "";
    var heigthTag    = "";

    if (width != "")
        widthTag = " width=\"" + width + "\"";

    if (height != "")
        heigthTag = " height=\"" + height + "\"";

    wrapSelectedText(textControl, "", "<video id=\"" + video + "\"" + widthTag + " " + heigthTag + "/>");
}

function createVideoTagAndReset(event, fieldName) {
    var form = getForm(event);

    createVideoTag(form, fieldName);
    resetVideoTagCreator(form, fieldName);
}

// FLASH TAG CREATOR

function resetFlashTagCreator(form, fieldName) {
    form.elements["FlashTagCreatorFile" + fieldName].value = "";
    form.elements["FlashTagCreatorWidth" + fieldName].value = "";
    form.elements["FlashTagCreatorHeight" + fieldName].value = "";
    form.elements["FlashTagCreatorLoop" + fieldName].checked = false;

    document.getElementById("FlashTagCreator").style.display = "none";
}

function createFlashTag(form, fieldName) {
    var textControl  = form.elements[fieldName];
    var file         = form.elements["FlashTagCreatorFile" + fieldName].value;
    var width        = form.elements["FlashTagCreatorWidth" + fieldName].value;
    var height       = form.elements["FlashTagCreatorHeight" + fieldName].value;
    var loop         = form.elements["FlashTagCreatorLoop" + fieldName].checked;
    var widthTag     = "";
    var heightTag    = "";
    var loopTag      = "";

    if (width != "")
        widthTag = " width=\"" + width + "\"";

    if (height != "")
        heightTag = " height=\"" + height + "\"";

    if (loop)
        loopTag = " loop=\"true\"";

    wrapSelectedText(textControl, "", "<flash id=\"" + file + "\"" + widthTag + " " + heightTag + " " + loopTag + "/>");
}

function createFlashTagAndReset(event, fieldName) {
    var form = getForm(event);

    createFlashTag(form, fieldName);
    resetFlashTagCreator(form, fieldName);
}

// TABLE TAG CREATOR

function resetTableTagCreator(form, fieldName) {
    form.elements["TableTagCreatorRows" + fieldName].value = "";
    form.elements["TableTagCreatorColumns" + fieldName].value = "";
    form.elements["TableTagCreatorHeaders" + fieldName].checked = false;
    form.elements["TableTagCreatorSampleText" + fieldName].checked = false;

    document.getElementById("TableTagCreator").style.display = "none";
}

function createTableTag(form, fieldName) {
    var textControl  = form.elements[fieldName];
    var rows         = form.elements["TableTagCreatorRows" + fieldName].value;
    var columns      = form.elements["TableTagCreatorColumns" + fieldName].value;
    var headers      = form.elements["TableTagCreatorHeaders" + fieldName].checked;
    var sampleText   = form.elements["TableTagCreatorSampleText" + fieldName].checked;
    var headersTag   = "";
    var tableTag     = "";

    if (sampleText) {
        if (headers) {
            headersTag = "\n  <tr>";

            for (var i = 0; i < columns; i++)
                headersTag = headersTag + "\n    <th>Header " + (i+1) + "</th>"

            headersTag = headersTag + "\n  </tr>";
        }

        for (var i = 0; i < rows; i++) {
            tableTag = tableTag + "\n  <tr>";

            for (var j = 0; j < columns; j++)
                tableTag = tableTag + "\n    <td>Cell " + (i+1) + "." + (j+1) + "</td>";

            tableTag = tableTag + "\n  </tr>";
        }

    }
    else {
        if (headers){
            headersTag = "\n  <tr>";

            for (var i = 0; i < columns; i++)
                headersTag = headersTag + "\n    <th></th>"

            headersTag = headersTag + "\n  </tr>";
        }

        for (var i = 0; i < rows; i++) {
            tableTag = tableTag + "\n  <tr>";

            for (var j = 0; j < columns; j++)
                tableTag = tableTag + "\n    <td></td>";

            tableTag = tableTag + "\n  </tr>";
        }
    }

    wrapSelectedText(textControl, "", "\n<table>" + headersTag + tableTag + "\n</table>");
}

function createTableTagAndReset(event, fieldName) {
    var form = getForm(event);

    createTableTag(form, fieldName);
    resetTableTagCreator(form, fieldName);
}

// ARTICLE LINK TAG CREATOR

function resetArticleLinkTagCreator(form, fieldName) {
    form.elements["ArticleLinkTagCreatorArticle" + fieldName].value = "";
    form.elements["ArticleLinkTagCreatorCaption" + fieldName].value = "";

    document.getElementById("ArticleLinkTagCreator").style.display = "none";
}

function createArticleLinkTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var article     = form.elements["ArticleLinkTagCreatorArticle" + fieldName].value;
    var caption     = form.elements["ArticleLinkTagCreatorCaption" + fieldName].value;

    wrapSelectedText(textControl, "", "<article id=\"" + article + "\">" + caption + "</article>");
}

function createArticleLinkTagAndReset(event, fieldName) {
    var form = getForm(event);

    createArticleLinkTag(form, fieldName);
    resetArticleLinkTagCreator(form, fieldName);
}

// LINK TAG CREATOR

function resetLinkTagCreator(form, fieldName) {
    form.elements["LinkTagCreatorAddress" + fieldName].value = "";
    form.elements["LinkTagCreatorCaption" + fieldName].value = "";

    document.getElementById("LinkTagCreator").style.display = "none";
}

function createLinkTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var address     = escapeXMLAttributeValue(form.elements["LinkTagCreatorAddress" + fieldName].value);
    var caption     = escapeXMLAttributeValue(form.elements["LinkTagCreatorCaption" + fieldName].value);

    wrapSelectedText(textControl, "", "<link address=\"" + address + "\">" + caption + "</link>");
}

function createLinkTagAndReset(event, fieldName) {
    var form  = getForm(event);

    createLinkTag(form, fieldName);
    resetLinkTagCreator(form, fieldName);
}

// ANCHOR TAG CREATOR

function resetAnchorTagCreator(form, fieldName) {
    form.elements["AnchorTagCreatorName" + fieldName].value = "";
    form.elements["AnchorTagCreatorCaption" + fieldName].value = "";

    document.getElementById("AnchorTagCreator").style.display = "none";
}

function createAnchorTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var name        = form.elements["AnchorTagCreatorName" + fieldName].value;
    var caption     = form.elements["AnchorTagCreatorCaption" + fieldName].value;

    wrapSelectedText(textControl, "", "<anchor name=\"" + name + "\">" + caption + "</anchor>");
}

function createAnchorTagAndReset(event, fieldName) {
    var form = getForm(event);

    createAnchorTag(form, fieldName);
    resetAnchorTagCreator(form, fieldName);
}

// LIST TAG CREATOR

function resetListTagCreator(form, fieldName) {
    form.elements["ListTagCreatorNumberOfItems" + fieldName].value = "";
    form.elements["ListTagCreatorOrdered" + fieldName].checked = false;
    form.elements["ListTagCreatorSampleText" + fieldName].checked = false;

    document.getElementById("ListTagCreator").style.display = "none";
}

function createListTag(form, fieldName) {
    var textControl     = form.elements[fieldName];
    var numberOfItems   = form.elements["ListTagCreatorNumberOfItems" + fieldName].value;
    var ordered         = form.elements["ListTagCreatorOrdered" + fieldName].checked;
    var useSampleText   = form.elements["ListTagCreatorSampleText" + fieldName].checked;
    var orderTag        = "";
    var itemsTag        = "";
    var sampleText     = "";

    if (ordered)
      orderTag = "ol";
    else
      orderTag = "ul";

    if (useSampleText)
      sampleText = "Test";

    for (var i = 0; i < numberOfItems; i++)
      itemsTag = itemsTag + "\n<li>" + sampleText + "</li>";

    wrapSelectedText(textControl, "", "\n<" + orderTag + ">" + itemsTag + "\n</" + orderTag + ">");
}

function createListTagAndReset(event, fieldName) {
    var form = getForm(event);

    createListTag(form, fieldName);
    resetListTagCreator(form, fieldName);
}

// YOUTUBE TAG CREATOR

function resetYouTubeTagCreator(form, fieldName) {
    form.elements["YouTubeTagCreatorLink" + fieldName].value = "";
    form.elements["YouTubeTagCreatorWidth" + fieldName].value = "";
    form.elements["YouTubeTagCreatorHeight" + fieldName].value = "";

    document.getElementById("YouTubeTagCreator").style.display = "none";
}

function createYouTubeTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var link        = escapeXMLAttributeValue(form.elements["YouTubeTagCreatorLink" + fieldName].value);
    var width       = form.elements["YouTubeTagCreatorWidth" + fieldName].value;
    var height      = form.elements["YouTubeTagCreatorHeight" + fieldName].value;
    var widthTag    = "";
    var heightTag   = "";

    if (width != "")
        widthTag = " width=\"" + width + "\"";

    if (height != "")
        heightTag = " height=\"" + height + "\"";

    wrapSelectedText(textControl, "", "<youtube link=\"" + link + "\"" + widthTag + " " + heightTag + "/>");
}

function createYouTubeTagAndReset(event, fieldName) {
    var form = getForm(event);

    createYouTubeTag(form, fieldName);
    resetYouTubeTagCreator(form, fieldName);
}

// GOOGLEMAP TAG CREATOR

function resetGoogleMapTagCreator(form, fieldName) {
    form.elements["GoogleMapTagCreatorLink" + fieldName].value = "";
    form.elements["GoogleMapTagCreatorWidth" + fieldName].value = "";
    form.elements["GoogleMapTagCreatorHeight" + fieldName].value = "";

    document.getElementById("GoogleMapTagCreator").style.display = "none";
}

function createGoogleMapTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var link        = escapeXMLAttributeValue(form.elements["GoogleMapTagCreatorLink" + fieldName].value);
    var width       = form.elements["GoogleMapTagCreatorWidth" + fieldName].value;
    var height      = form.elements["GoogleMapTagCreatorHeight" + fieldName].value;
    var widthTag    = "";
    var heightTag   = "";

    if (width != "")
        widthTag = " width=\"" + width + "\"";

    if (height != "")
        heightTag = " height=\"" + height + "\"";

    wrapSelectedText(textControl, "", "<googlemap link=\"" + link + "\"" + widthTag + " " + heightTag + "/>");
}

function createGoogleMapTagAndReset(event, fieldName) {
    var form = getForm(event);

    createGoogleMapTag(form, fieldName);
    resetGoogleMapTagCreator(form, fieldName);
}

// FRAME TAG CREATOR

function resetFrameTagCreator(form, fieldName) {
    form.elements["FrameTagCreatorLink" + fieldName].value = "";
    form.elements["FrameTagCreatorWidth" + fieldName].value = "";
    form.elements["FrameTagCreatorHeight" + fieldName].value = "";

    document.getElementById("FrameTagCreator").style.display = "none";
}

function createFrameTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var link        = escapeXMLAttributeValue(form.elements["FrameTagCreatorLink" + fieldName].value);
    var width       = form.elements["FrameTagCreatorWidth" + fieldName].value;
    var height      = form.elements["FrameTagCreatorHeight" + fieldName].value;
    var widthTag    = "";
    var heightTag   = "";

    if (width != "")
        widthTag = " width=\"" + width + "\"";

    if (height != "")
        heightTag = " height=\"" + height + "\"";

    wrapSelectedText(textControl, "", "<frame link=\"" + link + "\"" + widthTag + " " + heightTag + "/>");
}

function createFrameTagAndReset(event, fieldName) {
    var form = getForm(event);

    createFrameTag(form, fieldName);
    resetFrameTagCreator(form, fieldName);
}

// EMAIL TAG CREATOR

function resetEmailTagCreator(form, fieldName) {
    form.elements["EmailTagCreatorAddress" + fieldName].value = "";

    document.getElementById("EmailTagCreator").style.display = "none";
}

function createEmailTag(form, fieldName) {
    var textControl = form.elements[fieldName];
    var address     = form.elements["EmailTagCreatorAddress" + fieldName].value;

    wrapSelectedText(textControl, "", "<email address=\"" + address + "\"/>");
}

function createEmailTagAndReset(event, fieldName) {
    var form = getForm(event);

    createEmailTag(form, fieldName);
    resetEmailTagCreator(form, fieldName);
}

// HIDE ALL TAG CREATORS

function hideAllTagCreators() {
    document.getElementById("EmailTagCreator").style.display = "none";
    document.getElementById("TableTagCreator").style.display = "none";
    document.getElementById("AnchorTagCreator").style.display = "none";
    document.getElementById("LinkTagCreator").style.display = "none";
    document.getElementById("ArticleLinkTagCreator").style.display = "none";
    document.getElementById("PhotoTagCreator").style.display = "none";
    document.getElementById("VideoTagCreator").style.display = "none";
    document.getElementById("ListTagCreator").style.display = "none";
    document.getElementById("YouTubeTagCreator").style.display = "none";
    document.getElementById("GoogleMapTagCreator").style.display = "none";
    document.getElementById("FrameTagCreator").style.display = "none";
    document.getElementById("FlashTagCreator").style.display = "none";
}

function showOrHideTagCreator(tagCreator){
    if (document.getElementById(tagCreator).style.display == "none" || document.getElementById(tagCreator).style.display == ""){
        hideAllTagCreators();
        document.getElementById(tagCreator).style.display = "inline";
    }
    else
        hideAllTagCreators();
}

function getRadioValue(radioGroup){
    var i = 0;
    var result = "";

    while (result == "" && i < radioGroup.length)
        if (radioGroup[i].checked)
            result = radioGroup[i].value;
        else
            i++;

    return result;
}

function resetRadioValue(radioGroup){
    for (var i = 0; i < radioGroup.length; i++)
        radioGroup[i].checked = false;
}

function setCaretPositionForControl(controlId, position) {
    var control = document.getElementById(controlId);
    setCaretPosition(control, position);
}

function getSelectedText(textControl, before, after) {
    if (typeof(textControl.selectionStart) != "undefined") {
        var begin = textControl.value.substr(0, textControl.selectionStart);
        var selection = textControl.value.substr(textControl.selectionStart, textControl.selectionEnd - textControl.selectionStart);
        var end = textControl.value.substr(textControl.selectionEnd);
        textControl.value = begin + before + selection + after + end;
    }
    if (typeof(textControl.selectionStart) == "undefined") {
        textControl.value = before + before;
    }
}

function getInnerText(element) {
	if (typeof element == "string")
        return element;
	else if (typeof element == "undefined")
        return element;
	else if (element.innerText)
        return element.innerText;
    else {
        var text = "";
	    var childNodes = element.childNodes;

	    for (var i = 0; i < childNodes.length; i++) {
            var childNode = childNodes[i];

		    switch (childNode.nodeType) {
			    case 1: // ELEMENT_NODE
				    text += getInnerText(childNode);
				    break;
			    case 3:	// TEXT_NODE
				    text += childNode.nodeValue;
				    break;
		    }
	    }

        return text;
    }
}

function isLink(source) {
    return source.nodeName.toLowerCase() == "a";
}

function isFormElement(source) {
    var name = source.nodeName.toLowerCase();

    return name == "select" || name == "option" || name == "input" || name == "textarea" || name == "button";
}

function shouldHandleMouseClick(parent, source) {
    var result = true;

    while (result && source != parent) {
		result = !isLink(source) && !isFormElement(source);
        source = source.parentNode;
    }

    return result;
}

function changeNodeDisplay(node, display) {
    node.style.display = display;
}

function getNodeChild(node, childIndex) {
    var child = node.childNodes[childIndex];

    return child;
}

function hideNode(node) {
    changeNodeDisplay(node, "none");
}

function showNode(node) {
    changeNodeDisplay(node, "block");
}

function hideNodeChild(node, childIndex) {
    var child = getNodeChild(node, childIndex);

    if (child)
        hideNode(child);
}

function showNodeChild(node, childIndex) {
    var child = getNodeChild(node, childIndex);

    if (child)
        showNode(child);
}

function showImageAttributes(node, altText) {
    var child = getNodeChild(node, 1);

    node.title = altText;

    if (child) {
       showNode(child);
    }
}

function hideImageAttributes(node) {
    var child = getNodeChild(node, 1);

    if (child)
        hideNode(child);
}

function expand(node) {
    var itemNode = node.parentNode;
    var result = nodeHasClass(itemNode, "collapsed");

    if (result) {
        removeNodeClass(itemNode, "collapsed");
        addNodeClass(itemNode, "expanded");
        updateMenuItem(node, "expand");
    }

    return result;
}

function collapse(node) {
    var itemNode = node.parentNode;
    var result = nodeHasClass(itemNode, "expanded");

    if (result) {
        removeNodeClass(itemNode, "expanded");
        addNodeClass(itemNode, "collapsed");
        updateMenuItem(node, "collapse");
    }

    return result;
}

function expandOrCollapse(node) {
    return expand(node) || collapse(node);
}

function expandOrCollapseOnClick(node, event) {
    var source = getEvent(event).getSource();

    return shouldHandleMouseClick(node, source) && expandOrCollapse(node);
}

function getCookie(name) {
    if (document.cookie.length > 0) {
        cookieStart = document.cookie.indexOf(name + "=");

        if (cookieStart != -1) {
            cookieStart = cookieStart + name.length + 1;
            cookieEnd = document.cookie.indexOf(";", cookieStart);

            if (cookieEnd == -1) {
                cookieEnd = document.cookie.length;
            }

            return unescape(document.cookie.substring(cookieStart, cookieEnd));
        }
    }
    return "";
}

function createCookie() {
    document.cookie = "changeMenuItem=; path=" + getPathFromURL(webSiteRoot);
}

function getPathFromURL(URL) {
    var URLWithoutHTTP = URL.substring(7, URL.length);
    var pathStart      = URLWithoutHTTP.indexOf("/");

    return URLWithoutHTTP.substring(pathStart, URLWithoutHTTP.length);
}

function updateMenuItem(menuItem, mode) {
    var cookieValue = getCookie("changeMenuItem");
    var newAction = getInnerText(menuItem) + "=" + mode + "&";
    document.cookie = "changeMenuItem=" + cookieValue + newAction + "; path=" + getPathFromURL(webSiteRoot);
}

function showSessionTable(webSiteName) {
    var table = document.getElementById(webSiteName);

    if (table != null) {
        if (table.style.display == "none") {
            table.style.display = "inline"
        }
        else {
            table.style.display = "none"
        }
    }
}

function selectMatchToIncomingInvoice(matchToSelectField) {
    var PropertyView = "none";
    var CostAccountView = "none";
    var UseInvoiceDateView = "none";
    var BookDateView = "none";
    var UnmatchedReservationsView = "none";

    if (matchToSelectField.value == "CostAccount"){
        CostAccountView = "";
        UseInvoiceDateView = "";
        BookDateView = "";
    }
    else if (matchToSelectField.value == "PropertyAcquisition")
        PropertyView = "";
    else if (matchToSelectField.value == "CostReservation")
        UnmatchedReservationsView = "";

    getParentNode(matchToSelectField.form.Property, "tr").style.display = PropertyView;
    getParentNode(matchToSelectField.form.CostAccount, "tr").style.display = CostAccountView;
    getParentNode(matchToSelectField.form.UseInvoiceDate, "tr").style.display = UseInvoiceDateView;
    getParentNode(matchToSelectField.form.BookDate, "tr").style.display = BookDateView;
    getParentNode(matchToSelectField.form.CostReservationField, "tr").style.display = UnmatchedReservationsView;
}

function setMatchSectionDisplay(sectionId, displayValue) {
    document.getElementById(sectionId).style.display = displayValue;
}

function selectMatchToBankTransaction(matchToSelectField) {
    var moIncomingInvoices = "0";
    var moOutgoingInvoices = "1";
    var moPaymentDifferences = "2";
    var moBankingCosts = "3";
    var moSavings = "4";
    var moPrivateMutations = "5";
    var moUninvoicedIncome = "6";
    var moUninvoicedCosts = "7";
    var moCrossBanking = "8";
    var moPrepayments = "9";
    var moVATDeclarations = "10";
    var moCorporateTaxesAssessments = "11";
    var moTravelCostsByCarDeclarations = "12";
    var moEmployeeNetSalary = "13";
    var moEmployeeIncomeDeclaration = "14";

    var BankTransactionsView = "";
    var PartnerView = "none";
    var CostAccountView = "none";
    var RevenuesAccountView = "none";
    var SavingsBankAccountView = "none";
    var VATDeclarationView = "none";
    var CorporateTaxesView = "none";
    var TravelCostsByCarDeclarationsView = "none";
    var EmployeeNetSalaryView = "none";
    var EmployeeIncomeDeclarationView = "none";
    var DescriptionView = "none";
    var OpenIncomingInvoicesView = "none";
    var OpenOutgoingInvoicesView = "none";
    var OutgoingInvoicePaymentsView = "none";
    var MatchToLabelView = "none";

    if (matchToSelectField.value == moIncomingInvoices){
        OpenIncomingInvoicesView = "";
        MatchToLabelView = "";
    }
    else if (matchToSelectField.value == moOutgoingInvoices){
        OpenOutgoingInvoicesView = "";
        MatchToLabelView = "";
    }
    else if (matchToSelectField.value == moPaymentDifferences){
        BankTransactionsView = "none";
        OutgoingInvoicePaymentsView = "";
        DifferenceTypeView = "";
    }
    else if (matchToSelectField.value == moSavings)
        SavingsBankAccountView = "";
    else if (matchToSelectField.value == moPrivateMutations)
        PartnerView = "";
    else if (matchToSelectField.value == moUninvoicedCosts)
        CostAccountView = "";
    else if (matchToSelectField.value == moUninvoicedIncome)
        RevenuesAccountView = "";
    else if (matchToSelectField.value == moVATDeclarations)
        VATDeclarationView = "";
    else if (matchToSelectField.value == moCorporateTaxesAssessments)
        CorporateTaxesView = "";
    else if (matchToSelectField.value == moTravelCostsByCarDeclarations)
        TravelCostsByCarDeclarationsView = "";
    else if (matchToSelectField.value == moEmployeeNetSalary)
        EmployeeNetSalaryView = "";
    else if (matchToSelectField.value == moEmployeeIncomeDeclaration)
        EmployeeIncomeDeclarationView = "";

    if (matchToSelectField.value == moCrossBanking || matchToSelectField.value == moPrepayments || matchToSelectField.value == moUninvoicedCosts || matchToSelectField.value == moUninvoicedIncome)
        DescriptionView = "";

    var form = matchToSelectField.form;

    getParentNode(form.description, "tr").style.display = DescriptionView;

    setMatchSectionDisplay("unmatchedBankTransactions", BankTransactionsView);
    setMatchSectionDisplay("matchOpenIncomingInvoices", OpenIncomingInvoicesView);
    setMatchSectionDisplay("matchOpenOutgoingInvoices", OpenOutgoingInvoicesView);
    setMatchSectionDisplay("outgoingInvoicePayment", OutgoingInvoicePaymentsView);
    setMatchSectionDisplay("vatDeclaration", VATDeclarationView);
    setMatchSectionDisplay("corporateTaxesAssessment", CorporateTaxesView);
    setMatchSectionDisplay("travelCostsByCarDeclaration", TravelCostsByCarDeclarationsView);
    setMatchSectionDisplay("employeeNetSalary", EmployeeNetSalaryView);
    setMatchSectionDisplay("employeeIncomeDeclaration", EmployeeIncomeDeclarationView);
    setMatchSectionDisplay("partner", PartnerView);
    setMatchSectionDisplay("costAccount", CostAccountView);
    setMatchSectionDisplay("revenuesAccount", RevenuesAccountView);
    setMatchSectionDisplay("SavingsBankAccount", SavingsBankAccountView);
}

function findParentWithClass(node, className) {
	while (node !== null && !nodeHasClass(node, className))
		node = node.parentNode;

	return node;
}

function showOrHideOtherSuggestion(suggestedTextField) {
    var textNode = findParentWithClass(suggestedTextField.parentNode, "suggestedText");
    var freeTextField = findChildWithClass(textNode, "freeText");

    if (suggestedTextField.value == "0")
        freeTextField.style.display = "block";
    else
        freeTextField.style.display = "none";
}

function findChildWithClass(node, className) {
    var childNode;

	if (node.childNodes.length > 0) {
        childNode = node.childNodes[0];
        var i = 1;

        while (!nodeHasClass(childNode, className) && (i < node.childNodes.length)) {
            childNode = node.childNodes[i];
            i++;
        }
    }

	return childNode;
}

function booleanToXML(value) {
    if (value)
        return "true";
    else
        return "false";
}

