


/**
 * Users can change the contents of a Web page when the contentEditable property is set 
 * to TRUE. This method submits the changes for the object specified by id.
 *
 * @param url		Url of the object to be changed.
 * @param id		Id of the object to be changed.
 * @param key		Key of the property to be changed.
 */
function contenteditableChangeClick(url, id, key)
{
  var elName = key + "_" + id;
  var elValue = escape(window.eval(elName).innerHTML);
  var fmName = id + "Form";
  document.write('<form name="' + fmName + '" action="' + url + '/manage_changeTextProperties" method="post">');
  document.write('<input type="hidden" name="lang" value="ger">');
  document.write('<input type="hidden" name="manage_lang" value="ger">');
  document.write('<input type="hidden" name="preview" value="preview">');
  document.write('<input type="hidden" name="key" value="' + key + '">');
  document.write('<input type="hidden" name="custom" value="' + elValue + '">');
  document.write('</form>');
  var fm = document.forms[fmName];
  fm.submit();
}

/**
 * Users can change the contents of a Web page when the contentEditable property is set 
 * to TRUE.
 */
function contentEditableBlur( el, id, objAttrName)
{
  var text = el.innerHTML;
  var fm = document.forms['form0_'+id];
  var formats = new Array();
  
   
    formats['headline_1'] = new Array();
    formats['headline_1']['tag'] = 'h1';
    formats['headline_1']['subtag'] = 'br';
   
  
   
    formats['headline_2'] = new Array();
    formats['headline_2']['tag'] = 'h2';
    formats['headline_2']['subtag'] = 'br';
   
  
   
    formats['headline_3'] = new Array();
    formats['headline_3']['tag'] = 'h3';
    formats['headline_3']['subtag'] = 'br';
   
  
   
    formats['headline_4'] = new Array();
    formats['headline_4']['tag'] = 'h4';
    formats['headline_4']['subtag'] = 'br';
   
  
   
    formats['headline_5'] = new Array();
    formats['headline_5']['tag'] = 'h5';
    formats['headline_5']['subtag'] = 'br';
   
  
   
    formats['Berufsbezeichnung'] = new Array();
    formats['Berufsbezeichnung']['tag'] = 'p';
    formats['Berufsbezeichnung']['subtag'] = 'br';
   
  
   
    formats['caption'] = new Array();
    formats['caption']['tag'] = 'caption';
    formats['caption']['subtag'] = 'br';
   
  
   
    formats['indented_block'] = new Array();
    formats['indented_block']['tag'] = 'p';
    formats['indented_block']['subtag'] = 'br';
   
  
   
    formats['plain_html'] = new Array();
    formats['plain_html']['tag'] = '';
    formats['plain_html']['subtag'] = '';
   
  
   
    formats['unordered_list'] = new Array();
    formats['unordered_list']['tag'] = 'ul';
    formats['unordered_list']['subtag'] = 'li';
   
  
   
    formats['emphasis'] = new Array();
    formats['emphasis']['tag'] = 'p';
    formats['emphasis']['subtag'] = 'br';
   
  
   
    formats['ordered_list'] = new Array();
    formats['ordered_list']['tag'] = 'ol';
    formats['ordered_list']['subtag'] = 'li';
   
  
   
    formats['body'] = new Array();
    formats['body']['tag'] = 'p';
    formats['body']['subtag'] = 'br';
   
  
  var formatElement = fm.elements['format'];
  var format = '?';
  if ( formatElement.value)
    format = formatElement.value;
  else
    format = formatElement.options[ formatElement.selectedIndex].value;
  var tag = formats[ format]['tag'].toUpperCase();
  var subtag = formats[ format]['subtag'].toUpperCase();
  // Remove tags.
  if ( tag.length > 0)
  {
    var startTag = '<' + tag;
    var endTag = '</' + tag;
    if ( text.indexOf( startTag) == 0)
      text = text.substring( text.indexOf( '>' ,text.indexOf(startTag))+1);
    text = text.replace(startTag+'>', '');
    if ( text.lastIndexOf( endTag) > 0 && 
         text.lastIndexOf('>',text.lastIndexOf(endTag)) == text.length-1)
      text = text.substring( 0, text.lastIndexOf( endTag));
    text = text.replace(endTag+'>', '');
  }
  // Remove sub-tags.
  if ( subtag.length > 0)
  {
    var newText = '';
    var startTag = '<' + subtag + '>';
    var endTag = '</' + subtag + '>';
    while ( text.indexOf( startTag) >= 0)
      text = text.replace( startTag, '');
    while ( text.indexOf( endTag) >= 0)
      text = text.replace( endTag, '');
  }
  // Remove para-entities.
  var paraEnt = '&para;\n';
  while ( text.indexOf( paraEnt) >= 0)
    text = text.replace( paraEnt, '');
  // Trim.
  while ( text.length > 0 && text.charAt(0) <= ' ')
    text = text.substring(1);
  while ( text.length > 0 && text.charAt( text.length-1) <= ' ')
    text = text.substring(0, text.length-1);
  // Set text.
  var objAttrElement = fm.elements[ objAttrName];
  objAttrElement.value = text;
}


