
function getFrame(frameId) {
	if (window.frames) {
		return window.frames[frameId];
	} else if (window.frameId) {
		return window.frameId;
	} else {
		alert("DEBUG: frame can not be found - frameId:"+frameId);
		return null;
	}
}

// Funktion zur Referenzierung von Div-Layern mit Zugriff auf CSS-Eigenschaften
function div_ref_style (id) {
   if      (document.layers)         return document.layers[id];
   else if (document.all)            return document.all[id].style;
   else if (document.getElementById) return document.getElementById(id).style;
   else                              return null;
}


// Funktion zum Zeigen und Verstecken von Div-Layern
function setVisible(id, value) {
	if (value) {
		//alert("show: "+id);
		div_ref_style(id).display = "block";
	} else {
		//alert("hide: "+id);
		div_ref_style(id).display = "none";
		//div_ref_style(id).visibility = "hidden";
	}
	//alert("test");
   //div_ref_style(id).visibility =  value? visible : hidden;
   //document.all.write_a_comment_box.style.visibility="hidden";
}


function getForm(formId) {
	if (document.forms) {
		return document.forms[formId];
	} else if (document.formId) {
		return document.formId;
	} else {
		alert("DEBUG: form can not be found - formId:"+formId);
		return null;
	}
}


function getFormElement(formId,elementId) {
	form = getForm(formId);
	if (form.elements) {
		return form.elements[elementId];
	} else if (form.elementId) {
		return form.elementId;
	} else {
		alert("DEBUG: form element can not be found - form:"+form+" elementId:"+elementId);
		return null;
	}
}


function setFormElementValue(form,element,value) {
	//alert("setFormElementValue "+getForm(form)+","+getFormElement(form,element)+","+value);
	getFormElement(form,element).value = value;
}


function focusFormElement(form,element) {
	getFormElement(form,element).focus();
}


function test()  {
	alert("test");
}


function tagSelection(formId,elementId,aTag, eTag) {
  //var input = document.forms['formular'].elements['eingabe'];
  var input = getFormElement(formId,elementId);
  input.focus();
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfügen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);
    }
    range.select();
  }
  /* für neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einfügen des Formatierungscodes */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* für die übrigen Browser */
  else
  {
    /* Abfrage der Einfügeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfügen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
}


// TODO revise this
function getFormElementCursorPosition(formId,elementId) {
	var input = getFormElement(formId,elementId);
  	input.focus();

	if (typeof(input.selectionStart) == 'number') {
		var sel_end = input.selectionEnd;
		var new_lines = 0;
		if (input.value==input.value.replace(/\r\n/g, "\n")) {
			// get number of line breaks from textarea start to selection end and add them to sel_end
			for (var i = 0; i < sel_end; i ++) {
				if (input.value.charAt(i) == '\n') {
					new_lines ++;
				}
			}
		}
  		return sel_end+new_lines;
	} else if (document.selection) {
		//alert('test2');
		var range = document.selection.createRange();
		var range_all = document.body.createTextRange();
		range_all.moveToElementText(input);
		// calculate selection end point by moving beginning of range_all to end of range
		for (var sel_end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; sel_end ++) {
			range_all.moveStart('character', 1);
		}
		// get number of line breaks from textarea start to selection end and add them to sel_end
		var new_lines = 0;
	    for (var i = 0; i <= sel_end; i ++) {
        	if (input.value.charAt(i) == '\n') {
            	sel_end ++;
            }
        }
		return sel_end+new_lines;
	}

	return -1;
}


function getTextBeforeSelection(formId,elementId) {
  var input = getFormElement(formId,elementId);
  input.focus();

  /* für neuere auf Gecko basierende Browser */
  if(typeof input.selectionStart != 'undefined') {
    return input.value.substring(0,input.selectionStart);
  } else
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
  	// get text before
  	var sel = document.selection.createRange();
	sel.collapse();
	var sel_before = sel.duplicate();
	sel.moveToElementText(input);
	sel_before.setEndPoint("StartToStart",sel);
	text_before = sel_before.text;
	// get text after
	sel = document.selection.createRange();
    var sel_after = sel.duplicate();
    sel_after.moveToElementText(input);
    sel_after.setEndPoint("StartToEnd",sel);
    text_after = sel_after.text;
    // fix bug: deleted line breaks
    sel = document.selection.createRange();
	if ((text_before.length+sel.text.length+text_after.length)<input.value.length) {
		text_before = text_before + '\r\n'
	}
	return text_before;
  }
  /* für die übrigen Browser */
  else {
    return input.value;
  }
}


function getTextAfterSelection(formId,elementId) {
  var input = getFormElement(formId,elementId);
  input.focus();

  /* für neuere auf Gecko basierende Browser */
  if(typeof input.selectionEnd != 'undefined') {
    return input.value.substring(input.selectionEnd,input.value.length);
  } else
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
  	var sel = document.selection.createRange();
    var sel_after = sel.duplicate();
    sel_after.moveToElementText(input);
    sel_after.setEndPoint("StartToEnd",sel);
    text_after = sel_after.text;
	return text_after;
  }
  /* für die übrigen Browser */
  else {
    return input.value;
  }
}


function submitForm(formId) {
	form = getForm(formId);
	form.submit();
}


function getIFrame(iframeId) {

	if (window.frames) {
		return window.frames[iframeId];
	} else if (window.iframeId) {
		return window.iframeId;
	} else {
		alert("DEBUG: iframe can not be found - iframeID:"+iframeId);
		return null;
	}
}
