/*****************************************************************************************

	ADDEVENT
		face posibil addEvent(element, event, functie)
		
*****************************************************************************************/

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

/****************************************************************************************/

/****************************************************************************************

	XMLHTTP
		declara obiect XMLHttpRequest
		trimite datele la url (GET) si anunta ce functie sa apeleze cand primeste raspuns
		interpreteaza raspunsul

****************************************************************************************/

// destinatia datelor trimise de xmlHttpRequest
var urlAbonare = "../../themes/cariere/php/xmlHttpAbonare.php?";

// obiecte xmlHttp
var httpAbonare = getHTTPObject();

// declaratia xmlhttprequest pentru diferiti UA
function getHTTPObject() {
	var xmlhttp;
	/*@cc_on
	@if (@_jscript_version >= 5)
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
		xmlhttp = false;
	  }
	}
	@else
	xmlhttp = false;
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try 
		{
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	return xmlhttp;
}

/***************************************************************************************/


/*

	FUNCTII GENERALE
----------------------------------------------------------------------------------------*/

// mesaj de asteptare 
pleaseWaitAbonare = function() {
	var mesajWait = "		<h4>Mesajul este in curs de trimitere...</h4>\n";
	var feedback = document.createElement('div');
	feedback.setAttribute('id', 'sending');
	feedback.innerHTML = mesajWait;
	document.getElementById('container-formular').replaceChild(feedback, document.getElementById('container-formular').getElementsByTagName('div')[0]);
}

// trimite datele din formular de inscrieri
submitAbonare = function(data) {
	if (data && checkFormAbonare(true)) {
		httpAbonare.open("GET", urlAbonare + data, true);
		httpAbonare.onreadystatechange = displayFeedbackAbonare;
		httpAbonare.send(null);
	}
}

// afiseaza feedback inscrieri
displayFeedbackAbonare = function() {
	if (httpAbonare.readyState == 4) {
        if (httpAbonare.status == 200) {
			var feedback = document.createElement('div');
			
			if (httpAbonare.responseText == 'ok') {
				var mesaj = "		<h3>Datele au fost trimise cu succes!</h3>\n		<p>Va multumim pentru timpul acordat si va uram o zi buna in continuare!</p>\n";
				feedback.setAttribute('id', 'send-success');
			} else {
				var mesaj = "		<h4>Abonarea nu a fost terminata</h4>\n		<p>Ne cerem scuze dar a intervenit o eroare. In cazul in care esueaza o noua incercare de completare a formularului, va rugam sa folositi datele de contact pentru a va abona!</p>\n";
				feedback.setAttribute('id', 'sending');
			}
			
			feedback.innerHTML = mesaj;
			document.getElementById('container-formular').replaceChild(feedback, document.getElementById('sending'));
		}
	}	
}



/*CHECK FIELDS*/
Checksubiect = function(element) {
	var temp = element.value;
	var newClass = 'form-correct';
	if (!temp.match(/[a-zA-Z0-9]/)) {
		newClass = 'form-error';
	}
	return newClass;
}

Checkmesaj = function(element) {
	var temp = element.value;
	var newClass = 'form-correct';
	if (!temp.match(/[a-zA-Z0-9]/)){
		newClass = 'form-error';
	}
	return newClass;
}

Checknume = function(element) {
	var temp = element.value;
	var newClass = 'form-correct';
	if ((!temp) || (temp.match(/[0-9]/))) {
		newClass = 'form-error';
	}
	return newClass;
}

Checkexista = function(element) {
	var temp = element.value;
	var newClass = 'form-correct';
	if (!temp) {
		newClass = 'form-error';
	}
	return newClass;
}

Checkemail = function(element) {
	var temp = element.value;
	var newClass = 'form-correct';
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(temp)) {
		newClass = 'form-error';
	}
	return newClass;
}

Checknumber = function(element) {
	var temp = element.value;
	var newClass = 'form-correct';
	if (!temp.match(/[0-9]/)) {
		newClass = 'form-error';
	}
	return newClass;
}

LabelFocus = function() {
	var spanClass = this.parentNode.parentNode.className;
	if (spanClass == 'form-correct') {
		this.parentNode.parentNode.className += ' focused-correct';
	} else {
		this.parentNode.parentNode.className += ' focused-error';
	}
}


/****************************************************************************************/


/****************************************************************************************

	INSCRIERI

****************************************************************************************/

/*VARIOUS*/