// ############################################################################
// ###
// ### Drag & Drop (http://aktuell.de.selfhtml.org/tippstricks/dhtml/draganddrop/index.htm)
// ###
// ############################################################################


//Das Objekt, das gerade bewegt wird.
var dragobjekt = null;

// Position, an der das Objekt angeklickt wurde.
var dragx = 0;
var dragy = 0;

// Mausposition
var posx = 0;
var posy = 0;

/**
 * Initialisierung der Überwachung der Events
 */
function draginit() {
  document.ondragstart = Function("return false;");
  document.onmousemove = drag;
  document.onmouseup = dragstop;
}

/**
 * Wird aufgerufen, wenn ein Objekt bewegt werden soll.
 */
function dragstart(element) {
  dragobjekt = element;
  dragx = posx - dragobjekt.offsetLeft;
  dragy = posy - dragobjekt.offsetTop;
}

/**
 * Wird aufgerufen, wenn ein Objekt nicht mehr bewegt werden soll.
 */
function dragstop() {
  dragobjekt=null;
}

/**
 * Wird aufgerufen, wenn die Maus bewegt wird und bewegt bei Bedarf das Objekt.
 */
function drag(ereignis) {
  posx = document.all ? window.event.clientX : ereignis.pageX;
  posy = document.all ? window.event.clientY : ereignis.pageY;
  if(dragobjekt != null) {
    dragobjekt.style.left = (posx - dragx) + "px";
    dragobjekt.style.top = (posy - dragy) + "px";
  }
}


// ############################################################################
// ###
// ### Direct-Edit 2.0
// ###
// ############################################################################

/**
 * Direct-Edit: Form Submit
 */
function directEditFormSubmit( fm)
{
  directEditCloseAll();
  return self.btnClicked != 'Abbrechen';
}

/**
 * Direct-Edit: Expand It
 */
var directEditAutoClose = false;
function directEditExpandIt( div_id, poser_id, autoClose)
{
  directEditAutoClose = autoClose;
  var coords = {x: 0, y: 0};
  var el = document.images[ poser_id];
  coords.x += el.width;
  coords.y += el.height;
  while (el) {
    coords.x += el.offsetLeft;
    coords.y += el.offsetTop;
    el = el.offsetParent;
  }
  var el = document.getElementById( div_id);
  el.style.left = coords['x'] + "px";
  el.style.top = coords['y'] + "px";
  el.style.position = "absolute";
  el.style.display = "block";
  el.style.visibility = "visible";
}


/**
 * Direct-Edit: Close All
 */
function directEditCloseAll()
{
  directEditCloseAllByClassName( "DirectEditActionList");
  directEditCloseAllByClassName( "DirectEditManageForm");
}


/**
 * Direct-Edit: Start/Stop Close
 */
var directEditActive;
function directEditStartClose() {
  if ( directEditAutoClose)
    directEditActive = window.setTimeout( "directEditCloseAll()", 1000);
}
function directEditStopClose() {
  if ( directEditActive) 
    window.clearTimeout( directEditActive);
}


/**
 * Direct-Edit: Close All By Class-Name
 */
function directEditCloseAllByClassName( name)
{
  directEditStopClose();
  // IE4
  var browser = navigator.appName;
  if (browser=="Microsoft Internet Explorer") {
    tempColl = document.all.tags( "div");
    for (i=0; i<tempColl.length; i++) {
    whichEl = tempColl(i);
      if (whichEl.className == name){
        whichEl.style.display = "none";
        whichEl.style.visibility = "hidden";
      }
    }
  } 
  // DOM
  else {
    tempColl = document.getElementsByTagName( "div");
    for (i=0; i<tempColl.length; i++) {
      whichEl = tempColl[i];
      if (whichEl.className == name) 
        whichEl.style.visibility = "hidden";
    }
  }
}


