$(document).ready(function(){

    //newsletter submit - dodawanie do newslettera
    $('#newsletter_form').submit(function() {
        $.ajax({
            url: '/newsletter/subscribe',
            type: 'post',
            data: 'email=' + $('#email_area').val(),
            beforeSend: function() {
                $('#newsletter_messenger').text('Wysyłanie...').removeClass('red');
            },
            success: function(response) {
                if( response == '1' ) {
                    $('#newsletter_messenger').text('Twój e-mail został dodany')
                    .removeClass('red');
                } else if( response == '2' ) {
                    $('#newsletter_messenger').text('Podany adres e-mail jest już w bazie')
                    .addClass('red');
                } else if( response == '3') {
                    $('#newsletter_messenger').text('Niepoprawny adres e-mail')
                    .addClass('red');
                } else {
                    $('#newsletter_messenger').text('Wystąpił błąd, przepraszamy')
                    .addClass('red');
                }
            }
        });
        return false;
    });

    //Ukrywanie newslettera na niektórych stronach (krotkich)
    if( $('#content .col_right').height() < 270 ) {
        $('#newsletter_area').hide();
    }

    //Widget fix
    if($('.widgets').length > 0) {
        $('.col_right p').css('width', '500px');
        $('.col_right ul, .col_right ol').not('.widgets ul').css('width', '485px');
    }
    //Poll action
    function Poll() {

        this.messageNegative = 'Barometr potrzeb wskazuje, iż usługi PR nie są Ci na razie potrzebne...';
        this.messagePositive = 'Barometr potrzeb wskazuje, iż usługi PR zdecydowanie Ci się przydadzą!';

        this.getPrecentageResult = function() {
            var yes = 0;
            var quantity = 0;
            $('.poll .radio').each(function() {
                quantity++;
                if( quantity%2 != 0 && this.checked ) { //Parzyste to "NIE"
                    yes++;
                }
            });
            return (yes * 100 / (quantity / 2)) ;
        }

        this.isAllChecked = function() {
            var isValid = 0;

            $('.poll .radio').each(function() {
                isValid += this.checked == true ? 1 : -1;
            });
            return isValid == 0;
        }
        
        this.addSuccess = function(message) {
            $('#poll_messages').fadeOut('slow', function() {
                $('#poll_messages').text(message);
                $('#poll_messages').fadeIn('slow');
            });
        }
    
        this.addError = function(message) {
            if( $('#poll_messages').text().length == 0) {
                $('#poll_messages').text(message);
                $('#poll_messages').show();
            } else {
                $('#poll_messages').fadeOut('slow', function() {
                    $('#poll_messages').text(message);
                    $('#poll_messages').fadeIn('slow');
                });
            }
        }
    }


    $("#email_field, #poll_result").hide();
    $(".poll .email_area").find('a').click(function(){
        var poll = new Poll();
        $(this).hide();
        $("#email_field").show();
        
        if( ! poll.isAllChecked()) {
            poll.addError('Uwaga - aby poznać prawidłowe wyniki musisz odpowiedzieć na wszystkie pytania!');
        }
        
    });
    $('.poll').submit(function() {
        return false;
    });
    $("#email_field").find('.button').click(function(){
        var poll = new Poll();
        
        if( ! poll.isAllChecked() ) {
            poll.addError('Uwaga - aby poznać prawidłowe wyniki musisz odpowiedzieć na wszystkie pytania!')
            return false;
        }
        var perc = poll.getPrecentageResult();
        $.ajax({
            url: '/widgets/sonda/adduser',
            type: 'post',
            data: 'email=' + $('#poll_email').val() + '&percentage=' + perc,
            success: function(response) {
                if( response == '1') {
                    var $result = $('#poll_result');
                    $result.removeClass('positive').removeClass('negative');
                    
                    if( perc >= 50 ) {
                        $result.text(poll.messagePositive).addClass('positive');
                    } else {
                        $result.text(poll.messageNegative).addClass('negative');
                    }
                    $(".poll #email_field").hide();
                    $result.show();
                } else {
                    poll.addError(response);
                }
            }
        });
        
        return false;
    });

    //Sidebar navigation
    $("#content .col_left ul ul .active").parent().parent().parent().find('a').addClass('parent');

    //Slideshow
    var $jsonPlace = $('#clients_json');
    if($jsonPlace.length > 0) {
        var show = new SlideShow();
        show.setData( eval('(' + $jsonPlace.text() + ')') );
        show.setSlidePlace( '#our_clients' );
        show.setReloadInterval(5000);
        show.setCreateOneFunction(createOneClient);
        show.startAnimation();
    }
});