updatePF = function() {
	if (document.getElementById("persoana-fizica").className != "expanded") {
		document.getElementById("persoana-juridica").className = "collapsed";
		document.getElementById("persoana-fizica").className = "expanded";
	
		document.getElementById("formular-abonare").numef.className = "required";
		document.getElementById("formular-abonare").cnpf.className = "required";
		document.getElementById("formular-abonare").varstaf.className = "required";
		document.getElementById("formular-abonare").adresaf.className = "required";
		document.getElementById("formular-abonare").emailf.className = "required";
		document.getElementById("formular-abonare").functief.className = "required";
	
		document.getElementById("formular-abonare").numej.className = "";
		document.getElementById("formular-abonare").perscontactj.className = "";
		document.getElementById("formular-abonare").codfiscalj.className = "";
		document.getElementById("formular-abonare").adresaj.className = "";
		document.getElementById("formular-abonare").contj.className = "";
		document.getElementById("formular-abonare").bancaj.className = "";
		document.getElementById("formular-abonare").emailj.className = "";
	} else {
		return false;	
	}
}

updatePJ = function() {
	if (document.getElementById("persoana-juridica").className != "expanded") {
		document.getElementById("persoana-juridica").className = "expanded";
		document.getElementById("persoana-fizica").className = "collapsed";
	
		document.getElementById("formular-abonare").numef.className = "";
		document.getElementById("formular-abonare").cnpf.className = "";
		document.getElementById("formular-abonare").varstaf.className = "";
		document.getElementById("formular-abonare").adresaf.className = "";
		document.getElementById("formular-abonare").emailf.className = "";
	
		document.getElementById("formular-abonare").numej.className = "required";
		document.getElementById("formular-abonare").perscontactj.className = "required";
		document.getElementById("formular-abonare").functiej.className = "required";
		document.getElementById("formular-abonare").codfiscalj.className = "required";
		document.getElementById("formular-abonare").adresaj.className = "required";
		document.getElementById("formular-abonare").contj.className = "required";
		document.getElementById("formular-abonare").bancaj.className = "required";
		document.getElementById("formular-abonare").emailj.className = "required";
	} else {
		return false;	
	}
}

	// butonul e enabled doar daca sunt completate campurile obligatorii / corect
removeAbonareButton = function() {
	document.getElementById('submit-abonare').enabled = false;
	document.getElementById('submit-abonare').className = "disabled-button";
}

disableAbonareButton = function() {
	if (document.getElementById('submit-abonare')) {
		document.getElementById('submit-abonare').className = "disabled-button";
	}
}

enableAbonareButton = function() {
	document.getElementById('submit-abonare').className = "enabled-button";
}

/*FORM STATUS*/
	// dupa fiecare 'blur' verifica daca e sau nu cazul sa fie enabled butonul de submit 
checkFormAbonare = function(type) {
	enableAbonareButton();
	var spans = document.getElementById('formular-abonare').getElementsByTagName('span');
	for (var i=0 ; i<spans.length ; i++) {
		if (spans[i].className == 'form-error') { disableAbonareButton(); if (type) return false; }
	}
	
	if (document.getElementById("persoana-fizica").className == "expanded") {
		if ((!document.getElementById('formular-abonare').numef.value) || (!document.getElementById('formular-abonare').cnpf.value) || (!document.getElementById('formular-abonare').emailf.value) || (!document.getElementById('formular-abonare').functief.value) || (!document.getElementById('formular-abonare').varstaf.value) || (!document.getElementById('formular-abonare').adresaf.value)) {
			disableAbonareButton();
			if (type) return false;
		}
	}
	if (document.getElementById("persoana-juridica").className == "expanded") {
		if ((!document.getElementById('formular-abonare').numej.value) || (!document.getElementById('formular-abonare').perscontactj.value) || (!document.getElementById('formular-abonare').functiej.value) || (!document.getElementById('formular-abonare').emailj.value) || (!document.getElementById('formular-abonare').codfiscalj.value) || (!document.getElementById('formular-abonare').adresaj.value) || (!document.getElementById('formular-abonare').contj.value) || (!document.getElementById('formular-abonare').bancaj.value)) {
			disableAbonareButton();
			if (type) return false;
		}
	}
	if (type) return true;
}

