// JS - Ajax Script Notare - de la www.marplo.net
var notarile = Array();			// Matricea ce contine elementele cu note
var ar_elm = Array();		// Stocheaza elementele cu notari ce trebuie trimise la ajax()
var ar_nota = Array();		// Stocheaza notele ce trebuie trimise la ajax()
var ar = 0;					// Indice pt. cheile matricei ar_elm

// Preia tag-urile DIV si retine pe acelea care au class="notare" si ID a carui valoarea incepe cu "mp_"
// Le adauga in matrice, apoi apeleaza functia ajax() cu toate intr-o matrice
var get_note = function () {
  obj_div = document.getElementsByTagName('div');
  for(var i=0; i<obj_div.length; i++) {
    // Daca au ambele atribute: class si id
    if(obj_div[i].className && obj_div[i].id) {
	  var val_id = obj_div[i].id;
      // Daca class="notare" si id incepe cu "mp_"
      if(obj_div[i].className=='notare' && val_id.indexOf("mp_")==0) {
	    notarile[val_id] = obj_div[i];
	    ar_elm[ar] = val_id;
	    ar_nota[ar] = 0;
	    ar++;
	  }
    }
  }
  // Daca sunt elemente cu notari, le trimite toate la ajax()
  if(ar_elm.length>0) ajax(ar_elm, ar_nota);
};

// Functia care arata stelutele in momentul notarii
function v_dnota(spn) {
  var i_sp = spn.id.replace('d_', '')*1;		// preia numarul din id
  var star_sp = spn.parentNode.parentNode.childNodes[0];		// preia elementul cu stelute

  spn.parentNode.parentNode.parentNode.childNodes[0].innerHTML = '<i>Acorzi: &nbsp;</i> '+(i_sp+1);		// Arata nota aleasa

  // Modifica lungimea cu stelutele vizibile (pt. Firefox diferit)
 if (navigator.userAgent.indexOf("Firefox")!=-1) star_sp.setAttribute('style', 'width:'+((i_sp+1)*22)+'px;');
 else star_sp.style.width = ((i_sp+1)*22)+'px';
}

// Functia ce adauga /arata nota in pagina
function ad_nota(elm, nota, notari, renot) {
  // Seteaza nota medie si lungimea zonei cu stelute in functie de nota
  var nota_medie = (notari>0) ? nota/notari : 0;

  // Transforma in string si daca e mai lung de 3 caractere il transforma in numar cu o zecimala
  nota_medie = nota_medie+'';
  if(nota_medie.length>3) {
    nota_medie *= 1; nota_medie = nota_medie.toFixed(1);
  }
  var star_n = 22*nota_medie;

  // Codul html necesar notarii
  // Adauga 10 etichete SPAN, reprezentand fiecare jumatate de steluta
  // Doar daca renot=0
  var d_nota = '';
  if(renot==0) {
    for(var i=0; i<10; i++) {
      d_nota += '<span id="d_'+i+'" onmouseover="v_dnota(this)" onclick="noteaza(this)">&nbsp;</span>';
    }
    d_nota = '<div class="d_nota" onmouseout="re_nota(event, \''+elm+'\', \''+nota+'\', \''+notari+'\')">'+d_nota+'</div>';
  }

  // Creaza s adauga codul html cu stelute si nota
  var nota_html = '<div class="nota"><i>Nota: &nbsp;</i>'+nota_medie+'</div><div class="stars"><div class="star_n" style="width:'+star_n+'px;">&nbsp;</div>'+d_nota+'</div><em>'+notari+' notari</em>'
  if(notarile[elm]) notarile[elm].innerHTML = nota_html;
}

// Functia ce trimite datele la ajax() pt. inregistrarea notei (le defineste si trimite in array)
function noteaza(spn) {
  var elm = Array(); var nota = Array();
  elm[0] = spn.parentNode.parentNode.parentNode.id;	// Preia numele ce trebuie notat
  nota[0] = spn.id.replace('d_', '')*1+1;		// preia nota din id

  spn.parentNode.parentNode.parentNode.innerHTML = '<i><b>Multumim pt. notare</b></i>';
  ajax(elm, nota);
}

