// main javascript file

// GLOBALS
var mouseAlreadyOverStory = false;
var storyDivClass= '';
var voteSquareClass = '';
var submissionDiv;
var submissionDivVisible = false;
var duckgame = Math.round(Math.random());
var g_timerStarted = false;
var g_incubation_time = 3000;
var g_nbducks;
var g_wsrc;
var g_score = 0;
var bgx = Math.random()*1000;
var bgy = Math.random()*1000;
var speedx = 0.5;
var speedy = 0.5;
var anglex = 90;
var angley = 0;
var anglespx = -0.01;
var anglespy = 0.01;
var targetx = 0;
var targety = 0;


function moveBG(id)
{
  var d = document.getElementById(id);
  d.style.backgroundPosition = bgx + "px " + bgy + "px";//"\"" + bgx + "px " + bgy + "px\"";
  bgx += speedx;
  bgy += speedy;
  if (anglex<10000) anglex+=anglespx; else anglex=0;
  if (angley<10000) angley+=anglespy; else angley=0;
  speedx = Math.cos(anglex);
  if (speedx > 1) speedx = 1;
  if (speedx < -1) speedx = -1;
  speedy = Math.sin(-angley);
  if (speedy > 1) speedy = 1;
  if (speedy < -1) speedy = -1;
  
  // Angle speed must reach target
  anglespx = anglespx + (targetx - anglespx)/2;
  anglespy = anglespy + (targety - anglespy)/2;
  
  // Sometimes, a change..
  if (Math.random()*100 < 1)
  {       
    targetx = Math.random() * 0.01;
    targety = Math.random() * 0.01;
  }
  
  // ...a change in direction ?
  if (Math.random()*50<1 && speedx < 0.3) anglespx=-anglespx;
  
  //alert( "'" + bgx + "px " + bgy + "px'");
  t=setTimeout(function () {moveBG(id);},20);
}

function saveStory()
{
  
	// Data
	var tarea = document.getElementById('newStory');
	var text = tarea.value;
	var mainsel = document.getElementById('selcat');
	var catid = mainsel.options[mainsel.selectedIndex].value;
	var subsel = document.getElementById('selsubcat');
	var subcatid = subsel.options[subsel.selectedIndex].value;
	var typesel = document.getElementById('seltype');
	var typeselid = typesel.options[typesel.selectedIndex].value;
	var email = document.getElementById('nsemail').value;
	
	var data = "story=" + text + "&category=" + catid + "&subcategory=" + subcatid + "&type=" + typeselid + "&email=" + email;
	var saveUrl = "/newStory.php";

  var args = ['salut','bar']; 
  
  var storyCallback =
  {
    success: storySaveOk,
    failure: storySavePb,
    argument: args
  }
  
  var but = document.getElementById('sendStoryButton');
  but.disabled = true;
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, storyCallback, data);
}

var storySaveOk = function (o)
{
  toggleStorySubmission();
  alert(o.responseText);
  window.location.href ="http://www.suisjenormal.fr/validation";
}

var storySavePb = function (o)
{
alert("Histoire non enregistrée...");
  alert(o.responseText);
}

// ********************************* SAVING COMMENTS ************************
function savecom(stid, uname, uid, comid, ta_id, td_id, type, replytoname)
{
  type = document.getElementById('type' + comid).value;
  var ta = document.getElementById(ta_id);
  var comtxt = ta.value;
  var notifdiv = document.getElementById(td_id);
  notifdiv.innerHTML = "<img src='/img/ajax-loader.gif'>";
  var data = "comTxt=" + comtxt + "&comId=" + comid + "&uid=" + uid + "&uname=" + uname + "&story_id=" + stid + "&type=" + type + "&replytoname=" + replytoname;
	var saveUrl = "/saveComment.php";
	var comCallback =
  {
  success: comOk,
  failure: comPb,
  argument: td_id
  }
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, comCallback, data);
}

var comOk = function (o)
{
  var td = document.getElementById(o.argument);
  td.innerHTML = o.responseText;
}

var comPb = function (o)
{
alert("Le commentaire n'a pu être posté, pour des raisons trop techniques. Désolé.");
  
}

