
/** Incepe Scriptul 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 ajaxF(php_file, datele, tagID) {
  var cerere_http = get_XmlHttp();		// Apeleaza functia pt. crearea instantei la obiectul XMLHttpRequest

  cerere_http.open("POST", php_file, 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 "tagID"
  cerere_http.onreadystatechange = function() {
    if (cerere_http.readyState == 4) {
      document.getElementById(tagID).innerHTML = cerere_http.responseText;
    }
  }
}
// End script AJAX

// Functia ce trimida datele la ajaxF
function to_ajax(idp, slide) {

  // Defineste url-ul pagini, fisierul php, datele pt. POST si id-ul tagului unde va fi afisat raspunsul din ajaxF
  var url_pag = encodeURIComponent(location.pathname+location.search);	// Preia si encodeaza URL calea paginii (fara domeniu)
  
  var php_file = 'fisiere/afisare.php';
  var datele = 'pag='+url_pag+'&currentpage='+idp+'&slide='+slide;
  var tagID = 'coments';

  // Daca idp='fadmin' redefineste datele pt. ajaxF cu altele preluate din formularul 'fadmin'
  if(idp=='fadmin') {
    datele = 'n_admin='+document.fadmin.n_admin.value+'&p_admin='+document.fadmin.p_admin.value+'&pag='+url_pag+'&n_pag='+document.fadmin.n_pag.value+'&slide='+slide;
	tagID = 'coments';
  }

  ajaxF(php_file, datele, tagID);			// Apeleaza functia ajaxF, cu datele necesare

  // Daca nu e cerere de logare admin, adauga id-ul paginii (idp) in formularul de logare admin
  if(idp!='fadmin') document.fadmin.n_pag.value = idp;
}

// Adauga white-space pt. browsere IE
 if(navigator.appName == "Microsoft Internet Explorer") {
   document.write("<style> .c_coms { white-space:pre; } </style>");
}

// Functia pentru afisare si ascundere elemnte din pagina
function OnOff(id1, id2) {
  // Preia elementele HTML dupa argumentele functiei
  document.getElementById(id1).style.display='block';
  document.getElementById(id2).style.display='none';
}

// Functia pt. calculare si afisare nr. caractere permise in textarea
function verifica(text) {
  var maxlength=600;

  // Verifca daca a fost depasit nr. maxim de caractere
  if (text.value.length>maxlength) {
    alert("Va rog adaugati maxim "+maxlength+" caractere!")
    return false
  }
  // Afiseaza nr. de caractere ramase
  else {
    document.getElementById("countdown").innerHTML = 'Caractere ramase <b>'+(maxlength-text.value.length)+'</b>';
    return true
  }
}

/** Start - functii pt. adaugare URL, Format text si Smiles in textarea **/

// Verifica si transmite pt. adaugare URL-ul
function set_url(zona) {
  var url = window.prompt("Scrieti adresa URL (fara http://)")		// Deschide fereastra Prompt pt. scriere URL

  // Verifica cu regex daca sirul scris are forma corecta URL (fara http://)
  // Daca e corect transmite la functia 'add_tag()', in caz contrar afiseaza alert
  if (url.match(/^www.([a-zA-z0-9_,+ -]+[.]+)/)) {
	add_tag('<a href="http://'+url+'" target="_blank">','</a>', zona);
  }
  else {
	alert('Formatul adresei scrise este incorect \n Adaugatati adresa URL fara "http://" \n De forma: www.domeniu_site.net/pagina')
  }
}

