var serverSideFile = 'http://www.123votez.com/sondages/fonctions/php/ajax-poller-cast-vote-php.php';
//var serverSideFile = 'http://localhost/123votez/site/sondages/fonctions/php/ajax-poller-cast-vote-php.php';

var graphMaxWidth = 80;    // It will actually be a little wider than this because of the rounded image at the left and right
var graphMinWidth = 17; // Minimum size of graph
var pollScrollSpeed = 1;    // Lower = faster
//var useCookiesToRememberCastedVotes = true;    // Use cookie to remember casted votes
var txt_totalVotes = 'Total Votants :&nbsp;';

var pollVotes = new Array();
var pollVoteCounted = new Array();
var totalVotes = new Array();

function trim (myString) {
    return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
}
  
function Poller_Get_Cookie(name) {
   var start = document.cookie.indexOf(name+"=");
   var len = start+name.length+1; 
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
   if (start == -1) return null;
   var end = document.cookie.indexOf(";",len); 
   if (end == -1) end = document.cookie.length; 
   return unescape(document.cookie.substring(len,end));
}

// This function has been slightly modified
function Poller_Set_Cookie(name,value,expires,path,domain,secure) { 
    // expire dans un an
    expires = 3600*24*1000*expires;
    var today = new Date();
    var expires_date = new Date( today.getTime() + (expires) );
    var cookieString = name + "=" +escape(value) + 
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
       ( (path) ? ";path=" + path : "") + 
       ( (domain) ? ";domain=" + domain : "") + 
       ( (secure) ? ";secure" : ""); 
    document.cookie = cookieString; 
}


function showVoteResults(pollId,xml)
{
    document.getElementById('poll-message' + pollId).style.display='none';
	var resultDiv = document.getElementById('poll-resultats' + pollId);
    resultDiv.style.display = 'block';

	var xml = xml.replace(/\n/gi,'');
	// on recupere le type d'affichage des resultats
	var type_affichage_resultats;
	var expr_type_affichage_resultats = /<type_affichage_resultats>(.+)<\/type_affichage_resultats>/gi;
    xml = xml.replace(expr_type_affichage_resultats,function ($0,$1) {type_affichage_resultats = $1; return ''; });
	// on recupere le flag indiquant si le voteur a deja vote ulterieurement afin d'adapter le message
	var a_deja_vote;
	var expr_a_deja_vote = /<a_deja_vote>(.+)<\/a_deja_vote>/gi;
    xml = xml.replace(expr_a_deja_vote,function ($0,$1) {a_deja_vote = $1; return ''; });
		
	if(type_affichage_resultats == 'rien') {
	  resultDiv.style.height = '120px';
	  var span = document.createElement('span');
	  span.style.color = 'white';
	  span.style.backgroundColor = 'black';
	  span.innerHTML = a_deja_vote == 1 ? "Merci, vous avez d&eacute;j&agrave; vot&eacute;." : "Merci pour votre vote !";
	  resultDiv.appendChild(span);
	  return; 
	}
	
	resultDiv.innerHTML = '';
    var total_action_votes;
    // On recupere le total des votes
    var expr_total_votes = /<total_votes>([0-9]+)<\/total_votes>/gi;
    xml = xml.replace(expr_total_votes,function ($0,$1) {totalActionVotes = $1; return ''; });
    totalVotes[pollId] = 0;
    var options = xml.split(/<option>/gi);
    pollVotes[pollId] = new Array();

    for(var no=1;no<options.length;no++){
        
        var elements = options[no].split(/</gi);
        var currentOptionId = false;
        for(var no2=0;no2<elements.length;no2++){
            if(elements[no2].substring(0,1)!='/'){
                var key = elements[no2].replace(/^(.*?)>.*$/gi,'$1');
                var value = elements[no2].replace(/^.*?>(.*)/gi,'$1');
            
                if(key.indexOf('optionText')>=0){
                    var pOption = document.createElement('P');
                    // On cree un label anonyme
                    var label = document.createElement('LABEL');
                    value = value.replace(/\]/gi,'>');
                    value = value.replace(/\[/gi,'<');
                    label.innerHTML = '<strong>' + no + '.</strong>&nbsp;' + value;
                    pOption.appendChild(label);
                    resultDiv.appendChild(pOption);
                }
                
                if(key.indexOf('optionId')>=0){
                    currentOptionId = value/1;
                }
                
                if(key.indexOf('optionVotes')>=0){
                    var votes = document.createElement('SPAN');
                    if(type_affichage_resultats != 'pourcentage') votes.innerHTML = '&nbsp;(' + value + ')';
                    pOption.appendChild(votes);
                    var voteDiv = document.createElement('DIV');
                    voteDiv.className='result_pollGraph';
                    resultDiv.appendChild(voteDiv); 
                    
                    var leftImage = document.createElement('IMG');
                    leftImage.src = voteLeftImage[pollId];

                    voteDiv.appendChild(leftImage);

                    var numberDiv = document.createElement('DIV');
                    numberDiv.style.backgroundImage = 'url(\'' + voteCenterImage[pollId] + '\')';
                    numberDiv.innerHTML = '0%&nbsp;';
                    numberDiv.id = 'result_voteTxt' + currentOptionId;
                    voteDiv.appendChild(numberDiv);
                    
                    var rightImage = document.createElement('IMG');
                    rightImage.src = voteRightImage[pollId];
                    voteDiv.appendChild(rightImage);                        
                    
                    pollVotes[pollId][currentOptionId] = value;
                    totalVotes[pollId] = totalVotes[pollId]/1 + value/1;
                }
            }
        }
    }
    if(type_affichage_resultats != 'pourcentage') {
      var totalVoteP = document.createElement('P');
      totalVoteP.id = 'poll-total-votes' + pollId;
      totalVoteP.innerHTML = txt_totalVotes + totalActionVotes;
      voteDiv.appendChild(document.createElement('BR'));
      voteDiv.appendChild(totalVoteP);
	}

    resultDiv.appendChild(document.createElement('BR'));
    
	// De façon à calculer différemment les pourcentages des réponses en fonction de reponses à choix multiples ou non, on recupere la valeur de l'option "choix_multiple"
    var expr_choix_multiple = /<choix_multiple>([0|1])<\/choix_multiple>/gi;
    xml = xml.replace(expr_choix_multiple,function ($0,$1) {choix_multiple = $1; return ''; });
	
    setPercentageVotes(pollId, choix_multiple);
    preSlideVotes(pollId,0);
}

