/*\------------------------------------------------------------------------
	
	AJAX Object

	Handles the XMLHTTPRequests
	 
------------------------------------------------------------------------\*/

if (!obj) { var obj = new Object(); };


obj.AJAX = {
	request	:	null,
	
	httpRequest	:	function(reqType, url, asynch, respHandle){
		if (window.XMLHttpRequest)
			this.request = new XMLHttpRequest;
		else if(window.ActiveXObject){
			this.request = new ActiveXObject("Msxml2.XMLHTTP");
			if(!this.request)
				this.request = new ActiveXObject("Microsoft.XMLHTTP");
		}
		if(this.request){
			if(reqType.toLowerCase() != "post")
				this.initReq(reqType, url, asynch, respHandle);
			else{
				var args = arguments[4];
				if(args!=null && args.length > 0)
					this.initReq(reqType, url, asynch, respHandle, args);
			}
		}
		else
			alert("XMLHTTP not present!");
	},

	initReq	:	function(reqType, url, bool, respHandle){
		try{
			this.request.onreadystatechange = respHandle;
			this.request.open(reqType, url, bool);
			if(reqType.toLowerCase() == "post"){
				this.request.setRequestHeader("Content-Type",
					"application/x-www-form-urlencoded; charset=UTF-8");
				this.request.send(arguments[4]);
			}	
			else
				this.request.send(null);
		}
		catch(errv){
			alert("the application cannot connect to the server right now!\n"+
				  "Error detail : " + errv.message);
		}
	}
}


obj.channel	=	{
	
	ctg	:	[],
		
	add	:	function(feed){
		var ctg = $('category-list');
		var cnt = 0;
		for (var i=0; i<ctg.childNodes.length; i++)
			if(ctg.childNodes[i].nodeName == "SPAN")
				for (var j=0;j<ctg.childNodes[i].childNodes.length;j++)
					if(ctg.childNodes[i].childNodes[j].nodeName == "INPUT"){
						var input = ctg.childNodes[i].childNodes[j];
						if (input.checked) {obj.channel.ctg[cnt] = input.value; cnt++;}
					}
		try{
			if ("" == feed) throw new Error("Το URL δε μπορεί να είναι κενό");
			var url = "/channel/add/index.html";
			obj.AJAX.httpRequest("POST", url, true, obj.channel.handleRequest, "feed="+encodeURIComponent(feed)+"&category="+encodeURIComponent(obj.channel.ctg));
			obj.channel.preloader('return-msg', 'loading');
		}
		catch(err){
			alert("ΠΑΡΟΥΣΙΑΣΤΗΚE ΣΦΑΛΜΑ!\n"+
				  "" + err.message);
		}
	},
	
	preloader	:	function(div, style){
		try{
			var el = $(div);
			if (!el) throw new Error("el is not found"); 
			el.className = style;
			el.innerHTML = 'Connecting to the server ... ';
		}
		catch(errv){
			alert("the application cannot connect to the server right now!\n"+
				  "Error detail : " + errv.message);
		}
	},
	
	handleRequest	:	function(){
		if(obj.AJAX.request.readyState == 4){
			if(obj.AJAX.request.status == 200){
				var resp = obj.AJAX.request.responseText;
				var func = new Function("return "+resp);
				var objt = func();
				
				//REFRESH THE TEXTAREA WITH THE NEW TAGS
				var msgDIV = $('return-msg');
				msgDIV.className = (objt.success == true) ? 'success' : 'error';
				msgDIV.innerHTML = objt.msg;
				Effect.Pulsate(msgDIV);
			}
		}
	}
}



