/** 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);


/*************************************************************************************/

function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}


/*************************************************************************************

	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 urlRequests = "/php/xmlHTTP.php?";

// obiecte xmlHttp
var httpRequests = 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;
}


/************************************************************************************/

/** IV Object
		showcase
		connect
		misc
		
*************************************************************************************/

var IV = {
	
	showcase : {
		
		transitioning : false,
		
		init : function () {
			var showcase = $('showcase');
			var thumbsContainer = IV.misc.getElementsByClass('thumbs', showcase, 'ul')[0];
			var links = thumbsContainer.getElementsByTagName('a');
			for (var j=0; j<links.length; j++) {
				links[j].onclick = function () { return IV.showcase.toggle(this); }
			}
			
			/*if ($('showcase-banners')) {
				var bannersContainer = $('showcase-banners');
				var bCW = bannersContainer.parentNode.offsetWidth - (15 * 2 + 3 * 2 + 6);
				var bCH = bannersContainer.parentNode.offsetHeight - (13 * 2 + 3 * 2 + 20);
				bannersContainer.style.width = bCW + "px"; 
				bannersContainer.style.height = bCH + "px"; 
			}*/
		},
		
		toggle : function (generator) {
			if (generator.parentNode.className == 'active' || this.transitioning == true)
				return false;
			
			this.transitioning = true;
			
			var thumbsContainer = generator.parentNode.parentNode;
			var activeLi = IV.misc.getElementsByClass('active',thumbsContainer,'li')[0];
			var nextLi = generator.parentNode;
			var nextImg = generator.href;
			
			IV.misc.removeClass(activeLi, 'active');
			IV.misc.addClass(nextLi, 'active');
			
			var html = (generator.className.indexOf('html') >= 0) ? true : false;
			
			IV.showcase.transition (nextImg, html);
					
			return false;
		},
		
		transition : function (nextImg, html) {
			var bigPic = $('screenshot');
			
			if (html) {
				IV.misc.removeClass($("showcase-banners"), 'hidden');
				$("showcase-banners").style.left = "3px";
			} else {
				if ($("showcase-banners") && $("showcase-banners").className.indexOf('hidden') < 0) {
					IV.misc.addClass($("showcase-banners"), 'hidden');
					$("showcase-banners").style.left = "-1000em";
				}
			}
			
			bigPic.src = nextImg;
			
			this.transitioning = false;
		}
		
	},
	
	connect : {
		
		handleResponse : function () {
			if (httpRequests.readyState == 4) {
				
				if (httpRequests.status == 200) {
					output = httpRequests.responseText;
				} else {
					output = "<h4>Error</h4>";
				}
				
				var feedback = document.createElement("div");
				feedback.setAttribute('id', 'feedback-connect');
				feedback.innerHTML = output;
				
				var form = $('connect-form');
				if ($('connect')) {
					var container = $('connect');
				} else {
					var container = IV.misc.getElementsByClass('primary',$('main'),'div')[0];
					var intro = IV.misc.getElementsByClass('intro',container,'p')[0];
					container.removeChild(intro);
				}
				container.replaceChild(feedback,form);
			}
		},
		
		init : function() {
			
			var button = $('submit-connect');
			button.onclick = function () { return IV.connect.checkErrors(); }
			
			var form = $('connect-form');
			form.onsubmit = function () {
				if (!IV.connect.checkErrors())
					return false;
					
				var data = '&nume=' + escape(form.numec.value);
				data += '&subiect=' + escape(form.subiectc.value);
				data += '&email=' + escape(form.emailc.value);
				data += '&mesaj=' + escape(form.mesajc.value);
				data += '&page=' + form.pagec.value;
				
				IV.connect.send (data);
				
				return false;
			}
			
			var requiredFields = IV.misc.getElementsByClass('required',form);
			for (var i=0; i<requiredFields.length; i++) {
				addEvent(requiredFields[i], 'blur', IV.connect.blurField);
			}
		},
		
		checkErrors : function () {
			var form = $('connect-form');
			var errors = false;
			var requiredFields = IV.misc.getElementsByClass('required',form);
			
			for (var i=0; i<requiredFields.length; i++) {
				fieldName = requiredFields[i].name;
				if (!IV.connect.check(fieldName))
					errors = true;
			}
			
			if (errors) return false;
			
			return true
		},
		
		blurField : function () {
			var form = $('connect-form');
			var fieldName = this.name;
			var fieldContainer = (fieldName != 'verificarec') ? form[fieldName].parentNode.parentNode : form[fieldName].parentNode.parentNode.parentNode;
			
			if (IV.connect.check(fieldName)) IV.misc.removeClass(fieldContainer, 'form-error');
		},
		
		check : function (fieldName) {
			var form = $('connect-form');
			var fieldValue = form[fieldName].value;
			var field = form[fieldName];
			var fieldContainer = (fieldName != 'verificarec') ? field.parentNode.parentNode : field.parentNode.parentNode.parentNode;
			
			var correct = true;
			
			switch (fieldName) {
				case 'emailc' : 
					correct = IV.connect.validateEmail(fieldValue);
					break;
				case 'numec' :
					correct = IV.connect.validateName(fieldValue);
					break;
				case 'verificarec' :
					correct = (fieldValue == 24) ? true : false;
					break;
				default :
					correct = IV.connect.validateValue(fieldValue);
			}
			
			if (correct) {
				IV.misc.removeClass(fieldContainer,'form-error');
				return true;
			} else {
				IV.misc.addClass(fieldContainer,'form-error');
				return false;
			}
		},
		
		validateEmail : function (fieldValue) {
			var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			if (!filter.test(fieldValue)) return false;
			return true;		
		},
		
		validateName : function (fieldValue) {
			if ((!fieldValue) || (fieldValue.match(/[0-9]/))) return false;
			return true;
		},
		
		validateValue : function (fieldValue) {
			if (!fieldValue) return false;
			return true;
		},
		
		send : function (vars) {
			var query = "src=connect" + vars;
			httpRequests.open("GET", urlRequests + query, true);
			httpRequests.onreadystatechange = IV.connect.handleResponse;
			httpRequests.send(null);
		}
		
	},
	
	cookies : {
		getCookie : function ( name ) {
			var start = document.cookie.indexOf( name + "=" );
			var len = start + name.length + 1;
			if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
				return null;
			}
			if ( start == -1 ) return null;
			var end = document.cookie.indexOf( ';', len );
			if ( end == -1 ) end = document.cookie.length;
			return unescape( document.cookie.substring( len, end ) );
		},

		setCookie : function ( name, value, expires, path, domain, secure ) {
			var today = new Date();
			today.setTime( today.getTime() );
			if ( expires ) {
				expires = expires * 1000 * 60 * 60 * 24;
			}
			var expires_date = new Date( today.getTime() + (expires) );
			document.cookie = name+'='+escape( value ) +
				( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
				( ( path ) ? ';path=' + path : '' ) +
				( ( domain ) ? ';domain=' + domain : '' ) +
				( ( secure ) ? ';secure' : '' );
		},

		deleteCookie : function ( name, path, domain ) {
			if ( getCookie( name ) ) document.cookie = name + '=' +
					( ( path ) ? ';path=' + path : '') +
					( ( domain ) ? ';domain=' + domain : '' ) +
					';expires=Thu, 01-Jan-1970 00:00:01 GMT';
		}
	},
	
	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;
		},
		
		getElementsByClass : function (searchClass,node,tag) {
			var classElements = new Array();
			if ( node == null )
				node = document;
			if ( tag == null )
				tag = '*';
			var els = node.getElementsByTagName(tag);
			var elsLen = els.length;
			var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
			for (i = 0, j = 0; i < elsLen; i++) {
				if ( pattern.test(els[i].className) ) {
					classElements[j] = els[i];
					j++;
				}
			}
			return classElements;
		},
		
		insertAfter : function (parent, node, referenceNode) {
			parent.insertBefore(node, referenceNode.nextSibling);
		},
		
		removePx : function (size) {
			return size.substr(0, size.length - 2) * 1;
		},
		
		getElementsByClass : function (searchClass,node,tag) {
			var classElements = new Array();
			if ( node == null )
				node = document;
			if ( tag == null )
				tag = '*';
			var els = node.getElementsByTagName(tag);
			var elsLen = els.length;
			var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
			for (i = 0, j = 0; i < elsLen; i++) {
				if ( pattern.test(els[i].getAttribute('class')) ) {
					classElements[j] = els[i];
					j++;
				}
			}
			return classElements;
		}
	},
	
	fixie : {
		fauxHover : function(el) {
			addEvent(el, 'mouseover', function() {this.className+="fauxhover";})
			addEvent(el, 'mouseout', function() {this.className=this.className.replace(new RegExp("fauxhover\\b"), "");})
		},
		
		fixTransparentPng : function() {
			var buttons = IV.misc.getElementsByClassName(document, "a", "button");
			
			if (buttons.length) {
				for (var i=0; i<buttons.length; i++) {
					var img = buttons[i].firstChild;
			
					var src = img.src;
					
					img.style.visibility = "hidden";
					
					var span = document.createElement("SPAN");
					span.style.display = "block";
					span.style.width = img.width;
					span.style.height = img.height;
					span.style.cursor = "hand";
					span.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')"; 
					img.replaceNode(span);
				}
			}
		}
	}
}

	


/*************************************************************************************/

/** CONNECT FORM	
				
**************************************************************************************/

setupConnectExpand = function () {
	var lnk = $('connect-expand');
	addEvent(lnk, 'mousedown', function () { expandConnect(); });
	lnk.onclick = function () { return false; }
}


expandConnect = function () {
	var cont = $('connect-continua');
	cont.style.display = 'none';
	var connect = $('connect');
	IV.misc.removeClass(connect, 'prepared');
}


/*************************************************************************************/

setup = function() {
	
	if (!document.getElementsByTagName) return;
	
	if ($('showcase')) IV.showcase.init();
	if ($('connect-continua')) setupConnectExpand();
	if ($('connect-form')) IV.connect.init();
		
}

addEvent(window, 'load', setup);

//if (window.attachEvent) window.attachEvent("onload", IV.fixie.fauxHover);
