var isDragging;
$(document).ready(function() {
    
    $('.col-contato input[type="text"], .col-contato textarea').inputfocus();
 
    var mainElement = $('#main'),
        element,
        pos,
        numCols = $('#main .col').length,
        bgImage = $('#bg-image img'),
        maxCols = getMaxVisibleCols(),
        colWidth = $('#main .col').eq(0).innerWidth()+1,
		NcolWidth = $('#main .col').eq(0).innerWidth(),
        scrollElement = $('.scrollbar'),
        scrollOnLimit = false,
        currentIndex = 0,
        ds = { di:0, df:0 },
        isDragging = false,
        isAnimating = false,
        dragAxis,
        x=0,
        y=0,
        ms, lx, ly, cx, cy, _cx, _cy, dx, dy, ex, ey,
        step=stepMax=5,
        timeOut=300;
    
    // isTouchScreen
    var isTouchScreen  = navigator.userAgent.match(/iPhone|iPod|iPad|Android/i) ? 1 : 0;
 
    // events
    var START_EVENT = isTouchScreen ? 'touchstart' : 'mousedown',
        MOVE_EVENT = isTouchScreen ? 'touchmove' : 'mousemove',
        END_EVENT = isTouchScreen ? 'touchend' : 'mouseup';
        
    var has3D = ('WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix()),
        translateOpen = 'translate' + (has3D ? '3d(' : '('),
        translateClose = has3D ? ',0)' : ')';
        
    $('.page-home').disableSelection();
    mainElement.width((NcolWidth)*numCols); // VISHAL CODE
    
    scrollElement.fadeOut();
    
    function setTranslate(element, x, y){
        element.style.webkitTransform = translateOpen + x + 'px,'  + y + 'px' + translateClose;
    }
    
    function preventDefault(event){
        ilog('preventDefault');
        event.preventDefault();
    }
    
    function mdown(event) {
        
        if ( $(event.target).is('input') ) { return; }
        
        var targetParent = $(event.target).parents('#main');
		var checkdrag = targetParent.attr('class');
		if(checkdrag != 'inner-main')
		{
			//alert(targetParent.attr('class'));
			if ( targetParent.length ) {
				$(document).bind(MOVE_EVENT, mmove);
				mainElement.addClass('dragging');
				
				if ( ! isTouchScreen ) {
					// mainElement.stop();
					// x = mainElement.position().left;
				} else {
					// mainElement.removeClass('main_animated');
					if ( x != getTransform(mainElement[0]).x ){
						// x = getTransform(mainElement[0]).x;
					}
				}
				
				// isAnimating = false;
			}
		}
    }
    
    function getTransform(element){
        var transform = window.getComputedStyle(element).webkitTransform;
        transform = new WebKitCSSMatrix(transform);
        return { 'x' : transform.m41, 'y' : transform.m42 }
    }
    
    function unbindMove(event){
        event.preventDefault();
    }
    
    function mmove(event) {
        
        if ( isTouchScreen ) {
            event = event.originalEvent.touches[0];
        }
		
        var left_pos = $('#inner-main-wrapper').css('margin-left');
		if ( left_pos == '1024px' ) return false;
        // if ( isAnimating ) return;
        
        cx = event.pageX;
        cy = event.pageY;
        dx = cx-lx;
        dy = cy-ly;
        
        // ilog(cx, cy)
        
        if ( ! isDragging ) {
            
            var d = new Date(), currentMS = d.getTime();
            
            if ( step <= 0 && ms != null ) {
                step = stepMax;
    
                if ( ( currentMS - ms ) < timeOut ) {
                    // inicia o drag
                    isDragging = true;
                    mx = event.pageX;
                    my = event.pageY;
                    
                    // bind preventDefault
                    $('a').bind('click', preventDefault);
    
                    if ( Math.abs(dx) > Math.abs(dy) ) {
                        // move em X
                        dragAxis = 'x';
                        element = $('#main');
                        ds.di = element.position().left;
                    } else {
                        // move em Y
                        dragAxis = 'y'
                        element = $(event.target).parents('.col');
                        ds.di = element.position().top;
                        setScroll(element);
                    }
    
                }
    
            }
            if ( step == stepMax ) {
                ms = currentMS;
                lx = event.pageX;
                ly = event.pageY;
            }
            step--;
            
        } else {
            //direção captada
			
            if (dragAxis == 'y') {
                ey = element.position().top + (event.pageY-_cy)/( isTouchScreen ? 1.5 : 1 );
                var scrollH = element.find('.scroll').height();
                var windowH = $(window).height();
                
                if ( ey > 0 || ey < -(scrollH-windowH) ) {
                    scrollOnLimit = true;
                } else {
                    scrollOnLimit = false;
                }
                
                if ( scrollH > windowH && ! isTouchScreen && ( ey <= 0 && ey > -(scrollH-windowH) ) ) {
                    element[0].style.top = ey  + 'px';
                    element.data('top', ey);
                    updateScrollPosition(element);
                } else if ( isTouchScreen && scrollH > windowH ) {
                    setTranslate(element[0], 0, ey);
                }
            } else {
                
                if( ! isTouchScreen ){
                    ex = element.position().left + (event.pageX-_cx);
                    if ( ex >= 0 && ex <= getMaxDragRight($(window).width()+'x'+$(window).height()) ) {
                        if ( ! bgImage.hasClass('left') ) {
                            bgImage.addClass('left').removeClass('right');
                        }
                        element[0].style.left = ex + 'px';
                    } else if ( ex < 0 && ex > - getMaxDragLeft($(window).width()+'x'+$(window).height()) ) {
                        if ( ! bgImage.hasClass('right') ) {
                            bgImage.addClass('right').removeClass('left');
                        }
                        element[0].style.left = ex + 'px';
                    }
                    
                } else {
                    // isTouchScreen
                    
                    if ( element.hasClass('main_animated') ) {
                        x = getTransform(element[0]).x;
                        element.removeClass('main_animated');
                    }
                    
                    ex = x + (event.pageX-_cx)/1;
                    setTranslate(element[0], ex, 0);
                    x = ex;
                }
                // 
                // slow down on FireFox
                // SlideTrack.track.css('left', -Math.round(ex*6/321));
            }
            
        }
        _cx = event.pageX;
        _cy = event.pageY;
    }
    
    function mup(event) {
    	
        $(document).unbind(MOVE_EVENT, mmove);
        scrollElement.fadeTo('medium', 0);
        mainElement.removeClass('dragging');
        
        if ( isDragging ) {
            isDragging = false;
            
            if ( dragAxis == 'x' ) {
                
                if ( isTouchScreen ) {
                    // element[0].style.left = getTransform(element[0]).x + 'px';
                }
                
                // ilog('left', element[0].style.left)
                
                
                currentIndex = getComputedIndex();
                
                ilog('currentIndex', currentIndex);
                var nextElement = mainElement.find('.col').eq(currentIndex);
                animateMain(-nextElement.position().left);

            } else if ( dragAxis == 'y' && isTouchScreen ) {
                var scrollH = element.find('.scroll').height();
                var windowH = $(window).height();
                if ( ey  > 0 ) {
                    element.addClass('scroll_animated');
                    setTranslate(element[0], 0, 0);
                    element.bind('webkitTransitionEnd', function(event) {
                        element.removeClass('scroll_animated');
                    });
                } else if ( ey < -(scrollH-windowH) ){
                    element.addClass('scroll_animated');
                    setTranslate(element[0], 0, (-(scrollH-windowH)) );
                    element.bind('webkitTransitionEnd', function(event) {
                        element.removeClass('scroll_animated');
                    });
                }
            } else if ( dragAxis == 'y' && ! isTouchScreen ) {
                // unbind preventDefault
                window.setTimeout(function() {
                    $('a').unbind('click', preventDefault);
                }, 50);
            }
            
        }
        
    }
    
    function getComputedIndex(){
        ds.df = element.position().left;
        log('ds.di', ds.di , 'ds.df', ds.df)
        direction = ( ( ds.di < ds.df ) ? 'rigth' : 'left' ); 
        ds_abs = Math.abs(Math.abs(ds.df)-Math.abs(ds.di));
        ds_n = ds.df - ds.di;
        part = ds_abs/colWidth;
        m = Math.round((Math.ceil(part)-part)*colWidth);

        if ( direction == 'left' ) {
            v  = parseInt(Math.abs(ds.df) + m);
            q = -1
        } else {
            ilog('rigth 1')
            v  = parseInt(ds.df+m);
            q = 1;
        }

        if( direction == 'rigth' && ds.di >= 0 || ds.df >= 0 ){
            ilog('rigth 2');
            v = 0;
            q = 1;
        }

        if ( direction == 'left' && Math.abs(ds.df) > ( ( numCols.length-1 ) * colWidth ) ){
            v = ds.di;
            q = 1;
        }

        var index = parseInt( Math.abs(v/colWidth) );

        // a grande jogada para ser mais preciso quanto a posição
        var limitIndex = getLimitIndex();
        ilog(index, limitIndex)
        if ( direction == 'left' && index > limitIndex+1 ) {
            ilog('muda')
            index = limitIndex+1;
        }
        ilog('novo index', index)
        return index;
    }
    
    function animateMain(v){
        isAnimating = true;
        if( !isTouchScreen ){
            mainElement.stop().animate({ left:  v  }, 600, 'easeOutQuart', function() {
                isAnimating = false;
                SlideTrack.track.css({ 'left' : $('li', SlideTrack.container).eq(currentIndex).position().left });
                SlideTrack.left = $('li', SlideTrack.container).eq(currentIndex).position().left
                SlideTrack.isDragging = false;
                
                // unbind preventDefault
                $('a').unbind('click', preventDefault);
            });
        } else {
            x = v;
            mainElement.addClass('main_animated');
            mainElement[0].style.webkitTransform = 'translate3d('+v+'px, 0px, 0px)';
            // var intVal = window.setInterval(function() {
            //    x = getTransform(mainElement[0]).x;
            // }, 50);
            mainElement.bind('webkitTransitionEnd', function(event) {
                isAnimating = false;
                mainElement.removeClass('main_animated');
                // window.clearInterval(intVal);
                SlideTrack.track.css({ 'left' : $('li', SlideTrack.container).eq(currentIndex).position().left });
            });
        }
    }
    
    function navTo(n) {
        var limitIndex = getLimitIndex();
        if ( n == 'next' && currentIndex > limitIndex ) {
            return;
        }
        
        var nextElement = mainElement.find('.col').eq(currentIndex)[n]();
        
        if ( nextElement.length ) {
            var d = nextElement.position().left;
            animateMain(-d);
            currentIndex = n == 'next' ? (currentIndex+1) : (currentIndex-1);
        }
        
        if ( n == 'prev' ) {
            if ( ! bgImage.hasClass('left') ) {
                bgImage.addClass('left').removeClass('right');
            }
        } else if ( n == 'next' ) {
            if ( ! bgImage.hasClass('right') ) {
                bgImage.addClass('right').removeClass('left');
            }
        }
        
    }
    
    function kdown(e) {
     	//var left_pos = $('#inner-main-wrapper').css('margin-left');
		//if ( left_pos == '1024px' ) return false;
		
		//return false;
		
		if ( $(e.target).is('input') ) return;
        
        var keyCode = e.keyCode || e.which,
			//arrow = {left: 37, up: 38, right: 39, down: 40 },
			arrow = {},
			target = null;

		switch( keyCode ){
			// tecla right
			case arrow.right:
			log('right')
            navTo('next');
			break;

			// tecla left
			case arrow.left:
			log('left')
			navTo('prev');
			break;
		}
    }
    
    function getVisibleArea(){
        return {
            'x' : $(window).width() - $('#nav-col').innerWidth(),
            'y' : $(window).height()
        }
    }

    function getMaxVisibleCols(){
        var max = 0,
            colWidth = $('#main .col').eq(0).innerWidth(),
            visibleWindow = getVisibleArea();
            
        while( max*colWidth < visibleWindow.x ){
            max++;
        }
        return max-1;
    }
    
    function getLimitIndex(){
        log((numCols -1) - maxCols)
        return (numCols -1) - maxCols;
    }
    
    function getMaxDragLeft(windowWidth){
        if ( !! getMaxDragLeft.cache[windowWidth] ) return getMaxDragLeft.cache[windowWidth];
        var img = $('#bg-image img').width(), win = $(window).width(), max = colWidth * getMaxVisibleCols(), navcol = $('#nav-col').width();
        var left = ( (numCols - getMaxVisibleCols())*colWidth ) + img - ( win - max - navcol );

        return getMaxDragLeft.cache[windowWidth] = left;
    }
    getMaxDragLeft.cache = {};
    
    function getMaxDragRight(windowWidth){
        if ( !! getMaxDragRight.cache[windowWidth] ) return getMaxDragRight.cache[windowWidth];
        var img = $('#bg-image img').width();
        var right = img;
        return getMaxDragRight.cache[windowWidth] = right;
    }
    getMaxDragRight.cache = {};
    
    $(window).bind('resize', function(event) {
        log('max cols', getMaxVisibleCols());
        maxCols = getMaxVisibleCols();
    });
    
	if ( ! isiPad ) {
    	$(document).bind(MOVE_EVENT, unbindMove);
    	$(document).bind(START_EVENT, mdown);
    	$(document).bind(END_EVENT, mup);
    	$(document).bind('keydown', kdown);	
	};  
    
    $('img, a').bind('mousedown', function(event) {
        event.preventDefault();
    });
    
    var intDelta = 0;
    var currentWheell = null;
    $(window).bind('resize', function(event) {
        $('.col').css('top', 0);
        intDelta = 0;
    });
    $('.col').bind('mousewheel', function(event, delta) {
        
        if ( currentWheell != $('.col').index(this)) {
            intDelta = $(this).data('intDelta') || 0;
        }
        
        var scrollH = $(this).find('.scroll').height();

	//	alert(scrollH);
        var windowH = $(window).height();
        var top = $(this).position().top;
        if ( delta > 0 && intDelta <= 0) {
           intDelta++;  
        } else if( top != -(scrollH-windowH) ) {
            intDelta--;
        }
        
        if ( $(this).data('top') != null ) {
            intDelta = Math.round($(this).data('top')/20);
            $(this).data('top', null);
        }
        log('intDelta', intDelta)
        ilog('scrollH > windowH',scrollH > windowH , 'intDelta <= 0', intDelta <= 0 ,'top > -(scrollH-windowH)', top > -(scrollH-windowH) )
        if ( scrollH > windowH && ( intDelta <= 0 && ( top >= -(scrollH-windowH) || top < 0 ) )  ) {
            var newTop  = 20*intDelta;
            
            if ( newTop < -(scrollH-windowH) ) {
                newTop = -(scrollH-windowH);
            }
            
            $(this).css('top', newTop);
            updateScrollPosition($(this));
        }
        
        log(intDelta, top, scrollH, windowH, (scrollH-windowH))
        currentWheell = $('.col').index(this);
        $(this).data('intDelta', intDelta);
        log('newTop', newTop);
    });

    
    function updateScrollPosition(col) {
        if ( ! scrollOnLimit ) {
            // var top = getTransform(col[0]).y;
            // var top = window.getComputedStyle(col[0]).top;
            var top = $(col).position().top;
            var scrollH = $('.scroll', col).height();
            var scrollTop = Math.abs(100*top/scrollH);

            if (  ! isTouchScreen ) {
                $('.scrollbar-track').css('top',  scrollTop + '%');
            } else {
                $('.scrollbar-track')[0].style.webkitTransform = 'translate3d(0px, '+scrollTop+'%, 0px)';
            }
        }
    }
    
    function setScroll(col) {
        var scrollH = $('.scroll', col).height();
        var windowH = $(window).height();
        var scrollValue = 100*windowH/scrollH;

        
        if ( scrollValue < 100 ) {
            scrollElement.fadeTo('medium', 0.5).css('left', $(col).offset().left - 255 + $(col).width() - 15 );
            $('.scrollbar-track', scrollElement).height(scrollValue+'%');
            updateScrollPosition($(col));
        } else {
            scrollElement.hide();
        }
    }
    
    
	/* Smoothly scroll li's */
	var SlideTrack = {
        init: function(){
            var $this = this;
            this.selectors = { container:'#cols-nav', track:'#cols-nav-track', slide: '#main' };
            this.container = $(this.selectors.container);
            this.slide = $(this.selectors.slide)
            this.track = $(this.selectors.track);
            this.relation = 321/6;
            this.isDragging = false;
            this.cx;
            this.left = 0;
            this.isMoving = false;
             
            $('#main .col').each(function(index) {
                $('ul', SlideTrack.container).append('<li class="nav-col-item ir">'+(index+1)+'</li>');
            });
            
            this.container.css('width', ( ( $('li', this.container).width() + 2 ) * $('li', this.container).length) );
            this.updateTrack();
            
            $(window).bind('resize', function(event) {
                $this.updateTrack();
                // $('.col', mainElement).height($(window).height());
            });
            
            this.track.bind('mousedown', function(event) {
                event.preventDefault();
            });
            
            $(document).bind('mousedown', SlideTrack.mouseDown );
            $(document).bind('mouseup', SlideTrack.mouseUp );
        },
        
        updateTrack: function(){
            this.track.css('width', getMaxVisibleCols() * 6 - 2);
        },
        
        mouseDown: function(event) {
            
            if ( SlideTrack.isDragging ) {
                return;
            }
            
            if ( $(event.target).is(SlideTrack.selectors.track) ) {
                if ( SlideTrack.cx == null ) {
                    // SlideTrack.cx = event.pageX;
                }
                SlideTrack.cx = event.pageX;
                ds.di = mainElement.position().left;
                $(document).bind('mousemove', SlideTrack.mouseMove);
            }
        },
        
        mouseMove: function(event){
                newLeft = SlideTrack.left + event.pageX - SlideTrack.cx || 0;
            
            if ( ! SlideTrack.isDragging ) {
                SlideTrack.isDragging = true;
            }
            
            if ( newLeft >= 0 & newLeft <= ( SlideTrack.container.width() - SlideTrack.track.width() - 2 ) ) {
                SlideTrack.track.css('left', newLeft);
                SlideTrack.slide.css('left', -newLeft*SlideTrack.relation );
                SlideTrack.left = newLeft;
            } else {
                return;
            }
        
            SlideTrack.cx = event.pageX;
            SlideTrack.cy = event.pageY;
        },
        
        mouseUp: function(event){
            if ( SlideTrack.isDragging ) {
                $(document).unbind('mousemove', SlideTrack.mouseMove);
                
                $('li', SlideTrack.container).each(function(index) {
                    log('SlideTrack.left', SlideTrack.left, '$(this).position().left', $(this).position().left);
                    log('SlideTrack.left < $(this).position().left', SlideTrack.left < $(this).position().left)
                    if ( SlideTrack.left < $(this).position().left ) {
                        log('passa');
                        return;
                    }
                });
                
                element = mainElement;
                currentIndex = getComputedIndex();
                ilog('currentIndex', currentIndex);
                var nextElement = mainElement.find('.col').eq(currentIndex);
                animateMain(-nextElement.position().left);
                
            }
        }
    }
    
   SlideTrack.init();
    
    
    
    var contactForm = {
        init: function(){
            
            var fileName = $('input[type="file"]').val();
        	if ( fileName != undefined) {
        		fileName = fileName.match(/(.*[\\\\])?(.*)/)[2];
                $('.file').val(fileName).attr("value", fileName);
                $('.file')[0].setAttribute("value", fileName);
        		$('input[type="file"]').bind('change mouseout', function(event) {
        			var fileName = $(this).val().match(/(.*[\\\\])?(.*)/)[2];
        			$('.file').val(fileName).attr("value", fileName);
        			$('.file')[0].setAttribute("value", fileName);
        		});
        	}
            
        }
    }
    contactForm.init();
    
    
    // Contact form Enter text animation
    
    $('.col-contato .input, .col-seja .input').hover(function() {
        $('input', this).stop().animate({'top' : -19}, 300);
    }, function() {
        $('input', this).stop().animate({'top' : 0}, 300);
    });

    
	/* Set Background Image of page */
	backgroundImages = {
        
        init: function(){
            this.images = [
                'images/modi.jpg',
                'images/modi.jpg',
                'images/modi.jpg',
                'images/modi.jpg',
                'images/modi.jpg',
            ];
            this.current = 0;
            ilog('bgIndex', $.cookie('bgIndex'))
            if (! !! $.cookie('bgIndex') ) {
                $.cookie('bgIndex', 0, { path: '/' });
                this.current = parseInt($.cookie('bgIndex'));
            } else {
                ilog(parseInt($.cookie('bgIndex')), this.images.length-1, parseInt($.cookie('bgIndex')) <= this.images.length-1)
                if ( parseInt($.cookie('bgIndex')) <     this.images.length-1 ) {
                    $.cookie('bgIndex', parseInt($.cookie('bgIndex')) + 1, { path: '/' });
                    this.current = parseInt($.cookie('bgIndex'));
                } else {
                    $.cookie('bgIndex', 0, { path: '/' });
                    this.current = parseInt($.cookie('bgIndex'));
                }
            
            }
            ilog('bgIndex', $.cookie('bgIndex'))
            this.setNext();
        },
        setNext: function() {
            $('#bg-image img').attr('src', this.images[this.current]);
        }
    }
    
    $(window).load(function() {
        backgroundImages.init();
    });
    
    
});