// Functia ce e apelata la onmouseout pt. a reafisa nota initiala
 function re_nota(evt, elm, nota, notari) {
 // Apeleaza functia ad_nota dar daca evenmentul e de la elementul cu class="d_nota'
 // Diferit pt IE
 if(evt.srcElement) {
   if(evt.srcElement.className='d_nota') ad_nota(elm, nota, notari, 0);
 }
 else if(evt.target.className=='d_nota') ad_nota(elm, nota, notari, 0);
}

/*** Ajax ***/

// Functia care verifica si creaza obiectul XMLHttpRequest in functie de browser
function get_XmlHttp() {
  // Creaza variabila care va contine instanta la XMLHttpRequest, initial cu valoare nula
  var xmlHttp = null;

  if(window.XMLHttpRequest) {		// Daca browser-ul e Forefox, Opera, Safari, ...
    xmlHttp = new XMLHttpRequest();
  }
  else if(window.ActiveXObject) {	// Daca browser-ul este Internet Explorer
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xmlHttp;
}

// Functia care trimite datele la un fisier PHP si returneaza raspunsul
function ajax(elm, nota) {
  var cerere_http =  get_XmlHttp();		// Apeleaza functia pt. crearea instantei la obiectul XMLHttpRequest

  // Creaza datele care trebuie trimise prin POST la scriptul PHP (Array cu perechi nume=valoare)
  var datele = Array();
  for(var i=0; i<elm.length; i++) datele[i] = 'elm[]='+elm[i]+'&nota[]='+nota[i];
  // Uneste elementele din array intr-un sir, separate cu '&', pt. a fi recunoscute de php ca array
  datele = datele.join('&');

  cerere_http.open("POST", 'http://www.subtitrari-noi.ro/notare.php', true);			// Creaza cererea

  // Adauga un Header specific pentru ca datele sa fie recunoscute ca au fost trimise prin POST
  cerere_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  cerere_http.send(datele);		// Efectueaza trimiterea cererii, impreuna cu valorile care trebuie transmise

  // Verifica starea cererii
  // Daca raspunsul e primit complet, il transfera in eticheta HTML cu id-ul din "form_e"
  cerere_http.onreadystatechange = function() {
    if (cerere_http.readyState == 4) {
	  // Adauga raspunsul de la php intr-o variabila si-l imparte intr-o matrice
	  // Raspunsul fiind intr-un array cu 2 dimensiuni, il imparte de 2 ori
	  var re_notari = cerere_http.responseText;
	  re_notari = re_notari.split('^_^');

	  // A doua impartire, parcurgere pe fiecare din prima
	  for(var i=0; i<re_notari.length; i++) {
	    var re = re_notari[i].split('^^');
	    var renot = (re[3]) ? re[3] : 0;		// Variabila prin care se decide posibilitatea notarii

		// Daca renot=2 afiseaza alert ca notase deja, altfel continua cu afisarea reactualizata a notei
		if(renot==3) {
		  alert("Ati notat deja \n Maine puteti nota din nou.");
		  window.location.reload(true);		// Reincarca pagina
		}
	    else ad_nota(re[0], re[1], (re[2]*1), renot);	// Apel functia pt. afisare nota
	  }

	  // Daca renot=2, dupa notare, sterge obiectul element de notare din toate elm (prin stergere childNode d_nota)
	  if(renot==2) {
	    for(var i=0; i<ar_elm.length; i++) {
		  if(notarile[ar_elm[i]].childNodes[1].childNodes[1])
		    notarile[ar_elm[i]].childNodes[1].removeChild(notarile[ar_elm[i]].childNodes[1].childNodes[1]);
	    }
	  }
    }
  }
}


setTimeout("get_note()", 8);		// Apeleaza functia add_el() la 8 miimi de secunda dupa incarcarea paginii