// schimba class cum era inainte de onfocus
// daca e obligatoriu (required in class in XHTML), face verificari
LabelBlurAbonare = function() {
	var spanClass = this.parentNode.parentNode.className.split(' ');
	this.parentNode.parentNode.className = spanClass[0];
	var checker = this.getAttribute('name');
	if (this.className == 'required') {
		switch (checker) {
			case 'numef' : this.parentNode.className = Checknume(this); break;
			case 'adresaf' : this.parentNode.className = Checkexista(this); break;
			case 'emailf' : this.parentNode.className = Checkemail(this); break;
			case 'functief' : this.parentNode.className = Checkexista(this); break;
			case 'cnpf' : this.parentNode.className = Checknumber(this); break;
			case 'varstaf' : this.parentNode.className = Checknumber(this); break;
			case 'numej' : this.parentNode.className = Checkexista(this);  break;
			case 'perscontactj' : this.parentNode.className = Checknume(this);  break;
			case 'functiej' : this.parentNode.className = Checkexista(this);  break;
			case 'codfiscalj' : this.parentNode.className = Checkexista(this);  break;
			case 'adresaj' : this.parentNode.className = Checkexista(this); break;
			case 'contj' : this.parentNode.className = Checkexista(this);  break;
			case 'bancaj' : this.parentNode.className = Checkexista(this);  break;
			case 'emailj' : this.parentNode.className = Checkemail(this); break;
		}
	}
	if (checker == 'nrabonamente' && !this.value) {
		this.value = '1';
	}
	if (checker == 'nrdocument' && !this.value) {
		var data = new Date();
		var luna = data.getMonth() + 1;
		this.value = formatToday ();
	}
	// pentru stabilirea statusului enabled/disabled
	checkFormAbonare();
}

formatToday = function () {
	var data = new Date();
	var luna = data.getMonth() + 1;
	return data.getDate() + '.' + luna + '.' + data.getFullYear()
}

/*PREPARE FORM*/
setupAbonare = function() {
	
	var spans = document.getElementsByTagName('span');
	for (var i=0 ; i<spans.length ; i++) {
		for (var j=0 ; j<spans[i].childNodes.length ; j++) {
			// adauga event pentru onfocus si onblur
			if ((spans[i].childNodes[j].tagName == 'INPUT') || (spans[i].childNodes[j].tagName == 'TEXTAREA')) {
				var temp = spans[i].childNodes[j];
				addEvent(temp, 'focus', LabelFocus);
				addEvent(temp, 'blur', LabelBlurAbonare);
			}
		}
	}
	
	var element = document.getElementById("check-pf");
	addEvent(element, 'click', updatePF);
	var element2 = document.getElementById("check-pj");
	addEvent(element2, 'click', updatePJ);	
	
	document.getElementById("formular-abonare").numef.className = "required";
	document.getElementById("formular-abonare").cnpf.className = "required";
	document.getElementById("formular-abonare").varstaf.className = "required";
	document.getElementById("formular-abonare").adresaf.className = "required";
	document.getElementById("formular-abonare").emailf.className = "required";
	document.getElementById("formular-abonare").functief.className = "required";
	
	// hijack submit. e posibil doar daca sunt completate corect campurile
	document.getElementById('formular-abonare').onsubmit = function() {
		var formularabonare = document.getElementById('formular-abonare');
		
		// verifica & trimite
		var error = 0;

		if (document.getElementById("persoana-fizica").className == "expanded") {
			var spans = document.getElementById('persoana-fizica').getElementsByTagName('span');
			for (var i=0 ; i<spans.length ; i++) {
				if (spans[i].className == 'form-error') error = 1;
			}
			if ((formularabonare.numef.value == "") || (formularabonare.cnpf.value == "") || (formularabonare.emailf.value == "") || (formularabonare.functief.value == "") || (formularabonare.varstaf.value == "") || (formularabonare.adresaf.value == "")) {
				error = 1;
			}
		}
		
		if (document.getElementById("persoana-juridica").className == "expanded") {
			var spans = document.getElementById('persoana-juridica').getElementsByTagName('span');
			for (var i=0 ; i<spans.length ; i++) {
				if (spans[i].className == 'form-error') error = 1;
			}
			if ((formularabonare.numej.value == "") || (formularabonare.perscontactj.value == "") || (formularabonare.functiej.value == "") || (formularabonare.emailj.value == "") || (formularabonare.codfiscalj.value == "") || (formularabonare.adresaj.value == "") || (formularabonare.contj.value == "") || (formularabonare.bancaj.value == "")) {
				error = 1;
			}
		}
		
		if (error) {
			document.getElementById('titlu-trimite').className = "submit-error";
			document.getElementById('titlu-trimite').innerHTML = "Completeaza cu atentie toate datele obligatorii din formular!";
			return false;
		}
		
		var tipabonament;
		var factura;
		var tippersoana;
		var tipcadou;
		for (var j=0; j<formularabonare.tipabonament.length; j++) {
			if (formularabonare.tipabonament[j].checked == true) 
				tipabonament = formularabonare.tipabonament[j].value;
		}
		for (var k=0; k<formularabonare.factura.length; k++) {
			if (formularabonare.factura[k].checked == true) 
				factura = formularabonare.factura[k].value;
		}
		/*for (var m=0; m<formularabonare.tipcadou.length; m++) {
			if (formularabonare.tipcadou[m].checked == true) 
				tipcadou = formularabonare.tipcadou[m].value;
		}*/
		for (var l=0; l<formularabonare.tippersoana.length; l++) {
			if (formularabonare.tippersoana[l].checked == true) 
				tippersoana = formularabonare.tippersoana[l].value;
		}
		
		//pregateste datele pentru xmlhttprequest in format de GET php
		var data = 'tipabonament=';
		data += tipabonament;
		data += '&nrabonamente=';
		data += (formularabonare.nrabonamente.value) ? formularabonare.nrabonamente.value : '1';
		data += '&factura=';
		data += factura;
		data += '&tipcadou=';
		data += tipcadou;
		data += '&nrdocument=';
		data += (formularabonare.nrdocument.value) ? formularabonare.nrdocument.value : formatToday ();
		data += '&tippersoana=';
		data += tippersoana;
		data += '&numef=';
		data += formularabonare.numef.value;
		data += '&cnpf=';
		data += formularabonare.cnpf.value;
		data += '&varstaf=';
		data += formularabonare.varstaf.value;
		data += '&adresaf=';
		data += formularabonare.adresaf.value;
		data += '&telefonf=';
		data += formularabonare.telefonf.value;
		data += '&emailf=';
		data += formularabonare.emailf.value;
		data += '&functief=';
		data += formularabonare.functief.value;
		data += '&companief=';
		data += formularabonare.companief.value;
		data += '&obiectf=';
		data += formularabonare.obiectf.value;
		data += '&domeniuf=';
		data += formularabonare.domeniuf.value;
		data += '&numej=';
		data += formularabonare.numej.value;
		data += '&perscontactj=';
		data += formularabonare.perscontactj.value;
		data += '&functiej=';
		data += formularabonare.functiej.value;
		data += '&codfiscalj=';
		data += formularabonare.codfiscalj.value;
		data += '&regcomj=';
		data += formularabonare.regcomj.value;
		data += '&adresaj=';
		data += formularabonare.adresaj.value;
		data += '&obiectj=';
		data += formularabonare.obiectj.value;
		data += '&domeniuj=';
		data += formularabonare.domeniuj.value;
		data += '&contj=';
		data += formularabonare.contj.value;
		data += '&bancaj=';
		data += formularabonare.bancaj.value;
		data += '&telefonj=';
		data += formularabonare.telefonj.value;
		data += '&faxj=';
		data += formularabonare.faxj.value;
		data += '&emailj=';
		data += formularabonare.emailj.value;
		data += '&observatii=';
		data += formularabonare.observatii.value;

		submitAbonare(data);
		pleaseWaitAbonare();

		return false;
		
	}
	// primul check -- are mai mult rol de a opri butonul
	checkFormAbonare();
}



