/**
 *
 * @param {Object} local_conf
 */
jQuery.fn.boxRatingStatShort = function(local_conf) {
	//
	var conf = {};

	conf.rateSet = null;

	conf.checkAjaxUrl = null;
	conf.checkTokenUrl = null;

	//
	var boxJQ = this;

	var averageJQ = null;
	var userJQ = null;
	conf.accountInactive = false; 


	var seriesVoteing = null;
	/**
	 *
	 */
	var init = function (local_conf) {
		conf = jQuery.extend(conf, local_conf);

		//
		averageJQ = boxJQ.find('.average');
		userJQ = boxJQ.find('.user');

        //
        check();

		//
		if(typeof conf.rateSet === 'object') {
			for(var i = 0, c = conf.rateSet.length; i < c; i++) {
				userJQ.find('.voteBar a').eq(i).attr('rate', conf.rateSet[i])
			}

			userJQ.find('.voteBar a')
				.mouseover(function(){
					rate = jQuery(this).attr('rate');

					userJQ.find('.rate').addClass('hoverLevel hoverLevel' + rate);

					userJQ.find('.voteBar .value').text(rate);
					userJQ.find('.voteBar .valueText').text(textRate(rate));
				})
				.mouseout(function(){
					rate = jQuery(this).attr('rate');

					userJQ.find('.rate').removeClass('hoverLevel hoverLevel' + rate);

					userJQ.find('.voteBar .value').text('');
					userJQ.find('.voteBar .valueText').text('');
				}).click(function(){
                    vote(userJQ.find('.voteBar a').index(jQuery(this)));                    
					return false;
				});
				
		}

		//
	}

	/**
	 *
	 */
	var check = function () {
		jQuery.ajax({
			type: 'GET',
			url: conf.checkAjaxUrl,
			dataType: 'json',
			success: function (data, textStatus) {
				if(data.ratingStat !== null) {
					averageReload(data.ratingStat.votesAverage, data.ratingStat.votesAmount);
				}

				if(data.userVote !== null) {
					userReload(data.userVote);
				}
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
			}
		});
	}

	/**
	 *
	 */
	var vote = function (index) {

		if( seriesVoteing ) return;
		seriesVoteing = true;

		var aJQ = userJQ.find('.voteBar a').eq(index);
		    jQuery.ajax({
	            type: 'GET',
	            url: conf.checkTokenUrl,
	            dataType: 'text',
	            success: function (data, textStatus) {
					var tokenText = data.substr(11);
					try{						
						if (typeof JSON == 'object' && typeof JSON.parse == 'function') {
							var data = JSON.parse(tokenText);
						}else {
							var data = eval('(' + tokenText + ')');							
						}
						var token = data.result;					
					}catch(e){ return; }
					if( typeof token != 'string' )return;
			        jQuery.ajax({
			            type: 'POST',
			            url: '/ajax' + aJQ.attr('href'),
			            data: {token: token},
			            dataType: 'json',
			            success: function (data, textStatus) {

                            if(data.accountInactive == true) {
                                jQuery(aJQ).setFloatbox({
                                    show: true,
                                    ajaxUrl: '/ajax/konto-niepotwierdzone',
                                    boxConfig: {border: '1px solid #848484', width: '600px', marginLeft: '-300px'},
                                    wrapperClass: 'floatbox-settings',
                                    closeButtonHtml: '<div class="settings-close close-floatbox"><span>zamknij</span></div>',
                                    before: function (htmlJQ) {
                                        jQuery('.reset', htmlJQ).addClass('close-floatbox');
                                    },
                                    after: function (htmlJQ) {
                                    }});
                            }
                            
							if(data.success === true && data.accountInactive == false) {
								if(data.ratingStat !== null) {
									averageReload(data.ratingStat.votesAverage, data.ratingStat.votesAmount);
								}

								if(data.userVote !== null) {
									userReload(data.userVote);
								}
							}
							seriesVoteing = false;

			            },
			            error: function (XMLHttpRequest, textStatus, errorThrown) {

							seriesVoteing = false;
						}});
	            },
	            error: function (XMLHttpRequest, textStatus, errorThrown) {
					console.log(XMLHttpRequest, textStatus, errorThrown);
					seriesVoteing = false;

				}});

	}


	/**
	 *
	 */
	var averageReload = function (rate, votesCount) {
		averageJQ.find('.info').empty();

		averageJQ.find('.info')
			.append('<div class="averageRate" />');

		averageJQ.find('.info .averageRate').each(function(){
			jQuery(this).append('<span class="label">Średnia ocena serialu:</span>');
			jQuery(this).append('<span class="icon"></span>');

			if(rate > 0) {
				stringRate = String(rate);
				rate = (stringRate.indexOf('.')==-1)?rate:rate.toFixed(1);
				averageJQ.find('.rate').attr('class', 'rate rateLevel' + Math.round(rate));

				jQuery(this).append('<span class="value">' + rate + '</span>');
				jQuery(this).append("\n");
				jQuery(this).append('<span class="value valueText">' + textRate(rate) + '</span>');
			}
		});

		averageJQ.find('.info')
			.append('<div class="voteCount" />');

		averageJQ.find('.info .voteCount').each(function(){
			if(votesCount > 0) {
				jQuery(this).append('<span class="label">Ocen:</span>');
				jQuery(this).append("\n");
				jQuery(this).append('<span class="value">' + votesCount + '</span>');
			}
			else {
				jQuery(this).append('<span class="emptyInfo">Brak ocen</span>');
			}
		});
	}

	/**
	 *
	 */
	var userReload = function (rate) {
		userJQ.find('.info').empty();

		userJQ.find('.info')
			.append('<div class="userRate" />');

		userJQ.find('.info .userRate').each(function(){
			jQuery(this).append('<span class="label">Twoja ocena:</span>');
			jQuery(this).append('<span class="icon"></span>');

			if(rate > 0) {
				stringRate = String(rate);
				rate = (stringRate.indexOf('.')==-1)?rate:rate.toFixed(1);

				userJQ.find('.rate').attr('class', 'rate rateLevel' + Math.floor(rate));

				jQuery(this).append('<span class="value">' + rate + '</span>');
				jQuery(this).append("\n");
				jQuery(this).append('<span class="value valueText">' + textRate(rate) + '</span>');
				jQuery(this).append("\n");
				jQuery(this).append('<span class="voteInfo">Zmień ocenę</span>');
				userJQ.find('.voteBar .value').text('');
			    userJQ.find('.voteBar .valueText').text('');
			}
			else {
				jQuery(this).append("\n");
				jQuery(this).append('<span class="voteInfo">Oceń teraz! <span class="raquo">&raquo;<span></span>');
			}
		});
	}

	/**
	 *
	 */
	var textRate = function (rate) {
		var text = '';

        switch(true) {
            case rate >= 9: text = 'Rewelacja';  break;
            case rate >= 7: text = 'Dobry';  break;
            case rate >= 5: text = 'Taki sobie';  break;
            case rate >= 3: text = 'Nuda';  break;
            case rate >= 0: text = 'Fatalny';  break;
        }

		return text;
	}

	//
	jQuery(document).ready(
		function () {
			init(local_conf);
		}
	);
}