// **************************** COM MODERATION *****************************
function moderatecom(comid)
{
  var notifdiv = document.getElementById("mod_notification_" + comid);
  notifdiv.innerHTML = "<img src='/img/ajax-loader.gif'>";
  var data = "comId=" + comid;
	var saveUrl = "/moderateComment.php";
	var comCallback =
  {
  success: moderateCommentOk,
  failure: moderateCommentPb,
  argument: comid
  }
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, comCallback, data);
}

var moderateCommentOk = function (o)
{
  var notifdiv = document.getElementById("com_container_" + o.argument);
  notifdiv.innerHTML = "<h2>Commentaire modéré.</h2>";
  alert(o.responseText);
}

var moderateCommentPb = function (o)
{
alert("Problème technique : " + o.responseText);

}
// **************************** READING COMMENTS ****************************
function markAsRead(comid)
{
  var notifdiv = document.getElementById("notification_" + comid);
  notifdiv.innerHTML = "<img src='/img/ajax-loader.gif'>";
  var data = "comId=" + comid;
	var saveUrl = "/markCommentAsRead.php";
	var comCallback =
  {
  success: comarkOk,
  failure: comarkPb,
  argument: comid
  }
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, comCallback, data);
}

var comarkOk = function (o)
{
  var notifdiv = document.getElementById("notification_" + o.argument);
  notifdiv.style.display = "none";
}

var comarkPb = function (o)
{
alert("Le commentaire n'a pu être marqué comme lu, pour des raisons trop techniques. Désolé.");

}

// *********************************** ENTERING STORIES *********************
function updateCarcount(ta)
{
  var label = document.getElementById('charCounter');
  var but = document.getElementById('sendStoryButton');
  var n = 300 - ta.value.length;
  label.innerHTML = (n>=0?n:-n) + (n>=0?' caractères restant':' caractères en trop !');
  if (n<0) but.disabled = true; else but.disabled = false;
}

function loadSubCat(mainsel)
{
  var catid = mainsel.options[mainsel.selectedIndex].value;
  var data = "category=" + catid;
	var saveUrl = "/getSubCategories.php";
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, catCallback, data);
}
function loadSubCat2(mainsel, spanid)
{
  var catid = mainsel.options[mainsel.selectedIndex].value;
  var data = "category=" + catid;
	var saveUrl = "/getSubCategories.php";
	var catCallback2 =
  {
  success: subCatOk2,
  failure: subCatPb,
  argument: spanid
  }
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, catCallback2, data);
}
var args = ['salut','bar']; 

var subCatOk = function (o)
{
  var sselect = document.getElementById('spansubcat');
  sselect.innerHTML = o.responseText;
}
var subCatOk2 = function (o)
{
  var sselect = document.getElementById('spansubcat' + o.argument);
  sselect.innerHTML = o.responseText;
}

var subCatPb = function (o)
{
alert("Impossible de charger les sous-catégories pour cette catégorie.");
  
}

var catCallback =
{
  success: subCatOk,
  failure: subCatPb,
  argument: args
}

// Show or hides the story submission div
function toggleStorySubmission()
{
  if (typeof submissionDiv ==='undefined')
  {
    submissionDiv = document.getElementById('storySubmissionDiv');
  }
  
  if (submissionDivVisible)
  {
    var subAnimAttributes = 
    {
        height: { to: 0 }
    };
    var subAnim = new YAHOO.util.Anim('storySubmissionDiv', subAnimAttributes, 1, YAHOO.util.Easing.easeOut);
    subAnim.animate();
    subAnim.onComplete.subscribe(function() 
    {
      submissionDiv.style.display = "none";
    });
    submissionDivVisible = false;
  }
  else
  {
    var subAnimAttributes = 
    {
        height: { from: 1, to: 300 },
        width:  { from: 0, to: 650 }
    };
    var subAnim = new YAHOO.util.Anim('storySubmissionDiv', subAnimAttributes, 1, YAHOO.util.Easing.easeOut);
    submissionDiv.style.display = "block";
    submissionDivVisible = true;
    subAnim.animate();
  }
}