function setPercentageVotes(pollId, choix_multiple)
{
	var total = choix_multiple == '0' ? totalVotes[pollId]: totalActionVotes;
    for(var prop in pollVotes[pollId]) pollVotes[pollId][prop] =  Math.round( ((pollVotes[pollId][prop] / total) * 100) * 100) / 100; 
}


function preSlideVotes(pollId,currentPercent) {
  for(var prop in pollVotes[pollId]) {
    slideVotes(pollId,prop,currentPercent);
  }
}

function slideVotes(pollId,prop,oldCurrentPercent)
{
    currentPercent = oldCurrentPercent + 1;
	if(pollVotes[pollId][prop]>=currentPercent){
		var obj = document.getElementById('result_voteTxt' + prop);
		if(obj) {
		  obj.innerHTML = currentPercent + '%';              
		  obj.style.width = graphMinWidth + Math.round(currentPercent/100*graphMaxWidth) + 'px';
		}
	}        
    
    if(currentPercent<100) { setTimeout('slideVotes("' + pollId + '","' + prop + '",' + currentPercent + ')',pollScrollSpeed); }
    else {
      var obj = document.getElementById('result_voteTxt' + prop);
      if(obj) {
        obj.innerHTML = '<a href="#" class="infoBulle" onclick="javascript:return false">' + obj.innerHTML + '<span>' + pollVotes[pollId][prop] + '%</span></a>'
      }
    }
}

function prepareForPollResults(pollId)
{
    document.getElementById('poll-message' + pollId).style.display='block';
    document.getElementById('poll-reponses' + pollId).style.display='none';
    document.getElementById('poll-vote' + pollId).style.display='none';
}


function castMyVote(pollId,formObj,ipAVote,revote_delai)
{   
    var elements = formObj.elements['vote[' + pollId + ']'];
    var optionId = '';
	var vote_recent_cookie = 0;
    for(var no=0;no<elements.length;no++){
        if(elements[no].checked && elements[no].id != 'autre_reponse' + pollId) optionId += elements[no].value + ';';
    }
    var autre_reponse = '';
    if(document.getElementById('autre_reponse'+ pollId)) {
      if(document.getElementById('autre_reponse'+ pollId).checked && trim(document.getElementById('autre-reponse-text'+ pollId).value).length > 0) autre_reponse = '&autre_reponse=' + escape(document.getElementById('autre-reponse-text'+ pollId).value);
    }
	// on verifie qu'une choix a bien ete fait (optionid ou autre_reponse)
	if(!optionId && !autre_reponse) { alert('Vous devez faire un choix !'); return; }
		
    var alerte = false;
    if(ipAVote>0) {alerte = true; optionId = '1501'}
    else {
      if(useCookiesToRememberCastedVotes[pollId] == "true") {
        var cookieVal = Poller_Get_Cookie("123votez-poller" + pollId);
        if(cookieVal && cookieVal.length>0) {
          optionId='1501';
          alerte = true;
        }		
		// on place le timestamp actuel (transmis via le fichier php appelant) dans la valeur afin de faire une comparaison ulterieure avec un reset eventuel
        Poller_Set_Cookie('123votez-poller' + pollId, timestamp_creation_cookie, revote_delai, '/');
		vote_recent_cookie = 1;
      }
    }
    if(alerte) alert("Vous ne pouvez plus voter ! Voici les resultats =>");
    if(optionId || autre_reponse){
        if(document.getElementById('poll-retour' + pollId)) document.getElementById('poll-retour' + pollId).style.display = 'block';
        Poller_vote(serverSideFile + '?pollId=' + pollId + '&optionId=' + optionId + autre_reponse + '&vote_recent_cookie=' + vote_recent_cookie,pollId);
    }
    //else alert('Vous devez faire un choix !');
}   

function displayPoll(pollId) {
    document.getElementById('poll-retour' + pollId).style.display = 'none';
    document.getElementById('poll-vote' + pollId).style.display = 'block';
    document.getElementById('poll-reponses' + pollId).style.display = 'block';
    document.getElementById('poll-resultats' + pollId).innerHTML = '';
    document.getElementById('poll-resultats' + pollId).style.display = 'none';
}

function displayResultsWithoutVoting(pollId)
{
  if(document.getElementById('poll-retour' + pollId)) document.getElementById('poll-retour' + pollId).style.display = 'block';
  Poller_vote(serverSideFile + '?pollId=' + pollId,pollId);
}

function Poller_vote(fichier,pollId) {
  if(typeof apercu != 'undefined') fichier += '&apercu=1';
  prepareForPollResults(pollId);

  var script = document.createElement("SCRIPT");
  script.src = fichier;
  script.charset="UTF-8";
  script.type = "text/javascript";
  var h = document.getElementsByTagName("head").item(0);
  h.appendChild(script);
}
