/*\------------------------------------------------------------------------
	
	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("Η εφαρμογή δε μπορεί να συνδεθεί με το server!\n"+
				  "Error detail : " + errv.message);
		}
	}
}


obj.user = {
	
	id		:	null,
	type	:	null,
	medium	:	null,
	page	:	null,
	
	blog	:	{
		
		add	:	function(id){
			try{
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				var url = "/blog/" + id  + "/add/index.html";
				var pid = arguments[1];
				obj.user.page =  (pid == undefined)	? "" : 	pid;
				obj.AJAX.httpRequest("GET", url, true, obj.user.handleRequest);
			}
			catch(err){
				alert("An error occured!\n"+
					  "Error detail : " + err.message);
			}
		},
	
		remove	:	function(id){
			try{
				if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
				var url = "/blog/" + id  + "/remove/index.html";
				var pid = arguments[1];
				obj.user.page =  (pid == undefined)	? "" : 	pid;
				obj.AJAX.httpRequest("GET", url, true, obj.user.handleRequest);
			}
			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 'blog'		: obj.user.toogle(objt); break;
					default			: obj.user.toogle(objt); break;
				}
			}
		}
	},
	
	toogle	:	function(o){
		var action = o.action;
					
		var el = $("fav"+obj.user.id);
		el.className = 'hint';
		el.innerHTML = o.hint;
					
		Effect.Pulsate(el);
	},
	
	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);
	},
	showlogin	:	function(){
		var el = $('login');
		if(el)
			el.style.display = ('block'==el.style.display)?'none':'block';
	}
}

obj.feed	=	{
	
	replyDIV	:	null,
	
	add	:	function(rss){
		try{
			if ("" == rss) throw new Error("url CANNOT BE EMPTY");
			var url = "/addfeed.html";
			obj.feed.replyDIV = "reply-msg";
			obj.feed.page =  "add";
			obj.feed.preloader(obj.feed.replyDIV, "loading")
			
			obj.AJAX.httpRequest("POST", url, true, obj.feed.handleRequest, 
								 "feed="+encodeURIComponent(rss));
			
		}
		catch(err){
			alert("An error occured!\n"+
				  "Error detail : " + err.message);
		}
		
	},
	
	
	claim	:	function(id, reply){
		try{
			if ("" == id) throw new Error("id CANNOT BE EMPTY"); else obj.user.id = id;
			var url = "/blog/" + id  + "/claim/index.html";
			obj.feed.replyDIV = reply;
			obj.feed.page =  "claim";
			obj.feed.preloader(obj.feed.replyDIV, "claim-load")
			obj.AJAX.httpRequest("GET", url, true, obj.feed.handleRequest);
		}
		catch(err){
			alert("An error occured!\n"+
				  "Error detail : " + err.message);
		}
		
	},
	
	preloader	:	function(div, style){
		try{
			var el = $(div);
			if (!el) throw new Error("el is not found"); 
			el.className = style;
			el.innerHTML = 'Ανάγνωση του RSS';
		}
		catch(errv){
			alert("Η εφαρμογή δε μπορεί να συνδεθεί με το server!\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();
				switch (obj.feed.page){
					case 'add'		: obj.feed.pingAddBlog(objt); break;
					case 'claim'	: obj.feed.pingClaimBlog(objt); break;
					default			: obj.feed.pingAddBlog(objt); break;
				}
			}
		}
	},
	
	pingAddBlog	:	function(o){
		var el = $(obj.feed.replyDIV);
		if(o.err != ""){
			el.className = 'error';
			el.innerHTML = o.err;
		}
		else{
			el.className = 'success';
			el.innerHTML = o.reply;
		}
	},

	pingClaimBlog	:	function(o){
		var el = $(obj.feed.replyDIV);
		if(o.err != ""){
			el.className = 'claim-fail';
			el.innerHTML = o.err;
		}
		else{
			el.className = 'claim-success';
			el.innerHTML = o.reply;
		}
	}
}




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);
	}
};