var articles = new Array(); //short article caching
var pagearray = new Array(); //page caching
var page = 1; // will be the last page we have been on
var searcharray = new Array(); //archive caching
var lastArchive = new Object(); //used to detect archive changes
var rssLoadArticle = 0;   //if user comes from rss link. this var will autoadjust as needed
var lightboxes = 0;



function init(){
    resize();

    //Lightbox.init.bind(Lightbox);
    
    // initialize our DHTML history
    dhtmlHistory.initialize();
    // subscribe to DHTML history change
    // events
    dhtmlHistory.addListener(historyChange);
    if (dhtmlHistory.isFirstLoad()) {
        if(dhtmlHistory.currentLocation){
            /*manual location fix for bookmarks*/
            var re = /^([^\d]+)(\d+)/;
            re.exec(dhtmlHistory.currentLocation);

            /*bookmark location fix*/
            if(RegExp.$1 == "page"){
                loadPage(RegExp.$2);
            }

            /*rss feeds*/
            if(RegExp.$1 == "rssarticle"){
                var url = "/ajax.php?id="+RegExp.$2+"&type=rssarticle";
                new Ajax.Request(url, {onSuccess: loadFromRss});
            }

            /*older rss feeds*/
            if(RegExp.$1 == "archivedArticle"){
                new Ajax.Updater('content', '/ajax.php?id='+RegExp.$2+'&type=archivedArticle');
            }
        }else{
            loadPage(page);
            dhtmlHistory.add("page"+page, page);
        }
    }

}

/** Our callback to receive history change events. */
function historyChange(location, data) {
    var id = data;
    var re = /^([^\d]+)(\d+)/;
    re.exec(location);
    
    /*page link*/
    if(RegExp.$1 == "page"){
        loadPage(RegExp.$2);
    }
    /*archive page/links*/
    if(RegExp.$1 == "search"){
        searcharray = null;
        searcharray = new Array();
        if(data.searcharray){
            searcharray = data.searcharray;
            if($('searchfield')){
                $('searchfield').value = data.query;
                doSearch(data.archive,data.id,data.searchstart);
                //alert('history loaded'+data.searchstart);
            }else{
                new Ajax.Updater('content', '/ajax.php?type=page&id=0',{asynchronous: false});
                //imitate search request:
                $('searchfield').value = data.query;
                doSearch(data.archive,data.id,data.searchstart);
            }
            //alert(data.searchstart+':'+data.query+'::'+id.query);
        }
    }

    /*rss feeds*/
    if(RegExp.$1 == "rssarticle"){
        var url = "/ajax.php?id="+RegExp.$2+"&type=rssarticle";
        new Ajax.Request(url, {onSuccess: loadFromRss});
    }
}

function resize(){
    var winW = 630, winH = 460;
    if(Prototype.Browser.IE){
        if (navigator.appName.indexOf("Microsoft")!=-1) {
            winW = document.body.offsetWidth;
            winH = document.body.offsetHeight;
        }
    }else{
        winW = window.innerWidth;
        winH = window.innerHeight;
    }
    $('content').style.height = winH-280;
}

function isEmpty(content){
    var re = /[^\s]+/;
    return !re.test(content);
}

function loadFromRss(req){
    var re = /^(\d+),(\d+)$/;
    re.exec(req.responseText);
    var pageid = RegExp.$1;
    var articleid = RegExp.$2;
    if(pageid!=0 && articleid!=0){
        rssLoadArticle = articleid; //global container. will autoload once page is loaded
        loadPage(pageid); //seite mit content laden für history....
        //loadFullArticle(articleid);
        //alert("pause");
        //$('content').scrollTop = $(articleid).offsetTop;
    }
}
function testRssLoad(){
    if(rssLoadArticle != 0){
        loadFullArticle(rssLoadArticle);
    }
}

function loadPage(id,forced){

    if(!forced || forced!=true){
        forced = false;
    }
    //cache last page
    if(page!=999999 && page!=id){
        pagearray[page] = $('content').innerHTML;
    }

    if(!forced && (pagearray[id] && !isEmpty(pagearray[id])) ){
        $('content').innerHTML = pagearray[id];
        testRssLoad();
    }else{
        if(id == 999999){ //contact page
            new Ajax.Updater('content', '/contact.php');
        }else{
            new Ajax.Updater('content', '/ajax.php?id='+id+'&type=page',{onComplete: testRssLoad});
        }
    }

    if($('nav'+page)) $('nav'+page).className = "nav";
    if($('nav_link'+page)){
        var link = $('nav_link'+page);
        link.className = "nav_link";
        //if "| link |"  make "link"
        if(link.innerHTML.substring(0,1)=="|"){
            var txt = link.innerHTML.substring(2);
            link.innerHTML = txt.substring(0,txt.length-2);
        }
    }
    dhtmlHistory.add("page"+id, id);
    page = id;
    if($('nav'+id)) $('nav'+id).className = "nav_selected";
    if($('nav_link'+id)){
        $('nav_link'+id).className = "nav_link_selected";
        $('nav_link'+page).innerHTML = "| "+$('nav_link'+page).innerHTML+" |";
    }
}


function loadFullArticle(id){
    articles[id] = $('article_body'+id).innerHTML;
    var oldscroll = $('content').scrollTop;
    new Ajax.Updater('article_body'+id, '/ajax.php?id='+id,{onComplete:lightboxDelay});
    var linkm = $('articlelink_more'+id);
    linkm.innerHTML= "close";
    linkm.href = "javascript:revert("+id+","+oldscroll+")";

    var linkh = $('articlelink_heading'+id);
    linkh.href = "javascript:revert("+id+","+oldscroll+")";
    if(rssLoadArticle != 0){
        var container = $(rssLoadArticle);
        if(typeof container.offsetTop != 'undefined'){
            var correction = 30;
            if(Prototype.Browser.IE){
                correction = 0;
            }
            $('content').scrollTop = container.offsetTop-correction;
        }else{
            $('content').scrollTop = (container.top-30);
        }
        rssLoadArticle = 0;
    }
}

