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

	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);

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


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

/** IV Object
		galerie foto
		convertor
		meteo
		recomandari
		tv
		clase
		
*****************************************************************************************/

var IV = new Object();

IV = {
	
	simpleGallery : {
		
		init : function() {
			gallery = document.getElementById("galerie");
			links = document.getElementById("galerie").getElementsByTagName("a");
			for (var i=0; i<links.length; i++) {
				if (i==0) IV.misc.addClass(links[i].parentNode, "activ");
				links[i].onclick = function() {return IV.simpleGallery.switchPic(this);}
			}
		},
		
		requestFoto : function(fileid) {
			queryarray = location.search.split('&');
			for (var i=0; i<queryarray.length; i++) {
				if (queryarray[i].indexOf('aid') >= 0) {
					articleid = queryarray[i].split('=')[1];
				}
			}
			var data="module=articles&func=display";
			data += "&aid=";
			data += articleid;
			data += "&theme=vizual_generator";
			data += "&id=" 
			data += fileid;
			submitGallery(data);
		},
		
		switchPic : function(generator) {
			info = generator.getAttribute("href").split('&');
			fileid = info[info.length - 1].split("=")[1];
			IV.simpleGallery.requestFoto(fileid);
			var bigpic = document.getElementById("vizual").getElementsByTagName("img")[0];
			bigpic.setAttribute("src", "themes/azay/parts/big-loader.gif");
			bigpic.setAttribute("alt", "");
			IV.simpleGallery.switchActiv(generator);
			return false;
		},
		
		switchActiv : function(generator) {
			gallery = document.getElementById("galerie");
			items = gallery.getElementsByTagName("a");
			for (var i=0; i<items.length; i++) {
				if (items[i] == generator) {
					IV.misc.addClass(items[i].parentNode, "activ");
				} else if (items[i].parentNode.getAttribute("class") == "activ") {
					IV.misc.removeClass(items[i].parentNode, "activ");	
				}
			}
		}
	},
		
	misc : {
		addClass : function(element, clname) {
			oldclass = element.className;
			if (oldclass.indexOf(clname) != -1) return;
			if (oldclass == "") {
				newclass = clname;
			} else {
				newclass = oldclass + " " + clname;
			}
			element.className = newclass;
		},
		
		removeClass : function(element, clname) {
			if (clname == "undefined") return;
			oldclass = element.className;
			newclass = "";
			classes = oldclass.split(" ");
			for (var i=0; i<classes.length; i++) {
				if (classes[i] != clname) {
					newclass += classes[i] + " ";
				}
			}
			if (newclass.charAt(newclass.length - 1) == " ") newclass = newclass.substring(0, newclass.length - 1);
			element.className = newclass;
		},
		
		removePx : function(size) {
			return size.substr(0, size.length - 2) * 1;
		},
		
		toggleDetalii : function(element, tag) {
			car = element.parentNode.getElementsByTagName(tag)[0];
			if (car.className.indexOf("hidden") != -1) {
				car.className = clasa + " vizibil";	
			} else {
				car.className = clasa + " hidden";	
			}
		},
		
		toggleElement : function(element) {
			if (element.className.indexOf("hidden") != -1) {
				IV.misc.removeClass(element, "hidden");
				IV.misc.addClass(element, "vizibil");
			} else {
				IV.misc.removeClass(element, "vizibil");
				IV.misc.addClass(element, "hidden");
			}
		},
		
		toggle : function(element) {
			if (element.className.indexOf("exp") != -1) {
				IV.misc.removeClass(element, "exp");
				element.innerHTML = "Adauga un comentariu";
			} else {
				IV.misc.addClass(element, "exp");
				element.innerHTML = "Renunta";
			}
		},
		
		fixHover : function(el) {
			addEvent(el, 'mouseover', function() {IV.misc.addClass(el, "fauxhover");})
			addEvent(el, 'mouseout', function() {IV.misc.removeClass(el, "fauxhover");})
		}

	}
}


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

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

	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 urlContact = "themes/azay/ajax/xmlHttp.php?";
var urlGallery = "index.php?";

// obiecte xmlHttp
var httpContact = getHTTPObject();
var httpGallery = 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
----------------------------------------------------------------------------------------*/

submitGallery = function(data) {
	httpGallery.open("GET", urlGallery + data, true);
	httpGallery.onreadystatechange = displayFeedbackGallery;
	httpGallery.send(null);
}

displayFeedbackGallery = function(data) {
	if (httpGallery.readyState == 4) {
        if (httpGallery.status == 200) {
			bigpic = document.getElementById("vizual");
			bigpic.innerHTML = httpGallery.responseText;
		}
	}
}

// trimite datele din formular de contact
submitContact = function(data) {
	httpContact.open("GET", urlContact + data, true);
	httpContact.onreadystatechange = displayFeedbackContact;
	httpContact.send(null);
}

pleaseWaitContact = function() {
	var mesajWait = "		<h2>Datele sunt in curs de trimitere...</h2>\n	<p>Va rugam sa asteptati. Nu dureaza mult.</p>\n";
	var feedback = document.createElement('div');
	feedback.setAttribute('id', 'sending');
	feedback.innerHTML = mesajWait;
	document.getElementById('articol').replaceChild(feedback, document.getElementById('formular-contact'));
}

