var engine = {
    start: function() {
        this.fixes();
        this.fonts();
        this.navigation();
        this.paginator('.jpagination');
        this.searchFieldText();
    },
    
    fonts: function() {
        Cufon.replace('#foot .info span, #foot .info a', {fontFamily: 'Bliss 2 Bold', hover: true});
        Cufon.replace('#side h3, .switcher p, #info h4 span', {fontFamily: 'Bliss 2'});
        Cufon.replace('#side h2', {fontFamily: 'Bliss 2 Bold', textShadow: '1.5px 1.5px #586C06'});
        Cufon.replace('#navi > li > a', {fontFamily: 'Bliss 2 Bold', textShadow: '1px 1px #475F00', hover: true});
        Cufon.replace('#navi ul > li > a', {fontFamily: 'Bliss 2', hover: true});
    },
    
    navigation: function() {
        jQuery('#navi ul li:first').addClass('first');
        var movable = true;
        var timeout = 0;
        jQuery('#navi li:first a').hover(function() {
            movable = true;
            clearTimeout(timeout);
            jQuery(this).parent('li').addClass('active').find('ul').not(':visible').slideDown(180);
        }, function() {
            var self = jQuery(this);
            timeout = setTimeout(function() {
                if (movable) {
                    movable = true;
                    self.parent('li').removeClass('active').find('ul').slideUp(260);
                }                
            }, 600);
        });
        
        jQuery('#navi li:first ul').hover(function() {
            movable = false;
            clearTimeout(timeout);
        }, function() {
            var self = jQuery(this);
            movable = false;
            timeout = setTimeout(function() {
                movable = true;
                self.slideUp(260).parents('.active').removeClass('active');
            }, 600);
        });
    },
    
    fixes: function() {
        var maxHeight = 0;
        jQuery('#info .column').each(function() {
            maxHeight = maxHeight > jQuery(this).height() ? maxHeight : jQuery(this).height();
        });
        jQuery('#info .column').height(maxHeight);
    },
    
    resizeFlash: function(size) {
        jQuery('#flash-map').attr('height', size).height(size);
    },
    
    searchFieldText: function() {
    	var currentLang = 'pl';
    	var text = [];
    		text['pl'] = 'Szukaj';
    		text['en'] = 'Search';
    	
    	var field = jQuery('#search-query');
    	var lang = jQuery('#site-lang');
    	
    	if(lang.length > 0) {
    		currentLang = lang.html();
    	}

    	if(field) {
    		field.attr('value', text[currentLang]);
    		field.focus(function() { 
    			field.attr('value', ''); 
    		});
    		field.blur(function() { 
    			if(field.attr('value') == '') {
    				field.attr('value', text[currentLang]);
    			}
    		});
    	}
    },
    
    paginator: function(className) {
    	
    	this.paginator = {};
    	this.paginator.elements = [];
    	this.paginator.buttons = {
        	prev: 'poprzednia',
        	next: 'nastepna'
        }
    	
    	this.paginator.baseItemsClass = className + '-' + 'year';
    	this.paginator.baseSubItemsClass = className + '-' + 'month';
    	
    	this.initPaginator();
    },
    
    initPaginator: function() {
    	        	
    	var items = jQuery(this.paginator.baseItemsClass, jQuery('#side'));
    	
    	this.initPaginatorItems(items);
    	
    	this.assignPaginatorEvents();
    },
    
    initPaginatorItems: function(items) {
    	
    	if(items.length == 1) {
    		this.initPaginatorSubitems(items[0]);
    		return;
    	}
    	
    	for(i=0, j=items.length; i<j; i++) {
    		this.buildPaginatorButtons(items[i], { 
    			'className': 'years', 
    			'current': i, 
    			'len': j
    		});  
    		this.initPaginatorSubitems(items[i]);
    	}
    },
    
    initPaginatorSubitems: function(e) {
    	
    	var subItems = jQuery(e).find(this.paginator.baseSubItemsClass);
		
    	if(subItems.length < 2) {
    		return;
    	}
    	
		for(a=0,b=subItems.length; a<b; a++) {
    		this.buildPaginatorButtons(subItems[a], { 
    			'className': 'months', 
    			'current': a, 
    			'len': b
    		});    		    
    	}
    },
    
    buildPaginatorButtons: function(e, opt) {
    	
    	var e = jQuery(e);
    	
    	var liClass = 'jpagination-' + opt.className +'-btn';
    	var nextClass = opt.className + '-next';
    	var prevClass = opt.className + '-prev';
    	
    	var nextBtn = '<li class="' + liClass + '"><span class="' + nextClass + '">' + this.paginator.buttons.next + '</span></li>';
		var prevBtn = '<li class="' + liClass + '"><span class="' + prevClass + '">' + this.paginator.buttons.prev + '</span></li>';
		
		if(opt.current > 0) {
			e.addClass('hide');
		}
		
		if(opt.current == 0) {
			e.append(nextBtn);
		}
		
		if(opt.current > 0 && opt.current < (opt.len-1)) {
			e.append('<li class="' + liClass + '"><span class="' + prevClass + '">' + this.paginator.buttons.prev + '</span><span class="' + nextClass + '">' + this.paginator.buttons.next + '</span></li>');
		}
		
		if(opt.current == (opt.len-1)) {
			e.append(prevBtn);
		}
    },
    
    assignPaginatorEvents: function() {
    	
    	var container = jQuery('#side');
    	
    	jQuery('.years-next', container).bind('click', { 
    		'self': this, 
    		'mode': 'year', 
    		'dir': 'next' 
    		},
    		this.handlePaginatorClickFn);
    	
    	jQuery('.years-prev', container).bind('click', { 
    		'self': this, 
    		'mode': 'year', 
    		'dir': 'prev' 
    		},
        	this.handlePaginatorClickFn);
    	
    	jQuery('.months-next', container).bind('click', { 
    		'self': this, 
    		'mode': 'month', 
    		'dir': 'next' 
    		},
        	this.handlePaginatorClickFn);
    	jQuery('.months-prev', container).bind('click', { 
    		'self': this, 
    		'mode': 'month', 
    		'dir': 'prev' 
    		},
        	this.handlePaginatorClickFn);
    },
    
    handlePaginatorClickFn: function(e) {
    	var className = (e.data.mode == 'year') ? 
    			e.data.self.paginator.baseItemsClass : e.data.self.paginator.baseSubItemsClass;
    	
    	var p = jQuery(e.target).parents('ul').get(0);
    	
    	if(e.data.dir == 'next') {
    		var t = jQuery(p).next('ul' + className);
    	} else {
    		var t = jQuery(p).prev('ul' + className);
    	}
    	
		jQuery(p).addClass('hide');
		jQuery(t).removeClass('hide');
    }
}

jQuery(document).ready(function() {
    engine.start();
    if (jQuery.browser.msie) {
        if (parseInt(jQuery.browser.version) < 7 && (typeof DD_belatedPNG) != 'undefined') {
            DD_belatedPNG.fix('.mask-close, .mask-open, img, #main, #page, #navi ul, #logo a,#help a,#search-submit,#foot .info em,#foot .corner .apsys,#foot .corner .rss em,.print em,.back em,#side .news .arrow, #info h4 .date');
        }
    }
})