function revert(id,scrollto){
    $('article_body'+id).innerHTML = articles[id];
    $('content').scrollTop = scrollto;
    var linkm = $('articlelink_more'+id);
    linkm.innerHTML= "Full Text";
    linkm.href = "javascript:loadFullArticle("+id+")";
    
    var linkh = $('articlelink_heading'+id);
    linkh.href = "javascript:loadFullArticle("+id+")";
}

function lightboxDelay(){
    //if(lightboxes==0){
    //    initLightbox();
    //    lightboxes++;
    //}
    //Lightbox.init.bind(Lightbox);
    //window.addEvent('domready', Lightbox.init.bind(Lightbox));
    initLightbox();
    //window.setTimeout("initLightbox()", 3000);
}

function openCalYear(el,id){
    var style = $(id).style;
    style.visibility = "visible";
    style.display = "block";
    el.setAttribute("onclick","closeCalYear(this,'"+id+"')");
}
function closeCalYear(el,id){
    var style = $(id).style;
    style.visibility = "hidden";
    style.display = "none";
    el.setAttribute("onclick","openCalYear(this,'"+id+"')");
}

function testKey(ev){
    if(ev.keyCode == 13){
        doSearch('','',0);
    }
}

function doSearch(archive,id,searchstart){
    var query = $('searchfield').value;
    
    //if something changed, we clear the caching array for new data
    if( (lastArchive.query && lastArchive.query != query) ||
        (lastArchive.archive && lastArchive.archive != archive) ||
        (lastArchive.id && lastArchive.id != id)
       ){
        searcharray = null;
        searcharray = new Array();
    }
    //save current state to gloabl var to detect changes on next run
    lastArchive.query = query;
    lastArchive.archive = archive;
    lastArchive.id = id;


    if(searcharray[searchstart] && !isEmpty(searcharray[searchstart]) ){
        $('archivecontent').innerHTML = searcharray[searchstart];
        buildPager();
    }else{
        if((archive=="month" || archive=="category") && id!=0){
            new Ajax.Updater('archivecontent', '/ajax.php?type=search&archive='+archive+'&id='+id+'&start='+searchstart,{asynchronous: false});
        }else{
            new Ajax.Updater('archivecontent', '/ajax.php?type=search&query='+query+'&start='+searchstart,{asynchronous: false});
        }
        
        searcharray[searchstart] = $('archivecontent').innerHTML;

        var obj = new Object();
        obj.searcharray = searcharray;
        obj.query = query;
        obj.searchstart = searchstart;
        obj.archive = archive;
        obj.id = id;
        dhtmlHistory.add("search"+searchstart, obj);
    }
    buildPager(archive,id);
}

function archiveSearch(archive,id){
}

function buildPager(archive,id){
    var content = $('searchtotals').innerHTML;
    var re = /showing (\d+) - (\d+) of (\d+) matching articles/;

    re.exec(content);
    var min = RegExp.$1;
    var max = RegExp.$2;
    var total = RegExp.$3;
    
    var perpage = max-min+1;
    var pages = Math.ceil(total/perpage);
    var currentpage = Math.floor(min/perpage)+1;
    
    //var nextpage = max;
    //var prevpage = min -1;

    var output = "";
    if(pages>1){
        var archiveIdLink = "'"+archive+"','"+id+"'";

        var prev_text = "back";
        var next_text = "next";

        output += '<table width=100%" align="center" cellspacing="0" cellpadding="0"><tr><td align="center">';

        if(currentpage > 1){ //no back link on first page
            output += '<a href="javascript:doSearch('+archiveIdLink+','+((currentpage-2)*perpage)+')" class="archivepager"><img src="images/back.gif" border=0 align="bottom" title="'+prev_text+'" alt="'+prev_text+'"></a>\n ';
        }

        var dotb4 = false;
        var dotafter = false;
        var pageoutput = new Array();
        var temp = "";

        for(var page=1;page<=pages;page++){
            if(page<(currentpage-5)){
                if(!dotb4){
                    output += "... ";
                    dotb4 = true;
                }
            }else if(currentpage == page){
                temp = pageoutput.push(page);
            }else{
                temp = pageoutput.push('<a href="javascript:doSearch('+archiveIdLink+','+((page-1)*perpage)+')" class="archivepager">'+page+'</a>');
            }
            if(page>(currentpage+4) && !dotafter){
                dotafter = true;
                break;
            }
        }
        output += pageoutput.join(" | ");
        if(dotafter){
            output += " ...";
        }

        if(currentpage < pages){ //no forward link on last page
            output +=' <a href="javascript:doSearch('+archiveIdLink+','+(currentpage*perpage)+')" class="archivepager"><img src="images/right.gif" border=0 align="bottom" title="'+next_text+'" alt="'+next_text+'"></a>\n';
        }

        output += "</td></tr></table>";
    }
    $('archivepager').innerHTML = output;
    $('content').scrollTop = 0;
    //window.scroll(0,0);
    //alert(min+' - '+max+' of '+total);
}

function sendContactForm(button){
    if($F('cf_name')!="" && $F('cf_email')!="" && $F('cf_msg')!=""){
        var options = {
              onComplete: function(req){
                  $('content').innerHTML = req.responseText;
              }
          };

        button.disabled=true;
        button.value = "sending...";
        $('contactform').request(options);
        $('contactform').disabled=true;
        
    }else{
        alert("Please supply at least your Name, Email and Message");
    }
}
