// (C) G+H Webservice GbR 2005,2006,2007 D.Boock, K.koegler
// globals

fbrowser = null;

_replace = function(target, stuff) {
    /* NS6, Mozilla und Firefoxx koennen innerHTML nicht richtig,        
       daher wird ihnen geholfen
    */
    var el = $(target);
    if(document.getElementById && !document.all) {
        var rng = document.createRange();
        rng.setStartBefore(el);
        var htmlFrag = rng.createContextualFragment(stuff);
        while (el.hasChildNodes()) {
            el.removeChild(el.lastChild);
        }
        el.appendChild(htmlFrag);

    } else { //Die anderen schon..
        el.innerHTML = "";
        el.innerText = "";
        el.innerHTML = stuff;
    }
    //"Redrawing-Bug" im Mozilla
    /*
    var cont=$("des_content")
    var temper=cont.offsetHeight;
    cont.style.height=(temper-1)+"px";
    cont.style.height=temper+"px";
    */
},    

_fbrowser = function() {
    this.dialog = $('fshelper');
    this.view_url='';
    bindMethods(this);
}

_fbrowser.prototype = {
    "resize_dialog": function() {
        var dim = getElementDimensions(this.dialog);
        dim.h = dim.h + 31;
        setElementDimensions(this.dialog, dim);
        var upl = $('uploader')
        dim = getElementDimensions(upl);
        dim.h = dim.h + 31;
        setElementDimensions(upl, dim);
    },
    
    "close_dialog": function() {
        untip('unlock');
        _replace(this.dialog,'');        
        setTimeout('ahah("'+this.view_url +'/fsview", "fsbox")', 30);
    },
    
    "filenew": function(pather) {   
        _replace(this.dialog,'<iframe style="border-top-width:10px;" src="'+pather+'/uploader" scrolling="no" frameborder="0" id="uploader"/>');
        this.view_url=pather;
        tip('fshelper', 'lock');
        document.onmousemove=''; // XXX wtf? 
    },
        
    // this inline html is some evil sh*t
    "foldernew": function(pather, target) {
        _replace(this.dialog, '<div class="fs_questionbox"><div class="question">Bitte den Namen f&uuml;r den neuen Ordner eingeben: </div>'+
                '<form class="fsforms" id="fs_newfolderform" name="fs_newfolderform" action="javascript:evalform(\'fs_newfolderform\', \''+pather+'/mkfolder\', \''+target+'\');">'+
                '<input style="margin-bottom:10px;margin-top:5px;" class="fstextfeld" name="newfolder" type="text" size="30" maxlength="30" value="Neuer_Ordner"/><br/><br/>'+
                '<input class="fsbutton" type="submit" name="makefolder" value="Ordner anlegen"></form>'+
                '<input class="fsbutton" style="margin-left:5px;" type="submit" name="dofalse" value="abbrechen" onclick="fs_aktions(\'notcommit\');"></div>');
        tip('fshelper', 'lock');
        document.onmousemove="";        
    },
    
    "fdelete": function(pather, target) {
        _replace(this.dialog,'<div class="fs_questionbox"><div class="question">Diese Datei/Ordner L&ouml;schen? </div>'+
                '<div style="font-size:10px;line-height:10px;font-family:Verdana;font-style:normal;font-variant: normal;color:#002569;padding:5px;">'+
                '&quot;'+pather.replace(/^.*\//, "")+'&quot;</div>'+
                '<form class="fsforms" id="fs_deleteform" name="fs_deleteform" action="javascript:evalform(\'fs_deleteform\', \''+pather+'/delete\', \''+target+'\');">'+
                '<input class="fsbutton" style="margin-bottom:5px;margin-top:5px;" type="submit" name="deletetrue" value="Ja"></form>'+
                '<input class="fsbutton" style="margin-left:5px;margin-bottom:5px;margin-top:5px;"  type="reset" name="deletefalse" value="Nein" onclick="fs_aktions(\'notcommit\');"></div>');
        tip('fshelper', 'lock');
        document.onmousemove="";
    }

}

xfer = function() {    
    this.deferred = null;
    bindMethods(this);
}

xfer.prototype = { 
    "ahahDone": function(target, req) {
        var responseblurb = req.responseText;
        _replace(target, responseblurb);
        correctContentUrls();
        
        //Fals es regelmaessig gupdatet werden soll.
        // old code
        /*
        if (delay != undefined) {
           //setTimeout( 'ahah( "' + url + '", "' + target + '", ' + delay + ')', delay );
           setTimeout( 'ahah( "' + url + '", "' + target + '")', delay );
        }*/
        if ($("setfunktion")) {
            logWarning('setfunktion encountered eek');
            document.resizeme=$("setfunktion").innerHTML;
            afterresize();
        }        
    },
    
    "ahahErr": function(target, req) {
        log('ahaErr', target, req)
        var _statusT;
        if (typeof(req.statusText) != "undefined" ) {
            _statusT=req.statusText;
        } else {
            _statusT="Not found";
        }
        _replace(target, '<div style="position:absolute;bottom:50px;right:100px;font-size:20px;line-height:20px;color:#002569;">Fehler...'+_statusT+'</div>');                
    },
    
    "ahah": function(url, target, type, data) {
        if (this.deferred) {
            this.deferred.cancel();
        }
        var target = $(target);
        _replace(target, '<div style="position:absolute;bottom:50px;right:100px;font-size:20px;line-height:20px;color:#002569;">waiting...</div>');
        var d;
        if (typeof(type)!="undefined" && type.toUpperCase() == "POST") {
            d = doXHR(url, {method: 'POST', sendContent: data, headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}});
        } else {
            d = doXHR(url);
        }
        var self = this;
        d.addBoth( function(result) {
            self.deferred = null;
            return result;
        });
        d.addCallback(this.ahahDone, target);
        d.addErrback(this.ahahErr, target);       
    }
}