// Functia determina coordonatele unui select in textarea (zon) si textul selectat, PT. IE
function cursorPosition(star, en, zon){
var textarea = document.getElementById(zon);
textarea.focus();

var selection_range = document.selection.createRange().duplicate();

if (selection_range.parentElement() == textarea) { // Check that the selection is actually in our textarea
// Create three ranges, one containing all the text before the selection,
// one containing all the text in the selection (this already exists), and one containing all
// the text after the selection.
var before_range = document.body.createTextRange();
before_range.moveToElementText(textarea); // Selects all the text
before_range.setEndPoint("EndToStart", selection_range); // Moves the end where we need it

var after_range = document.body.createTextRange();
after_range.moveToElementText(textarea); // Selects all the text
after_range.setEndPoint("StartToEnd", selection_range); // Moves the start where we need it

var before_finished = false, selection_finished = false, after_finished = false;
var before_text, untrimmed_before_text, selection_text, untrimmed_selection_text, after_text, untrimmed_after_text;

// Load the text values we need to compare
before_text = untrimmed_before_text = before_range.text;
selection_text = untrimmed_selection_text = selection_range.text;
after_text = untrimmed_after_text = after_range.text;

// Check each range for trimmed newlines by shrinking the range by 1 character and seeing
// if the text property has changed. If it has not changed then we know that IE has trimmed
// a \r\n from the end.
do {
if (!before_finished) {
if (before_range.compareEndPoints("StartToEnd", before_range) == 0) {
before_finished = true;
} else {
before_range.moveEnd("character", -1)
if (before_range.text == before_text) {
untrimmed_before_text += "\r\n";
} else {
before_finished = true;
}
}
}
if (!selection_finished) {
if (selection_range.compareEndPoints("StartToEnd", selection_range) == 0) {
selection_finished = true;
} else {
selection_range.moveEnd("character", -1)
if (selection_range.text == selection_text) {
untrimmed_selection_text += "\r\n";
} else {
selection_finished = true;
}
}
}
if (!after_finished) {
if (after_range.compareEndPoints("StartToEnd", after_range) == 0) {
after_finished = true;
} else {
after_range.moveEnd("character", -1)
if (after_range.text == after_text) {
untrimmed_after_text += "\r\n";
} else {
after_finished = true;
}
}
}

} while ((!before_finished || !selection_finished || !after_finished));

// ** END Untrimmed success test

// Defineste intr-un array inceputul si sfarsitul selectiei si textul final din textarea
var re = new Array();
re['startPos'] = untrimmed_before_text.length;
re['endPos'] = re['startPos'] + untrimmed_selection_text.length;
re['final_text'] = untrimmed_before_text +star+ untrimmed_selection_text +en+ untrimmed_after_text;

	return re;
}
}

// Functia pozitioneaza cursorul in caseta cu id-ul din zona la coordonata Xpos
function set_xpos(zona, Xpos) {
  var txtarea = document.getElementById(zona);
  if(txtarea != null) {
	if(txtarea.createTextRange) {
	  var range = txtarea.createTextRange();
	  range.move('character', Xpos);
	  range.select();
	}
	else {
	  if(txtarea.selectionStart) {
		txtarea.focus();
	    txtarea.setSelectionRange(Xpos, Xpos);
	  }
	  else {
	    txtarea.focus();
	  }
    }
  }
}

// Adaugare font B, I, U si URL in formular (foloseste pt IE functia cursorPosition(), iar la final set_xpos)
function add_tag(start, end, zona) {
  var txtarea = document.getElementById(zona);
  if (txtarea.selectionStart || txtarea.selectionStart==0) { // Mozilla, Opera
    // Defineste intr-un array inceputul si sfarsitul selectiei si textul final din textarea
    var rezult = new Array();
	rezult['startPos'] = txtarea.selectionStart;
	rezult['endPos'] = txtarea.selectionEnd;
	rezult['final_text'] = txtarea.value.substring(0, rezult['startPos']) + start + txtarea.value.substring(rezult['startPos'], rezult['endPos']) + end + txtarea.value.substring(rezult['endPos'], txtarea.value.length);
  }
  else if (document.selection) { 	// IE
    var rezult = cursorPosition(start, end,zona);
 }

  // Adauga noul text in textarea si apeleaza functia set_xpos() ce aseaza cursorul la pozitia Xpos
  txtarea.value = rezult['final_text'];
  var Xpos = rezult['endPos']+start.length;
  set_xpos(zona, Xpos);

 // txtarea.focus();
  //txtarea.setSelectionRange((rezult['endPos']+start.length),(rezult['endPos']+start.length));
}

// Adaugare smiles in formular
function add_smile(smile, zona) {
  var tarea_com = document.getElementById(zona);
  tarea_com.value += smile;
  tarea_com.focus();
}

/* End - functii pt. adaugare URL, Format text si Smiles in textarea */

// Verificarea campurilor din formular "add_c"
function validare(f_adcom) {
  var eroare = 0;		// variabila care va determina return TRUE sau FALSE
  // Variabilele cu textele din formular
  var numele = f_adcom.nume.value;
  var mailul = f_adcom.email.value;
  var comentariu = f_adcom.coment.value;
  var hideaspam = f_adcom.hidea_spam.value;
  var aspam = f_adcom.a_spam.value;

  // Verificarea variabilelor
  // Daca 'if-ul' e TRUE, modifica valoarea variabilei 'eroare'
  if (numele.length < 2) {
	alert('Completati numele, minim 2 caractere');
	eroare = f_adcom.nume;
  }
  else if (numele.length > 42) {
	alert('Numele trebuie sa contina maxim 42 caractere!');
	eroare = f_adcom.nume;
  }
  else if (mailul.indexOf("@")==-1 || mailul.indexOf(".")==-1 || mailul.length<6) {
	alert('Introduceti corect adresa de e-mail!');
	eroare = f_adcom.email;
  }
  else if (mailul.length > 50) {
	alert('Adresa de e-mail trebuie sa contina maxim 50 caractere!');
	eroare = f_adcom.email;
  }
  else if (comentariu.length < 5) {
	alert('Adaugati comentariul, minim 5 caractere');
	eroare = f_adcom.coment;
  }
  else if (comentariu.length > 600) {
	alert('Comentariul trebuie sa contina maxim 600 caractere!');
	eroare = f_adcom.coment;
  }
  else if (aspam.length<1) {
	alert('Adaugati si caracterele anti-spam!');
	eroare = f_adcom.a_spam;
  }
  else if (hideaspam!==aspam) {
	alert('Caracterele pentru verificare anti-spamm incorecte!');
	eroare = f_adcom.a_spam;
  }

  // Verifica variabila 'eroare'
  if (eroare==0) {
	return true;
  }
  else {
	eroare.focus();
	return false;
  }
}