function createOneClient(data) {
    var STATUS_ACT = 0;
    var STATUS_DISACT = 1;
    var $img =  $('<img/>')
    .attr('src', data.src)
    .attr('alt', data.alt)
    .attr('title', data.title);
    var $li = $('<li></li>');
    $li.append($img);
    $li.hover(function(){
        $(this).addClass('hoverli');
    },function(){
        $(this).removeClass('hoverli');
    });
    if(data.status != STATUS_ACT) {
        $img.addClass('active');
    }
    return $li;
}


function SlideShow() {
    //Private zminne które mają settery / getttery
    var _data				= null;
    var _slidePlace			= null;
    var _reloadInterval		= 10000;
    var _photosPerSlide		= 3;
    var _createOneFunction	= _createOne;

    //Prywatne bez możliwości zmianny z zewnątrz klasy
    var _currentShift = 0;

    //Odpalenie konstruktora - po definicji zmiennych
    /************/
    /* PRYWATNE */
    /************/
    function _render() {
        $(_slidePlace).fadeOut('slow', function() {
            $(_slidePlace).empty();
            var shiftedArray = _getShiftedArray();
            for(var i in shiftedArray) {
                $(_slidePlace).append( _createOneFunction( shiftedArray[i] ) );
            }
            $(_slidePlace).fadeIn('slow');
        })
    }

    function _getShiftedArray() {
        var shifted = _data.slice(_currentShift, _currentShift + _photosPerSlide);
        if(shifted.length < _photosPerSlide && _photosPerSlide < _data.length) {
            var itemsToAdd = _photosPerSlide - shifted.length;
            var slicedFromBeggining = _data.slice(0, itemsToAdd);
            shifted = shifted.concat(slicedFromBeggining);
            _currentShift = itemsToAdd;
        } else {
            _currentShift += _photosPerSlide;
            if(_currentShift > _data.length) {
                _currentShift = 0;
            }
        }
        return shifted;
    }

    function _createOne(data) {
        var $img =  $('<img/>').attr('src', data)
        return $('<li></li>').append($img);
    }

    /*************/
    /* PUBLICZNE */
    /*************/
    this.construct = function() {

    }
    this.construct();

    /**
	 * Rozpoczyna animacje
	 */
    this.startAnimation	= function() {
        _render();
        if(_data.length > _photosPerSlide) {
            setInterval(_render, this.getReloadInterval() );
        }
    }

    /**
	 * Ustawia co ile ma się zmieniać jeden slide
	 * @param int newInterval - czas w milisekundach
	 */
    this.setReloadInterval = function(newInterval) {
        if(newInterval > 0) {
            _reloadInterval = newInterval;
        }
    }

    /**
	 * @return zwraca aktualny czas przeładowywań slideów
	 */
    this.getReloadInterval = function() {
        return _reloadInterval;
    }

    /**
	 * Ustawia dane dla animacji.
	 * Dane te mogą być wykorzystane w _setCreateOneFunction(callback)
	 */
    this.setData = function(newData) {
        _data = newData;
    }

    /**
	 * Zwraca dane ustawione dla animacji
	 */
    this.getData = function() {
        return _data;
    }

    /**
	 * Ustawia ilość zdjęć na slide
	 * @param int photosPerSlide
	 */
    this.setPhotosPerSlide = function(photosPerSlide) {
        if( photosPerSlide > 0 )
            _photosPerSlide = photosPerSlide;
    }

    /**
	 * Zwraca ile zdjęć na slide jest aktualne ustawione
	 */
    this.getPhotosPerSlide = function() {
        return _photosPerSlide;
    }

    /**
	 * Ustawia jQuery selektor dla miejsca gdzie maja być tworzone slidey
	 * @param string newPlace - jQuery selector string
	 *
	 */
    this.setSlidePlace = function(newPlace) {
        _slidePlace = newPlace;
        $(_slidePlace).hide();
    }

    /**
	 * Zwraca selektor jQuery aktualnego miejsca dla slideow
	 *
	 */
    this.getSlidePlace = function() {
        return _slidePlace;
    }

    /**
	 * Ustawia callback funkci tworzącej jeden element slideu
	 * @param callback func - callback do funkcji budującej jeden elementu
	 */
    this.setCreateOneFunction = function(func) {
        _createOneFunction = func;
    }

    /**
	 * Zwraca callback do funkcji tworzącej jeden element slideu
	 */
    this.getCreateOneFunction = function() {
        return _createOneFunction;
    }
};