// adapters to legacy

function ahah(url, target, type, data) {
    logWarning('old ahah', url, target, type, data);
    new xfer().ahah(url, target, type, data);
}

FILE_BROWSER = {
    fshelper_close: function() {
        logWarning('legacy FILE_BROWSER.fshelper_close');
        fbrowser.close_dialog();
    }
}

function fs_aktions(aktion, pather, target) {
    if (!fbrowser) {
        logWarning('TODO: init fbrowser');
        fbrowser = new _fbrowser();
    }
    switch (aktion) {
      case "delete":
            logWarning('legacy fs_aktions delete');
            fbrowser.fdelete(pather, target);
            break;
      case "foldernew":
            logWarning('legacy fs_aktions foldernew');
            fbrowser.foldernew(pather, target);
            break;
      case "filenew":
            logWarning('legacy fs_aktions filenew');
            fbrowser.filenew(pather);
            break;
      case "notcommit":
          logError('legacy fs_aktions notcommit undead code') // should be dead
          //Das Objekt ausschalten
            if(document.getElementById("fs_upload_gif")) {
                document.getElementById("fs_upload_gif").style.display="none";

            }
            untip("unlock");
            document.onmousemove=mousemove;
        break;
      default:
        true;
        break;
    }
} 


// old stuff, obsolete???
document._CMS = false; //if set, reload cms toolbar in ahahDone
function updateCMSPanel(url) {
    logError('updateCMSPanel is broken')
    var _url = url.replace(/\/ahah/, '/cms_toolbar');
    new ahah(_url,'cms');
}


// same as orig without actually loading any content,
// since request by url _does_ work
//--kk
function startmypage_(theme, subtheme) {
    resizing();
    window.onresize=resize_slowed;
    document.menu=new menu(theme, subtheme);
}

//Drei Funktionen zum anpassen aller Breiten/Hoehen beim resizen
function resize_slowed() {
    document.resized=Math.random();
    window.setTimeout('resize_now("' + document.resized + '")', 300);
}

function resize_now(checker) {
    if (document.resized == checker) {
        resizing();
    }
}