obj.user = {
	
	id		:	null,
	type	:	null,
	medium	:	null,
	page	:	null,
	
	channel	:	{
		
		add	:	function(id){
			try{
				obj.user.medium	= 'channel';
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				
				var url = "/channel/" + id  + "/add/index.html";
				var pid = arguments[1];
				obj.user.page =  (pid == undefined)	? "" : 	pid;
				obj.AJAX.httpRequest("GET", url, true, obj.user.handleRequest);
				if (obj.user.page == '') obj.user.preloader('hint', 'hint-load');
			}
			catch(err){
				alert("An error occured!\n"+
					  "Error detail : " + err.message);
			}
		},
	
		remove	:	function(id){
			try{
				obj.user.medium	= 'channel';
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				
				var url = "/channel/" + id  + "/remove/index.html";
				var pid = arguments[1];
				
				obj.user.page =  (pid == undefined)	? "" : 	pid;
				obj.AJAX.httpRequest("GET", url, true, obj.user.handleRequest);
				if (obj.user.page == '') obj.user.preloader('hint', 'hint-load');
			}
			catch(err){
				alert("An error occured!\n"+
					  "Error detail : " + err.message);
			}
		}
	},
	
	episode	:	{
		
		add	:	function(id, type){
			try{
				obj.user.medium	= 'episode';
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				if ("" == type) throw new Error("type CANNOT BE EMPTY"); else obj.user.type = type;
				
				var url = "/" + type + "/" + id  + "/add/index.html";
				var pid = arguments[2];
				
				obj.user.page =  (pid == undefined)	? "" : 	pid;
				obj.AJAX.httpRequest("GET", url, true, obj.user.handleRequest);
				if (obj.user.page == '') obj.user.preloader('hint', 'hint-load');
			}
			catch(err){
				alert("An error occured!\n"+
					  "Error detail : " + err.message);
			}
		},
	
		remove	:	function(id, type){
			try{
				obj.user.medium	= 'episode';
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				if ("" == type) throw new Error("type CANNOT BE EMPTY"); else obj.user.type = type;
				
				var url = "/" + type + "/" + id  + "/remove/index.html";
				var pid = arguments[2];
				
				obj.user.page =  (pid == undefined)	? "" : 	pid;
				obj.AJAX.httpRequest("GET", url, true, obj.user.handleRequest);
				if (obj.user.page == '') obj.user.preloader('hint', 'hint-load');
			}
			catch(err){
				alert("An error occured!\n"+
					  "Error detail : " + err.message);
			}
		}
	},
	
	tags	:	{
		
		add	:	function(id, tags){
			try{
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				
				var url = "/tags/add.html";
				
				obj.AJAX.httpRequest("POST", url, true, obj.user.tags.handleRequest, "id="+encodeURIComponent(obj.user.id)+"&tags="+encodeURIComponent(tags));
				obj.user.preloader('taghint', 'hint-load');
			}
			catch(err){
				alert("An error occured!\n"+
					  "Error detail : " + err.message);
			}
		},
		
		handleRequest	:	function(){
			if(obj.AJAX.request.readyState == 4){
				if(obj.AJAX.request.status == 200){
					var resp = obj.AJAX.request.responseText;
					var func = new Function("return "+resp);
					var objt = func();
					
					//REFRESH THE TEXTAREA WITH THE NEW TAGS
					$('tagInput').value = objt.tags;
					
					//PRINT THE HINT MESSAGE
					var hintDiv = $("taghint");
					hintDiv.className = 'hint';
					hintDiv.innerHTML = objt.hint;
					Effect.Pulsate(hintDiv);

					
				}
			}
		}
		
	},
	
	handleRequest	:	function(){
		if(obj.AJAX.request.readyState == 4){
			if(obj.AJAX.request.status == 200){
				var resp = obj.AJAX.request.responseText;
				var func = new Function("return "+resp);
				var objt = func();
				
				switch (obj.user.page){
					case 'personal'	: obj.user.hideParent(); break;
					case 'latest'	: obj.user.toggleHomepageEntries(objt); break;
					case 'favorite'	: obj.user.toogleButtons(objt); break;
					default			: obj.user.toogleHintsAndButtons(objt); break;
				}
			}
		}
	},
	
	toogleHintsAndButtons	:	function(o){
		var action = o.action;
					
		var hintDiv = $("hint");
		hintDiv.className = 'hint';
		hintDiv.innerHTML = o.hint;
					
		var actImgDiv = $("action-image");
		obj.user.reset(actImgDiv);
					
		var a = document.createElement('a');
		a.innerHTML = '';
		a.href = 'javascript:void%200;';
		a.onclick = function(){
			obj.user.reset(actImgDiv);
			if("channel" == obj.user.medium)
				('add' == action) ? obj.user.channel.add(obj.user.id) : obj.user.channel.remove(obj.user.id);
			else
				('add' == action) ? obj.user.episode.add(obj.user.id, obj.user.type) : obj.user.episode.remove(obj.user.id, obj.user.type);
		}
				
		var img = document.createElement('img');					
		img.src = "/_img/" + o.src;
		img.alt = ('add' == action) ? "Προσθήκη" : "Αφαίρεση" ;
		a.appendChild(img);
		actImgDiv.appendChild(a);
					
		Effect.Pulsate(hintDiv);
	},
	
	hideParent	:	function(){
		Effect.BlindUp($('p' + obj.user.id));
	},
	
	toggleHomepageEntries	:	function(o){		
		var img = $('img' + obj.user.id);
		
		for (var i = 0; i < img.childNodes.length ; i++){
			var child = img.childNodes[i];
			if ( (child.nodeName == "A") && ( 'undefined' != child.onclick ) ){
				obj.user.reset(child);
				var a = document.createElement('a');
				a.innerHTML = '';
				a.href = 'javascript:void%200;';
				a.onclick = function(){
					obj.user.reset(child);
					('add' == o.action) ? obj.user.episode.add(obj.user.id, obj.user.type, 'latest') : obj.user.episode.remove(obj.user.id, obj.user.type, 'latest');
				}
				var img = document.createElement('img');					
				img.src = "/_img/btn-" + o.action  + "-small.gif";
				img.alt = ('add' == o.action) ? "Προσθήκη" : "Αφαίρεση" ;
				a.appendChild(img);
				child.appendChild(a);
			}
		}
		
		var el = $('l' + obj.user.id);
		Effect.Pulsate(el);
	},
	
	toogleButtons	:	function(o){

		var action = o.action;
					
		var actImgDiv = $('f' + obj.user.id);
		obj.user.reset(actImgDiv);
					
		var a = document.createElement('a');
		a.innerHTML = '';
		a.href = 'javascript:void%200;';
		a.onclick = function(){
			obj.user.reset(actImgDiv);
			if("channel" == obj.user.medium)
				('add' == action) ? obj.user.channel.add(obj.user.id) : obj.user.channel.remove(obj.user.id);
			else
				('add' == action) ? obj.user.episode.add(obj.user.id, obj.user.type) : obj.user.episode.remove(obj.user.id, obj.user.type);
		}
				
		var img = document.createElement('img');					
		img.id = 'f' + obj.user.id;
		img.src = "/_img/btn-" + o.action  + ".png";
		img.alt = ('add' == action) ? "Προσθήκη" : "Αφαίρεση" ;
		a.appendChild(img);
		actImgDiv.appendChild(a);
					
		Effect.Pulsate(actImgDiv);
	},
	
	preloader	:	function(div, style){
		var el = $(div);
		el.className = style;
		el.innerHTML = 'Σύνδεση με server';
	},
	
	reset	:	function(el){
		if(el!=null && el.hasChildNodes())
			for(var i=0; i< el.childNodes.length; i++)
				el.removeChild(el.firstChild);
	}
}

