﻿/*
Copyright 2005 Netvibes
Author : Florent FREMONT
*/

App.Modules.RssReader = function(obj){
	var data = obj.dataObj.data;
	var localData = new Object();
	var el = obj.elm_moduleContent;
	var self = this;
	
	this.edit = function() {
		var editContent = obj.elm_editContent;
		var rndChkBox = Math.round(Math.random()*1000);
		var content = '<table cellpadding="0" cellspacing="0" class="formTable">'+
					'<tr>'+
					'<td><span class="formLabel">'+App.Loc.RssReader_edit_title+' :</span></td>'+
					'<td><input type="text" class="inputClean" accesskey="t" maxlength="100" value="'+obj.dataObj.title+'" style="width:120px"/></td>'+
					'<td><input type="submit" value="'+App.Loc.editSave+'" class="buttonClean"/></td>'+
					'</tr>'+
					'<tr>'+
						'<td><span class="formLabel">Color :</span></td>'+
						'<td class="postItcolorSelection">'+
							'<div style="background-color:#FFF;" myColor="#FFF"></div>'+
							'<div style="background-color:lightyellow;" myColor="lightyellow"></div>'+
							'<div style="background-color:#EEFFE0;" myColor="#EEFFE0"></div>'+
							'<div style="background-color:#FFE0E1;" myColor="#FFE0E1"></div>'+
							'<div style="background-color:#EFF5FF;" myColor="#EFF5FF"></div>'+
							'<div style="background-color:#FEE8BD;" myColor="#FEE8BD"></div>'+
						'</td>'+
					'</tr>'+
					'<tr>'+
					'<td><span class="formLabel">'+App.Loc.RssReader_edit_feed+' :</span></td>'+
					'<td><input type="text" class="inputClean" accesskey="t" maxlength="150" value="'+obj.dataObj.feedUrl+'" style="width:120px"/></td>'+
					'<td><input type="submit" value="'+App.Loc.editSave+'" class="buttonClean"/></td>'+
					'</tr>'+
					'<tr>'+
					'<td><span class="formLabel">'+App.Loc.RssReader_edit_nbItems+' :</span></td>'+
					'<td>'+
						'<select style="width:45px">'+getOptionList()+'</select>'+
					'</td>'+
					'<td></td>'+
					'</tr>'+
					'<tr>'+
					'<td><span class="formLabel">'+App.Loc.RssReader_edit_links+' :</span></td>'+
					'<td colspan="2">'+
						'<input id="openLinks_'+rndChkBox+'" type="checkbox"/><label for="openLinks_'+rndChkBox+'" style="margin-left:5px">'+App.Loc.RssReader_edit_openLinks+'</label>'+
					'</td>'+
					'</tr>'+
					/*'<tr>'+
					'<td><span class="formLabel">Date :</span></td>'+
					'<td>'+
						'<input type="checkbox">'+
					'</td>'+
					'<td></td>'+
					'</tr>'+*/
				'</table>';
		editContent.innerHTML = content;
		
		var table = editContent.firstChild.firstChild;
		var colorsDiv = table.childNodes[1].childNodes[1];
		var tr1 = table.childNodes[0];
		var tr2 = table.childNodes[2];
		
		if (App.mode=='featuredPage') {
			tr1.style.display = "none";
			tr2.style.display = "none";
		}
		
		var tr3 = table.childNodes[3];
		var tr4 = table.childNodes[4];
		var input4 = tr4.childNodes[1].firstChild;
		input4.checked = (data.openOutside==0 || !data.openOutside) ? false : true;
		input4.onclick = function() {
			data.openOutside = (this.checked) ? 1 : 0;
			obj.save();
		}
		
		var input1 = tr1.childNodes[1].firstChild;
		var inputButton1 = tr1.childNodes[2].firstChild;
		var input2 = tr2.childNodes[1].firstChild;
		var inputButton2 = tr2.childNodes[2].firstChild;
		var input3 = tr3.childNodes[1].firstChild;
		
		inputButton1.onclick = function() {
			obj.dataObj.title = input1.value;
			self.setFeedTitle();
			obj.save();
		}
		inputButton2.onclick = function() {
			if (input2.value.trim()!=obj.dataObj.feedUrl && input2.value.trim()!='') {
				obj.dataObj.title = '';
				obj.elm_title.innerHTML = App.Loc.loading;
				
				input1.disabled = true;
				inputButton1.disabled = true;
				input3.disabled = true;
				input4.disabled = true;
				
				el.innerHTML = App.Loc.loading;
				App.addNewFeed(input2.value.trim(), addFeedResponse);
			}
		}
		input3.onchange = function() {
			data.nbTitles = this.value;
			self.setFeedTitle();
			displayItems();
			obj.save();
		}
		
		function getOptionList() {
			if (localData.feed) {
				var c='';
				var ln = localData.feed.items.length;
				for (var z=0; z<ln; z++) {
					if ((z+1)==data.nbTitles) {
						c+='<option value="'+(z+1)+'" selected>'+(z+1);
					} else {
						c+='<option value="'+(z+1)+'">'+(z+1);
					}
				}
				return c;
			}
		}
		
		function addFeedResponse(response, feedUrl, id) {
			if (response.responseText == '' || response.responseXML.documentElement==null || response.responseXML.documentElement.nodeName=="parsererror") { // si le flux n'est pas valide
				obj.elm_title.innerHTML = App.Loc.error;
				el.innerHTML = App.Loc.feedNotValid;
			} else {
				App.Nav.isFeedsUpdated = true;
				setTimeout(App.Nav.openMyFeeds,1);
			
				data.feedId = id;
				obj.dataObj.feedUrl = feedUrl;
				updateRSSFeed(response);
			}
		}
		
		function updateRSSFeed(response) {
			input1.disabled = false;
			inputButton1.disabled = false;
			input3.disabled = false;
			input4.disabled = false;
			displayRSSFeed(response);
			obj.save();
			input1.value = obj.dataObj.title;
			
			var td = input3.parentNode;
			var c = '<select style="width:45px">'+getOptionList()+'</select>';
			td.innerHTML = c;
			input3 = td.firstChild;
			input3.onchange = function() {
				data.nbTitles = this.value;
				displayItems();
				obj.save();
			}
		}
		
		// The color
		for (var z=0; z<colorsDiv.childNodes.length; z++) {
			colorsDiv.childNodes[z].onclick = function() {
				var coul = this.getAttribute("myColor");
				obj.elm_moduleHeader.style.backgroundColor = coul;
				data.color = coul;
				obj.save();
			}
		}
	}
	
	this.getItemNode = function(index) {
		var lis = el.getElementsByTagName("li");
		return lis[index].firstChild;
	}
	
	this.setAllAsRead = function() {
		displayItems();
		this.setFeedTitle();
	}
	
	function displayItems() {
		var divDiv = document.createElement("div");
		divDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%"><tr><td></td></tr></table>';
		var divUL = document.createElement("ul");
		divUL.className = "rssItemList";
		
		function manageMiddleClick(e) {
			saveClickStatus(e.currentTarget);
		}
		
		function saveClickStatus(elem) {
			var num = elem.parentNode.getAttribute("itemNum");
			if (localData.feed.history.postStatus[num]!=1) {
				localData.feed.history.postStatus[num] = 1;
				obj.dataObj.history = App.Rss.getHistoryString(localData.feed);
				obj.saveHistory();
				elem.style.color = "#777";
				self.setFeedTitle();
			}
		}
		
		for (var z=0; z<data.nbTitles; z++) {
			var divLI = document.createElement("li");
			divLI.setAttribute("itemNum", z);
			divLI.setAttribute("url", localData.feed.items[z].link);
			
			divLI.innerHTML = '<a href="'+localData.feed.items[z].link+'" target="_blank">'+localData.feed.items[z].title+'</a>';
			
			if (localData.feed.history.postStatus[z]==1) {
				divLI.firstChild.style.color = "#777";
			}
			
			//divLI.firstChild.attachEvent('onmousedown', manageMiddleClick);
			if (!Browser.isIE) Event.observe(divLI.firstChild, 'mousedown', manageMiddleClick, false);
			
			divLI.firstChild.onclick = function() {
				var itemNum = this.parentNode.getAttribute("itemNum");
				saveClickStatus(this);
				
				if (data.openOutside==0 || !data.openOutside || localData.feed.items[itemNum].link==null) {
					App.FeedReader.display({title: obj.dataObj.title, moduleLocalData:localData, moduleData:data, selectedItemIndex:itemNum, moduleObj:obj, contentObj:self});
					return false;
				} else {
					return true;
				}
			}
			divLI.firstChild.style.cursor = "pointer";
			divLI.firstChild.onmouseover = function() {
				this.style.textDecoration = "underline";
			}
			divLI.firstChild.onmouseout = function() {
				this.style.textDecoration = "none";
			}
			divUL.appendChild(divLI);
		}
		el.innerHTML = "";
		
		var td = divDiv.getElementsByTagName("td")[0];
		td.appendChild(divUL);
		
		/*var footer = document.createElement("div");
		footer.style.height = "2px";
		footer.style.backgroundColor = "#EFF5FF";
		
		divDiv.style.padding = "6px";*/
		el.appendChild(divDiv);
		//el.appendChild(footer);
	}
	
	this.setFeedTitle = function() {
		if (obj.dataObj.title=='')  obj.dataObj.title = localData.feed.title;
		obj.elm_title.innerHTML = '';
		var nbUnread = App.Rss.getHistoryNbNew(localData.feed, data.nbTitles);
		var extra = (nbUnread==0) ? '' : '&nbsp;<a href=""><span style="color:#900">('+nbUnread+')</span></a>';
		obj.elm_title.innerHTML = '<a href="'+localData.feed.htmlUrl+'" target="_blank"></a>'+extra;
		obj.elm_title.firstChild.appendChild(document.createTextNode(obj.dataObj.title));
		function killEvent(e) {e.cancelBubble = true;}
		//obj.elm_title.firstChild.attachEvent('onmousedown',killEvent);
		Event.observe(obj.elm_title.firstChild, 'mousedown', killEvent, false);
		
		
		// Added by dreamer12345
		function setAllAsReadOnMouseDown() {
			// Let's go to read mode
			for (var z=0; z<data.nbTitles; z++)
				localData.feed.history.postStatus[z] = 1;
			// Let's refresh all (the function setAllAsRead just does a refresh ;-))
			self.setAllAsRead();
			obj.dataObj.history = App.Rss.getHistoryString(localData.feed)
			obj.saveHistory();
		}
		// Attach the event only if the unread count is displayed
		if (nbUnread > 0) {
			//obj.elm_title.childNodes[2].attachEvent('onmousedown',setAllAsReadOnMouseDown);
			Event.observe(obj.elm_title.childNodes[2], 'mousedown', setAllAsReadOnMouseDown, false);
			}
	}
	
	function displayRSSFeed(response) {
		if (response.responseText == '' || response.responseXML.documentElement==null || response.responseXML.documentElement.nodeName=="parsererror") { // si le flux n'est pas valide			
			obj.elm_title.innerHTML = App.Loc.error;
			el.innerHTML = App.Loc.feedNotValid;
			obj.onLoadModule();
		} else {
			Utils.cleanWhitespace(response.responseXML.documentElement);
			obj.dataObj.currentServerRequest = null;
			
			localData.feed = new Feed(response);
			if (localData.feed.items.length>0) App.Rss.buildHistory(obj.dataObj.history, localData.feed);
			
			if (data.nbTitles==null) data.nbTitles=7;
			data.nbTitles = (localData.feed.items.length>data.nbTitles) ? data.nbTitles : localData.feed.items.length;
			
			self.setFeedTitle();
			
			displayItems();
			obj.onLoadModule();
		}
	}
	
	//el.style.padding = "1px 1px 0 1px";
	
	obj.refreshMode = true;
	
	if (obj.dataObj.title == "") obj.elm_title.innerHTML = App.Loc.loading;
	obj.dataObj.currentServerRequest = Request.sendGET(proxyURL+escape(obj.dataObj.feedUrl), displayRSSFeed);
	
	// The color...
	if (data.color!=null) obj.elm_moduleHeader.style.backgroundColor = data.color;
	
	function updateFeed(nocache) {
		obj.elm_title.innerHTML = '<span style="color:#36C">'+App.Loc.updating+'...</span>';
		if (nocache) {
			Request.sendGET(proxyURL+escape(obj.dataObj.feedUrl)+"&nocache=1&rnd="+Math.random(), displayRSSFeed);
		} else {
			Request.sendGET(proxyURL+escape(obj.dataObj.feedUrl)+"&rnd="+Math.random(), displayRSSFeed);
		}
	}
	
	this.refresh = function() {
		//updateFeed(true);
		updateFeed(false);
	}
	
	var rndUpdateTime = Math.round(60*1000*Math.random());
	setInterval(updateFeed, 1000*60*20+rndUpdateTime);
	
	obj.confirmOnClose = true;
	this.onClose = function() {
		return confirm("Are you sure you want to close this Rss?");
	}
}