var guestbook = {
    _pages : new Page('gbContainer'),
    init : function()
    {
        // Figure out the pagenumber
        if ($('gbContainer')) {
            var myTestId = $('gbContainer').firstDescendant().id;
            var strItems = myTestId.split('_');
            guestbook.page.number = parseInt(strItems[strItems.length-1]);

            guestbook._pages.init();
            guestbook.page.loadNext();

            if (guestbook.page.number > 1) {
                guestbook.page.loadPrev();
                if (guestbook.page.number > 2) {
                    guestbook.page.loadFirst();
                }
            }    
        }
    },
    createTimestamp : function(timestamp) {
        // Create the timestamp
        var d = new Date()
        d.setTime(timestamp*1000)

        var day = d.getDate();
        if (day < 10) day = '0'+day;

        var month = parseInt(d.getMonth())+1;
        if (month < 10) month = '0'+month;

        var hours = d.getHours();
        if (hours < 10) hours = '0'+hours;

        var mins = d.getMinutes();
        if (mins < 10) mins = '0'+mins;

        return (day+'-'+month+' om '+hours+':'+mins);
    },
    message : {
        toggle : function(elementId) 
        {
            pageId = guestbook._pages.getIdbyPage(1);

            if (!$('gbCommentNew')) {
                myBlock = guestbook.message.insert();
                Element.insert($(pageId).firstDescendant(), {'top':myBlock});
            }

            if ($('gbCommentNew')) {
                if(Element.visible($('gbCommentNew'))) {
                    new Effect.SlideUp($('gbCommentNew'), {});
                } else {
                    Element.insert($(pageId).firstDescendant(), {'top':$('gbCommentNew')});
                    guestbook.page.first();
                    Form.reset($('gbNewMessageForm'));
                    new Effect.SlideDown($('gbCommentNew'), {});
                }
                return false;
            }
        },
        insert : function() {
            var smileys = [
                {
                    "image" : "smile.gif",
                    "code"  : ":)"
                },
                {
                    "image" : "cry.gif",
                    "code"  : ";("
                },
                {
                    "image" : "biggrin.gif",
                    "code"  : ":D"
                },
                {
                    "image" : "clown.gif",
                    "code"  : ":+"
                },
                {
                    "image" : "confused.gif",
                    "code"  : ":?"
                },
                {
                    "image" : "coool.gif",
                    "code"  : ":B"
                },
                {
                    "image" : "devilish.gif",
                    "code"  : "(6)"
                },
                {
                    "image" : "kiss.gif",
                    "code"  : "(K)"
                },
                {
                    "image" : "wink.gif",
                    "code"  : ";)"
                }

            ];
			
			
			 
			 
            myBlock = Builder.node('div', {id:'gbCommentNew', className:'gbComment', style:'display: none'});

            myBlockHeader = Builder.node('div', {className:'gbHeader'}, 'Schrijf hier je bericht voor ons gastenboek:');
            myBlock.appendChild(myBlockHeader);

            myBlockMessage = Builder.node('div', {className:'gbMessage'});
            myBlock.appendChild(myBlockMessage);

            myBlockMessageForm = Builder.node('form', {id:'gbNewMessageForm', name:'gbNewMessageForm', method:'POST', action:'index.php?m=guestbook&e=save&output=json',onSubmit:'return guestbook.message.save(this)'});
            myBlockMessage.appendChild(myBlockMessageForm);

            myBlockMessageTextarea = Builder.node('textarea', {id:'gbNewComment', name:'gbNewComment', rows:'3', cols:'70', className:'inputarea'});
            myBlockMessageForm.appendChild(myBlockMessageTextarea);
			
			/*
            myBlockScript = Builder.node('script', {type:'text/javascript', src:'http://www.google.com/recaptcha/api/challenge?k=6Le0dcUSAAAAADYZ2mr2HkeB3Wn_Wgm-YC9ourJJ'}, '');
            myBlockNoscript = Builder.node('noscript', {}, '');
				myBlockNoscriptIframe = Builder.node('iframe', {src:'http://www.google.com/recaptcha/api/noscript?k=6Le0dcUSAAAAADYZ2mr2HkeB3Wn_Wgm-YC9ourJJ', height:'300', width:'500'}, '');
				myBlockNoscriptBr = Builder.node('br', {}, '');
				myBlockNoscriptTextarea = Builder.node('textarea', {name:'recaptcha_challenge_field', rows:'3', cols:'40'});
				myBlockNoscriptInput = Builder.node('input', {type:'hidden', name:'recaptcha_response_field', value:'manual_challenge'});
				myBlockNoscript.appendChild(myBlockNoscriptIframe);
				myBlockNoscript.appendChild(myBlockNoscriptBr);
				myBlockNoscript.appendChild(myBlockNoscriptTextarea);
				myBlockNoscript.appendChild(myBlockNoscriptInput);
			myBlockMessageForm.appendChild(myBlockScript);
			myBlockMessageForm.appendChild(myBlockNoscript);
			*/
            myBlockMessageSmiley = Builder.node('p',{},'Je kan de volgende smileys gebruiken: ');

try {
            for (i=0;i<smileys.length;i++) {
                myBlockMessageSmiley1 = Builder.node('img', {src:'images/smileys/'+smileys[i]["image"], title:smileys[i]["code"], style:'margin:1px', onclick:'guestbook.message.smiley.insert(document.gbNewMessageForm.gbNewComment,\' '+smileys[i]["code"]+' \')'});
                myBlockMessageSmiley.appendChild(myBlockMessageSmiley1);
            }
            myBlockMessageForm.appendChild(myBlockMessageSmiley);
} catch(e) {window.alert(e);}

            myBlockMessageSubmit = Builder.node('input', {type:'submit', value:'Bericht opslaan', className:'button'});
            myBlockMessageForm.appendChild(myBlockMessageSubmit);

            return myBlock;
        },
        save : function(myForm) 
        {
            $(myForm.id).request({
                onLoading: function() {$(myForm.id).disable();},
                onComplete: function(t) {$(myForm.id).enable();getResponse(t);}
            })
            return false;
        },
        smiley : {
            insert : function(el,ins) {
                if (el.setSelectionRange){
                    el.value = el.value.substring(0,el.selectionStart) + ins + el.value.substring(el.selectionStart,el.selectionEnd) + el.value.substring(el.selectionEnd,el.value.length);
                } else if (document.selection && document.selection.createRange) {
                    el.focus();
                    var range = document.selection.createRange();
                    range.text = ins + range.text;
                }
                el.focus();
            }
        }
    },
    comment : {
        insert : function(page, comment)
        {
            if (page == 0) {
                pageId = guestbook._pages.id;
            } else {
                pageId = guestbook._pages.getIdbyPage(page);
            }

            if (pageId && $(pageId)) {
                var myComment = guestbook.comment.create(comment);
                Element.insert($(pageId).firstDescendant(), {'top':myComment});
                Effect.SlideDown(myComment.id);
            }

        },
        create : function(comment)
        {
            myBlock = Builder.node('div', {id:'gbComment_'+comment.gbid, className:'gbComment'});
            myBlockHeader = Builder.node('div', {className:'gbHeader'});

            if (comment.ipaddress && comment.ipaddress != "") {
                myBlockAdmin = Builder.node('div', {className:'gbAdmin'}, comment.ipaddress);
                myBlockAdminLink = Builder.node('a', {href:'index.php?m=guestbook&e=delete&gbid='+comment.gbid, onclick:'return guestbook.comment.reqDelete(\''+comment.gbid+'\',\''+comment.name+'\');'});
                myBlockAdminImg = Builder.node('img', {src:'images/icons/delete.gif', border:'0'});

                myBlockAdminLink.appendChild(myBlockAdminImg);
                myBlockAdmin.appendChild(myBlockAdminLink);
                myBlockHeader.appendChild(myBlockAdmin);
            }

            myHeaderText1 = Builder.node('span', {className:'pink'}, comment.name);
            myHeaderText2 = Builder.node('span', {}, ' schreef op '+guestbook.createTimestamp(comment.timestamp)+' :');

            myBlockHeader.appendChild(myHeaderText1);
            myBlockHeader.appendChild(myHeaderText2);

            myBlock.appendChild(myBlockHeader);

            myBlockMessage = Builder.node('div', {className:'gbMessage'});
            myBlockMessage.innerHTML = comment.message;
            myBlock.appendChild(myBlockMessage);
            return myBlock;
        },
        reqDelete : function(gbid, name) 
        {
            if (confirm('Weet je zeker dat je dit bericht van \''+name+'\' wilt verwijderen?')) {
                var url = "index.php?m=guestbook&e=delete&gbid="+gbid+"&output=json";
                var reqmethod = "GET";

                var myAjax = new Ajax.Request(
                    url,
                    {
                        method: reqmethod,
                        onComplete: getResponse
                    }
                );

                return false;
            } else {
                return false;
            }
        },
        remove : function(gbid)
        {
            new Effect.SlideUp('gbComment_'+gbid,{afterFinish: function() {$('gbComment_'+gbid).remove()}});
            // TODO: Remove page when empty
        }
    },
    page : {
        number : 0,
        total : 0,
        loadNext : function()
        {
            if (guestbook.page.number >= guestbook.page.total && guestbook.page.total > 0) return false;
            // Try to get the highest GBID of the previous page
            var prevPageId = 'gbpage_'+guestbook.page.number;
            var pagenum = guestbook.page.number+1;
            var gbIdLow = 0;

            if ($('gbpage_'+pagenum)) return true;

            if (prevPageId && $(prevPageId)) {
                //if ($('gbpage_navNext_'+guestbook.page.number)) {
                    //$('gbpage_navNext_'+guestbook.page.number).hide();
                    //new Effect.Morph($('gbpage_navNext_'+guestbook.page.number) ,{ style:{ color:'#666' }, duration: 0.2 });
                //}

                var allItems = $(prevPageId).select('div.gbComment');
                for (i=(allItems.length-1); i >= 0; i--) {
                    myTestId = allItems[i].id;
                    if (myTestId && myTestId.match(/^gbComment\_/)) {
                        var strItems = myTestId.split('_');
                        myGbid = strItems[strItems.length-1];
                        if (myGbid < gbIdLow || gbIdLow == 0) gbIdLow = myGbid;
                    }
                }
            } else { 
                return false;
            }

            var url = "index.php?m=guestbook&e=nextPage&gbid="+gbIdLow+"&pagenum="+pagenum+"&output=json";
            var reqmethod = "GET";
            var myAjax = new Ajax.Request(
                url,
                {
                    method: reqmethod,
                    onComplete: getResponse
                }
            );
            return true;
        },
        loadPrev : function()
        {
            if (guestbook.page.number == 1) return false;

            // Try to get the lowest GBID of the currently displayed page
            var prevPageId = 'gbpage_'+guestbook.page.number;
            var pagenum = guestbook.page.number-1;
            var gbIdHigh = 0;

            if ($('gbpage_'+pagenum)) return true;

            if (prevPageId && $(prevPageId)) {
                //if ($('gbpage_navPrev_'+guestbook.page.number)) {
                    //$('gbpage_navPrev_'+guestbook.page.number).hide();
                //    new Effect.Morph($('gbpage_navPrev_'+guestbook.page.number), { style:{ color:'#666'}, duration: 0.2 });
                //}

                var allItems = $(prevPageId).select('div.gbComment');
                for (i=(allItems.length-1); i >= 0; i--) {
                    myTestId = allItems[i].id;
                    if (myTestId && myTestId.match(/^gbComment\_/)) {
                        var strItems = myTestId.split('_');
                        myGbid = strItems[strItems.length-1];
                        if (myGbid > gbIdHigh || gbIdHigh == 0) gbIdHigh = myGbid;
                    }
                }
            } else {
                return false;
            }

            var url = "index.php?m=guestbook&e=prevPage&gbid="+gbIdHigh+"&pagenum="+pagenum+"&output=json";
            var reqmethod = "GET";
            var myAjax = new Ajax.Request(
                url,
                {
                    method: reqmethod,
                    onComplete: getResponse
                }
            );
            return true;
        },
        loadFirst : function()
        {
            var url = "index.php?m=guestbook&e=getPage&pagenum=1&output=json";
            var reqmethod = "GET";
            var myAjax = new Ajax.Request(
                url,
                {
                    method: reqmethod,
                    onComplete: getResponse
                }
            );
            return true;
        },
        create : function(pageData, comments)
        {
            if (guestbook.page.total == 0 && pageData.total && pageData.total > 0) guestbook.page.total = pageData.total;
            pageId = 'gbpage_'+pageData.pagenum;
            if ($(pageId)) return false;

            myPage = Builder.node('div', {id:pageId});

            if (typeof(comments.length)!="undefined") {
                for (i=0;i<comments.length;i++) {
                    myPage.appendChild(guestbook.comment.create(comments[i]));
                }
            }

            myPageNav = Builder.node('div', {style:'text-align: center; width: '+guestbook._pages.width+'px'});

            myPageNavPage = Builder.node('p',{id: 'gbpage_navPage_'+pageData.pagenum, className: 'gbNavPage'});
            myPageNavPage.innerHTML = 'Pagina '+pageData.pagenum+' van '+guestbook.page.total;
            myPageNav.appendChild(myPageNavPage);

            if (pageData.pagenum > 1) {
                myPageNavPrev = Builder.node('a',{id: 'gbpage_navPrev_'+pageData.pagenum, className: 'gbNavPrev', style:'float: left', href:'index.php?m=guestbook&page='+(pageData.pagenum-1), onclick:'return guestbook.page.prev()'});
                myPageNavPrev.innerHTML = '&laquo; Vorige pagina';
                myPageNav.appendChild(myPageNavPrev);
            }

            myPageNavFiller = Builder.node('p',{id: 'gbpage_navFiller_'+pageData.pagenum, style:'float: left'});
            myPageNavFiller.innerHTML = "&nbsp;";
            myPageNav.appendChild(myPageNavFiller);

            if (pageData.pagenum < pageData.total) {
                myPageNavNext = Builder.node('a',{id: 'gbpage_navNext_'+pageData.pagenum, className: 'gbNavNext', style:'float: right', href:'index.php?m=guestbook&page='+(pageData.pagenum+1), onclick:'return guestbook.page.next()'});
                myPageNavNext.innerHTML = 'Volgende pagina &raquo;';
                myPageNav.appendChild(myPageNavNext);
            }

            myPage.appendChild(myPageNav);

            position = pageData.pagenum - guestbook.page.number;
            guestbook._pages.newPage(position,myPage);

            // Display navigation on page before and after this one (if it exists)
            //if ($('gbpage_'+(pageData.pagenum-1))) {
            //    new Effect.Morph($('gbpage_navNext_'+(pageData.pagenum-1)) ,{ style:{ color:'#0fa439' } });
            //}
            //if ($('gbpage_'+(pageData.pagenum+1))) {
            //    new Effect.Morph($('gbpage_navPrev_'+(pageData.pagenum+1)) ,{ style:{ color:'#0fa439' } });
            //}

            return true;
        },
        next : function()
        {
            if ($('gbpage_navNext_'+guestbook.page.number)) $('gbpage_navNext_'+guestbook.page.number).blur();
            if (guestbook.page.number < guestbook.page.total) {
                if ($('gbpage_'+(guestbook.page.number+1))) {
                    guestbook.page.number++;
                    guestbook._pages.next();
                    $('container').scrollTo();
                    guestbook.page.loadNext();
                } else {
                    return true;
                }
            }
            return false;
        },
        prev : function()
        {
            if ($('gbpage_navPrev_'+guestbook.page.number)) $('gbpage_navPrev_'+guestbook.page.number).blur();
            if (guestbook.page.number > 1) {
                if ($('gbpage_'+(guestbook.page.number-1))) {
                    guestbook.page.number--;
                    guestbook._pages.previous();
                    $('container').scrollTo();
                    guestbook.page.loadPrev();
                } else {
                    return true;
                }
            }
            return false;
        },
        first : function()
        {
            guestbook.page.number = 1;
            guestbook._pages.first();
            guestbook.page.loadNext();
            return false;
        }

    }
}

Event.observe(window, 'load', guestbook.init);