obj.ratings	=	{
	add	:	function(id, rating){
		try{
			if ("" == id) throw new Error("episode id CANNOT BE EMPTY"); 
			if ("" == rating) throw new Error("rating CANNOT BE EMPTY"); 
			var url = "/rating/add.html";
				
			
			obj.AJAX.httpRequest("POST", url, true, obj.ratings.handleRequest, 
								 "id="+encodeURIComponent(id)+
								 "&rating="+encodeURIComponent(rating));
			
			obj.ratings.preloader('rating-msg', 'rating-load');
		}
		catch(err){
			alert("An error occured!\n"+
				  "Error detail : " + err.message);
		}
	},
	
	preloader	:	function(div, style){
		var el = $(div);
		el.className = style;
		el.innerHTML = 'Σύνδεση με server';
	},
	
	
	handleRequest	:	function(){
		if(obj.AJAX.request.readyState == 4){
			if(obj.AJAX.request.status == 200){
				var resp = obj.AJAX.request.responseText;
				var func = new Function("return "+resp);
				var objt = func();
					
				
				var ratingDIV = $("rating");
				//RESET THE RATING DIV
				obj.ratings.reset(ratingDIV);
				
				//PRINT NEW MESSAGE ON MSG DIV
				var msgDIV = $("rating-msg");
				obj.ratings.reset(msgDIV);
				msgDIV.className = "rate-success";
				msgDIV.innerHTML = objt.votes + " ψήφοι, " + objt.rating+ " στα 5";
				Effect.Pulsate(msgDIV);
				
				//PRINT THE NEW RATINGS
				var ul = document.createElement('ul');	
				ul.id = "stars";
				var li = document.createElement('li');
				li.className = 'current-rating';
				li.title = 'Βαθμολογία ' + objt.rating + '/5 Stars';
				li.style.width = objt.width ;
				li.innerHTML = 'Βαθμολογία ' + objt.rating + '/5 Stars';
				ul.appendChild(li);
				ratingDIV.appendChild(ul);
			}
		}
	},
	
	error	:	function(){
		var msgDIV = $("rating-msg");
		msgDIV.className = "rate-error";
		msgDIV.innerHTML = "Πρέπει να είσαι μέλος του SYNC για να ψηφίσεις!";
		Effect.Pulsate(msgDIV);
	},
	
	reset	:	function(el){
		if(el!=null && el.hasChildNodes())
			for(var i=0; i< el.childNodes.length; i++)
				el.removeChild(el.firstChild);
	}
}


obj.site	=	{
	hideinfo	:	function(el){
		Effect.BlindUp($(el).id);
		obj.cookie.create('rv', true, 300);
	}
}



obj.cookie = {
	domain	: location.hostname.replace(/^www\./,''),
	create		: function(name, value, days) {
		if(days){
			var date  = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = "sync-" + name + "=" + value + expires + "; path=/;domain=" + this.domain;
	},
	read	: function(name) {
		var p = "sync-" + name+"="; 
		var c = document.cookie;
		var i = c.indexOf(p);
		if (i==-1) { return ''; };
		var e=c.indexOf(";",i+p.length);
		if (e==-1) {e = c.length; };
		return unescape(c.substring(i+p.length,e));
	},
	erase	: function(name) {
		obj.cookie.createCookie(name,"",-1);
	}
};