/*#############################################################################

______  klf.js  ___________________________________________ ___ __ __ __ _ _ _

        Version:  v0.1 beta, 2008-05-20
        Project:  www.keonchlaszlofarkas.hu
        Author:   VAJDA, Ferenc; Doxence; fvajda@doxence.com
        Client:   Keönch László Farkas

#############################################################################*/

var Klf = {//[
    EVENTS_PER_PAGE: 5,
    NEWS_PER_PAGE: 4,
    FLOAT_WIDTH: 745,
    FLOAT_STEP: 1,
    FLOAT_TPERIOD: 25,

    loadEvents: function( callback ) {//[
        Klf.loadFile( 'events', callback );
    },//]
    loadNews: function( callback ) {//[
        Klf.loadFile( 'news', callback );
    },//]
    loadSheetnotes: function( callback ) {//[
        Klf.loadFile( 'sheetnotes', callback );
    },//]
    loadSpecial: function( callback ) {//[
        Klf.loadFile( 'special', callback );
    },//]
    fillEventsList: function( events ) {//[
        var levents = events.findAll( function( e ){
            return !Klf.isInPast( e['date'] );
        } );
        var html = [ levents[0], levents[1] ].map( function( e ){
            return '<div class="' + e['type'] + '">'
                + '<div class="date">' + Klf.formatDate( e['date'], 'shortday' ) + '</div>'
                + ( e['short'] ? '<div class="short">' + e['short'] + ',</div> ' : '' )
                + '<div class="location">' + e['location'] + '</div>'
                + '</div>';
        } ).join('') + "<div>...</div>";
        $('events').update( html );
    },//]
    reloadEventsByDate: function( sdate ) {//[
        var filt = Klf.getQueryParam( 'filt' );
        location.href = 'events.html?sdate=' + sdate + ( filt ? '&filt=' + filt : '' );
    },//]
    fillEvents: function( events ) {//[
        var fevents;
        var filt = Klf.getQueryParam( 'filt' );
        var sdate = Klf.getQueryParam( 'sdate' );
        var sel = parseInt( Klf.getQueryParam( 'sel' ) || '0' );
        if ( filt ) {
            fevents = events.findAll( function( e ){
                return e['type'] == filt && !Klf.isInPast( e['date'], sdate );
            } );
        } else {
            fevents = events.findAll( function( e ){
                return !Klf.isInPast( e['date'], sdate );
            } );
        }
        var evCount = fevents.size();
        fevents = $R( sel, sel + Klf.EVENTS_PER_PAGE, true ).map( function( e ){ return fevents[e] } );
        var html = fevents.map( function( e ){
            if ( !e ) return '';
            return '<div class="' + e['type'] + '">'
                + '<h2>'
                + '<span class="date">' + Klf.formatDate( e['date'], 'full' ) + '</span>'
                + '<span class="location">' + e['location'] + '</span>'
                + ( e['descr'] ? '<div class="details"><a href="javascript:void(0)" onclick="Klf.showDescr(this)">Részletek...</a></div>' : '' )
                + '</h2>'
                + ( e['short'] ? '<div class="short">' + e['short'] + '</div>' : '' )
                + ( e['descr'] ? '<div class="descr" style="display:none"><div>' + e['descr'] + '</div></div>' : '' )
                + '</div>';
        } ).join('');
        $('c_events').update( html );
        var next = sel + Klf.EVENTS_PER_PAGE;
        if ( next < evCount ) {
            $('nextpage').href = 'events.html?'
                + ( filt ? 'filt=' + filt + '&' : '' )
                + ( sdate ? 'sdate=' + sdate + '&' : '' )
                + 'sel=' + next;
            $('nextpage').show();
        } else {
            $('nextpage').hide();
        }
        var prev = sel - Klf.EVENTS_PER_PAGE;
        if ( prev >= 0 ) {
            $('prevpage').href = 'events.html?'
                + ( filt ? 'filt=' + filt + '&' : '' )
                + ( sdate ? 'sdate=' + sdate + '&' : '' )
                + 'sel=' + prev;
            $('prevpage').show();
        } else {
            $('prevpage').hide();
        }
    },//]
    fillNewsList: function( news ) {//[
        var lnews = [ news[0], news[1] ];
        var html = lnews.map( function( e ){
            return '<div class="news">'
                + '<div class="date">' + Klf.formatDate( e['date'], 'shortday' ) + '</div>'
                + '<div class="title">' + e['title'] + '</div>'
                + '</div>';
        } ).join('') + "<div>...</div>";
        $('news').update( html );
    },//]
    fillNews: function( news ) {//[
        var sel = parseInt( Klf.getQueryParam( 'sel' ) || '0' );
        var fnews = $R( sel, sel + Klf.NEWS_PER_PAGE, true ).map( function( e ){ return news[e] } );
        var html = fnews.map( function( e ){
            if ( !e ) return '';
            return '<div class="entry">'
                + '<h2>'
                + '<span class="date">' + Klf.formatDate( e['date'], 'full' ) + '</span>'
                + '<span class="title">' + e['title'] + '</span>'
                + ( e['special'] ? '<div class="details"><a href="javascript:void(0)" onclick="Klf.showDescr(this)">További infók...</a></div>' : '' )
                + '</h2>'
                + '<div class="text">' + e['text'] + '</div>'
                + ( e['special'] ? '<div class="descr" style="display:none"><div>' + e['special'] + '</div></div>' : '' )
                + '</div>';
        } ).join('');
        $('c_news').update( html );
        var next = sel + Klf.NEWS_PER_PAGE;
        if ( next < news.size() ) {
            $('nextpage').href = 'news.html?sel=' + next;
            $('nextpage').show();
        } else {
            $('nextpage').hide();
        }
        var prev = sel - Klf.NEWS_PER_PAGE;
        if ( prev >= 0 ) {
            $('prevpage').href = 'news.html?sel=' + prev;
            $('prevpage').show();
        } else {
            $('prevpage').hide();
        }
    },//]
    fillSheetnotes: function( sheetnotes ) {//[
        var html = sheetnotes.map( function( e ){
            return '<div class="sheetnote">'
                + '<a href="download/sheetnotes/' + e['file'] + '">' + e['short'] + '</a>'
                + '</div>';
        } ).join('');
        $('c_sheetnotes').update( html );
    },//]
    loadFile: function( file, callback ) {//[
        new Ajax.Request( 'iadata/' + file + '.txt', {
            onSuccess: function( xhr ) {
                try {
                    var text = xhr.responseText.replace(/^[^#]*/,'').replace(/\r/g,'');
                    callback( Klf.processFile( text ) );
                } catch( e ) {
                    alert( "#JS error: " + e );
                }
            },
            onFailure: Klf.showAjaxError
        } );
    },//]
    processFile: function( file ) {//[
        return file.replace(/^#.*$\n/mg,'').replace(/\\\s*\n/g,'<br />').split(/\n\s*\n/).map( function( e ){
            var data = $H({});
            e.strip().split('\n').each( function( r ) {
                var s = $A( r.match(/^([^:]*):(.*)$/) ).map( function( v ){ return v.strip() } );
                data[ s[1] ] = s[2];
            } );
            return data;
        } ).findAll( function( e ){ return e.size() > 1 } );
    },//]
    showAjaxError: function( xhr ) {//[
        alert( 'Az adatokat nem sikerült betölteni!\n(' + xhr.status + ': ' + xhr.statusText + ')' );
    },//]
    formatDate: function( datestr, format ) {//[
        var d = datestr.match(/(\d{4})-(\d\d)-(\d\d)(?: (\d\d):(\d\d))?/);
        d.shift();
        ms = parseInt( d[1], 10 ) - 1;
        ds = parseInt( d[2], 10 );
        if ( !d[3] && !format.match( /day$/ ) ) format += 'day';
        switch ( format ) {
            case 'full':
                return d[0] + '. ' + Klf.monthNames[ ms ] + ' ' + ds + '. ' + d[3] + ':' + d[4];
            case 'fullday':
                return d[0] + '. ' + Klf.monthNames[ ms ] + ' ' + ds + '.';
            case 'short':
                return d[0] + '. ' + Klf.monthNamesShort[ ms ] + '. ' + ds + '. ' + d[3] + ':' + d[4];
            case 'shortday':
                return d[0] + '. ' + Klf.monthNamesShort[ ms ] + '. ' + ds + '.';
            default:
                alert ( '#JS error: Invalid date format' );
                return datestr;
        }
    },//]
    getQueryParam: function( param ) {//[
        if ( location.search == '' ) return undefined;
        var values = location.search.replace( /^\?/, '' ).split( /&/ ).map( function( e ){
            return e.match( /(\w+)=(.*)/ );
        } ).findAll( function( e ){ return e[1] == param } ).map( function( e ){ return e[2] } );
        if ( values.size() == 0 ) return undefined;
        if ( values.size() == 1 ) return values[0];
        return values;
    },//]
    isInPast: function( datestr, sdate ){//[
        var d = datestr.match(/(\d{4})-(\d\d)-(\d\d)/).map( function( e ){ return parseInt( e, 10 ) } );
        var now = new Date();
        if ( sdate ) {
            sdate = sdate.split('-');
            now.setFullYear( sdate[0] );
            now.setMonth( sdate[1] - 1 );
            now.setDate( sdate[2] );
        }
        now = [ now.getFullYear(), now.getMonth(), now.getDate() ];
        if ( d[1] < now[0] ) return true;
        if ( d[1] > now[0] ) return false;
        if ( d[2] < now[1] + 1 ) return true;
        if ( d[2] > now[1] + 1 ) return false;
        if ( d[3] < now[2] ) return true;
        return false;
    },//]
    floatingText: function( info ){//[
        if ( info ) {
            var text = info.find( function( e ){ return e['type'] == 'offer' } )
            if ( text ) {
                $( 'offer' ).update( text[ 'text' ] );
                Klf.fTextPos = -Klf.FLOAT_WIDTH;
                Klf.fTextWidth = parseInt( $('offer').getStyle( 'width' ) );
            } else {
                $( 'offer' ).hide();
                return;
            }
        }
        $('offer').style.left = ( 215 - Klf.fTextPos ) + 'px';
        $('offer').style.clip = 'rect(0px ' + ( Klf.fTextPos + Klf.FLOAT_WIDTH ) + 'px 20px ' + Klf.fTextPos + 'px)';
        Klf.fTextPos += Klf.FLOAT_STEP;
        if ( Klf.fTextPos > Klf.fTextWidth ) Klf.fTextPos = -Klf.FLOAT_WIDTH;
        window.setTimeout( 'Klf.floatingText()', Klf.FLOAT_TPERIOD );
    },//]
    showDescr: function( el ) {//[
        Klf.tmpJustShown = true;
        $(el).up(1).next(1).show();
        Event.observe( document, 'click', Klf.observeDescr );
    },//]
    observeDescr: function( ev ) {//[
        var el = $( Event.element(ev) );
        var descr = el.up( '.descr' );
        if ( !descr && !el.hasClassName( 'descr' ) && !Klf.tmpJustShown || el.hasClassName( 'close' ) ) {
            $$( '.descr' ).invoke( 'hide' );
            Event.stop( ev );
            Event.stopObserving( document, 'click', Klf.observeDescr );
        }
        Klf.tmpJustShown = false;
    },//]
    initEvents: function( ) {//[
        $('c_events').innerHTML='';
        $('prevpage').hide();
        $('nextpage').hide();
        Klf.loadEvents( Klf.fillEvents );
    },//]
    monthNames: [ 'január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december' ],
    monthNamesShort: [ 'jan', 'feb', 'márc', 'ápr', 'máj', 'jún', 'júl', 'aug', 'szept', 'okt', 'nov', 'dec' ],
    wdNames: [ 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat', 'vasárnap' ],
    wdNamesShort: [ 'H', 'K', 'Sze', 'Cs', 'P', 'Szo', 'V' ]
}//]

