<?xml version="1.0" encoding="UTF-8" ?>
<Module>
	<ModulePrefs 
		title="Gadget Monitor" 
		directory_title="Gadget Monitor - Keep Track Of Your Gadgets"
		description="This gadget allows you to monitor up to 10 of your gadgets to check for new users and new comments. If you are a gadget author and want to keep tabs on your users, this gadget will be useful to you. " 
		author="Matt Kruse" 
		author_email="gadget@mattkruse.com" 
		screenshot="http://www.javascripttoolbox.com/gadget/gadgetmonitor/gadgetmonitor.png" 
		thumbnail="http://www.javascripttoolbox.com/gadget/gadgetmonitor/gadgetmonitor_thumb.png"
		author_affiliation="Matt Kruse" 
		author_location="IL, USA" 
		author_link="http://www.JavascriptToolbox.com/" 
		height="100"
		> 
		<Require feature="dynamic-height" /> 
		<Require feature="setprefs" /> 
	</ModulePrefs>
		<UserPref name="url1" display_name="Gadget 1 Url:" required="true"/>
		<UserPref name="url2" display_name="Gadget 2 Url:"/>
		<UserPref name="url3" display_name="Gadget 3 Url:"/>
		<UserPref name="url4" display_name="Gadget 4 Url:"/>
		<UserPref name="url5" display_name="Gadget 5 Url:"/>
		<UserPref name="url6" display_name="Gadget 6 Url:"/>
		<UserPref name="url7" display_name="Gadget 7 Url:"/>
		<UserPref name="url8" display_name="Gadget 8 Url:"/>
		<UserPref name="url9" display_name="Gadget 9 Url:"/>
		<UserPref name="url10" display_name="Gadget 10 Url:"/>
		
		<UserPref name="fontsize" default_value="80%"/>

		<Content type="html"> 
		<![CDATA[ 
<script>
var dir_url = "http://www.javascripttoolbox.com/gadget/gadgetmonitor/content.php?hl=en&url=";
var ig_url = "http://www.google.com/ig/directory?url="
var prefs = new _IG_Prefs();
var gadgetcomments = {};
function getGadgetStats(i,url,callback) {
	fetchurl = dir_url + url;
	_IG_FetchContent(fetchurl,function(str) {
		var data = {title:"",numusers:0,starrating:"",numratings:0,comments:"",commentcount:0,commentdate:" "};
		// Gadget Title
		var title = /"gadget-title">([^<]+)/.exec(str);
		if (title && title.length && title.length>0) { data.title = title[1]; }
		// # of Users
		var users = str.match(/([,\< \d]+) users.*?\|[^\<]*(.*?\>)[^\>]*?(\d+) ratings/);
		if (users) { 
			data.numusers = users[1]; 
			data.starrating = users[2].replace(/\>[^\<]*/g,">");
			data.numratings = users[3];
		}
		// Comments
		var commentsStart = "id=\"cp_1\"[^>]*>";
		var commentsEnd = "<\\w+\\s*id=\"report_abuse_span\"";
		var commentsRegex = new RegExp(commentsStart+"[\\n\\s]*(.*?)[\\n\\s]*"+commentsEnd);
		var comments = commentsRegex.exec(str);
		if (comments && comments.length && comments.length>0) { data.comments = comments[1]; }
		// Last comment date
		var comments = data.comments;
		var commentdate = /(\w\w\w\s\d+,\s\d\d\d\d)/.exec(comments);
		if (commentdate) {
			data.commentdate = commentdate[1];
		}
		// Comment Count
		var commentCount = /id="num_comments">\s*(\d+)/.exec(str);
		if (commentCount && commentCount.length && commentCount.length>0) { data.commentcount = commentCount[1]; }
		callback(i,url,data);
	});
}
var months = {'Jan':0,'Feb':1,'Mar':2,'Apr':3,'May':4,'Jun':5,'Jul':6,'Aug':7,'Sep':8,'Oct':9,'Nov':10,'Dec':11}
_IG_RegisterOnloadHandler(function() {
	Table.nodeValue['IMG'] = function(node) {
		if (node.src && node.src.match(/_on/)) { return "A"; }
		if (node.src && node.src.match(/_half/)) { return "B"; }
		return "C";
	}
	Sort.date.formats = [
		// MMM DD, YYYY
		{ re:/(\w\w\w)\s*(\d*),\s*(\d\d\d\d)/ , f:function(x){ return (new Date(Sort.date.fixYear(x[3]),+months[x[1]],+x[2])).getTime(); } }
	];
	for (var i=1; i<=10; i++) {
		var url = prefs.getString('url'+i);
		if (url!="") {
			getGadgetStats(i,url,function(j,url,data) {
				_gel('g'+j+'_title').innerHTML = '<a href="'+ig_url+url+'" target="_blank">'+data.title+'</a>';
				_gel('g'+j+'_numusers').innerHTML = data.numusers.replace(/\s/,'');
				_gel('g'+j+'_starrating').innerHTML = data.starrating + "&nbsp;(" + data.numratings + ")";
				var commentlink = " 0";
				if (data.commentcount>0) {
					commentlink = '<a href="#" onclick="showcomments(this,'+j+');return false;">&nbsp;'+data.commentcount+'&nbsp;</a>';
				}
				_gel('g'+j+'_commentcount').innerHTML = commentlink;
				_gel('g'+j+'_commentdate').innerHTML = data.commentdate.replace(/\s/g,'&nbsp;');
				gadgetcomments[j] = data.comments;
//				_gel('g'+j+'_comments').innerHTML = data.comments;
				resize();
			});
		}
	}
});
function showcomments(o,i) {
	//_mytoggle(o.parentNode.parentNode.nextSibling);resize();
	var d = _gel('commentdiv');
	var dc = _gel('comments');
	var h = _gel('gadgets').offsetHeight-20;
	if (h<100) { h=100; }
	d.style.height = h+"px";
	dc.innerHTML = gadgetcomments[i];
	d.style.display = "block";
	resize();
}
function closecomments() {
	var d = _gel('commentdiv');
	d.style.display = "none";
	resize();
}
var resize=_IG_AdjustIFrameHeight;
var fontsize = (new _IG_Prefs()).getString('fontsize');
if (fontsize) {
	document.writeln('<style>#gadgets td,#gadgets th,#commentdiv{font-size:'+fontsize+';</style>');
}
</script>
<script src="http://www.javascripttoolbox.com/libsource.php/table/source/table.js"></script>
<style>
a, a:visited { color:black; }
div.comment { margin:5px 0 5px 0; }
div.comment p { margin:0px; padding:0px; }
#gadgets { border-collapse:collapse; }
th { background-color:#eee; cursor:pointer; }
td,th { border:1px solid #ccc; padding:2px; }
#commentdiv { position:absolute;z-index:100; display:none; background-color:white; width:95%; overflow:auto; top:5px; left:5px; border:1px solid black; padding:3px; }
#commentdiv .toolbar { background-color:#333;color:white; width:100%; font-size:120%; }
#commentdiv .toolbar a, #commentdiv .toolbar a:visited { color:white; }
</style>
<div id="commentdiv">
	<div class="toolbar"><a href="#" onclick="closecomments();return false;" style="float:right;">[ close ]</a>Comments</div>
	<div id="comments"></div>
</div>
<table class="table-autosort" id="gadgets" cellspacing=0 cellpadding=0>
<thead>
<tr>
	<th rowspan="2" title="Click to sort by this column" class="table-sortable:ignorecase">Title</th>
	<th rowspan="2" title="Click to sort by this column" class="table-sortable:numeric">Users</th>
	<th rowspan="2" title="Click to sort by this column" class="table-sortable:default">Rating</th>
	<th colspan="2">Comments</th>
</tr>
<tr>
	<th title="Click to sort by this column" class="table-sortable:numeric">#</th>
	<th title="Click to sort by this column" class="table-sortable:date">Last</th>
</tr>
<tbody>
<script>
for (var i=1; i<=10; i++) {
	if(prefs.getString('url'+i)!="") {
		document.writeln('<tr onmouseover="this.style.backgroundColor=\'#fffacd\'" onmouseout="this.style.backgroundColor=\'\'" id="g'+i+'"><td id="g'+i+'_title"></td><td id="g'+i+'_numusers"></td><td id="g'+i+'_starrating"></td><td id="g'+i+'_commentcount" title="Click to show recent comments"></td><td id="g'+i+'_commentdate"></td></tr>');
	}
}
</script>
</tbody>
</table>
		]]> 
   </Content> 
</Module>