/****************************************************************************************

	NEW WINDOW

****************************************************************************************/

function openInNewWindow(e) {
	if (!e) var e = window.event;
	// Abort if a modifier key is pressed
	if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
		return true;
	}
	else {
		// Change "_blank" to something like "newWindow" to load all links in the same new window
	    var newWindow = window.open(this.getAttribute('href'), '_blank');
		if (newWindow) {
			if (newWindow.focus) {
				newWindow.focus();
			}
			return false;
		}
		return true;
	}
}


/****************************************************************************************

	GET ELEMENTS BY CLASS NAME

****************************************************************************************/

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/-/g, "\-");
	var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}



/****************************************************************************************

	SONDAJ

****************************************************************************************/

function showControl(el) {
	var t_id = el.getAttribute('id');
	var t_s = t_id.slice(1);
	var subordonat = document.getElementById(t_s);
	if (subordonat.style.display == 'none') subordonat.style.display = 'block';
}

function setupSondaj() {
	
	var subs = document.getElementsByTagName('input');
	for (var i=0; i<subs.length; i++) {
		var el = subs[i];
		if (/\bcs\b/.exec(el.className)) {
			el.onfocus = function() {showControl(this);}
			
			var t_id = el.getAttribute('id');
			var t_s = t_id.slice(1);
			
			if (!el.getAttribute('checked')) {
				document.getElementById(t_s).style.display = 'none';
			}
		}
	}
}


/****************************************************************************************/

setup = function() {
	
	if (!document.getElementById) return false;
	
	if (document.getElementById("formular-abonare")) setupAbonare();
	
	if (document.getElementById("formular-sondaj")) setupSondaj();
	
	if (document.getElementById && document.createElement && document.appendChild) {
		var links = document.getElementsByTagName('a');
		var link;
		for (var i = 0; i < links.length; i++) {
			link = links[i];
			// Find all links with a class name of "non-html"
			if (/\bexternal-link\b/.exec(link.className)) {
				// Create an em element containing the new window warning text and insert it after the link text
				link.onclick = openInNewWindow;
			}
		}
	}
}
	

addEvent(window, 'load', setup);
