/* Globale Variablen */
var iActiveSite  = 1;               // Artikel --- Site Switcher -- Standard Start Seite im Artikel
var sSiteID      = 'site_';         // Artikel --- Site Switcher -- Vorlage für id des site Containers
var sSiteIDLink  = '_link';         // Artikel --- Site Switcher -- Vorlage für id des site Links
var nEditor      = null;            // Artikel --- Editor Iframe -- Textarea
var nActiveIFrame= null;            // Artikel --- Editor Iframe -- Aktives Iframe
var aIFrames     = null;            // Artikel --- Editor Iframe -- Liste der IFrames
var iSuperLinks  = 1;               // Artikel --- Editor IFrame -- Letzte Footer Link Nr
var oFootNotes   = null;            // Artikel --- Foot Notes    -- Foot Notes Container
var iMySite      = 0;               // Artikel --- Editor IFrame -- Seitenzahl
var bOpenEditor  = false;           // Artikel --- Foot Notes    -- Aktiver Editor
var bEdited      = false;           // Artikel --- Foot Notes    -- Flag, ob es editiert wurde
var bEditorJS    = false;
var sLastQuelleDeleteRandom = "";   // Artikel --- Foot Notes    -- Speicher der zur sicherheit vor Doppelklicks beim löschen von quellen gebraucht wird
var aSites       = $A();            // Artikel --- Sites         -- Seitenamen
var nLastHeader = null;             // Artikel --- Editor IFrame -- Reference Node Für Header (Safari)
var bToolbarState = true;           // Artikel --- Top Toolbar   -- Max or Min State
var nLastSelectedArticle = null;    // Artikel --- Article List  -- Speicher Letztes ausgewählten Artikel Link
var oMyFlags    = {                 // Artikel --- Editor IFrame -- Flags
    caption:false,
    list:false,
    link:false,
    footnote:false
};
var oArgs = null;
var autoSaver = null;
var nOldCategories = null;
var sLastRandom = null;     // Artikel -- Suche          -- Zufallszahl gegen zuspät ankommende Ajax Requests 
var sDomain = "/ajax/";      // Ajax
var sActiveTab   = '';      // Artikel --- Tabs          -- Aktives Tab
var oActiveSite  =$A([0,0]);// Artikel --- Kapitelwechsel-- Aktive Seite
var aChWidths    = [];      // Artikel --- Kapitelwechsel-- Breite der Einträge
var iChSlidePos  = 0;       // Artikel --- Kapitelwechsel-- Momentane Position
var aFounds      = {};      // Artikel --- Search Tool   -- Alle Funde
var aMarks       = $A([]);  // Artikel --- Search Tool   -- Alle Markierungn
var iImagesPos   = 0;       // Artikel --- Slide Pos     -- Position der Bilder
var aEntryList   = null;    // Liste   --- Daten
var aEntryListNow= null;    // Liste   --- Daten         -- Gefiltert
var iEntryListPos= 0;       // Liste   --- Einträge      -- Seitenzahl
var iCat1Value   = 0;       // Liste   --- Kategorien    -- Gespeicherte Cat1
var iCat2Value   = 0;       // Liste   --- Kategorien    -- Gespeicherte Cat2
///var aMonthNames = $A([
//    "Januar",
//    "Februar",
//    "März",
//    "April",
//    "Mai",
//    "Juni",
//    "Juli",
//    "August",
//    "September",
//    "Oktober",
//    "November",
//    "Dezember"
//]);
var aMonthNames = $A([
    aTrans['month_0'],
    aTrans['month_1'],
    aTrans['month_2'],
    aTrans['month_3'],
    aTrans['month_4'],
    aTrans['month_5'],
    aTrans['month_6'],
    aTrans['month_7'],
    aTrans['month_8'],
    aTrans['month_9'],
    aTrans['month_10'],
    aTrans['month_11']
]);

/* Etc */
// Erschafft nodes mit Prototype erweiterung anhande = <sTag />
function $N(sTag){
    if(sTag == '#text'){ return document.createTextNode((arguments[1])?arguments[1]:"");}
    return $(document.createElement(sTag));
} // function

/* Selektion & Fokus */
// gibt die koordinaten der Selektion von nNode = [anfang:int,ende:int]
function getSelectionOf(nNode){ // die positionen
    if(document.all){ // IE
        nNode.focus(); // bugfix
        var oRange = document.selection.createRange();
        var oRangeClone = oRange.duplicate();
        oRangeClone.moveToElementText(nNode);
        oRangeClone.setEndPoint('EndToEnd', oRange);
        return [
        (oRangeClone.text.length - oRange.text.length),
        (oRangeClone.text.length)
        ];
    } else { // nicht IE
        return [nNode.selectionStart,nNode.selectionEnd];
    } // if(document.all)
} // function

// gibt den markierten Text zurück = str
function getSelectionText(){
    if(document.all){ // IE
        return document.selection.createRange().text;
    } else { // nicht IE
        return window.getSelection().toString();
    } // if(document.all)
} // function

String.prototype.ltrim = function () {
    return (this.replace(/^\s+/,""));
};
String.prototype.rtrim = function () {
    return (this.replace(/\s+$/,""));
};
String.prototype.trim = function () {
    return (this.replace(/\s+$/,"").replace(/^\s+/,""));
};
String.prototype.trimToSingle = function () {
    return(this.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""));
};
String.prototype.removeWhiteSpaces = function () {
    return (this.replace(/\s+/g,""));
};
/* fügt Browser übergreifend events hinzu */
function addEvent(nNode, sName, fHandler){
    nNode = Element.extend(nNode);
    if(document.all){
        //nNode.attachEvent("on" + sName,fHandler);
        // Not tested, see:
        // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
        nNode["e"+sName+fHandler] = fHandler;
        nNode.attachEvent( "on"+sName, nNode[["e"+sName+fHandler]] );
    }else{
        nNode.addEventListener(sName,fHandler,true);
    }
}
/* @see addEvent, nur mit mehrern */
function addEvents(nNode, aNames, fHandler){
    for(var i = 0, len = aNames.length; i < len; i++){
        addEvent(nNode, aNames[i], fHandler);
    }
}
/* entfernt Browser übergreifend events */
function removeEvent(nNode, sName,fHandler){
    if(document.all){
        //nNode.dettachEvent("on" + sName,fHandler);
        // Not tested, see:
        // http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
        nNode.detachEvent( "on"+sName, nNode["e"+sName+fHandler] );
        nNode["e"+sName+fHandler] = null;

    }else{
        nNode.removeEventListener(sName,fHandler,true);
    }
}
/* @see removeEvent, nur mit mehrern */
function removeEvents(nNode, aNames, fHandler){
    for(var i = 0, len = aNames.length; i < len; i++){
        removeEvent(nNode, aNames[i], fHandler);
    }
}

function checkSite(iSite){
    if (iSite == null || iSite == 0){
        iSite = iMySite;
    } else {
        iMySite = iSite;
    }
    return iSite;
}

/* Hilfsfunktion, gibt das element zurück was den event ausgelöst hat */
function getEventTarget(e){
    var nTarget = null;
    if(!e){
        var e = window.event;
    } else if(typeof e.nodeName == "string"){ // test ob es schon ein element ist
        return e;
    }
    if(e.target){
        nTarget = e.target;
    } else {
        nTarget = e.srcElement;
    }
    if(nTarget.nodeType == 3){
        nTarget = nTarget.parentNode;
    }
    return nTarget;
}