function toggleLogin()
{
  ld = document.getElementById('login');
  if (ld.style.display == "block")
  {
    ld.style.display = "none";
  }
  else
  {
    ld.style.display = "block";
  }
  
}

// ************************************* VOTING *******************************
// ********************** NORMALITY VOTE ********************
function showVote(id)
{
  var d = document.getElementById('vd' + id);
  if (d!=null && d.style.display != 'block') d.style.display = 'block';
  /*if (!mouseAlreadyOverStory)
  {
    storyDivClass = d.className;
    d.className = 'normalityVoteDiv opaque';
    mouseAlreadyOverStory = true;
  }*/
  
}

function hideVote(id)
{
  var d = document.getElementById('vd' + id);
  if (d != null) d.style.display = 'none';
  /*d.className = 'normalityVoteDiv discret';
  mouseAlreadyOverStory = false;*/
}

function highlightNVote(div)
{
  if (div.className.indexOf('highlightedNVote') == -1)
  {
    voteSquareClass = div.className;
    div.className += ' highlightedNVote';
  }
}

function restoreNVote(div)
{
  div.className = voteSquareClass;
}

// *********************** VOTE Normality ************************************
// ***************************************************************************
function voteNormality(story_id, percentNormal)
{
  // ajax feedback
  var vd = document.getElementById('vd' + story_id);
  vd.innerHTML = "<img src='/img/ajax-loader.gif'>";
  
	var data = "story_id=" + story_id + "&percentNormal=" + percentNormal;
	var saveUrl = "/voteNorm.php";
  var voteNormCallback =
  {
  success: voteNormOk,
  failure: voteNormPb,
  argument: story_id
  }
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, voteNormCallback, data);
}

var voteNormOk = function (o)
{
  // Show vote details (pie)
  var d = document.getElementById('selNormality' + o.argument);
  d.innerHTML = o.responseText;
  
  // Hide voting div
  var vd = document.getElementById('vd' + o.argument);
  vd.style.display = 'none';
  // Disable events
  var sd = document.getElementById('story_' + o.argument);
  sd.onmouseout="";
  sd.onmouseover="";
}
var voteNormPb = function (o)
{
  alert(o.responseText);
}

// *********************** VOTE Quality ************************************
// ***************************************************************************
function voteQuality(story_id, percentGood)
{
	var data = "story_id=" + story_id + "&percentGood=" + percentGood;
	var saveUrl = "/voteQual.php";
  var voteQualCallback =
  {
  success: voteQualOk,
  failure: voteQualPb,
  argument: story_id
  }
  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, voteQualCallback, data);
}

var voteQualOk = function (o)
{
  // Show vote details (pie)
  var d = document.getElementById('selQuality' + o.argument);
  d.innerHTML = o.responseText;
  // Disable stars
  var sp = document.getElementById('starvote' + o.argument);
  sp.innerHTML = "<span>C'est noté !</span>";
}
var voteQualPb = function (o)
{
  alert(o.responseText);
}



// ********************** TAG VOTE ********************

function tag(story_id, tag_id, value)
{
  // Data
	var data = "story_id=" + story_id + "&tag_id=" + tag_id + "&value=" + value;
	var saveUrl = "/voteTag.php";

  var argstag = [tag_id, value]; 
  
  var voteTagCallback =
  {
    success: voteTagOk,
    failure: voteTagPb,
    argument: argstag
  }

  var transaction = YAHOO.util.Connect.asyncRequest('POST', saveUrl, voteTagCallback, data);
}

var voteTagOk = function (o)
{
  //alert(o.responseText);
  var td = document.getElementById('tag' + o.argument[0]);
  var v = td.innerHTML==''?0:td.innerHTML;
  var newval = parseInt(v) + parseInt(o.argument[1]);
  td.innerHTML = newval;
  
  // Disable all tag vote button
  var listbut = document.getElementsByName('tagbut');
  for(var i=0;i<listbut.length;i++){listbut[i].disabled = true;}
}

var voteTagPb = function (o)
{
  alert(o.responseText);
}