// ############################################################################
// ###
// ### Character-Format
// ###
// ############################################################################

var selectedText = "";

/**
 * browseObjsBtnClick:
 */
function browseObjsBtnClick(fmName, elUrlName, elTitleName)
{
  var title = "W%C3%A4hlen%20Sie%20ein%20Objekt%20aus";
  var url = "browse_objs";
  var elUrlValue = "";
  if (fmName.length>0 && elUrlName.length>0)
  {
    elUrlValue = document.forms[fmName].elements[elUrlName].value;
  }
  params = 'lang=ger';
  params += '&manage_lang=ger';
  params += '&fmName=' + escape(fmName);
  params += '&elUrlName=' + escape(elUrlName);
  params += '&elUrlValue=' + escape(elUrlValue);
  params += '&elTitleName=' + escape(elTitleName);
  open_frame(title,url,params,420,360,",resizable=yes,scrollbars=yes");
  return false;
}

/**
 * richedit
 */
function richedit(fmName, elName) 
{
  var edit= {}
  edit.src = document.forms[fmName].elements[elName].value;
  edit.styledata = document.styleSheets;
  v = document.forms[fmName].elements[elName].value;
  document.forms[fmName].elements[elName].value = window.showModalDialog("richedit_html?elValue=" + escape(v),"dialogWidth:670px;dialogHeight:400px;help:no;status:no;scroll:no;resizable:yes;");
}

  /**
   */
  function selectObject(path, title) 
  {
    fTag = 'a';
    if (path.indexOf('{$')==0 && path.lastIndexOf('}')==path.length-1)
      path = '<'+'dtml-var "getLinkUrl(\''+path+'\',REQUEST)">';
    taggedText = '<'+fTag+' href="'+path+'">'+selectedText+'</'+fTag+'>';
    tagSelectedText(fTag,taggedText);
  }

  /**
   * Un-Tag selected text.
   */
  function untagSelectedText(fTag) 
  {
    var elValue = getElValue();
    var elSplit = elValue.split(selectedText);
    var count = elSplit.length - 1;
    var startTag = '<'+fTag;
    var endTag = '</'+fTag+'>';
    elValue = '';
    for (i=0; i<elSplit.length; i++) 
    {
      s = elSplit[i];
      var j = s.indexOf(endTag);
      if (j < 0) {
        j = s.indexOf(endTag.toUpperCase());
      }
      if (i > 0 && j==0)
        s = s.substring(endTag.length,s.length);
      var j = s.lastIndexOf(startTag);
      if (j < 0) {
        j = s.lastIndexOf(startTag.toUpperCase());
      }
      if (i < elSplit.length-1 && j >= 0 && s.charAt(s.length-1) == '>')
      {
        s = s.substring(0,j);
      }
      elValue += s;
      if (i<elSplit.length-1)
        elValue += selectedText;
      setElValue( elValue);
      // Remove selection.
      if ( document.selection) {
        document.selection.empty();
      }
    }
  }

  /**
   * Tag selected text.
   */
  function tagSelectedText(fTag, taggedText) 
  {
    if (self.el.createTextRange && self.el.caretPos) {
      var caretPos = self.el.caretPos;
      caretPos.text =
        caretPos.text.charAt(caretPos.text.length - 1) == " " ?
          taggedText + " " : taggedText;
    }
    else {
      elSplit = getElValue().split( selectedText);
      elValue = '';
      for (i=0; i<elSplit.length; i++) {
        s = elSplit[i];
        elValue += s;
        if (i<elSplit.length-1)
          elValue += taggedText;
      }
      setElValue( elValue);
    }
    // Remove selection.
    if ( document.selection) {
      document.selection.empty();
    }
  }

  /**
   * Set text-format.
   */
  function setTextFormat(fTag) 
  {
    if (document.selection)
    {
      selectedText = document.selection.createRange().text;
    }
    else if (self.el.selectionStart)
    {
      var start = self.el.selectionStart;
      var end = self.el.selectionEnd;
      selectedText = getElValue().substring(start,end);
    }
    else
      return;
    if (selectedText.length > 0) {
      selectedText = selectedText.replace(new RegExp('([\\f\\n\\r\\t\\v ])+', 'g')," ");
      while (selectedText.length > 0 && selectedText.charAt(selectedText.length-1) == ' ')
        selectedText = selectedText.substr(0,selectedText.length-1);
      var elValue = getElValue();
      var elSplit = elValue.split(selectedText);
      var removeTags = false;
      if (elSplit.length>1) {
        for (i=0; i<elSplit.length; i++) {
          removeTags |= elSplit[i].indexOf('</'+fTag+'>')==0;
          removeTags |= elSplit[i].indexOf('</'+fTag.toUpperCase()+'>')==0;
        }
      }
      if (removeTags) {
        untagSelectedText(fTag);
      }
      else if (fTag == 'a' && selectedText.indexOf("http://") < 0 && selectedText.indexOf("@") < 0) {
        if ( self.el.form) {
          browseObjsBtnClick('','','');
        } else {
          browseObjsBtnClick('None','','');
        }
      } 
      else {
        taggedText = '<'
        taggedText += fTag;
        if (fTag == 'a') {
          if (selectedText.indexOf("@")>0)
            taggedText += ' href="mailto:' + selectedText + '"';
          else if (selectedText.indexOf("http://") < 0)
            taggedText += ' href="http://' + selectedText + '" target="_blank"';
          else
            taggedText += ' href="' + selectedText + '" target="_blank"';
        }
        else if (fTag == 'abbr') {
          taggedText += ' title=""'
          taggedText += ' lang="ger"'
        }
        else if (fTag == 'acronym') {
          taggedText += ' title=""'
          taggedText += ' lang="ger"'
        }
        else if (fTag == 'span') {
          taggedText += ' lang="ger"'
        }
        taggedText += '>' + selectedText + '</' + fTag + '>';
        tagSelectedText(fTag,taggedText);
      }
    }
  }
  
  /**
   * Get element-value.
   */
  function getElValue()
  {
    return self.el.value;
  }
  
