var LCM = {
	
	About: {
		
		init: function() {
			this.delayedLoad.delay(2000, this);
		},
		
		delayedLoad: function() {
			var img = new Element('img', { src: '/img/banner.png' });
			this.layer = new Element('div', { id: 'banner' }).inject(document.body);
			document.addEvent('keyup', this.onKeyUp.bindWithEvent(this))
		},
		
		onKeyUp: function(e) {
			e = new Event(e);
			if ( 'i' == e.key && e.alt) this.toggle();
			return(true);
		},
		
		toggle: function() {
			var left = Math.floor(document.getWidth()/2 - 327);
			this.layer.setStyle('left', left);
			if ( '0px' == this.layer.getStyle('margin-top') ) {
				this.layer.tween('margin-top', 0, -284);
			} else {
				this.layer.tween('margin-top', -284, 0);
			}
		}
		
	},
    
    onDOMReady: function() {
        var optionsRequest = new Request.JSON({
            url: '/stream/js-options.php',
            onComplete: function(data) {
                this.JSOptions = data;
            }.bind(this)
        }).send();

		LCM.About.init();
    },
    
    Document: {
        
        onLoad: function() {
            if ( $('scroll-marker') ) {
                this.FxScroll = new Fx.Scroll(window);
                LCM.Document.delayedScroll.delay(700, this);
            }
        },
        
        delayedScroll: function() {
             if ( LCM.JSOptions['smooth-scroll'] ) this.FxScroll.toElement($('scroll-marker'));
        },
    
        setType: function(type) {
            var selected = $('document-type-selector').getElement('.off');
            if ( selected ) selected.removeClass('off');
            var hidden = 'article' == type ? 'news' : 'article';
            $('document-type-selector').getElement('.'+hidden).addClass('off');
            $('document-type-selector').getElement('input').set('value', type);
        }
        
    },
    
    Tooltip: {
        
        set: function() {
            this.tip = new Tips('.tooltip', {
                showDelay: 400,
                className: 'tip-style',
                fixed: true
            });
        }
        
    },
    
    Utils: {
        
        redirect: function(url) {
            document.location.href=url;
        }
        
    },
    
    Options: {
        
        onDOMReady: function() {
            this.periodicalCheckForm.periodical(1000, this);
            this.data = $('project-options').toQueryString();
        },

        periodicalCheckForm: function() {
            var data = $('project-options').toQueryString();
            if ( data != this.data ) {
                this.data = data;
                this.save();
            }
        },
        
        save: function() {
            $('project-options').send();
        }
        
    },
    
    Users: {
        
        onDOMReady: function() {
            var what = new What($('mini-search').getElement('input'), { text: 'quick search', 'class': 'empty' });         
            var hint = new Hint($('mini-search').getElement('input'), { 
                min: 3,
                onHint: LCM.Users.doSearch.bind(this)
            });
            $('users-list').addEvent('click', this.Events.onClickToResultSet.bindWithEvent(this));
            
            this.request = new Request({
                url: '/stream/user-status.php'
            });
        },
        
        Events: {
          
          onClickToResultSet: function(e) {
              e = new Event(e);
              var row = e.target;
              if ( 'tr' != $(e.target).get('tag') ) row = e.target.getParent('tr');
              if ( row.id ) {
                  var id = row.id.split('.')[1];
                  if ( e.target.hasClass('edit') ) {
                      LCM.Utils.redirect('/user/edit/'+id);
                  } else if ( e.target.hasClass('UserStatus') ) {
                      this.request.post({
                          type: 'status',
                          UserID: id
                      });
                      row.toggleClass('disabled');
                  } else if ( e.target.hasClass('UserPaymentConfirm') ) {
                      if ( confirm('You really want to confirm/unconfirm user payment?') ) {
                          this.request.post({
                              type: 'payment-confirm',
                              UserID: id
                          });
                          row.toggleClass('not-confirmed');
                      } else return(false);
                  }
                  
              }
              
          }
            
        },
        
        setSubscription: function() {
            var userID = $('userID').get('value');
            var date = $('subscription-date').get('value');
            var plan = $('plan').get('value');
            if ( !plan ) alert('Select subscription plan.'); else {
                 var request = new Request({
                    url: '/stream/subscription.php',
                    onComplete: function() {
                        LCM.Utils.redirect(document.location.href);
                    }
                }).post({
                    userID: userID,
                    date: date,
                    plan: plan,
                    type: 'set'
                })
            }
        },
        
        cancelSubscription: function() {
            var userID = $('userID').get('value');
             var request = new Request({
                url: '/stream/subscription.php',
                onComplete: function() {
                   LCM.Utils.redirect(document.location.href);
                }
            }).post({
                userID: userID,
                type: 'cancel'
            })
        },
        
        doSearch: function(value) {
            if ( $('users').getElement('.pages') ) $('users').getElement('.pages').addClass('hidden'); 
            if ( !this.searchRequest ) {
                this.searchRequest = new Request.HTML({
                    url: '/stream/users-search.php',
                    update: $('users-list')
                });
            }
            this.searchRequest.post({
                query: value
            })
        }
        
    },
    
    Profile: {
      
        currentTab: 'profile',
        data: [],
        
        onDOMReady: function() {
            var activeTab = $('profile').getElement('.tabs a').id.split('-')[0];    
            this.setTab(activeTab);
            this.periodicalCheckForm.periodical(1000, this);
        },
        
        shareAccount: function(reset) {
            if ( !reset) $('share-link').toggleClass('hidden');
            var request = new Request.HTML({
                url: '/stream/share.php',
                update: $('share').getElement('.link')
            }).post({
                'userID': $('userID').get('value'),
                'reset': reset
            });
        },
        
        periodicalCheckForm: function() {
            if ( '#subscription' == document.location.hash && !this.set ) {
                activeTab = 'subscription';
                this.setTab(activeTab);
                this.set = 1;
            }
            if ( $(this.currentTab+'-form') ) {
                var data = $(this.currentTab+'-form').toQueryString();
                if ( data != this.data[this.currentTab] ) {
                    this.data[this.currentTab] = data;
                    this.save();
                }
            }
        },
        
        save: function() {
            $(this.currentTab+'-form').send();
        },
        
        setTab: function(name) {
            if ($(this.currentTab+'-tab')) $(this.currentTab+'-tab').removeClass('active');
            $(name+'-tab').addClass('active');
            
            if ($(this.currentTab+'-content')) $(this.currentTab+'-content').addClass('hidden');
            $(name+'-content').removeClass('hidden');
            
            this.currentTab = name;
            if ( $(this.currentTab+'-form') ) this.data[this.currentTab] = $(this.currentTab+'-form').toQueryString();
        }
        
    },
    
    Documents: {
        
        onDOMReady: function() {
            var what = new What($('mini-search').getElement('input'), { text: 'quick search', 'class': 'empty' });         
            var hint = new Hint($('mini-search').getElement('input'), { 
                min: 3,
                onHint: LCM.Documents.doSearch.bind(this)
            });
            LCM.Tooltip.set();
            this.reposition();
            var myScroller = new Scroller($('year-selector').getElement('.content'), {
                velocity: 0.4
            });

            (function(){
                this.stop();
                this.start();
            }).periodical(1000, myScroller);

            window.addEvent('resize', this.reposition.bind(this));

            $('year-selector').getElement('.btn-left').addEvent('click', this.scrollYears.bindWithEvent(this));
            $('year-selector').getElement('.btn-right').addEvent('click', this.scrollYears.bindWithEvent(this));
            this.currentScrollElement = $('year-selector').getElement('.content').getElement('a');
            $('year-selector').getElement('.content').scrollTo(0,0);
            this.FxScroll = new Fx.Scroll($('year-selector').getElement('.content'));
            $('documents').getElement('tbody').addEvent('click', this.Events.onClickToResutlSet.bindWithEvent(this));   

            window.addEvent('resize', this.reposition.bind(this));
            
        },
        
        Events: {
            
            onClickToResutlSet: function(e) {
                e = new Event(e);
                var row = $(e.target);
                if ( 'tr' != e.target.get('tag') ) row = e.target.getParent('tr');
                if ( row.id ) {
                    var id = row.id.split('.')[1];
                    if ( e.target.hasClass('favourite')) LCM.Bookmarks.toggle(e.target, id); else if ( e.target.hasClass('edit') ) {
                        LCM.Utils.redirect('/document/edit/'+id);
                    }               
                }
            }
            
        },

		send: function() {
			window.document.getElementById('new-document').submit();			
			return(false);
		},
        
        doSearch: function(value) {
            if ($('documents').getElement('.pages')) $('documents').getElement('.pages').addClass('hidden');
            if ( !this.request ) this.request = new Request.HTML({
                 url: '/stream/doc-mini-search.php',
                 update: $('documents').getElement('tbody'),
                 onComplete: LCM.Tooltip.set
            });
            this.request.post({
                query: value
            });
        },
        
        reposition: function() {
            var left = $('documents-page').getLeft();
            var top = $('documents-page').getTop();
            $('year-selector').setStyles({
                left: left - 83 + Math.ceil($('documents-page').getWidth()/2),
                top: top + $('documents-page').getHeight() + 4
            });
            $('year-selector').removeClass('hidden');            
        },
        
        scrollYears: function(e) {
            e = new Event(e);
            var target = $(e.target)
            var wrap =  $('year-selector').getElement('.wrap-y');
            if ( e.target.hasClass('btn-left')) {
                var previous = this.currentScrollElement.getPrevious('a');
                if ( previous ) this.currentScrollElement = previous;
            } else {
                var next = this.currentScrollElement.getNext('a');
                if ( next ) this.currentScrollElement = next;
            }
            this.FxScroll.toElement(this.currentScrollElement);
        }
        
    },
    
    Bookmarks: {
        
        onDOMReady: function() {
            this.FxScroll = new Fx.Scroll(window);
            $('search-result').addEvent('click', LCM.Search.Events.onClickToResultSet.bindWithEvent(this));
            LCM.Tooltip.set();
        },
        
        toggle: function(element, DocID) {
            element.toggleClass('enable');
            new Request({
                url: '/stream/favourite.php'
            }).post({
                DocID: DocID
            })
        }
        
    },
    
    Search: {
        
        currentFilter: 'search-by-all',
        currentPage: 0,
        
        Events: {
            
            onClickToResultSet: function(e) {
                e = new Event(e);
                var target = $(e.target);
                if ( 'tr' != e.target.get('tag') ) target = e.target.getParent('tr');
                if ( target.id ) {
                    var id = target.id.split('.')[1];
                    if ( e.target.hasClass('triangle') ) {
                        e.target.toggleClass('open');
                        $('document.'+id+'.text').toggleClass('hidden');
                        if ( '' == $('document.'+id+'.text').getElement('.body').get('html') ) {
                            new Request.HTML({
                                url: '/stream/document.php',
                                update: $('document.'+id+'.text').getElement('.body'),
                                onRequest: function() {
                                    $('document.'+id+'.text').getElement('.body').set('html', '<div id="loading"></div>');
                                },
                                onComplete: function() {
									if ( $('doc-view') ) {
										var k = parseInt($('doc-view').get('html'));
										k--;
										if ( k < 0) k = 0; 
										$('doc-view').set('html', k);
									}
                                    if ( LCM.JSOptions['smooth-scroll'] ) this.FxScroll.toElement($('document.'+id));
                                }.bind(this)
                            }).post({
                                DocID: id,
                                query: $('search-field') ? $('search-field').get('value') : ''
                            })
                        } else {
                            if ( LCM.JSOptions['smooth-scroll'] ) this.FxScroll.toElement($('document.'+id));
                        }
                    } else if ( e.target.hasClass('green') ) {
                        $('document.'+id+'.text').addClass('hidden');
                        $('document.'+id).getElement('.triangle').removeClass('open');
                    } else if ( e.target.hasClass('favourite') ) {
                        LCM.Bookmarks.toggle(e.target, id);
                    }       
                }
            }
            
        },
        
        searchComplete: function(searchID, totalFound) {
            $('total-found').set('html', totalFound);
            $('ssearch').removeClass('hidden');
            if ( !$('ssearch-control').get('checked') ) this.lastSearchID = searchID;
        },
        
        noMore: function() {
            this.currentPage = -1;
            $('show-more').addClass('hidden');
        },
        
        onDOMReady: function() {
            this.FxScroll = new Fx.Scroll(window);
            var what = new What('search-field', { text: 'Type search text here', 'class': 'empty' });
            var hint = new Hint('search-field', { 
                min: 3,
                onHint: function(value) {
                    LCM.Search.doSearch(value, true);
                }.bind(this)
            });
            this.doSearch($('search-field').get('value'));
            $('search-result').addEvent('click', this.Events.onClickToResultSet.bindWithEvent(this));
            
        },
        
        setFilter: function(FilterID) {
            $(this.currentFilter).removeClass('active');
            this.currentFilter = 'search-by-'+FilterID;
            $(this.currentFilter).addClass('active');
            this.doSearch($('search-field').get('value'), true);
        },
        
        setNotFound: function() {
            $('not-found').removeClass('hidden');
            $('results').addClass('hidden');
        },
        
        doSearch: function(value, reset) {
            
            if ( $('demo-count') ){
                $demo = parseInt($('demo-count').get('html'));
                if ( !$demo ) {
                    alert('No searches left. Please, subscribe to our service.');
                    return;
                }
            }
            if ( reset ) {
                $('search-result').getElements('tbody').each(function(item){
                    $(item).set('html', '');
                });
                this.currentPage = 0;
                $('show-more').removeClass('hidden');
            }
            if ( 'Type search text here' != value && -1 != this.currentPage ) {
                var filter = this.currentFilter.split('-')[2];
                if ( !this.request ) this.request = new Request.HTML({
                    url: '/stream/search.php',
                    onComplete: function(a, b, html) {
                        if ( $('demo-count') ) {
                            $demo = $('demo-count').get('html');
                            $('demo-count').set('html', parseInt($demo) - 1);
                        }
                        if ( '' == html.clean() ) {
                            if ( 0 == this.currentPage) this.setNotFound(); else $('show-more').addClass('hidden');
                            this.currentPage = -1; 
                        } else {
                            $('query-text').getElement('span').set('html', $('search-field').get('value'));
                            $('not-found').addClass('hidden');
                            $('results').removeClass('hidden');
                            var tbody = new Element('tbody').inject($('search-result'));
                            tbody.set('html', html);
                            LCM.Tooltip.set();
                            if( $('show-all').get('checked') ) $('show-more').addClass('hidden')
                        }
                        this.currentPage++;
                    }.bind(this)
                });
                this.request.post({
                    filter: filter,
                    query: value,
                    page:  this.currentPage,
                    bookmarks: $('only-bookmarks').get('checked'),
                    all: $('show-all').get('checked'),
                    ssearch: $('ssearch-control').get('checked') ? this.lastSearchID : 0
                });
            } 
        }
        
    }
    
}


window.addEvent('domready', LCM.onDOMReady.bind(LCM));