// ***************************** COMMENTS ********************************
function showCommentForm(form_id, label)
{
  var form = document.getElementById(form_id);
  if (form.style.display != 'block')
  {
    form.style.display = 'block';
    label.innerHTML = 'Annuler';
  }
  else
  {
    form.style.display = 'none';
    if (Math.random() < 0.3)
    {
      label.innerHTML = 'Si vous changez d\'avis...';
    }
    else if (Math.random() < 0.6)
    {
      label.innerHTML = 'Tant pis !';
    }
    else if (Math.random() < 0.95)
    {
      label.innerHTML = 'C\'est peut-être mieux comme ça...';
    }
    else
    {
      label.innerHTML = 'Hahaha !';
    }
  }
}

// *************************** REFRESHING ACTIVITY STREAM ********************
function refreshActivityStream()
{
  var refreshCallback =
  {
    success: refreshOk,
    failure: refreshPb
  }
  var url = "/activityStream.php";
  var data = "";
  var transactionRAS = YAHOO.util.Connect.asyncRequest('POST', url, refreshCallback, data);
}


var refreshOk = function (o)
{
  //alert(o.responseText);
  var refreshDiv = document.getElementById('activityStream');
  refreshDiv.innerHTML = o.responseText;
}

var refreshPb = function (o)
{
  //alert(o.responseText);
}

// ***** RATE TAGLINES *****
function ratetagline(tlid)
{
  argstagline = tlid;
  var ratetaglineCallback =
  {
    success: ratetaglineOk,
    failure: ratetaglinePb,
    argument: argstagline
  }
  sel = document.getElementById('score_'+tlid);
  sel.display='none';
  score=sel.options[sel.selectedIndex].value;
  var url = "/tagline_rate.php";
  var data = "tlid=" + tlid + "&score=" + score;
  var transactionRAS = YAHOO.util.Connect.asyncRequest('POST', url, ratetaglineCallback, data);
}


var ratetaglineOk = function (o)
{
  td = document.getElementById('score_' + o.argument);
  td.parentNode.innerHTML = "<b>C'est noté !</b>";
}

var ratetaglinePb = function (o)
{
  alert("Erreur lors de la soumission du score.");
}

// ***************************** DUCKS PROCESSING ;) **************************
// C'est de la triche de regarder le code !
function processDucks(g, duck, nbducks, wsrc)
{
  if (g==1) game1(duck, nbducks, wsrc);
  else if (g==2) game2(duck, nbducks, wsrc);
  else if (g==3) game3(duck, nbducks, wsrc);
  
}

function game1(duck, nbducks, wsrc)
{
  if (duck.src.indexOf('norm.png')!=-1) duck.src = wsrc;
  else if (duck.src.indexOf('normleft.png')!=-1) duck.src = '/img/norm.png';
  else duck.src = '/img/normleft.png';
  
  var da = new Array(nbducks);
  for (var i=0; i<nbducks; i++){
    var cue = document.getElementById('duck'+ i);
    da[i] = cue.src.indexOf('norm.png')!=-1 ? 'nr' :( cue.src.indexOf(wsrc)!=-1?'al':'nl');
    }
  for (var i=0; i<nbducks; i++){
    if (i<nbducks-1 && da[i]=='nr' && da[i+1]=='al') document.getElementById('duck'+ i).src = '/img/normleft.png';
    if (i!=0 && da[i]=='nl' && da[i-1]=='al') document.getElementById('duck'+ i).src = '/img/norm.png';
    if (i!=0 && i<nbducks-1 && da[i-1]=='nr' && da[i+1]=='nl'){
    if(da[i]=='al')
      document.getElementById('duck'+ i).src = '/img/norm.png';
    else
      document.getElementById('duck'+ i).src = wsrc;}
  }
}

function game2(duck, nbducks, wsrc)
{
  var cds = duck.height;
  var dir = duck.src.indexOf('norm.png')!=-1 ? 'nr' :( duck.src.indexOf(wsrc)!=-1?'al':'nl');
  if (dir=='nr') duck.src = '/img/normleft.png';
  else if (dir=='nl') duck.src = '/img/norm.png';
  var da = new Array(nbducks);
  for (var i=0; i<nbducks; i++){
    var cue = document.getElementById('duck'+ i);
    da[i] = cue.src.indexOf('norm.png')!=-1 ? 'nr' :( cue.src.indexOf(wsrc)!=-1?'al':'nl');
    }
    
  for (var i=0; i<nbducks; i++)
  {
    var cd = document.getElementById('duck'+ i);
    if (da[i]==dir && cd.height < cds) cd.src = duck.src;
  }
}