/**
 * Set element-value.
 */
function setElValue(elValue)
{
  self.el.value = elValue;
}
  
/**
 * Set text-format for input.
 */
function setTextFormatInput(fTag, fmName, elName, divId) 
{
  self.el = document.forms[ fmName].elements[ elName];
  setTextFormat(fTag);
  if ( divId) {
    var div = document.getElementById( divId);
    div.innerHTML = getElValue();
  }
}

/**
 * Store caret.
 */
function storeCaret (textEl) 
{
  if (textEl.createTextRange) {
    textEl.caretPos = document.selection.createRange().duplicate();
  }
}


// ############################################################################
// ### calendarBtnClick:
// ############################################################################
function calendarBtnClick (fmName, elName, manage_lang) 
{
  open_function("f_kalender?manage_lang="+manage_lang+"&elName=" + elName + "&fmName=" + fmName,170,190,",resizable=no,scrollbars=no");
}


// ############################################################################
// ### get_url:
// ############################################################################
function get_url (url, k0 ,v0 ,k1 ,v1 ,k2 ,v2 ,k3 ,v3 ,k4 ,v4 ) 
{
  if (k0 && v0) url += "?" + k0 + "=" + escape(v0);
  if (k1 && v1) url += "&" + k1 + "=" + escape(v1);
  if (k2 && v2) url += "&" + k2 + "=" + escape(v2);
  if (k3 && v3) url += "&" + k3 + "=" + escape(v3);
  if (k4 && v4) url += "&" + k4 + "=" + escape(v4);
  return url;
}


// ############################################################################
// ### open_frame:
// ############################################################################
function open_frame(title,url,params,width,height,options)
  {
    href = "f_frame";
    href += "?" + params;
    href += "&p_url=" + url;
    href += "&p_title=" + title;
    self.msgWindow = open(href,"msgWindow","width=" + width + ",height=" + height
      + ",screenX=" + (screen.width-width)/2
      + ",screenY=" + (screen.height-height)/2
      + ",dependent=yes"
      + ",left=" + (screen.width-width)/2
      + ",top=" + (screen.height-height)/2
      + options
      );
    if (self.msgWindow) {
      self.msgWindow.focus();
      if (self.msgWindow.opener == null) self.msgWindow.opener = self;
    }
  }


// ############################################################################
// ### open_function:
// ############################################################################
function open_function(url,width,height,options)
  {
    self.msgWindow = open(url, "Window", "width=" + width + ",height=" + height
      + ",screenX=" + (screen.width-width)/2
      + ",screenY=" + (screen.height-height)/2
      + ",dependent=yes"
      + ",left=" + (screen.width-width)/2
      + ",top=" + (screen.height-height)/2
      + options
      );
    if (self.msgWindow) {
      self.msgWindow.focus();
      if (self.msgWindow.opener == null) self.msgWindow.opener = self;
    }
  }
