/* Javascript-Funktionen welche sowohl in den Webauftritten
wie auch im administrativen Bereich benoetigt werden */

// PDF
var pdfFilename  = "";
var showPDF      = "false";
var savePDF      = "true";
var pdfMail      = "";
var mailDebug    = "false";
var pdf_destinationFileName = "";
var pdf_diffrentPath = "";
var pdf_deleteOriginal = ""; // Wenn leer dann wird nicht gelöscht; "true" bedeutet löschen

//Helpbutton
var split_id = "";
var body_obj = document.compatMode == "CSS1Compat" ? document.documentElement : document.body;
var button, id;

//window events - Funktion Help aufrufen
if(window.addEventListener){
  window.addEventListener('load',Help,false);
}else if(window.attachEvent){
  window.attachEvent('onload', Help);
}

// Ajax-Funktionen
function createAjaxRequest()  {
  try  {
    var request = new XMLHttpRequest();
  }
  catch(ex)  {
    try  {
      var request = new ActiveXObject("MSXML2.XMLHTTP");
    }
    catch(ex)  {
      var request = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return request;
}
function sendAjaxRequest(method, url, asynchron, responseHandler)  {
  var resObject = createAjaxRequest();

  if(responseHandler)
    resObject.onreadystatechange = function()  {
      responseHandler(resObject);
    }

  if(method.toLowerCase() == "get")  {
    resObject.open(method, url, asynchron);
    resObject.send(null);
  }
  else if(method.toLowerCase() == "post")  {
    var toSend = url.split("?");

    resObject.open(method, toSend[0], asynchron);
    resObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    if(toSend[1])  {
      resObject.setRequestHeader("Content-length", toSend[1].length);
      resObject.send(toSend[1]);
    }
    else  {
      resObject.send(null);
    }
  }
  else  {
    alert("Fehler bei der Parameterübergabe!");
  }

  if(!asynchron && responseHandler)
    responseHandler(resObject);
}

/* PDF-Funktionen */
function createPDF(args)  {

  var icon = "[§fgetpicr_16006§]";
  var message = "PDF wird erzeugt...";
  var smalltext = "Sie können diese Meldung<br />" +
                  "schliessen. Eventuell folgende<br />" +
                  "Prozesse starten automatisch!";

  if(document.getElementById("createpdf") == null)  {
    buildIndikator(icon, message, smalltext);
  }
  else  {
    changeIndikator(icon, message, smalltext);
    document.getElementById("createpdf").style.display = "inline";
  }

  // uebergebene Parameter merken
  var arr      = args.split("&&");
  var source   = arr[0];  // uebergebene Source
  var noheader = arr[1];  // wird "noheader" übergeben erzeugt das PDF Tool keinen Header (nur bei UFZ Seiten relevant)
  savePDF      = arr[2];  // PDF zum Download anbieten?
  pdfMail      = arr[3];  // als Email versenden
  mailDebug    = arr[4];

  try  {
    // escape(source) wurde mit encodeURIComponent(source) ersetzt damit alle Sonderzeichen umgewandelt werden (04.10.10 AnM)
    sendAjaxRequest("post", "htmltopdf/coma.createpdf.php?source=" + encodeURIComponent(source) + "&header=" + noheader, true, handlePDFResponse);
  }
    catch(ex)  {
  }
}

/* BAUSTELLE - AnM
----------------------------*/
/**
  * Erzeugt eine PDF Datei und übergibt den Response an die CallBackFunktion.
  * Im Erfolgsfall kommt der Name der PDF Datei zurück.
  *
  * createIndikator - true/false  Bei true wird die normale "PDF wird erzeugt" Meldung angezeigt.
  *
  * Wird bei noheader true übergeben wird der UFZ Header ausgelassen.
  */
function createPDFAndGetName(source, callbackFunction, createIndikator, noheader) {
  noheader = (noheader) ? '&header=noheader' : '';

  var icon = "[§fgetpicr_16006§]";
  var message = "PDF wird erzeugt...";
  var smalltext = "Sie können diese Meldung<br />" +
                  "schliessen. Eventuell folgende<br />" +
                  "Prozesse starten automatisch!";

  if (createIndikator == true) {
    if(document.getElementById("createpdf") == null)  {
      buildIndikator(icon, message, smalltext);
    }
    else  {
      changeIndikator(icon, message, smalltext);
      document.getElementById("createpdf").style.display = "inline";
    }
  }

  sendAjaxRequest("post", "htmltopdf/coma.createpdf.php?source=" + encodeURIComponent(source) + noheader, false, callbackFunction);
}


/**
  * Erzeugt anhand des Übergebenen Codes eine PDF und Kopiert sie vom Server auf den Lokalen Rechner.
  * Die Datei kann dabei auch umbenannt werden.
  *
  * @param source - HTML Quellcode der in die PDF geschrieben werden soll
  * @param destinationFileName - Name der kopierten Datei mit .pdf als Endung (optional) (Standardwert = "" bedeutet: selber Name wie erzeugte pdf Datei)
  * @param diffrentPath - Gibt den Pfad an in den die Datei kopiert werden soll !mit letztem (Back)Slash (optional) (Standardwert = "" bedeutet: Lokal auf C: kopiert)
  * @param deleteOriginal - Löscht die originale (erzeugte) Datei (optional)
  * @param noheader - Wenn true übergeben, dann wird der UFZ header nicht eingeblendet (optional)
  *
  * AnM 20.10.10
  * Auskommentiert weil diese Funktion nur für Frau Katterfeld genutzt wurde. Für weitere verwendung ist es nicht vogesehn.
  *
function createAndMovePDF(source, destinationFileName, diffrentPath, deleteOriginal, noheader)  {
  var icon = "[§fgetpicr_16006§]";
  var message = "PDF wird erzeugt...";
  var smalltext = "Sie können diese Meldung<br />" +
                  "schliessen. Eventuell folgende<br />" +
                  "Prozesse starten automatisch!";

  if(document.getElementById("createpdf") == null)  {
    buildIndikator(icon, message, smalltext);
  }
  else  {
    changeIndikator(icon, message, smalltext);
    document.getElementById("createpdf").style.display = "inline";
  }

  pdf_destinationFileName = (destinationFileName) ? destinationFileName : "";
  pdf_diffrentPath = (diffrentPath) ? diffrentPath : "";
  pdf_deleteOriginal = (deleteOriginal) ? deleteOriginal : "";

  noheader = (noheader) ? '&header=noheader' : '';

  try  {
    // 3. Parameter muss false sein, denn wenn diese Funtion mehrere male hintereinander aufgerufen wird kommen die Anfragen sonst durcheinander.
    // (der Name der Datei wird dann mit der des nächsten Aufrufs überschrieben)
    sendAjaxRequest("post", "htmltopdf/coma.createpdf.php?source=" + encodeURIComponent(source) + noheader, false, handlePDFMoveResponse);
  }
    catch(ex)  {
  }
}
function handlePDFMoveResponse(resObject)  {

  if(resObject.readyState == 4 && resObject.responseText != "")  {
    pdfFilename = resObject.responseText;

    var requestString = 'htmltopdf/coma.copypdf.php';
    requestString += '?baseFileName=' + pdfFilename;

    // Wenn die Werte leer sind müssen sie nicht übergeben werden. coma.copypdf.php nimmt dann die Standardwerte.
    if (pdf_destinationFileName != "") {
      requestString += '&destinationFileName=' + pdf_destinationFileName;
    }
    if (pdf_diffrentPath != "") {
      requestString += '&diffrentPath=' + pdf_diffrentPath;
    }
    if (pdf_deleteOriginal != "") {
      requestString += '&deleteOriginal=' + pdf_deleteOriginal;
    }

    try {
      sendAjaxRequest("post", requestString, true, handlePDFAfterMoveResponse);
    }
    catch (ex) {

    }
  }
}
function handlePDFAfterMoveResponse(resObject) {
  if(resObject.readyState == 4 && resObject.responseText != "")  {
    var value = resObject.responseText;

    document.getElementById('content').innerHTML += '<br />' + pdf_destinationFileName + ' [' +  value + ']';
    document.getElementById("createpdf").style.display = "none";
  }
}

/*--------------------------*/

function handlePDFResponse(resObject)  {

  if(resObject.readyState == 4 && resObject.responseText != "")  {
    pdfFilename = resObject.responseText;

    if(showPDF == "true")  {
      location.href = "htmltopdf/out/" + pdfFilename;
    }
    else if(savePDF == "true")  {
      location.href = "htmltopdf/coma.savepdf.php?filename=" + pdfFilename;
    }
    if(typeof(pdfMail) != "undefined")  {

      var message   = "Email/Fax versenden...";
      var icon      = "[§fgetpicr_16065§]";
      var smalltext = "Bei Fehlern erhalten<br />" +
                      "Sie eine entsprechende<br />" +
                      "Meldung!";
      changeIndikator(icon, message, smalltext);

      var mailargs = pdfMail.split(";");

      var params  = "?";
      params += "mailfrom="    + mailargs[0];
      params += "&";
      params += "mailto="      + mailargs[1];
      params += "&";
      params += "mailsubject=" + mailargs[2];
      params += "&";
      params += "mailcontent=" + mailargs[3];
      params += "&";
      params += "filepath="    + "/www/data/" + pdfFilename;
      params += "&";
      params += "debug="       + mailDebug;

      sendAjaxRequest("get", "htmltopdf/coma.sendpdf.php" + params, true, handleMailResponse);
    }
    else  {
      document.getElementById("createpdf").style.display = "none";
    }
  }
}
function handleMailResponse(resObject)  {
  if(resObject.readyState == 4)  {
    if(resObject.responseText == "")  {
      var message   = "Email/Fax versandt!";
      var icon      = "[§fgetpicr_16065§]";
      var smalltext = "Die Übermittlung Ihrer Daten<br />" +
                      "ist erfolgreich verlaufen.";
      changeIndikator(icon, message, smalltext);
    }
    else  {
      var message   = "Email/Fax nicht versandt!";
      var icon      = "[§fgetpicr_16065§]";
      var smalltext = "Die Übermittlung Ihrer Daten war<br />" +
                      "nicht erfolgreich. Benachrichtigen<br />" +
            "Sie bitte die WKDV!";
      changeIndikator(icon, message, smalltext);
    }
  }
}

function buildIndikator(icon, message, smalltext)  {
  var createpdf_div =  document.createElement("div");
  createpdf_div.id = "createpdf";

  createpdf_div.innerHTML =
  '<img src="[§fgetpicr_16063§]" onclick="document.getElementById(\'createpdf\').style.display=\'none\'"' +
                              'onmouseover="this.src=\'[§fgetpicr_16064§]\'"' +
                  'onmouseout="this.src=\'[§fgetpicr_16063§]\'"' +
  'width="14" height="14" alt="Schliessen" title="Schliessen" id="closecross" />' +

  '<img src="' + icon + '" class="floatright clearright" width="28" height="32" alt="' + message + '" title="' + message + '" id="indicon" />' +
  '<p id="indtodo">' + message + '</p>' +
  '<p id="indtext">' + smalltext + '</p>';

  document.body.appendChild(createpdf_div);

  with(document.getElementById("createpdf").style)  {
    top = (getBodyDimension()['hoehe'] / 2) - 15 + "px";
    left = (getBodyDimension()['breite'] / 2) - 90 + "px";
  }
}

function changeIndikator(icon, message, smalltext)  {
  with(document.getElementById("indicon"))  {
    src = icon;
    alt = message;
    title = message;
  }

  document.getElementById("indtodo").innerHTML = message;
  document.getElementById("indtext").innerHTML = smalltext;
}

function getBodyDimension()  {
  var body_obj = document.compatMode == "CSS1Compat"
               ? document.documentElement
               : document.body;

  var dimension = new Array();
  dimension['breite'] = body_obj.clientWidth;
  dimension['hoehe'] = body_obj.clientHeight;
  return dimension;
}

function createCSSHeaderTag(style, id){
  var header = document.getElementsByTagName('head')[0];
  var css    = document.createElement('link');

  if(id) css.setAttribute('id', id);

  css.rel  = 'stylesheet';
  css.type = 'text/css';

  if(0 != style && '' != style) css.href = style;

  header.appendChild(css);
}

function createJSHeaderTag(filename, id){
  var header = document.getElementsByTagName('head')[0];
  var js     = document.createElement('script');

  if(id)
    js.setAttribute('id', id);

  js.setAttribute('type', 'text/javascript');
  js.setAttribute('src', '/data/data_intern/' + filename);
  header.appendChild(js);
}

function createJSHeaderTagNew(filename, id){
  var header = document.getElementsByTagName('head')[0];
  var js     = document.createElement('script');

  if(id)
    js.setAttribute('id', id);

  js.setAttribute('type', 'text/javascript');
  js.setAttribute('src', "[§fgetlinkr§]" + filename);  //getlinkr gibs noch nich
  header.appendChild(js);
}

//Funktion zum Suchen von Elementen mittels Klassennamen
function getElementsWithClassName(tag, cls){
  var arTags = document.getElementsByTagName(tag);
  var arRet = new Array();

  for(var i=0;i<arTags.length;i++){
    var regexp = new RegExp("(^|\s+)"+cls+"($|\s+)");

    if(arTags[i].className.match(regexp)){
      arRet.push(arTags[i]);
    }
  }

  return arRet;
}

//Helpbutton Funktionen
function Help()  {
  var arHelpbuttons = getElementsWithClassName('input', 'help');
  var arHelpDivs = getElementsWithClassName('div', 'help_c');

  if((arHelpbuttons.length > 0) && (arHelpDivs.length > 0)){
    for(var i=0;i<arHelpbuttons.length;i++){
      arHelpbuttons[i].id = "b_help_"+i;
      arHelpbuttons[i].onclick = show_Help;
      arHelpDivs[i].id = "help_"+i;
      document.body.onclick = hide_Help;
    }
  }
}

function show_Help(Ereignis)  {

  if(!Ereignis)  {
      Ereignis  = window.event;
      button    = Ereignis.srcElement;
      id        = Ereignis.srcElement.id;
  }
  else  {
      button    = Ereignis.target;
      id        = Ereignis.target.id;
  }

  split_id = id.substring(2, id.length);

  var winwidth    = body_obj.clientWidth;
  var winheight   = body_obj.clientHeight;

  if(document.getElementById(split_id))  {
     with(document.getElementById(split_id).style)  {
       if (display == 'none')  {
    display = 'inline';
      }
       else  {
         display = 'none';
       }
     }
  }
}

function hide_Help(Ereignis)  {
  if(!Ereignis)  {
      Ereignis  = window.event;
      id        = Ereignis.srcElement.id;
  }
  else  {
      id        = Ereignis.target.id;
  }

  var arHelpbuttons = getElementsWithClassName('input', 'help');
  split_nr  = id.substring(id.lastIndexOf("_")+1, id.length);
  for (var a=0; a<arHelpbuttons.length; a++) {
    if (a != split_nr) {
      if(document.getElementById("help_" + a))  {
        with(document.getElementById("help_" + a).style)  {
          display = "none";
        }
      }
    }
  }
}

function $()  {
  var elements = new Array();

  for(var i = 0; i < arguments.length; i++)  {
    var element = arguments[i];

    if(typeof element == 'string') element = document.getElementById(element);
    if(arguments.length == 1) return element;

    elements.push(element);
  }
  return elements;
}