// afiseaza feedback contact
displayFeedbackContact = function() {
	if (httpContact.readyState == 4) {
        if (httpContact.status == 200) {
			var mesajOk = "		<h2>Mesajul a fost trimis cu succes</h2>\n		<p>Va multumim pentru timpul acordat. Vom raspunde in cel mai scurt timp cu informatii relevante pentru Dvs.</p>\n";
			var feedback = document.createElement('div');
			feedback.setAttribute('id', 'send-success');
			feedback.innerHTML = mesajOk;
			document.getElementById('articol').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;
}

Checktel = 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' || spanClass == 'initial') {
		this.parentNode.parentNode.className += ' focused-correct';
	} else {
		this.parentNode.parentNode.className += ' focused-error';
	}
}


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



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

	CONTACT

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

/*VARIOUS*/

	// butonul e enabled doar daca sunt completate campurile obligatorii / corect
disableContactButton = function() {
	if (document.getElementById('submit-contact')) {
		document.getElementById('submit-contact').setAttribute('src', 'themes/azay/parts/trimite-disabled.png');
	}
}

enableContactButton = function() {
	document.getElementById('submit-contact').setAttribute('src', 'themes/azay/parts/trimite.png');
}

/*FORM STATUS*/
	// dupa fiecare 'blur' verifica daca e sau nu cazul sa fie enabled butonul de submit 
checkFormContact = function() {
	enableContactButton();
	var spans = document.getElementById('formular-contact').getElementsByTagName('span');
	for (var i=0 ; i<spans.length ; i++) {
		if (spans[i].className == 'form-error') { disableContactButton(); }
	}
	if ((!document.getElementById('formular-contact').numec.value) || (!document.getElementById('formular-contact').subiectc.value) || (!document.getElementById('formular-contact').mesajc.value)) { disableContactButton(); }
}


// schimba class cum era inainte de onfocus
// daca e obligatoriu (required in class in XHTML), face verificari
LabelBlurContact = function() {
	var spanClass = this.parentNode.parentNode.className.split(' ');
	this.parentNode.parentNode.className = spanClass[0];
	if (this.className == 'required') {
		var checker = this.getAttribute('name');
		switch (checker) {
			case 'numec' : this.parentNode.parentNode.className = Checknume(this); break;
			case 'subiectc' : this.parentNode.parentNode.className = Checksubiect(this); break;
			case 'emailc' : this.parentNode.parentNode.className = Checkemail(this); break;
			case 'mesajc' : this.parentNode.parentNode.className = Checkmesaj(this); break;
		}
	}
	// pentru stabilirea statusului enabled/disabled
	checkFormContact();
}

/*PREPARE FORM*/
setupContact = function() {
	var labels = document.getElementsByTagName('label');
	for (var i=0 ; i<labels.length ; i++) {
		for (var j=0 ; j<labels[i].childNodes.length ; j++) {
			// adauga event pentru onfocus si onblur
			if ((labels[i].childNodes[j].tagName == 'INPUT') || (labels[i].childNodes[j].tagName == 'TEXTAREA')) {
				var temp = labels[i].childNodes[j];
				addEvent(temp, 'focus', LabelFocus);
				addEvent(temp, 'blur', LabelBlurContact);
			}
		}
	}
	// hijack submit. e posibil doar daca sunt completate corect campurile
	document.getElementById('formular-contact').onsubmit = function() {
	//pregateste datele pentru xmlhttprequest in format de GET php
		var data = 'nume=';
		data += document.getElementById('formular-contact').numec.value;
		data += '&email=';
		data += document.getElementById('formular-contact').emailc.value;
		data += '&subiect=';
		data += document.getElementById('formular-contact').subiectc.value;
		data += '&mesaj=';
		data += document.getElementById('formular-contact').mesajc.value;
		data += '&a=contact';

		// verifica & trimite
		var error = 0;

		var spans = document.getElementById('formular-contact').getElementsByTagName('span');
		for (var i=0 ; i<spans.length ; i++) {
			if (spans[i].className == 'form-error') error = 1;
		}
		
		if ((!document.getElementById('formular-contact').numec.value) || (!document.getElementById('formular-contact').mesajc.value) || (!document.getElementById('formular-contact').subiectc.value)) error = 1;
		if (!error) {
			// le trimite
			submitContact(data);
			pleaseWaitContact();
			// pentru a preveni dublu submit
			disableContactButton();
		} 

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

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


function openInNewWindow (href) {
	var newWindow = window.open(href, '_blank');
}


setup = function () {
	
	if (document.getElementById("formular-contact")) setupContact();
	if (document.getElementById("galerie")) initLightbox(); 
	
	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];
			if (link.className.indexOf("extern") != -1) {
				link.onclick = function() { openInNewWindow(this.href); return false; }
			}
			if ((/\btoggle-caracteristici\b/.exec(link.className))) {
				link.href="#";
				link.parentNode.getElementsByTagName("ul")[0].className += " hidden";
				link.onclick = function() {toggleDetalii(this); return false;}
			}
		}
	}
}
	

addEvent(window, 'load', setup);
