<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="To Do" title_url="http://www.voizle.com/ToDo.xml" screenshot="http://www.voizle.com/image/crazymathlarge.jpg" thumbnail="http://www.voizle.com/image/crazymathlarge.jpg" description="todo" author="Love sharma" author_email="love.sharma.87@gmail.com" height="400">
<Require feature="wave"/> 
  </ModulePrefs>
<Content type="html" view="canvas"><![CDATA[
	<html>
<head><title>TaskToDo</title>
<style>
.list{
	font-family:arial;
	font-size:10pt;
}
h1{
	font-size: 15pt;
}
h1, #vlink, form{
	margin:0px;
}
#vlink{
	font-size:8pt;
}
.buddy, .buddytoday{
	width:100%;
}
.buddytoday{
	background-color:#ddd;
}
#todayDate{
	text-align:center;
	font-size:10pt;
	width:35%;
}
.label{
	text-align:right;
	padding-right:5px;
	font-weight:bolder;
	vertical-align:middle;
}
.ybirth, .label{
	font-size:9pt;
	height:25px;
}
.buddylist{
	overflow:auto;
	height:200px;
}
.uname{font-weight:bolder;font-size:12px;}
.uimg{width:40px;height:40px;}
.ustatus{color:#aeaeae;font-size:11px;}

</style>
</head>
<body>
<div id="msg" style="height:50px;width:100%;display:none;overflow:auto;border:solid 2px #a9a9a9;"></div>
<div style="width:400px;"><center>
 <table width='100%' border='0'><tr align='center' valign='middle'><td><img src='http://www.voizle.com/image/birthday.png' width="100px" /></td><td><h1>-- Birthday Tracker --</h1><a id='vlink' href="http://www.voizle.com">Powered by Voizle</a></td><td><img src='http://www.voizle.com/image/birthday.png' width="100px" /></td></tr></table><hr>

<table border="1" frame='box' rules='all' bordercolor='#999' width='100%' align='center' style='margin-bottom:10px'>
	<tr>
	<td id='todayDate'></td><td><div id='search' class='label'>Search: <input type='text' autocomplete='off' onkeyup='search()' id='q' /></div></td></tr>
	<tbody id='bbody'>
		<tr>
			<td valign='top' width='400px' colspan='2'>
				<div class='buddylist'>
					<table width='100%'>
						<tbody id='list'></tbody>
					</table>
				</div>
			</td>
		</tr>
	</tbody>
	<tfoot>
		<tr>
			<th colspan='2' class='ybirth'>
				<form action="#" name="someform" onsubmit="return addBirthDate()">
					Your Birthdate: <select name="mon" id="mon" onchange="change();">
						<option selected="selected" value="mon">mon</option>
					</select>
					<select name="day" id="day" onchange="changedate();">
						<option value="day">day</option>
					</select>
					<select name="year" id="year" onchange="changedate();">
						<option value="year">year</option>
					</select> 
					<input type="submit" value="Update" />
				</form>
			</th>
		</tr>
	</tfoot>
</table>
<a href="http://www.voizle.com/preview.vz?id=birthdate&stat=true" target="_blank"><img alt="Voizle - Statistics for Birthday Reminder" src="http://img.voizle.com/birthdate.jpg" title="Voizle - Statistics for Birthday Reminder"></a>
</center>
</div>
<SCRIPT LANGUAGE="JavaScript">
var day, mon, year, date;
var monthtext=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'];
var weektext=['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
function populatedropdown(dayid, monid, yearid){
	day = dayid;
	mon = monid;
	year = yearid;
	for (var i=1; i<=31; i++)
		$(day).options[i]=new Option(i);
		
	tyear = (new Date()).getYear()+1900;
	for (var i=tyear; i>1900; i--)
		$(year).options[tyear-i+1]=new Option(i,i);
		
	for (var m=1; m<=12; m++)
		$(mon).options[m]=new Option(monthtext[m-1]);
}
function $(id){
	return document.getElementById(id);
}
function checkleapyear(y){
	y=parseInt(y);
	if(y%4==0){
		if(y%100!=0){return true;}
		else{
			if(y%400==0){return true;}
			else{return false;}
		}
	}
	return false;
}
function change(){
	var i=0;
	var monthDropdown=$(mon);
	var dayDropdown=$(day);
	dayDropdown.selectedIndex=-1;
	var daysInMonth=[0,31,28,31,30,31,30,31,31,30,31,30,31];
	var month=monthDropdown.selectedIndex;
	for(i=1;i<=daysInMonth[month];++i){
		dayDropdown[i-1]=null;
	}
	dayDropdown.selectedIndex=-1;
	for(i=1;i<=daysInMonth[month];++i){
		dayDropdown[i-1]=new Option(i.toString());
	}
	changedate();
}
function changedate(){
	if(checkleapyear($(year).options[$(year).selectedIndex].innerHTML)&&$(mon).selectedIndex==2){
		if($(day).length<29){
			$(day)[$(day).length]=new Option("29");
		}
	}else{
		if($(day).length==29){
			$(day).remove(28);
		}
	}
	date=$(mon).selectedIndex+"/"+($(day).selectedIndex+1)+"/"+$(year).options[$(year).selectedIndex].innerHTML;
}
function checkform(){
	if(!($(mon).selectedIndex!=0&&date.indexOf(day)==-1&&date.indexOf(year)==-1)){
		alert("Invalid Date!!");
		return false;
	}
	return true;
}
populatedropdown("day", "mon", "year");
</SCRIPT>
<script type="text/javascript">
var viewerId, list, temp, temp_2, early;
var ele = {
			show:function(id){$(id).style.display='block';}, 
			hide:function(id){$(id).style.display='none';}, 
			write:function(id,msg){$(id).innerHTML = msg;},
			create:function(element){return document.createElement(element);}
		}
function reset(){
	wave.getState().reset();
}
function log(msg){
	if(viewerId == 'love.sharma.87@wavesandbox.com'){
		ele.show('msg');
		var ih = $("msg").innerHTML;
		$("msg").innerHTML = msg+"<br/> "+$("msg").innerHTML;
		try{
			wave.log(msg);
		}catch(e){}
	}
}

function search(){
	var query = $('q').value.toLowerCase();
	if(query.length > 0){
		ele.write('list', '');
		for(key in early){
			var tmp = temp_2[key];
			var name = wave.getParticipantById(key).getDisplayName().toLowerCase();
			var z = getZodiac(tmp);
			if(name.search(query) > -1 || z.toLowerCase().search(query) > -1){
				createUser(key, key, formatDate(tmp), getAge(tmp), z, getStatus(early[key]));
			}
		}
	}else{
		highChanged();
	}
}

function createUser(id, vid, status, age, zodiac, state){
	var buddy = ele.create('div');
	buddy.id = id;
	buddy.className = 'buddy' + (state == 'Today' ? 'today' : '');
	$('list').appendChild(buddy);
	$(id).innerHTML = '';
	 var user_detail = {};
	if(vid != null && status != null){
		user_detail = wave.getParticipantById(vid);
	}else{
		user_detail.getDisplayName = function(){return "Unknown";};
		user_detail.getThumbnailUrl = function(){return "http://gadget-doc-examples.googlecode.com/svn/trunk/images/unknown.gif";};
	}
	var tab = document.createElement("table");
	tab.style.width = '100%';
	var tr = document.createElement("tr");
	var tdimg = document.createElement("td");
	tdimg.style.width = '40px';
	var img = document.createElement("img");
	img.src = user_detail.getThumbnailUrl();
	img.className = 'uimg';
	tdimg.appendChild(img);
	tdimg.rowSpan='2';
	tr.appendChild(tdimg);
	var tdname = document.createElement("td");
		tdname.innerHTML = user_detail.getDisplayName();
		tdname.className = 'uname';
		tdname.align='left';
	var tdleft = ele.create('td');
		tdleft.innerHTML = state;
		tdleft.className = 'label';
	tr.appendChild(tdname);
	tr.appendChild(tdleft);
	tab.appendChild(tr);
	var trmsg = document.createElement("tr");
	var tdmsg = document.createElement("td");
	tdmsg.innerHTML = (status == null) ? 'N/A' : status;
	tdmsg.className = 'ustatus';
	tdmsg.align='left';
	var tddleft = ele.create('td');
		tddleft.innerHTML = 'Age: ' + age + ' ('+zodiac+') ';
		tddleft.className = 'ustatus';
		tddleft.align = 'right';
	trmsg.appendChild(tdmsg);
	trmsg.appendChild(tddleft);
	tab.appendChild(trmsg);
	$(id).appendChild(tab);
}

function sortAssoc(arr)
{
	var arrTemp = [];
	for (var ky in arr){
		arrTemp.push([ky, arr[ky]]);
	}
	arrTemp.sort(function() {return parseInt(arguments[0][1]) < parseInt(arguments[1][1])});

	var sort_arr = [];
	for (var i = arrTemp.length-1; i >=0; i--){
		sort_arr[arrTemp[i][0]] = arrTemp[i][1];
	}
	return sort_arr;
}
function addBirthDate(){
	if(checkform()){
		wave.getState().submitValue(viewerId, date);
	}
	return false;
}
function formatDate(tym){
	var dt = new Date(tym*1);
	return weektext[dt.getDay()] + ', ' + monthtext[dt.getMonth()] + ' ' + dt.getDate() + ', ' + dt.getFullYear();
}
function getAge(tym){
	var now = new Date(wave.getTime());
	var dt = new Date(tym*1);
	return new Date((new Date(now - dt)).getTime()).getFullYear() - (new Date(0)).getFullYear();
}
function getRem(dat){
	var now = new Date(wave.getTime());
	var dat = new Date(dat);
	var dt = (new Date(dat)).setFullYear(now.getFullYear());
	if((dt - now.getTime()) > 0){
		return dt;
	}else{
		return dat.setFullYear(now.getFullYear()*1 + 1);
	}
}
function getStatus(tym){
	var now = new Date(wave.getTime());
	var dat = new Date(tym*1);
	var dt = (new Date(tym*1)).setFullYear(now.getFullYear());
	if(dat.getDate() == now.getDate() && dat.getMonth() == now.getMonth()){
		return 'Today';
	}else if(dat.getDate() == (now.getDate()*1 + 1) && dat.getMonth() == now.getMonth()){
		return 'Tommorrow';
	}
	if((dt - now.getTime()) > 0){
		return formatDate(dt);
	}else{
		return formatDate(dat.setFullYear(now.getFullYear()*1 + 1));
	}
}
function getZodiac(tym){
	var dt = new Date(tym*1);
	var dy = dt.getDate()*1;
	var mn = dt.getMonth()*1 + 1;
	if((dy > 20 && mn == 3) || (dy < 21 && mn == 4)){
		return 'Aries';
	}else if((dy > 20 && mn == 4) || (dy < 22 && mn == 5)){
		return 'Taurus';
	}else if((dy > 21 && mn == 5) || (dy < 22 && mn == 6)){
		return 'Gemini';
	}else if((dy > 21 && mn == 6) || (dy < 23 && mn == 7)){
		return 'Cancer';
	}else if((dy > 22 && mn == 7) || (dy < 22 && mn == 8)){
		return 'Leo';
	}else if((dy > 21 && mn == 8) || (dy < 24 && mn == 9)){
		return 'Virgo';
	}else if((dy > 23 && mn == 9) || (dy < 24 && mn == 10)){
		return 'Libra';
	}else if((dy > 23 && mn == 10) || (dy < 23 && mn == 11)){
		return 'Scorpio';
	}else if((dy > 22 && mn == 11) || (dy < 23 && mn == 12)){
		return 'Sagittarius';
	}else if((dy > 22 && mn == 12) || (dy < 21 && mn == 1)){
		return 'Capricorn';
	}else if((dy > 20 && mn == 1) || (dy < 20 && mn == 2)){
		return 'Aquarius';
	}else if((dy > 19 && mn == 2) || (dy < 21 && mn == 3)){
		return 'Pisces';
	}
}
function setCombos(dat){
	var dat = new Date(dat);
	$(day).remove(0);
	$(day).selectedIndex = dat.getDate()*1 -1;
	$(mon).selectedIndex = dat.getMonth()*1 + 1;
	$(year).value = dat.getFullYear();
}
var ts = true;
function highChanged() {
	if(!wave.getState()) {
		return;
	}
	try{
	ele.write('list', '');
	var state = wave.getState();
	var keys = state.getKeys();
	viewerId = wave.getViewer().getId();
	ele.write('todayDate', formatDate(wave.getTime()));
	var klen = keys.length;
	temp = [];
	temp_2 = [];
	var a_list = [];
	early = new Array();
	for(i=0;i<klen;i++){
		var k = keys[i];
		var v = state.get(k);
		var d = new Date(v);
		if(d.getDate() == (new Date()).getDate() && d.getMonth() == (new Date()).getMonth()){
			early[k] = getRem(v)*1;
		}else{
			temp[k] = getRem(v)*1;
		}
		temp_2[k] = (new Date(v)).getTime();
	}
	a_list = sortAssoc(temp);
	if(early.length == 0){
		early = a_list;
	}else{
		for(var key in a_list){
			early[key] = a_list[key];
		}
	}
	for(var key in early){
		var tmp = temp_2[key];
		createUser(key, key, formatDate(tmp), getAge(tmp), getZodiac(tmp), getStatus(early[key]));
	}
	var ds = state.get(viewerId);
	if(ts && ds){
		setCombos(ds);
		ts = false;
	}else{
		ts = false;
	}
	}catch(e){log(e);}
}

function init() {
    if (wave && wave.isInWaveContainer()) {
        wave.setStateCallback(highChanged);
		wave.setParticipantCallback(highChanged);
    }
}
try{
	gadgets.util.registerOnLoadHandler(init);
}catch(e){}
</script><script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script type="text/javascript">try {var pageTracker = _gat._getTracker("UA-9339177-1");pageTracker._trackPageview();} catch(err) {}</script>
</body>
</html>
]]></Content>
</Module>