/**
 * 
 */
(function() {
	/**
	 * 
	 */
	var activeSlide = 0;
	/**
	 * 
	 */
	var initLeft = 0;
	/**
	 * 
	 */
	var task = null;
	/**
	 * 
	 */
	var filtered = null;
	/**
	 * 
	 */
	var overlay = null;
	/**
	 * 
	 */
	var viewFrame = null;
	/**
	 * 
	 */
	var frameOpen = false;
	/**
	 * 
	 */
	var urlFragments = {};
	
/**
 * 
 */
return {
	/**
	 * 
	 */
	construct: function() {
		Ext.onReady( this.initialize, this );
	},
	/**
	 * 
	 */
	onClick: function( event, element, atBeginning ){
		if( event ) {
			event.stopEvent();
		}
		var no = element.id.replace( 'menu-', '' );
		if( activeSlide != no ) {
			if( no == 0 ) {
				Ext.get( 'filter' ).show(true);
			} else {
				Ext.get( 'filter' ).hide(true);
			}
			Ext.get( 'slide-title-text' ).update( Ext.getDom( element.id ).innerHTML );
			Ext.get( 'menu-' + activeSlide ).removeClass( 'mpselected' );
			activeSlide = no;
			Ext.get( 'menu-' + activeSlide ).addClass( 'mpselected' );

			if( !( atBeginning === true ? true : false ) ) {
				window.location.hash = urlFragments[no];
				Ext.get( 'slides' ).shift({
					x: Ext.get( 'slide-content' ).getLeft() + ( -activeSlide * 630 ),
					easing: 'easeBoth',
					duration: event ? 1 : 0
				});
			} else {
				Ext.get( 'slides' ).setX( Ext.get( 'slide-content' ).getLeft() + ( -activeSlide * 630 ));
			}
			
		}
	},
	/**
	 * 
	 */
	onFilter: function( lang ) {
		if( lang == 'all' || lang == 'hu' || lang == 'en' ) {
			filtered = null;
			if( lang !== 'all' ) {
				filtered = lang == 'hu' ? 'en' : 'hu';
				Ext.each( Ext.query( 'li.lng-' + filtered, 'slide-0' ), function(  item, index, allItems ){
					Ext.get( item ).setVisibilityMode( Ext.Element.DISPLAY );
					Ext.get( item ).slideOut( 't', {} );
				}, this );
			}
			Ext.each( Ext.query( 'li' + ( lang == 'all' ? '' : '.lng-' + lang ), 'slide-0' ), function(  item, index, allItems ){
				if( !Ext.get( item ).isVisible() ) {
					Ext.get( item ).setVisibilityMode( Ext.Element.DISPLAY );
					Ext.get( item ).slideIn( 't', {} );
				}
			}, this );
		}
	},
	/**
	 * 
	 */
	createOverlay: function() {
		if( !overlay ) {
			overlay = Ext.DomHelper.insertFirst( Ext.getBody(), {
				tag: 'div',
				id: 'overlay',
				style: {
					display: 'none'
				}
			}, true );
			Ext.get( overlay ).on( 'click', function( event, element ){
				event.stopEvent();
				this.hideOverlay();
			}, this );
		}
	},
	/**
	 * 
	 */
	showOverlay: function(){
		if( !overlay ) {
			this.createOverlay();
		}
		if( !Ext.get( overlay ).isVisible() ) {
			Ext.get( Ext.getBody() ).on( 'resize', function(){
				Ext.get( overlay ).setHeight( window.outerHeight );
			}, true )
			Ext.get( overlay ).fadeIn({
				endOpacity: .75,
				easing: 'easeIn'
			});
		}
	},
	/**
	 * 
	 */
	hideOverlay: function() {
		if( overlay && Ext.get( overlay ).isVisible() && Ext.get( viewFrame ).isVisible() ) {
			this.hideFrame();
			Ext.get( Ext.getBody() ).un( 'resize', function(){
				Ext.get( overlay ).setHeight( window.outerHeight );
			}, true )			
			Ext.get( overlay ).fadeOut({
				easing: 'easeOut'
			});
		}
	},
	/**
	 * 
	 */
	createFrame: function() {
		if( !viewFrame ) {
			viewFrame = Ext.DomHelper.insertFirst( Ext.getBody(), {
				tag: 'div',
				id: 'oWindow',
				cn:[{
					tag: 'a',
					id: 'oWindowClose',
					href: '#',
					title: 'Close'
				},{
					tag: 'iframe',
					id: 'owFrame',
					src: ''
				}]
			}, true );
			Ext.get( 'owFrame' ).on( 'load', function(){
				this.doShowFrame();
			}, this )
			Ext.get( 'oWindowClose' ).on( 'click', function( event, element ){
				event.stopEvent();
				this.hideOverlay();
			}, this );
		}
	},
	/**
	 * 
	 */
	doShowFrame: function() {
		if( !Ext.get( viewFrame ).isVisible() ) {
			Ext.get( viewFrame ).fadeIn();
		}
	},
	/**
	 * 
	 */
	showFrame: function( url, title ) {
		if( !frameOpen ) {
			frameOpen = true;
			this.showOverlay();
			if( !viewFrame ) {
				this.createFrame();
			}
			if( Ext.getDom( 'owFrame' ).src != url ) {
				Ext.getDom( 'owFrame' ).src = url;
			} else {
				this.doShowFrame();
			}
		}
	},
	/**
	 * 
	 */
	hideFrame: function() {
		if( frameOpen ) {
			if( viewFrame && Ext.get( viewFrame ).isVisible() ) {
				Ext.get( viewFrame ).fadeOut();
			}
			frameOpen = false;
		}
	},
	/**
	 * 
	 */
	onClickItem: function( event, element ) {
		if( element.tagName.toLowerCase() != 'a' || Ext.get( element ).hasClass( 'post-title' ) ) {
			event.stopEvent();
			this.showFrame( 'http://theba.hu/article.php?guid=' + Ext.get( event.getTarget( '.stream-item', 10, true ) ).id.replace( 'item-', '' ) );
		}
	},
	/**
	 * 
	 */
	initialize: function() {
		// menu
		Ext.each( Ext.query( 'a.mpoint', 'menu-ul' ), function( item, index ) {
			urlFragments[index] = item.href.replace( 'http://theba.hu/', '' ).replace( /#/, '' );
		}, this );
		// set target of links
		Ext.each( Ext.query( '.link' ), function( item ){
			item.target = '_blank';
		}, this );
		// set slides
		Ext.each( Ext.query( '.slide', 'slides' ), function( item, index, allItems ){
			if( index == 0 ) {
				Ext.get( 'slides' ).setWidth( 9999 );
			}
			var no = item.id.replace( 'slide-', '' );
			Ext.get( item ).setStyle({
				float: 'left'
			}); 
			Ext.get( 'menu-' + no ).on( 'click', this.onClick, this );
		}, this );
		var hash = window.location.hash.replace( '#', '' ).split( '/' );
		var post = hash[1];
		hash = hash[0];
		if( hash ) {
			var count = 0;
			for( var i in urlFragments ) {
				if( urlFragments[i] == hash ) {
					this.onClick( null, Ext.get( 'menu-' + count ), true );
				}
				count++;
			}
		}
		// filters
		Ext.get( 'filterH' ).on( 'click', function( event, element ){
			event.stopEvent();
			this.onFilter( 'hu' );
		}, this );
		Ext.get( 'filterE' ).on( 'click', function( event, element ){
			event.stopEvent();
			this.onFilter( 'en' );
		}, this );
		Ext.get( 'filterAll' ).on( 'click', function( event, element ){
			event.stopEvent();
			this.onFilter( 'all' );
		}, this );
		// open in overlay
		Ext.each( Ext.query( 'li.xtype-1,li.xtype-2,a.post-title', 'slide-0' ), function( item, index, allItems ) {
			Ext.get( item ).on( 'click', this.onClickItem, this );
		}, this );
		Ext.each( Ext.query( 'li.xtype-1,li.xtype-2', 'slide-1' ), function( item, index, allItems ) {
			Ext.get( item ).on( 'click', this.onClickItem, this );
		}, this );
		Ext.each( Ext.query ('a.frame', 'slide-content' ), function( item, index, allItems ) {
			Ext.get( item ).on( 'click', function( event, element ){
				event.stopEvent();
				this.showFrame( element.href, element.innerHTML  );
			}, this )
		}, this );
		// pull items periodically
		task = Ext.TaskMgr.start({
			interval: 30000,
			scope: this,
			run: function() {
				Ext.Ajax.request({
					url: 'http://theba.hu/getitems.php',
					method: 'post',
					params: { last: lastLSItem },
					scope: this,
					success: function( response, options ) {
						var response = Ext.decode( response.responseText );
						var rlength = response.length;
						var item = null;
						if( rlength > 0 ) {
							for( var i=0; i<rlength; i++ ) {
								Ext.get( 'slide-0' ).first().removeClass( 'firstitem' );
								item = Ext.DomHelper.insertFirst( 'slide-0', {
									tag: 'li',
									id: 'item-'+response[i].item_guid,
									cls: 'stream-item firstitem lng-' + response[i].item_lang,
									style: {
										display: ( filtered === null || filtered == response[i].item_lang ? '' : 'none' )
									},
									cn:[(response[i].item_type==2?{
										tag: 'a',
										href: response[i].item_link,
										cls: 'link',
										html: response[i].item_title
									}:{}),{
										tag: 'span',
										html: response[i].item_text
									},{
										tag: 'p',
										cls: 'date t-'+response[i].item_type,
										cn: [{
											tag: 'a',
											href: response[i].item_link,
											cls: 'link',
											html: response[i].item_date
										}]
									},{
										tag: 'br',
										cls: 'clear'
									}]
								}, true );
								if( response[i].item_type == 2 || response[i].item_type == 1 ) {
									Ext.get( item ).on( 'click', this.onClickItem, this );
								}
								Ext.get( 'item-'+lastLSItemG ).removeClass( 'firstitem' );
								lastLSItem = response[i].item_date;
							}
						}
					}
				});
			}
		});
	}
};}().construct());