var voted = new Array();

/************************************************************\
* Cookies General
\************************************************************/

// This next little bit of code tests whether the user accepts cookies.
var acceptsCookies = false;
if(document.cookie == '') {
    document.cookie = 'acceptsCookies=yes'; // Try to set a cookie.
    if(document.cookie.indexOf('acceptsCookies=yes') != -1) {
	acceptsCookies = true; 
    }// If it succeeds, set variable
} else { // there was already a cookie
  acceptsCookies = true;
}


function setCookie (name, value, hours, path, domain, secure) {
    if (acceptsCookies) { // Don't waste your time if the browser doesn't accept cookies.
	var not_NN2 = (navigator && navigator.appName 
		       && (navigator.appName == 'Netscape') 
		       && navigator.appVersion 
		       && (parseInt(navigator.appVersion) == 2))?false:true;

	if(hours && not_NN2) { // NN2 cannot handle Dates, so skip this part
	    if ( (typeof(hours) == 'string') && Date.parse(hours) ) { // already a Date string
		var numHours = hours;
	    } else if (typeof(hours) == 'number') { // calculate Date from number of hours
		var numHours = (new Date((new Date()).getTime() + hours*3600000)).toGMTString();
	    }
	}
	document.cookie = name + '=' + escape(value) + ((numHours)?(';expires=' + numHours):'') + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:'') + ((secure && (secure == true))?'; secure':''); // Set the cookie, adding any parameters that were specified.

    }
} // setCookie


function readCookie(name) {
    if(document.cookie == '') { // there's no cookie, so go no further
	return false; 
    } else { // there is a cookie
	var firstChar, lastChar;
	var theBigCookie = document.cookie;
	firstChar = theBigCookie.indexOf(name);	// find the start of 'name'
	var NN2Hack = firstChar + name.length;
	if((firstChar != -1) && (theBigCookie.charAt(NN2Hack) == '=')) { // if you found the cookie
	    firstChar += name.length + 1; // skip 'name' and '='
	    lastChar = theBigCookie.indexOf(';', firstChar); // Find the end of the value string (i.e. the next ';').
	    if(lastChar == -1) lastChar = theBigCookie.length;
	    return unescape(theBigCookie.substring(firstChar, lastChar));
	} else { // If there was no cookie of that name, return false.
	    return false;
	}
    }	
} // readCookie

function killCookie(name, path, domain) {
  var theValue = readCookie(name); // We need the value to kill the cookie
  if(theValue) {
      document.cookie = name + '=' + theValue + '; expires=Fri, 13-Apr-1970 00:00:00 GMT' + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:''); // set an already-expired cookie
  }
} // killCookie

/************************************************************\
* Voting
\************************************************************/
function Vote(Id, Rating){
    
    // Bereits abgestimmt
    if (! notVoted(Id)) return;
    
    if (Rating == 'in') {
    	suffix = 'In';
    } else {
    	suffix = 'Out';
    }
	no_votes = ($('Ratex'+Id).innerHTML * 1);
	percent_in = ($('PercentIn'+Id).innerHTML * 1);
	percent_out = ($('PercentOut'+Id).innerHTML * 1);

	// Aufblenden des gewaehlten Smilies
	new Effect.Opacity('VoteIn'+Id, {duration:0.0, from:0.0, to:0.0});
	new Effect.Opacity('VoteOut'+Id, {duration:0.0, from:0.0, to:0.0});
	new Effect.Opacity('Vote'+suffix+Id, {duration:0.0, from:0.0, to:1.0});

    new Ajax.Request('/topics/vote/'+Id+'/'+Rating);

	setVoted(Id);

	// Aktualisiere Werte (Zähler und Prozente)
	
	calc_votes_in = ( (no_votes * percent_in)/100 );
	calc_votes_out = ( (no_votes * percent_out)/100 );
	
	if (Rating == 'in') {
    	calc_votes_in++;
    	if ($('NumberIn'+Id)) $('NumberIn'+Id).innerHTML = ($('NumberIn'+Id).innerHTML * 1)+1;
    } else {
    	calc_votes_out++;
    	if ($('NumberOut'+Id)) $('NumberOut'+Id).innerHTML = ($('NumberOut'+Id).innerHTML * 1)+1;
    }
	new_percent_in = Math.round(100*(calc_votes_in/(calc_votes_in+calc_votes_out)));		
	new_percent_out = Math.round(100*(calc_votes_out/(calc_votes_in+calc_votes_out)));
	
	/*
	alert('no_votes:'+no_votes+'\n'+
		'percent_in:'+percent_in+'\n'+
		'percent_out:'+percent_out+'\n'+
		'calc_votes_in:'+calc_votes_in+'\n'+
		'calc_votes_out:'+calc_votes_out+'\n'+
		'new_percent_in:'+new_percent_in+'\n'+
		'new_percent_out:'+new_percent_out+'\n'
	);
	*/
    $('Ratex'+Id).innerHTML = no_votes + 1;
    if ($('Percent'+Id)) $('Percent'+Id).innerHTML = new_percent_in;
    if ($('PercentIn'+Id)) $('PercentIn'+Id).innerHTML = new_percent_in;
    if ($('PercentOut'+Id)) $('PercentOut'+Id).innerHTML = new_percent_out; 
    
    
    // Abblenden auf neue Gewichtung
	new Effect.Opacity('VoteIn'+Id, {duration:0.0, from:0.0, to:(new_percent_in/180)});
	new Effect.Opacity('VoteOut'+Id, {duration:0.0, from:0.0, to:(new_percent_out/180)});
       	          
}

/**
 * Speichere Voting-ID in das Cookie
 */
function setVoted(Id) {

	if (notVoted(Id)) {
		if (acceptsCookies) {
			setCookie ('Vote' + Id + 'done', '1', (24 * 30), '/');
		} else {
			voted[Id] = 1;
		}	
	}
}

/**
 * stelle sicher, dass noch keine Voting-ID im Cookie steht, d.h. dass noch nicht abgestimmt wurde.
 */
function notVoted(Id) {
	if (acceptsCookies) {
			return (! readCookie('Vote'+Id+'done') );
		} else {
			return (! vote[Id] == 1);
		}
}