function resizing() {
    var balk_min_width=60;
    var body_width=$("des_check").offsetWidth;
    var body_height=$("des_check").offsetHeight;
    var balk_max_width=Math.round(body_width/2);
    var balkpic_left=0;
    var balkpic_top=0;
    var balkpic_width;
    var balkpic_height;
    var balkpic_percent=70;
    var	menu_width;
    var balken_vertspace;
    var balken_horspace;
    var i, z, r, diff;

    for (i=balk_max_width;i>=balk_min_width; i--) {

        balkpic_top=((body_width-i)/23.3333)+70;
        balkpic_width=i/100*balkpic_percent;
        balkpic_height=balkpic_width*9.77;
        balken_vertspace=body_height-balkpic_top-balkpic_height;
        balken_horspace=i-balkpic_width;

        if (balken_vertspace >=10) {
            if (((body_width-i)%8) == 0 ) {
                break;
            }
        }
    }

    //Schoen rund machen
    balkpic_top=Math.round(balkpic_top);
    balkpic_width=Math.round(balkpic_width);
    balkpic_height=Math.round(balkpic_height);
    balken_vertspace=Math.round(balken_vertspace);
    balken_horspace=Math.round(balken_horspace);

    menu_width=body_width-i;
    var _menu = $("des_menu");
    var _balkpic = $("des_balkpic");
    var _content = $("des_content");
    $("des_balken").style.width=i+"px";
    _menu.style.width=menu_width+"px";
    _menu.style.left=i+"px";
    balkpic_top=($("menu1box").offsetHeight + $("des_banner").offsetHeight + $("menu2box").offsetHeight);
    _menu.style.height=balkpic_top+"px";
    _balkpic.style.width=balkpic_width+"px";
    _balkpic.style.height=balkpic_height+"px";
    _balkpic.style.left=Math.floor(balken_horspace/2)+"px";
    _balkpic.style.top=balkpic_top+"px";
    _content.style.top=balkpic_top+"px";
    _content.style.width=menu_width+"px";
    _content.style.left=i+"px";
    _content.style.height=body_height-balkpic_top+"px";

    //Buggy Mozilla baut den Rahmen zuletzt
    var _menu2box = $("menu2box");
    var _banner = $("des_banner");
    _menu2box.style.width="100%";
    if (_menu2box.offsetWidth != _banner.offsetWidth) {
        diff = _menu2box.offsetWidth - _banner.offsetWidth;
        _menu2box.style.width=(_menu2box.offsetWidth-diff*2)+"px";
    }

    //Opera ist faul. Mag keine % mit .
    for (i=menu_width;i>0;i--) {
        if(i%8==0) {
            var mywidthh=i/8;
            break;
        }
    }
    var myleftt=(menu_width-(8*mywidthh))/2;
    var mywidth=mywidthh;

    for (z=0;z<8;z++) {
        var _boxstyle_a = $("des_menu1box_"+z+"_a").style;
        var _boxstyle_p = $("des_menu1box_"+z+"_p").style;
        var _substyle = $("menu2_sub_"+z).style;
        _boxstyle_a.left=myleftt+"px";
        _boxstyle_a.width=mywidthh+"px";
        _boxstyle_p.left=myleftt+"px";
        _boxstyle_p.width=mywidthh+"px";
        _substyle.left=myleftt+"px";
        _substyle.width=mywidthh+"px";

        var myleft=0;
        var menu2boxes = $("menu2box_"+z).getElementsByTagName("div");
        for (r=0;r<menu2boxes.length;r++) {
            menu2boxes[r].style.left=myleft+"px";
            menu2boxes[r].style.width=mywidth+"px";

            myleft=myleft+mywidth+1;
        }

    myleftt=myleftt+mywidthh+1;
    $("menu2box_"+z).style.width=myleft+"px";
    }
    afterresize();

}

//Diese Funktion wird nach jedem resizen aufgerufen.
//Wird auch nach dem laden dyn. contents aufgerufen. in
//doc.resizeme ist jeweils eine funktion enthalten, die dyn. nachgeladenene
//contetn bearbeitet

function afterresize() {
    if (typeof(document.resizeme) != "undefined") {
        logError('resizeme is evil')
        eval(document.resizeme);
    }
}


//Content Laden

function load_content(url, theme, sub) {
    if (document.menu) { // --kk
        document.menu.showtheme(theme, sub);
    }
    new xfer().ahah(url, 'des_content')
}

