<?xml version="1.0" encoding="UTF-8" ?>
<Module>
	<ModulePrefs 
		title="U.S. Financial Market Summary" 
		directory_title="U.S. Financial Market Summary - Stock Market, Dow Jones, Nasdaq, S&amp;P 500 Ticker"
		description="Show a short summary of the US financial market, with current market values for the DOW, Nasdaq, and S&amp;P 500. Info taken from live Google Finance and updated as often as you want!" 
		author="Matt Kruse" 
		author_email="gadget@mattkruse.com" 
		screenshot="http://www.javascripttoolbox.com/gadget/marketsummary/marketsummary.png"
		thumbnail="http://www.javascripttoolbox.com/gadget/marketsummary/marketsummary_thumb.png"
		author_affiliation="Matt Kruse" 
		author_location="IL, USA" 
		author_link="http://www.JavascriptToolbox.com/" 
		height="200"
		> 
		<Require feature="dynamic-height" /> 
		<Require feature="analytics"/>
		<Require feature="setprefs" /> 
	</ModulePrefs>
		<UserPref name="refresh" display_name="Refresh Interval (seconds):" default_value="120"/>
		<UserPref name="resize" datatype="bool" display_name="Resize text based on % change:" default_value="true"/>
		<UserPref name="bold" datatype="bool" display_name="Bold Text:" default_value="true"/>
		<UserPref name="index_0" datatype="bool" display_name="Show DOW:" default_value="true"/>
		<UserPref name="index_1" datatype="bool" display_name="Show S&amp;P 500:" default_value="true"/>
		<UserPref name="index_2" datatype="bool" display_name="Show Nasdaq:" default_value="true"/>
		<UserPref name="symbols" display_name="Stock Symbols to track (comma-separated)" default_value=""/>
		<UserPref name="hideifclosed" datatype="bool" display_name="Hide content when market is closed:" default_value="false"/>
		<UserPref name="lastmsg" datatype="hidden" default_value="0" />
		<UserPref name="today" datatype="hidden" default_value="" />
		<UserPref name="added_on" datatype="hidden" default_value="" />
		<UserPref name="show_donate" datatype="hidden" default_value="true"/>
		<UserPref name="show_donate2" datatype="hidden" default_value="true"/>
		<UserPref name="show_donate3" datatype="hidden" default_value="true"/>
		<UserPref name="days_to_delay_msg" datatype="hidden" default_value="5"/>
		<Content type="html"> 
		<![CDATA[ 
<script>
var prefs = new _IG_Prefs();

var now = new Date();
var today = (now.getFullYear?now.getFullYear():now.getYear())+'-'+(now.getMonth()+1)+'-'+now.getDate();
var todayNum = ((now.getFullYear?now.getFullYear():now.getYear())*10000) +((now.getMonth()+1)*100) + (now.getDate()*1);
var prefs_today = prefs.getString('today');
var prefs_added_on = prefs.getString('added_on');

// Analytics - Record a new gadget add
if (prefs_today=='') { _IG_Analytics("UA-6382940-1", "/addgadget/marketsummary"); }
// Analytics - Record a unique hit for today
if (prefs_today!=today) { prefs.set('today',today); _IG_Analytics("UA-6382940-1", "/gadget/marketsummary"); }

var installed_days = 0;
// Record Date Added
if (prefs_added_on=='') { 
	prefs.set('added_on',todayNum); 
	installed_days = 10;
}
else {
	prefs_added_on = +prefs_added_on;
	if (isNaN(prefs_added_on)) { 
		prefs_added_on = todayNum-10; 
		prefs.set('added_on',todayNum);
	}
	installed_days = +todayNum - +prefs_added_on; 
}

// Messages
var lastmsg = prefs.getInt("lastmsg");

// Special for donate msg
var show_donate = (prefs.getString('show_donate3')=="true")
var days_to_delay_msg = prefs.getInt('days_to_delay_msg');

var maxmsg = 0;
var msgcontent = "";
function createMessage(id,msg) {
	msgcontent += "<div class=\"message\">"+msg+"</div>";
	if (id>maxmsg) {
		maxmsg = id;
	}
}
function isOpenSynd() {
	return (typeof(_args)!="function" || _args()["synd"]!='ig');
}

var hosted_button_id = '4556153';
var suggested_amt = "5.00";
if (typeof Math!="undefined" && Math.random && Math.floor && Math.floor(Math.random()*2)==0) {
	var hosted_button_id = 'MGVVKLXQWPGA8';
	var suggested_amt = "10.00";
}

_IG_RegisterOnloadHandler(function() {
	if (msgcontent!="" && !isOpenSynd()) {
		_gel('msg_content').innerHTML = msgcontent;
		_gel('messages').style.display="block";
		_IG_AdjustIFrameHeight();
	}
	// Donate msg
	if (!isOpenSynd() ){//&& installed_days>days_to_delay_msg) {
		if (show_donate) {
			var donate_msg = '<img src="http://dl.dropbox.com/u/18646539/family_smaller.jpg" style="float:left;margin-right:5px;height:100px;"> My name is <a href="http://MattKruse.com" target="_blank">Matt Kruse</a>, and I created this Market Summary gadget. I\'m just one guy doing all this, and it is supported solely through donations from people like you. <strong>I\'m not a company.</strong> I\'m a guy sitting in his basement late at night, coding for you!<br><br><strong>My dream</strong> is to quit my job and work full time creating awesome software projects. Do you know that <strong>if every gadget user would just donate $5, I could actually do it</strong>?! Could you spare just a few dollars to make a small software developer\'s dream come true? <b>You would tip a waiter more than that at a random restaurant visit</b>, right? :) How about the guy spending hours writing the software you use daily? <b>Thank you!!!</b>';
			donate_msg += '<center><form target="_blank" action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="'+hosted_button_id+'">$<input name="amount" value="'+suggested_amt+'" size="5"><input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" style="vertical-align:bottom;" border="0" name="submit" alt="" onclick="dismiss_donate(true);"><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="dismiss_donate(false);return false;" style="color:#666;">not now</a></form>';
			donate_msg += 'Or: Matt Kruse<br>PO Box 165<br>Hampton, IL 61256</center><div style="font-size:9px;">(<b>Note:</b> If you have previously donated, please ignore this message. I updated the code to fix a bug and cannot prevent it from appearing to all users again. I apologize.)</div>';
			_gel('messages_donate').innerHTML = "<div id=\"donatemessage\">"+donate_msg+"</div>";
			_gel('messages_donate').style.display="block";
		}
	}
});
function dismiss_msg() { 
	prefs.set("lastmsg",maxmsg); 
	_gel('messages').style.display="none";
	_IG_AdjustIFrameHeight();
}
function dismiss_donate(donated) { 
	if (donated) {
		prefs.set("show_donate3","false"); 
	}
	else {
		var n = 30+installed_days;
		prefs.set("days_to_delay_msg",n);
	}
	_gel('messages_donate').style.display="none";
	_IG_AdjustIFrameHeight();
}
function addMsg(id,msg) { if (id>lastmsg) { createMessage(id,msg); } }

// Gadget messages
//addMsg(9,"Oct 20, 2010: I have fixed most of the issues caused by Google's changes. It took 5 hours of debugging and coding, but the generous donations of users recently obligated and motivated me to respond as quickly as possible. If you have the means, please help <a href=\"http://MattKruse.com\" target=\"_blank\">me</a> provide you with the functionality you depend on by making a small donation. Thanks!<br><a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=4556153\" target=\"_blank\"><img src=\"https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif\" border=\"0\"></a> ");

// Gadget code
function refresh() {
	var furl = "http://finance.google.com/finance"+"?t="+((new Date()).getTime());
	//var furl = "http://www.javascripttoolbox.com/gadget/marketsummary/finance.php?t="+((new Date()).getTime());
	_IG_FetchContent(furl,function(str) {
		var hide = false;
		var start = str.indexOf('<table id="sfe-mktsumm">');
		var end = str.indexOf("</table>",start);
		var header = (new Date()).toString();
		if (typeof header.split=="function" && header.indexOf('GMT')>0) {
			header = header.split('GMT')[0];
		}
		var notice = "";
		if (typeof(_args)!="function" || _args()["synd"]=='open') {
			notice = '<div style="position:absolute;top:0px;right:0px;font-style:italic;font-size:10px;background-color:white;">&copy; <a href="http://mattkruse.com" target="_blank">Matt Kruse</a></div>';
		}
		if (/class="g-unit">[^-]+- Markets closed/.test(str)) {
			if (prefs.getBool('hideifclosed')) {
				hide = true;
			}
			header += "<b> - Markets Closed</b>";
		}
		if (!hide) {
			if (start>0 && end>start) {
				_gel('ig_content').innerHTML = notice+header+"<br>"+str.substring(start,end)+"</table>";
				var t = document.getElementById('sfe-mktsumm');
				if (t && t.getElementsByTagName) {
					// Remove the indices you don't want
					var trs = t.getElementsByTagName('TR');
					for (var i=2; i>=0; i--) {
						if (!prefs.getBool('index_'+i)) {
							trs[i].parentNode.removeChild(trs[i]);
						}
					}
					// Fix links
					var as = t.getElementsByTagName('A');
					if (as && as.length && as.length>0) {
						for (var i=0; i<as.length; i++) {
							var href = as[i].href;
							href = href.substring(href.indexOf('?'));
							as[i].href = "http://finance.google.com/finance"+href;
							as[i].target = "_blank";
						}
					}
					// Update the size of the font based on pct change
					if (prefs.getBool('resize')) {
						var trs = t.getElementsByTagName('TR');
						if (trs && trs.length) {
							for (var i=0; i<trs.length; i++) {
								var spans = trs[i].getElementsByTagName('SPAN');
								if (spans && spans.length && spans.length>2) {
									var pct = spans[2].innerHTML;
									var amt = parseInt(pct.replace(/^\(?\-?/,''))-1;
									if (amt<0) { amt = 0; }
									spans[1].style.fontSize=spans[2].style.fontSize=(100+(amt*10))+"%";
								}
							}
						}
					}
				}
				
				// Now fetch stock symbols
				var symbols = prefs.getString('symbols');
				if (symbols!='') {
					symbols = symbols.toUpperCase();
					symbols = symbols.replace(/\s+/g,'');
					var furl2 = furl+"&q="+symbols+"&t="+((new Date()).getTime());
					_IG_FetchContent(furl2,function(str) {
						var json = str.match(/google.finance.data\s*=\s*(\{.*?\}\})\;\s*/);
						if (json && json[1]) {
							var data = eval('('+json[1]+')');
							if (data && data.company && data.company.related) {
								var cols = data.company.related.cols;
								if (cols) {
									var col_symbol = 0;
									var col_name = 1;
									var col_price = 2;
									var col_change = 3;
									var col_change_class = 4;
									var col_change_pct = 5;
									var col_change_pct_class = 6;
									for (var i=0; i<cols.length; i++) {
										if (cols[i]==0) { col_symbol = i; }
										if (cols[i]==1) { col_name = i; }
										if (cols[i]==4) { col_price = i; }
										if (cols[i]==30) { col_change = i; }
										if (cols[i]==34) { col_change_class = i; }
										if (cols[i]==31) { col_change_pct = i; }
										if (cols[i]==32) { col_change_pct_class = i; }
									}
								
									var rows = data.company.related.rows;
									if (rows) {
										var html = "";
										var el = function(tn,cn,html){var e=document.createElement(tn);if(cn){e.className=cn;}if(html){e.innerHTML=html;}return e;}
										for (var i=0; i<rows.length; i++) {
											var r = rows[i].values;
											var symbol = r[col_symbol];
											var name = r[col_name];
											var price = r[col_price];
											var change = r[col_change];
											var change_class = r[col_change_class];
											var change_pct = r[col_change_pct];
											var change_pct_class = r[col_change_pct_class];
											if (symbols.indexOf(symbol)>=0) {
												var tr = el('tr','indices');
												tr.appendChild(el('td','legend',''));
												tr.appendChild(el('td','name','<a href="http://www.google.com/finance?q='+symbol+'" target="_blank" title="'+name+'">'+symbol+'</a>'));
												tr.appendChild(el('td','last',price));
												tr.appendChild(el('td','change chg '+(change<0?'chr':''),change));
												
												var td_change_pct = el('td','change chg '+(change_pct<0?'chr':''),change_pct+'%');
												
												if (prefs.getBool('resize')) {
													var amt = parseInt(change_pct);
													if (amt<0) { amt=0-amt; }
													amt = amt-1;
													if (amt<0) { amt = 0; }
													td_change_pct.style.fontSize=(100+(amt*10))+"%";
												}
												
												tr.appendChild(td_change_pct);
												document.getElementById('sfe-mktsumm').getElementsByTagName('tbody')[0].appendChild(tr);
											}
										}
									}
								}
							}
						}
						_IG_AdjustIFrameHeight();
					});
				}					
			}
			else {
				var msg = "An error occurred while loading Market Summary.<br>This may be a problem with Google and not this gadget!<br>Debug info:<br>start="+start+"<br>End="+end+"<br>Content Length:"+str.length+"<br>"+str;
				_gel('ig_content').innerHTML = msg;
			}
			setTimeout(refresh,1000 * (prefs.getInt('refresh')));
			_IG_AdjustIFrameHeight();
		}
		else {
			var c = _gel('ig_content');
			c.innerHTML = '&nbsp;';
			setTimeout(refresh,1000 * (prefs.getInt('refresh')));
			_IG_AdjustIFrameHeight(1);
		}
	});
}
_IG_RegisterOnloadHandler(refresh);
if (prefs.getBool('bold')) {
	document.write('<style>table#sfe-mktsumm tr { font-weight:bold; }</style>');
}
</script>
<style>
body,table,tr,td,th {font-family:arial;font-size:10px;}
.chg { color:green; }
.chr { color:#AA0033; }
table#sfe-mktsumm td {text-align:right;white-space:nowrap;padding:0px 5px; border-bottom:1px solid #ddd;}
table#sfe-mktsumm td.legend { display:none; }

#messages,#messages_donate {
	display:none;
	margin:3px;
	border:3px solid #F4D307;
	-moz-border-radius:8px;
	background-color:white;
	min-height:50px;
}
.message {
	min-height:40px;
}
.message,#messages_donate {
	padding-bottom:5px;
	background-repeat:no-repeat;
	background-position:2px 3px;
	padding-left: 5px;
	padding-top:2px;
	font-family:arial;
	font-size:12px;
	margin:2px;
}
#messages_donate {
	background-image:none;
	padding-left:2px;
}
.close {
	width:50px;
	background-color:#8B8C8D;
	color:white;
	border:1px solid #999;
	border-color:#ddd #999 #999 #ddd;
	text-align:center;
	cursor:pointer;
	margin:5px 0px;
}
</style>
<div id="messages_donate"></div>
<div id="messages"><div id="msg_content"></div><center><div id="msg_ok" class="close" onclick="dismiss_msg()">OK</div></center></div>
<div id="ig_content"></div>
		]]> 
   </Content> 
</Module>



