<?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="days_to_delay_msg" datatype="hidden" default_value="3"/>
		<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_donate2')=="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 = 'Please consider making a small donation to help compensate me, <a href="http://MattKruse.com" target="_blank">Matt Kruse</a>, this gadget\'s author, for the many hours it takes to continue to maintain and support this gadget. Typically, &lt; 1% of users donate <img src="http://help.adobe.com/en_US/Acrobat.com/Using/images/frown_chat_emoticon.png">. But if even 10% would donate a small amount, it would make a huge difference to me! Many small donations can have a big impact. Thanks!';
			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></center>';
			_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_donate2","false"); 
	}
	else {
		var n = 14+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(7,"2009-04-13 - New option added: Add stock symbols! Choose Edit Settings to enter a comma-separated list of stock symbols to track along with (or instead of) the indices.");

// 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!='') {
					// If only one stock is specified, add on "XY" because we require at least two to get the desired output
//					if (symbols.indexOf(",")==-1) {
						symbols += ",XY";
//					}
					symbols = symbols.replace(/\s+/g,'');
					var furl2 = furl+"&q="+symbols+"&t="+((new Date()).getTime());
					_IG_FetchContent(furl2,function(str) {
					var startTag = 'class="gf-table">';
						var start = str.indexOf(startTag);
						var end = str.indexOf("<tr class=compare-chart>",start);
						if (start>0 && end>start) {
							var tableContent = str.substring(start+startTag.length,end);
							_gel('symbol_content').innerHTML = "<table id=\"symbols\">"+tableContent+"</table>";
							var s = _gel('symbols');
							// Fix links
							var as = s.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";
								}
							}
							// Extract info from the table and add it to the summary table
							if (t) {
								var tbody = t.getElementsByTagName('tbody')[0];
								if (tbody) {
									var rows = s.getElementsByTagName('tbody')[0].rows;
									for (var i=0; i<rows.length; i++) {
										var row = rows[i];
										var inner = rows[i].innerHTML;
										if (row && row.className && row.className=="snippet" && inner.indexOf("XyEnterprise")==-1 && inner.indexOf("chartConfigObject")==-1) { // Ignore it if it's XY, we added that manually, and chart row
											var tr = document.createElement('tr');
											tr.className='indices';

											var td = document.createElement('td');
											td.className='name';
											td.innerHTML = row.cells[2].innerHTML;
											tr.appendChild(td);

											var td = document.createElement('td');
											td.className='last';
											td.innerHTML = row.cells[3].innerHTML;
											tr.appendChild(td);

											var change = row.cells[5];
											var spans = change.getElementsByTagName('span');

											if (spans && spans.length>1) {
												var td = document.createElement('td');
												td.className='change';
												var cn="chg";
												if (+spans[0].innerHTML<0) { cn="chr"; }
												td.innerHTML = '<span class="'+cn+'">'+spans[0].innerHTML+'</span>';
												tr.appendChild(td);

												var td = document.createElement('td');
												td.className='change';
												var cn="chg";
												if (+spans[0].innerHTML<0) { cn="chr"; }
												td.innerHTML = '<span class="'+cn+'">'+spans[1].innerHTML+'</span>';
												
												// Update the size of the font based on pct change
												var innerspans = td.getElementsByTagName('span');
												if (innerspans && innerspans[0] && prefs.getBool('resize')) {
													var amt = parseInt(innerspans[0].innerHTML.replace(/^\(?\-?/,''))-1;
													if (amt<0) { amt = 0; }
													innerspans[0].style.fontSize=(100+(amt*10))+"%";
												}
												tr.appendChild(td);
											}
											
											tbody.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 .indices { font-weight:bold; }</style>');
}
</script>
<style>
body,td,th {font-family:arial;font-size:10px;}
.chr { color:#AA0033; }
.chg { color:green; }
table#sfe-mktsumm td {text-align:right;white-space:nowrap;padding:0px 5px; border-bottom:1px solid #ddd;}

#messages,#messages_donate {
	display:none;
	margin:3px;
	border:3px solid #F4D307;
	-moz-border-radius:8px;
	background-color:white;
	min-height:50px;
}
.message {
	background-image:url(http://www.google.com/nonprofits/images/lightbulb-35.gif);
	min-height:40px;
}
.message,#messages_donate {
	padding-bottom:5px;
	background-repeat:no-repeat;
	background-position:2px 3px;
	padding-left: 55px;
	padding-top:2px;
	font-family:arial;
	font-weight:bold;
	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><div id="symbol_content" style="display:none"></div>
		]]> 
   </Content> 
</Module>


