var $j = jQuery.noConflict();

/* refreshpage? set true to reloading page after a submitted vote : set false to not reload a page after a submitted vote*/
var refreshpage = true;
var voteurl = "http://apps02.farm.mediaset.it/voting/preferences.jsp";
var msg="Grazie per il voto espresso";
var mappaVoti = {stars1: 1,
                 stars2: 2,
                 stars3: 3,
                 stars4: 4,
                 stars5: 5};

$j(window).bind('load', function() {
    $j('body').addClass('loaded');
    chooseBrowser();
    var data="project_id=0&content_id=10&object_id="+objectParameters.object_id+"&jsoncallback=?";
    makeRequest(voteurl, data, function(xml) {/*do nothing*/});
});

function receiveResponse(data) {    
        var preferencesList = data.items;      
        var votiRicevuti = 0;
        var totaleVoti = 0;
        for (var i = 0; i < preferencesList.length; i++) {
            var preferenceNumberString = preferencesList[i].preferenceNumber;
            var value = preferencesList[i].value;
            var preferenceNumber = parseInt(preferenceNumberString);
            votiRicevuti = votiRicevuti + preferenceNumber;
            var voto = mappaVoti[value];
            if(voto==null){
            	//no mapping possibile, it's a dummy vote
            	voto=0;
            }
            totaleVoti = totaleVoti + (voto * preferenceNumber);
        }
        $j('#videoVisto').text("" + votiRicevuti);
        var media = Math.floor(totaleVoti / votiRicevuti);
        /********************************************
        *************NOT USED************************
        if(media > 1)
            $j('#mediaVoti').text(media + " stelle");
        else if(media == 1)
            $j('#mediaVoti').text(media + " stella");
        **********************************************
        **********************************************/
        $j('#videoStars').addClass('stars' + media );
        return media;
}

function makeRequest(queryString, dataString, callback, err) {
    	if(dataString.toLowerCase().indexOf("preference=stars") > -1){
    		/* VOTE */
    		$j.getJSON(queryString+"?"+dataString,
			function(data){
				if (data.items.length > 0) {
					alert(msg);
					var media = receiveResponse(data);
	            			animateStars(media);
				}
			});		
		if(refreshpage)
			window.location.reload();
		
    	}else{
    		/* INFO VOTE */
    		$j.getJSON(queryString+"?"+dataString,
			function(data){
				if (data.items.length > 0) {
					var media = receiveResponse(data);
	            			animateStars(media);
				}
			});
	}
	
}

function animateStars(media) {
    var objectId=objectParameters.object_id;
    
    // Setup the star rating behavior
    $j('#videoStars').unbind()/*Declare this now for IE7 */.data('data', {
        px:     0,
        left:   0,
        rating: this.className,
        objectId:objectId
    }).bind('mouseover', function(evt) {
        $j(this).data('data', {  px:     ( $j(this).width() / 5 ),
            left:   $j(this).offset().left,
            rating: this.className,
            objectId:objectId
        });
    }).bind('mouseout', function(evt) {
        $j(this).removeClass('stars1 stars2 stars3 stars4 stars5').addClass($j(this).data('data').rating);
        $j('#videoStars').addClass('stars' + media );
    }).bind('mousemove', function(evt) {
        var d = $j(this).data('data');
        $j(this).removeClass('stars1 stars2 stars3 stars4 stars5').addClass('stars' + ( Math.floor(( evt.pageX - d.left ) / d.px) + 1 ));
    }).bind('click', function(evt) {
        var stringaVoto = this.className;
        var d = $j(this).data('data');
        d.rating = stringaVoto;
        $j(this).data('data', d);
        var rating = stringaVoto.replace(/[^0-9]/g, '');
        var indexInfinity = stringaVoto.indexOf('starsInfinity');
        var stringPreference = stringaVoto.substring(indexInfinity, stringaVoto.length);
        var preference = "";
        var indexPreference = stringPreference.indexOf(' stars');
        if (indexPreference > 0)
            preference = stringPreference.substring(indexPreference + 1, stringPreference.length);
        // Submit Vote
        if (preference != null && preference != "") {            
            var data="project_id=0&content_id=10&object_id="+objectParameters.object_id+"&preference="+preference+"&jsoncallback=?";            
            makeRequest(voteurl, data, function(xml) {
                $j('#videoStars').removeClass('stars1 stars2 stars3 stars4 stars5').addClass(preference);
            });
            $j(this).unbind().css('cursor', 'default');
        }
    });
}

function tokenReplace(str, tokens) {
    for (var t in tokens) {
        str = str.replace('{' + t + '}', tokens[t]);
    }
    return str;
}

function chooseBrowser() {
    if ($j.browser.msie) {
        $j('body').addClass('ie ie' + ( '' + $j.browser.version ).substr(0, 1));
    } else {
        var ua = window.navigator.userAgent;
        if (ua.indexOf('Firefox') != -1 && ua.indexOf('Windows') != -1) {
            $j('body').addClass('winfox');
        }
    }
}