function shrinkducks(nbducks)
{
  for (var i=0; i<nbducks; i++){
    var cue = document.getElementById('duck'+ i);
    
    cue.height = Math.round(cue.height * 0.9);
    cue.width = Math.round(cue.width * 0.9);
  }
}
function stretchducks(nbducks)
{
  for (var i=0; i<nbducks; i++){
    var cue = document.getElementById('duck'+ i);
    
    cue.height = Math.round(cue.height * 1.1);
    cue.width = Math.round(cue.width * 1.1);
  }
}

function game3(duck, nbducks, wsrc)
{
  // Cure this one! Or make it anormal
  var sick = duck.src.indexOf(wsrc)!=-1;
  if (sick) g_score++;
  
  if (sick) duck.src = '/img/norm.png';
    else duck.src = wsrc;
  
  if (!g_timerStarted)
  {
    g_timerStarted = true;
    g_nbducks = nbducks;
    g_wsrc = wsrc;
    var t=setTimeout("spreadDisease()" , g_incubation_time);
  }
}

function spreadDisease()
{
  var da = new Array(g_nbducks);
  var finito = true;
  for (var i=0; i<g_nbducks; i++){
    var cue = document.getElementById('duck'+ i);
    da[i] = cue.src.indexOf('norm.png')!=-1 ? 'nr' :( cue.src.indexOf(g_wsrc)!=-1?'al':'nl');
    finito = finito && da[i]=='al';
    }
  if (finito) submitDuckPandemicScore();
  for (var i=0; i<g_nbducks; i++)
  {
    var cd = document.getElementById('duck'+ i);
    if (i<g_nbducks-1 && da[i+1]=='al') cd.src = g_wsrc;
    if (i!=0 && da[i-1]=='al') cd.src = g_wsrc;
  }
  
  if (!finito)
  {
    if (g_incubation_time > 300) g_incubation_time = g_incubation_time * 0.97;
    var t=setTimeout("spreadDisease()" , g_incubation_time);
    if (Math.random() > 0.3)
      document.getElementById('duck'+ Math.floor(Math.random() * g_nbducks)).src = g_wsrc;
  }
}

// ***** Submit duck pandemic score *****
function submitDuckPandemicScore()
{
  var submitDuckPandemicScoreCallback =
  {
    success: submitDuckPandemicScoreOk,
    failure: submitDuckPandemicScorePb
  }
  var url = "/submitDuckPandemicScore.php";
  var data = "score=" + g_score;
  var transactionRAS = YAHOO.util.Connect.asyncRequest('POST', url, submitDuckPandemicScoreCallback, data);
}


var submitDuckPandemicScoreOk = function (o)
{
  alert(o.responseText);
}

var submitDuckPandemicScorePb = function (o)
{
  alert("Erreur lors de la soumission du score.");
}

// Voting with stars
function enableStarVote(id)
{
  var s = document.getElementById('star_' + id + '_' + 1);
  if (s!=null) s.src = "/img/star_yellow.png";
}

function disableStarVote(id)
{
  for (var i=1; i<=5; i++)
  {
    var s = document.getElementById('star_' + id + '_' + i);
    if (s!=null) s.src = "/img/star_grey_t.png";
  }
  var sp = document.getElementById('starname' + id);
  if (sp!=null) sp.innerHTML='';
}

function hoverstar(id, starnum)
{
  for (var i=1; i<=starnum; i++)
  {
    var s = document.getElementById('star_' + id + '_' + i);
    s.src = "/img/star_yellow.png";
    
    var sp = document.getElementById('starname' + id);
    var msg='';
    if (i==1) msg='Nul ! ';
    else if (i==2) msg='Bof... ';
    else if (i==3) msg='Hmmm... ';
    else if (i==4) msg='Sympa ';
    else if (i==5) msg='Top ! ';
    sp.innerHTML = msg;
  }
}