//Drei Funktionen fuer die Startpage
function piccer() {
    if (document.getElementById("picbox")) {

        //ermittle Hoehe und Breite der picbox
        var _picbox = $('picbox');
        var hoehe = _picbox.offsetHeight;
        var breite = _picbox.offsetWidth;
        var stb=100;
        var banz=0;
        var hanz=0;
        var marginright;
        var mab=15;
        var i;
        var imagearray=new Array();
        var MAXPICS=45; // nr of startpics on server available

        banz = Math.floor(breite/(stb+mab));
        if ((banz%2) == 0) {
            banz--;
        }

        hanz = Math.floor(hoehe/(stb+mab));
        if ((hanz%2) == 0) {
            hanz--;
        }

        /*Erstelle Array mit B * H Elementen*/

        var vertmargin=Math.round((breite-(banz*stb))/(banz-1));
        var topmargin=Math.round((hoehe-(hanz*stb))/(hanz-1));

        if (topmargin >= vertmargin) {

            topmargin = vertmargin;

        } else {

            vertmargin=topmargin;
        }

        var topposition=Math.round((hoehe-(stb*hanz)-(topmargin*(hanz-1)) ) /2);
        var leftposition=Math.round((breite-(stb*banz)-(vertmargin*(banz-1)) )/2);

        for (i=0;i<banz*hanz;i++) {
            imagearray[i]=new Image;
            imagearray[i].src='/_static/desimg/startpics/Start_' + i%MAXPICS + '.jpg';

        }
        imagearray=randompics(imagearray);
        var logopic=Math.floor((banz*hanz)/2);
        imagearray[logopic].src='/_static/desimg/startpics/logo.png';

        //Alle vorhandenen Pics loeschen
        var vpics=_picbox.getElementsByTagName("img").length;

        for (i = 0; i < vpics; i++) {
            var knoten=document._picbox.firstChild;
            _picbox.removeChild(knoten);
        }

        for (i=0;i<banz*hanz;i++) {

            _picbox.appendChild(imagearray[i]);
            var _imgstyle = _picbox.getElementsByTagName("img")[i].style;
            _imgstyle.width=stb+"px";
            _imgstyle.height=stb+"px";

            //jeden banzten die topposition um stb+topmargin erhoehen,
            //und die leftposition wieder zurueck auf 0 setzen
            _imgstyle.position="absolute";
            _imgstyle.left=leftposition+"px";
            _imgstyle.top=topposition+"px";

            leftposition=leftposition + stb + vertmargin;

            if ((i%banz) == (banz-1)) {
                topposition=topposition + stb + topmargin;
                leftposition=leftposition=Math.round((breite-(stb*banz)-(vertmargin*(banz-1)) )/2);
            }

        }

        document.ihrplatz=Math.random();
        window.setTimeout("setihrplatz("+logopic+", "+ document.ihrplatz +")", 6000);
    }
}

function setihrplatz(logopic, ihrplatz) {
    if (document.ihrplatz == ihrplatz) {
        var _picbox = $("picbox");
        if (_picbox) {
            var myurl;
            myurl=_picbox.getElementsByTagName("img")[logopic].src;
            myurl=myurl.replace(/^.*\//,"");
            if (  myurl== "logo.png" ) {
                _picbox.getElementsByTagName("img")[logopic].src="/_static/desimg/startpics/ihr_platz.png";
            }
        }
    }
}

function randompics(imagearray) {
    var ziel=new Array();
    var l=imagearray.length;
    var pos;
    var i;

    for (var i=0; i<l; i++) {
        pos=Math.floor(Math.random()*imagearray.length);
        ziel[i] = imagearray[pos];
        imagearray.splice(pos,1);
    }
    return ziel;
}

function correctContentUrls() {
    /*
        Es gibt die Typen mit rel=:
            -pextern -> target="_blank"
            -pintern -> urls auf ahah-verwendung korrigieren --kk
            -wenn rel leer, nichts tun
    */
    var _links = $("des_content").getElementsByTagName("a");
    var link, url;
    for (var i=0; i<_links.length;i++) {
        link = _links[i]
        if (link.rel=="pintern" || link.rel=="p_intern") {
            url=link.href;
            url=url+'/ahah';
            url='javascript:load_content("'+url+'", '+ document.menu.aktivetheme.index +', '+ document.menu.aktivetheme.aktivechild.subindex +');';
            link.href=url;
            link.rel="";
        }
        if (link.rel == "pextern") {
            link.target="_blank";
        }
    }
}

function evalform(formid, url, targetId) {
    sendform(document.forms[formid], url, targetId)
}

function sendform(form, url, targetId) {
    var _formelements = form.elements
    var data=''
    for (var i=0; i<_formelements.length; i++) {
        var felement = _formelements[i]
        if ((felement.type=='checkbox' || felement.type=='radio') && (felement.checked!=true)) {
            continue
        }
        data += felement.name + '=' + encodeURIComponent(felement.value) + '&'
    }
    fs_aktions("notcommit");
    new xfer().ahah(url, targetId, "post", data);
}



