<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="Chat And Stock Gadget VijayC">  
<!--
  <Require feature="wave-preview" /> 
-->
  </ModulePrefs> 
 <Content type="html">   
 <![CDATA[     

 <script type="text/javascript"     src="http://wave-api.appspot.com/public/wave.js"></script>

 <script type="text/javascript">

    function ChatLine(ctime, who, said,towhom) {
	this.timestamp = ctime.toUTCString();
	this.who = who;
	this.said = said;
	this.towhom = towhom;
    }


    //alert("My Script has surely started");

    var newToChat =1;	

	
    
    function buttonClicked() {
      var value = parseInt(wave.getState().get('count', '0'));
      wave.getState().submitDelta({'count': value + 1});
    }

    function stateUpdated() {
      //window.alert(' got notification in stateUpdated ');
	if (newToChat==1) {
		//window.alert(' the newToChat is 1');
 		try {
			downloadConversation();
		}
		catch(err) {
			alert('download conversation broken - ' + err);
		}
	} else  {
		var state = wave.getState();	
		var neweventid = state.get('eventid');
		if (neweventid) {
			var cLine = state.get(neweventid);
			addChatLine(cLine);
		}	      
	} 
    }

    function downloadConversation() {
	 var state = wave.getState();
	 if (state) {	
	       var cnodes = state.get('allchatids');	
		 //window.alert('allchatids = ' + cnodes);

      	 if (cnodes && cnodes.length > 0) {		
			var cline = null;
			cnodes = cnodes.sort();		
			for (var i = 0; i < cnodes.length; i++) {
				cline = state.get(cnodes[i]);
				addChatLine(cline);
			}
	 	 }
		 newToChat=0;
    	 }
    }

    function addChatLine(cLine) {
		if (cLine) {
				var strLine= cLine.timestamp +" "+cLine.who;
				strLine += " to "+cLine.towhom;
				strLine += " &gt; "+cLine.said ;	
				var viewer= wave.getViewer();
				var viewername="All";
				if (viewer) {
					viewername=viewer.getDisplayName();
				}
				if (cLine.who == viewername) {
					// the messages that were sent by viewer - show it in italics
					strLine = "<i>" +strLine+"</i>";
				} else {
					if (cLine.towhom == "All"   ||  cLine.towhom == viewername ) {
						// bold the messages meant for viewer or for all
						strLine = "<b>" +strLine+"</b>";
					}
				}	
				var div = document.getElementById('content_div');
				div.innerHTML = div.innerHTML+"<div>" + strLine + "</div>"  ;
				//$('#content_div').append("<div>" + strLine + "</div>" );
				fillVotingArea(cLine.said,cLine.who);
		}
    }	

    function fillVotingArea(said,who) {
	  var saidsplit= said.split(":");				
	  switch (saidsplit[0]) {
		case 'question':
			var question = saidsplit[1];
			var questionspan = document.getElementById('question_span');
			questionspan.innerHTML=who+" asks: <b>"+question+" <b>";			
			break;
		case 'options':
			var answers = saidsplit[1];
			var select = document.getElementById( "votingSelect" );			
			var answeroptions = answers.split(",");
			for (var i=0; i< answeroptions.length; i++) {
				var opt = answeroptions[i];
				select.options[i]= new Option(opt,opt);
			}
			break;
		case 'vote':
			var answer = saidsplit[1];
			var resultspan= document.getElementById( "results_span" );
			resultspan.innerHTML=who+" voted for <b>"+answer+"</b>";
			break;
	      case 'stock':
			var stocks= saidsplit[1];
			getQuotes(stocks);
			break;
	  }

    }	

    var showfields= new Array("Name", "52-week Range","Stock Exchange", "P/E Ratio" ,"Last Trade","Volume","Market Capitalization");
    	
    var f_options="nwxrlvj1"; 
     

    function getQuotes(stocks) {
	   var tickrs = stocks.split(",");
	   var req = new XMLHttpRequest();
	   var url="http://download.finance.yahoo.com/d/quotes.csv?s=";
	   for (var i=0;i < tickrs.length ; i++) {
		if (i>0) url += "+";
		var s= tickrs[i].replace(/^\s*/, "").replace(/\s*$/, "");	
		url += s;
	   }
	   url += "&f=";
	   url += f_options; 	
         alert("Yahoo URL is "+url);
         req.onreadystatechange = function() { 
                if (req.readyState == 4) {
			if (req.status==200) {
                     var str = req.responseText;
			   var lines = str.split("\n");
			   alert("Got response from yahoo "+str);
			   alert("Lines is "+lines);	
			   var div = document.getElementById('stock_div');
				
			   div.innerHTML = "<div>" + showfields.join(',') + "</div>"  ;
			   for (var i=0; i <lines.length ; i++) {
				div.innerHTML = div.innerHTML+"<div>" + lines[i] + "</div>"  ; 
			   }
		      } else {
				alert("Error getting data from yahoo "+ req.statusText+ " status ="
					+req.status+" response="+req.responseText);
			}			   
                }
	   };
	   req.open('GET', url, true);
	   req.setRequestHeader("Content-Type", "text/html");
         req.send(null);  		
    }	

    function participantUpdated() {
	//window.alert(' got notification in participantUpdated ');
	var select = document.getElementById( "toParticipant" );
	var participants = wave.getParticipants();
	var viewer= wave.getViewer();
	var viewername="All";
	if (viewer) {
		viewername=viewer.getDisplayName();
	}
	for (var i=0;i < participants.length ;i++) {
		var name=participants[i].getDisplayName();
		if (name == viewername)  name="All";
		select.options[i]= new Option(name,name);
	}
      downloadConversation();
    }	
 
    function init() {
	if(wave && wave.isInWaveContainer()) {
             wave.setStateCallback(stateUpdated);
		 wave.setParticipantCallback(participantUpdated);
           //alert(' registered the state and participant callbacks ');
		 newToChat=1;	
	}
    }
    gadgets.util.registerOnLoadHandler(init);

    function sendText(){
      var chatField=document.getElementById('chatField');
      var saidText= chatField.value;
	var towhom=document.getElementById('toParticipant').value;
	if (saidText.length> 0) { 
		sendDelta(saidText,towhom);
		chatField.value=""; 
	}
	chatField.focus();  
    }

    function sendDelta(saidText,towhom) {	
		var state=wave.getState();
		var myName = wave.getViewer().getDisplayName();
		var d = new Date();
		var neweventid = d.getTime()+" "+myName;	
		var cLine= new ChatLine(d,myName,saidText,towhom);
		var delta = {};
		delta['eventid'] = neweventid;
		delta[neweventid] = cLine;	

		var newChatIds = new Array();
		var oldChatIds = state.get('allchatids');
		//window.alert(" ths allchatids in the state ="+oldChatIds);
		if (oldChatIds) {
			newChatIds = newChatIds.concat(oldChatIds);
		}			
		var allids=newChatIds.concat([neweventid]);
		delta['allchatids'] = allids;
		var allidsstring= allids.join(',');

	      state.submitDelta(delta);
		//window.alert("sending allids delta="+delta+" allids="+allidsstring);
    }
	
    function sendVote() {
		var optChosen=document.getElementById('votingSelect').value;
		var text="vote:"+optChosen;
		sendDelta(text,"All");			
    }	

    </script>
<div id="welcome_div" >Welcome to Chat by VijayC </div>   
<div> <b>Voting Panel </b></div>
<div id="voting_div" > <span id="question_span"> The questions will appear in this space </span>
    <select id="votingSelect">
        <option value="A">A</option>
        <option value="B">B</option>
    </select>
    <input type=button value="Register My Vote" id="butSet" onClick="sendVote()">
    <span id="results_span"> Results Area</span>	
</div>
<div> 
<div><b>Stock Panel </b></div>
<div id="stock_div"> </div>
</div>
<div><b> Chat Panel </b></div>
<div>
    <b> To: </b>
    <select id="toParticipant">
        <option value="All">All</option>
        <option value="None">None</option>
    </select>
    <input type=text length="200" style="width: 65%;" value="type here" id="chatField" >
    <input type=button value="Send" id="butSet" onClick="sendText()">
</div>
<div id="content_div" ></div>    

    ]]>
  </Content>
</Module>