// Verificarea formularului de modificare a administratorului
function mod(f_modc) {
  // Variabilele cu textele campurilor din formular
  var n_mod = f_modc.mod_nume.value;
  var m_mod = f_modc.mod_email.value;
  var c_mod = f_modc.mod_coment.value;
  f_modc.mod_fullurl.value = document.location.href;			// Adauga adresa url a paginii, in campul ascuns, pt. redirect in mod_del.php

  // Verificarea variabilelor
  if (n_mod.length < 2) {
	alert('Completati numele, minim 2 caractere');
	return false;	
  }
  else if (n_mod.length > 42) {
	alert('Numele trebuie sa contina maxim 42 caractere!');
	return false;	
  }
  else if (m_mod.length>1 && (m_mod.indexOf("@")==-1 || m_mod.indexOf(".")==-1 || m_mod.length<6)) {
	alert('Introduceti corect adresa de e-mail!');
	return false;
  }
  else if (m_mod.length > 50) {
	alert('Adresa de e-mail trebuie sa contina maxim 50 caractere!');
	return false;
  }
  else if (c_mod.length < 5) {
	alert('Adaugati comentariul, minim 5 caractere');
	return false;
  }
  else if (c_mod.length > 600) {
	alert('Comentariul trebuie sa contina maxim 550 caractere!');
	return false;
  }

  return true;
}

// Functia pt. poza din comentariu
// Ascunde 'hide', afiseaza 'child_nr' al elementului parinte
// Daca 'child_nr'=0 elimina atributul width a pozei si schimba atributul class la parinte, altfel ii da valoarea 150
function upimgF(hide, child_nr) {
  hide.style.display = 'none';
  hide.parentNode.childNodes[child_nr].style.display = 'inline';
  if(child_nr===0) {
    hide.parentNode.childNodes[1].className = 'upimg2';
    hide.parentNode.childNodes[1].removeAttribute('width');
  }
  else {
    hide.parentNode.childNodes[1].className = 'upimg';
    hide.parentNode.childNodes[1].setAttribute('width','130');
  }
}

/** Functii pt. partea de modificare - stergere de catre admin **/

function mods(id_com) {
  // Preia datele din etichetele HTML
  var data = document.getElementById("d"+id_com).innerHTML;
  var nume = document.getElementById("n"+id_com).innerHTML;
  var email = document.getElementById("e"+id_com).innerHTML;
  var coment = document.getElementById("c"+id_com).innerHTML;
  var site = document.getElementById("n"+id_com).getAttribute("href");

  // Transfera datele in campurile din formular
  document.fmod.mod_id.value = data;
  document.fmod.mod_nume.value = nume;
  document.fmod.mod_email.value = email;
  document.fmod.mod_coment.value = coment.replace(/<br>/gi, '\n');		// Inlocuieste tagul BR cu caracter linie_noua
  document.fmod.mod_site.value = site;
  
  document.getElementById("mod").style.display='block';
  document.getElementById("fcom").style.display='none';
  document.fmod.mod_coment.focus();
}

// Functia pentru schimbarea clasei div-ului parinte a elementului cu "Sterge"
// Si pt. deschiderea ferestrei pop-up pt. stergere
function s_clase_popup(clasa, id_com) {
  // Determina elementul parinte de rang 2 (al primului parinte) si-i pune alta nume de clasa
  clasa.parentNode.parentNode.parentNode.className = 'clasa_del';

  // Deschide fereastra pop-up (child)
  window.open("fisiere/mod_del.php?id="+id_com, "sterge", "toolbar=0, menubar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, width=480, height=240, left=350, top=250");
}

// Functia pt. ascunderea elementelor cu classa "clasa_del"
function ascunde() {
  var clase = document.getElementsByClassName('clasa_del');
  var nr_clase = clase.length;
  for (var i=0; i<nr_clase; i++) {
	clase[i].style.display = 'none';
  }
}
