var SERVER_URL = "http://s2.appotec.com/ha/astrology_m/";
var SERVICE_URL = SERVER_URL+"index.php";
var IMG_URL = SERVER_URL+"images/";
var container;
var osContainer;
var app=null;
var userId=null, userThumbnail, userName, userProfile, userAge,
    userGender, userSign, userBirthday;
var CONTENT_TYPE_JSON = gadgets.io.ContentType.JSON;
var CONTENT_TYPE_TEXT = gadgets.io.ContentType.TEXT;
var CONTENT_TYPE_FEED = gadgets.io.ContentType.FEED;
var CONTENT_TYPE_DOM = gadgets.io.ContentType.DOM;
var loadingImgStr = '<img src="'+IMG_URL+'loading.gif" />';
var MP_APP = {};

var getDate = function(month, day){
	var date = new Date()
	date.setMinutes(0);
	date.setHours(0);
	date.setSeconds(0);
	date.setYear(2000);
	date.setMonth(month-1);
	date.setDate(day);
	return date;
}

var DEFAULT_SIGNS = [
{name: "Aries", date_from: getDate(3,21), date_to: getDate(4,19), img_small: "defaultsign/aries_s.gif", img_large: "defaultsign/aries_l.jpg" },
{name: "Taurus", date_from: getDate(4,20), date_to: getDate(5,20), img_small: "defaultsign/taurus_s.gif", img_large: "defaultsign/taurus_l.jpg" },
{name: "Gemini", date_from: getDate(5,21), date_to: getDate(6,21), img_small: "defaultsign/gemini_s.gif", img_large: "defaultsign/gemini_l.jpg" },
{name: "Cancer", date_from: getDate(6,22), date_to: getDate(7,22), img_small: "defaultsign/cancer_s.gif", img_large: "defaultsign/cancer_l.jpg" },
{name: "Leo", date_from: getDate(7,23), date_to: getDate(8,22), img_small: "defaultsign/leo_s.gif", img_large: "defaultsign/leo_l.jpg" },
{name: "Virgo", date_from: getDate(8,23), date_to: getDate(9,22), img_small: "defaultsign/virgo_s.gif", img_large: "defaultsign/virgo_l.jpg" },
{name: "Libra", date_from: getDate(9,23), date_to: getDate(10,22), img_small: "defaultsign/libra_s.gif", img_large: "defaultsign/libra_l.jpg" },
{name: "Scorpio", date_from: getDate(10,23), date_to: getDate(11,21), img_small: "defaultsign/scorpio_s.gif", img_large: "defaultsign/scorpio_l.jpg" },
{name: "Sagittarius", date_from: getDate(11,22), date_to: getDate(12,21), img_small: "defaultsign/sagittarius_s.gif", img_large: "defaultsign/sagittarius_l.jpg" },
{name: "Capricorn", date_from: getDate(12,22), date_to: getDate(1,19), img_small: "defaultsign/capricorn_s.gif", img_large: "defaultsign/capricorn_l.jpg" },
{name: "Aquarius", date_from: getDate(1,20), date_to: getDate(2,18), img_small: "defaultsign/aquarius_s.gif", img_large: "defaultsign/aquarius_l.jpg" },
{name: "Pisces", date_from: getDate(2,19), date_to: getDate(3,20), img_small: "defaultsign/pisces_s.gif", img_large: "defaultsign/pisces_l.jpg" }
];
var signs;
var MONTHS = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");


var initApp=function(response){
	app=response.data;
	if (app.default_sign == "1"){
		signs = DEFAULT_SIGNS;
	}
	var str = 
	"<table width=100% style='margin-top:25px;'>"+
		"<tr><td class='text' style='padding-top:20px;'>Enter your birthday and press <b>GO</b> to see your results</td></tr>"+
		"<tr><td>"+getChangeDateStr()+"</td></tr>"+
		"<tr><td id=result></td></tr>"+
		"<tr><td align=center style='padding: 10px 0px;'>"+
			"<a href='javascript: postBulletin()'>Post Today's Results on Bulletin</a>"+
			"<a style='margin-left: 40px;' href='javascript: sendActivity()'>Post Friend Update</a>"+
		"</td></tr>"+
		"<tr><td><table width=100%>";
	for (var i=0;i<signs.length;i++){
		if (i % 4 == 0) str += "<tr>";
		str += "<td><table>"+
		"<tr>"+
			"<td><img src='"+IMG_URL+signs[i].img_small+"'></td>"+
			"<td><a id=sign_"+i+" href='javascript:changeSign("+i+")' class=signname>"+signs[i].name+"</a></td>"+
		"</tr>"+
		"<tr>"+
			"<td colspan=2 class=signdate>"+getSignDateStr(signs[i])+"</td>"+
		"</tr>"+
		"</table></td>";
		if (i % 4 == 3) str += "</tr>";
	}
	str += "</table></td></tr></table>";
	$("horoscopeTab").innerHTML = str;
	$("advert").innerHTML = getAdVert();
	req_getTodayGoroscope(false);
	embedGoogleAnalitics();
}

var getChangeDateStr = function(){
	var str = "<form name=dateform><table><tr><td>Year:<select name=year>";
	for (var i=1920;i<2010;i++){
		var selected = "";
		if (userBirthday && userBirthday.getFullYear() == i)
			selected = "selected";
		str += "<option "+selected+" value="+i+">"+i+"</option>";
	}
	str += "</select></td>"+
	"<td>Month:<select name=month>";
	for (var i=0;i<12;i++){
		var selected = "";
		if (userBirthday && userBirthday.getMonth() == i)
			selected = "selected";
		str += "<option "+selected+" value="+i+">"+MONTHS[i]+"</option>";
	}
	str += "</select></td>"+
	"<td>Day:<select name=day>";
	for (var i=1;i<32;i++){
		var selected = "";
		if (userBirthday && userBirthday.getDate() == i)
			selected = "selected";
		str += "<option "+selected+" value="+i+">"+i+"</option>";
	}
	str += "</select></td>"+
	"<td><img onclick=changeDate() src='"+IMG_URL+"go.gif'></td></tr></table></form>";
	return str;
}

var showHoroscope = function(){
	$("horoscopeTab").style.display = "";
	$("friendTab").style.display = "none";
}

var changeDate = function(){
	var form = document.forms["dateform"];
	var y = form.year.value;
	var m = form.month.value;
	var d = form.day.value;
	var bdate = new Date();
	bdate.setMonth(m);
	bdate.setYear(y);
	bdate.setDate(d);
	selectedSign = getSignByBirthdate(bdate);
	changeSign(selectedSign);
}

var changeSign = function(selectedIndex){
	selectedSign = signs[selectedIndex];
	showResult(selectedSign);
	for (var i=0;i<signs.length;i++){
		$("sign_"+i).className = "signname";
	}
	$("sign_"+selectedIndex).className = "selectedSignName";
}

var getSignDateStr = function(sign){
	return MONTHS[sign.date_from.getMonth()]+" "+sign.date_from.getDate()+" - "+
		   MONTHS[sign.date_to.getMonth()]+" "+sign.date_to.getDate();
}

var getAppInfo = function(){
	var mpApp = opensocial.getEnvironment().currentApplication;
	MP_APP.ICON_LARGE = mpApp.getField("ICON_LARGE");
	MP_APP.ICON_SMALL = mpApp.getField("ICON_SMALL");
	MP_APP.ID = mpApp.getField("ID");
	MP_APP.NAME = mpApp.getField("NAME");
	MP_APP.PROFILE_URL = mpApp.getField("PROFILE_URL");
	MP_APP.CANVAS_URL = "http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId="+MP_APP.ID;
}

var req_getTodayGoroscope = function(){
	var type = app.is_rss == "1" ? CONTENT_TYPE_FEED : CONTENT_TYPE_DOM;
	Request.sendGET(app.rss_url, resp_getTodayGoroscope, type);
}

var resp_getTodayGoroscope = function(response){
	if (app.is_rss == "1"){
		parseRSS(response);
	}
	else{
		parseHTML(response);
	}
	var params = gadgets.views.getParams().appParams;
	if (params && params["signIndex"]){
		selectedSign = parseInt(params["signIndex"]);
	}else{
		selectedSign = getSignByBirthdate(userBirthday);
	}
	if (selectedSign) changeSign(selectedSign);
}

var parseRSS = function(response){
	var items = response.data.items;
	for (var s=0;s<signs.length;s++){
		for (var i=0;i<items.length;i++){
			if (items[i].title.indexOf(signs[s].name) >= 0){
				signs[s].result = items[i].description.substring(3, items[i].description.indexOf("</p>"));
			}
		}
	}
}

var parseHTML = function(response){
	
}

var showResult = function(sign){
	var res = sign.result ? sign.result : "Nice day for you.";
	var str = "<table align=center><tr>"+
	"<td><img src='"+IMG_URL+sign.img_large+"'></td>"+
	"<td valign=top><div class=signLargeName>"+sign.name+"</div>"+
	"<div class=signdate>"+getSignDateStr(sign)+"</div>"+
	"<br>"+
	"<div class=resultstring>"+res+"</div>"+
	"<div style='margin-top: 15px;'><a href='javascript: showFriends()'>Tell Friends</a></div>"+
	"</td>"+
	"</tr></table>";
	$("result").innerHTML = str;
}


var showFriends = function(){
	$("horoscopeTab").style.display = "none";
	$("friendTab").style.display = "";
	var str = "<div class=back><a href='javascript: showHoroscope()'>Back to Horoscope</a></div>"+
			  "<div class=smallheader>Click on a friend's image to invite him/her to "+MP_APP.NAME+"</div>"+
			 /*"<form name='inviteForm'>"+
			  "<span>Click on a friend's image to</span>"+
			  "<input style='margin-left:15px;' type=radio checked name=inviteType>Send Message"+
			  "<input style='margin-left:15px;' type=radio name=inviteType>Post On Profile"+
			  "<input style='margin-left:15px;' type=checkbox checked name='activity'>Publish Friend Update"+
			  "</form>"+*/
			  "<div style='overflow:auto;height:900px;border:1px solid #CCCCCC;' id=friend></div>";
	$("friendTab").innerHTML = str;
	var inviteObj = new FriendSelector("friend");
}

var req_getHTMLToDisplay = function(action, params){
	container.innerHTML = loadingImgStr;
	Request.sendGET(SERVICE_URL+"?app_id="+appId+"&t="+action+"&userId="+userId+(params ? params : ''), resp_getHTMLToDisplay, CONTENT_TYPE_TEXT);
}

var resp_getHTMLToDisplay = function(response){
	container.innerHTML = response.text;
	gadgets.window.adjustHeight();
}

var defaultInviteMessage = opensocial.newMessage("Hey I suppose you'd like to know what starts tell you. If yes, then install [app].");

var postBulletin = function(count){
	var subject = MP_APP.NAME+": "+nowStr;
	var content = "";
	for (var i=0; i<signs.length;i++){
		content += "<img src='"+IMG_URL+signs[i].img_small+"'><b>"+signs[i].name+":  </b>"+
					signs[i].result.substring(0, signs[i].result.length/2)+
					"...  <a href='"+MP_APP.CANVAS_URL+"'>read more</a><br>";
	}
	postTo_(subject, content, getId(user), "NOTIFICATION");
}

var $ = function(id){
	return document.getElementById(id);
}
var allContent;
var now = new Date();
nowStr = MONTHS[now.getMonth()]+" "+now.getDate()+", "+now.getFullYear();
	
var fillBody = function(){
	allContent = $("allContent");
	getAppInfo();
	var str = 
	'<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script><script type="text/javascript">_uacct = "UA-5234570-1";urchinTracker();</script>'+
	'<table class=container><tr>'+
		'<td valign=top>'+
			'<div id="top_banner" style="margin-top:5px;" >'+getAd()+'</div>'+
			'<center class=header>'+MP_APP.NAME+': <span class=today>'+nowStr+'</span></center>'+
			'<div id=container>'+
				'<div id=horoscopeTab></div>'+
				'<div id=friendTab style="display:none"></div>'+
			'</div>'+
			'<div style="margin-top:0px;" id="bottom_banner"></div>'+
		'</td>'+
		'<td width=120px valign=top style="padding:0px 10px;" id=advert></td>'+
	'</tr></table>';
	allContent.innerHTML = str;
	container = $("container");
	setTimeout(bottomAd, 5000);
	getUser();
}

var bottomAd = function(){
	$("bottom_banner").innerHTML = getAd();
}

var showMask = function() {
	$("container").innerHTML = "";
	var bodyMask = document.createElement("div");
	bodyMask.className = "body-mask";
	bodyMask.id = "body-mask";
	bodyMask.onclick = function(ev){
		if (window.event) ev = window.event;
		ev.cancelBubble = true;
		return false;
	}
	document.body.appendChild(bodyMask);
	
	var wizardBox = document.createElement("div");
	wizardBox.className = "wizardBox-dlg";
	if (MP_APP.NAME.length > 22){
		wizardBox.style.left = 40+"px";
	}else{
		wizardBox.style.left = (70+MP_APP.NAME.length*10)+"px";
	}
	wizardBox.id = "wizardBox-dlg";
	wizardBox.innerHTML = 
	"<center><img src='"+IMG_URL+"arrow_jump.gif'></center>"+
	"<div style='border: 3px solid red; padding:13px'>"+
	"Add / Install this App</div>";
	document.body.appendChild(wizardBox);
}

function embedGoogleAnalitics(){
 try{
  var head = document.getElementsByTagName("head");
  var script = document.createElement("script");
  script.setAttribute('src', 'http://www.google-analytics.com/urchin.js');
  script.setAttribute('type', 'text/javascript');
  head[0].appendChild(script);
  
  var script = document.createElement("script");
  script.setAttribute('type', 'text/javascript');
  script.text = '_uacct = "UA-5234570-2";urchinTracker();';
  head[0].appendChild(script);
 }catch(ex){}
}


////////////////utils
var Request = {};
Request.sendPOST = function(url, data, responseHandler, contentType) {
	var os_params = {};
	os_params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	os_params[gadgets.io.RequestParameters.CONTENT_TYPE] = contentType;
	os_params[gadgets.io.RequestParameters.POST_DATA] = data;
	//gadgets.io.encodeValues(data) data should be object not astring
	gadgets.io.makeRequest(url, responseHandler, os_params);
}
Request.sendGET = function(url, responseHandler, contentType, refresh) {
	var os_params = {};
	os_params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
	os_params[gadgets.io.RequestParameters.CONTENT_TYPE] = contentType;
	os_params[gadgets.io.RequestParameters.NUM_ENTRIES] = 20;
	var callback = function(response){
		if (typeof refresh == "undefined" || refresh == true){
			refreshIframes();
		}
		responseHandler(response);
	}
	gadgets.io.makeRequest(url, callback, os_params);
}

var user = null;
function getUser() {
	osContainer = opensocial.Container.get();
    var req = opensocial.newDataRequest();
    var paramViewer = {};
    paramViewer[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
    [opensocial.Person.Field.THUMBNAIL_URL, 
     opensocial.Person.Field.NAME, 
     opensocial.Person.Field.PROFILE_URL,
     opensocial.Person.Field.AGE,
     opensocial.Person.Field.GENDER,
	 opensocial.Person.Field.DATE_OF_BIRTH];
        
    req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER, paramViewer), "viewer");
    req.send(resp_getUser);
};

function resp_getUser(data) {
	try{
	  	user = data.get("viewer").getData(); 
		userId = getId(user);
		userThumbnail = user.getField(opensocial.Person.Field.THUMBNAIL_URL);
		userName 	= user.getDisplayName();
		userProfile = user.getField(opensocial.Person.Field.PROFILE_URL);
		userAge = user.getField(opensocial.Person.Field.AGE);
		userGender = user.getField(opensocial.Person.Field.GENDER);
		userGender = userGender=="Female" ? 1 : 0;
		userBirthday = user.getField(opensocial.Person.Field.DATE_OF_BIRTH);
		if (!userAge) userAge = 0;
				
	}catch(ex){
		userId = null;
	}
	isAdmin = userId == 365337006;	
	if (userId == null){
		showMask();
	}else{
		var data = getUserPostData();
		Request.sendPOST(SERVICE_URL+"?app_id="+appId+"&t=adduser&userId="+userId+"&nopromote=1&json=1", data, initApp, CONTENT_TYPE_JSON);
	}
	
};

var getSignByBirthdate = function(userBirthday){
	if (!userBirthday) return null;
	var bdate = getDate(userBirthday.getMonth()+1, userBirthday.getDate());
	for (var i=0;i<signs.length;i++){
		if (bdate <= signs[i].date_to && bdate >= signs[i].date_from)
			return i;
	}
	return null;
}

var getUserPostData = function(){
	var str = "userName="+encodeURIComponent(userName)+
			  "&thumbnail="+encodeURIComponent(userThumbnail)+
			  "&profile="+encodeURIComponent(userProfile)+
    		  "&age="+encodeURIComponent(userAge)+
    		  "&gender="+encodeURIComponent(userGender)+
			  "&birthday="+userBirthday.getFullYear()+"-"+(userBirthday.getMonth()+1)+'-'+userBirthday.getDate()+
	    	  "&userId="+userId;
	return str;
}

var getAd = function(){
	//var adStr = '<iframe src="http://ads.socialmedia.com/myspace/monetize.php?width=728&height=90&pubid=46a00b46475b6cd19d71e885f348bfa6&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="728" height="90" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';
	//var adStr = "<iframe src='http://s2.appotec.com/ha/gift_m/google_ad.html' scrolling='no' frameborder='0' width=728px height=90px></iframe>";
	//adStr = "<iframe src='http://ads.socialreach.com/impression?zone=4149&size=728x90' scrolling='no' frameborder='0' width=728px height=90px></iframe>";		
	//adStr = '<iframe width="728" height="90" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" src="http://sochr.com/i.php?tag=i&p=292&size=728x90"></iframe>';
	adStr = "<iframe src='http://s2.appotec.com/ha/gift_m/rockyou_ad.html' scrolling='no' frameborder='0' width=728px height=90px></iframe>";		
	return adStr;
}

var getAdVert = function(){
	//return '<iframe src="http://ads.socialmedia.com/myspace/monetize.php?width=120&height=600&pubid=e8ca210969473f13c98cd7a3815be9ec&bgcolor=FFFFFF&bordercolor=FFFFFF" border="0" width="120" height="600" name="socialmedia_ad" scrolling="no" frameborder="0"></iframe>';
	var adStr = "<iframe src='http://s2.appotec.com/ha/gift_m/ad_intern_banner.html' scrolling='no' frameborder='0' width=160px height=550px></iframe>";
	if (app.approved == "1"){
		return adStr;	
	}else{
		return "";	
	}
}

var postTo_ = function(title, body, receiver, notType, ptCallback){
	var params = {};
	params[opensocial.Message.Field.TITLE] = title;
	// specify a message type of bulletin
	params[opensocial.Message.Field.TYPE] = opensocial.Message.Type[notType];
	var message = opensocial.newMessage(body, params);
	// initiate requestSendMessage
	opensocial.requestSendMessage(receiver, message, ptCallback);
	refreshIframes();
} 

function sendActivity(){
  var params = {};
  //tell which template we want to use
  params[opensocial.Activity.Field.TITLE_ID] = "viewHoroscope";
  params[opensocial.Activity.Field.TEMPLATE_PARAMS] = {appName: MP_APP.NAME.replace("&#39;s", "'")};
  var activity = opensocial.newActivity(params);
  //this will show a popup dialog asking the user if he really wants to sent the event.
  opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH, activity_callBack);
  refreshIframes();
}

function activity_callBack(response){
   if (response.hadError()){ 
     //response.getErrorMessage()
  }
}

var selectorObjs = {};
var nextPage = function(containerId, page){
	selectorObjs[containerId].next(page);
}
var prevPage = function(containerId){
	selectorObjs[containerId].prev();
}

var allFriends = [];
var FriendSelector = function(containerId){
	this.curPage = 1;
	this.containerId = containerId;
	this.friendsTotalCount = 0;
	//this.commentText=commentText;
	var errorDiv, errorDivBottom;
	var self = this;
	var numberInRow=8;
	selectorObjs[containerId] = this;
		
	this.prev = function(){
		$(containerId+"_"+self.curPage).style.display = "none";
		$(containerId+"_"+(self.curPage-1)).style.display = "";
		self.curPage--;
	}
			
	this.next = function(page){
		var nextPage = page == undefined ? self.curPage + 1 : page;
		if ($(containerId+"_"+nextPage)){
			$(containerId+"_"+nextPage).style.display = "";
			$(containerId+"_"+self.curPage).style.display = "none";
			self.curPage = nextPage;
		}else{
			try{
				$(containerId+"_"+self.curPage).style.display = "none";
			}catch(e){
				;
			}
			$(containerId).innerHTML += "<div id="+containerId+"_"+nextPage+"><div class=loading style='height:480px;'>"+loadingImgStr+"</div></div>";
			self.curPage = nextPage;
			req_getFriends();
		}
	}
	
	var req_getFriends = function(){
		var req = opensocial.newDataRequest();
		MyOpenSpace.DefaultPageSize = 100;
		var params = {}; 
		var page = self.curPage-1;
   		params[opensocial.DataRequest.PeopleRequestFields.FIRST] = page*MyOpenSpace.DefaultPageSize+1;
		params[ opensocial.DataRequest.PeopleRequestFields.MAX ] = MyOpenSpace.DefaultPageSize;
		var idspec = getIdSpec("VIEWER");
   		req.add(req.newFetchPeopleRequest(idspec, params), "friends");
		req.send(resp_getFriends);
	}
	
	var resp_getFriends = function(response){
		refreshIframes();
		var friends = response.get("friends").getData().asArray();
		allFriends = allFriends.concat(friends);
		self.friendsTotalCount = response.get('friends').getData().getTotalSize();
		var str = "<table width=100% cellspacing=4>";
		var pageCount = Math.ceil(self.friendsTotalCount / MyOpenSpace.DefaultPageSize);
		var startPage = null;
		if (pageCount>1){
			str += "<tr><td colspan=10 align='center'>";
			var pagesStr = "";
			for (var p = self.curPage-8; p<self.curPage+8;p++){
				if (p > 0 && p <= pageCount){
					if (startPage == null) startPage = p;
					var color = p == self.curPage ? "color: black" : ""; 
					pagesStr += "<a style='margin: 0px 7px;"+color+"' href='javascript:nextPage(\""+containerId+"\", "+p+")'><b>"+p+"</b></a>";
				}
			}
			if (startPage > 1){
				str += "<a style='margin: 0px 7px;' href='javascript:javascript:nextPage(\""+containerId+"\", "+(self.curPage-1)+")'>Prev</a>";	
			}
			str += pagesStr;
			if (self.curPage < pageCount){
				str += "<a style='margin: 0px 7px;' href='javascript:javascript:nextPage(\""+containerId+"\", "+(self.curPage+1)+")'>Next</a>";
			}
			str += "</td><tr>";
		}
		for(var i=0; i<friends.length;i++) {
			if (i % numberInRow == 0) str+= "<tr>";
			var friendId = getId(friends[i]);
			var name = friends[i].getDisplayName();
		    var thumbnail = friends[i].getField(opensocial.Person.Field.THUMBNAIL_URL);
		    var profile = friends[i].getField(opensocial.Person.Field.PROFILE_URL);
		    //var cellWidth = $(containerId).offsetWidth/numberInRow-15;
		   	str += "<td>"+
					"<table valign=top width=100%>"+
						"<tr>"+    
							"<td class=friend onmouseout='this.className=\"friend\"' onmouseover='this.className=\"selectedFriend\"' onclick='sendInvitation("+friendId+")'>"+
								"<img class=smallImg src='"+thumbnail+"' />"+
								"<div style='width:60px;height:12px;overflow:hidden;font-size:9px;'>"+ name+"</div>"+
							"</td>"+
						"</tr>"+
					"</table>"+
				"</td>";
			if (i % numberInRow == numberInRow-1) str += "</tr>";
		}
		str += "</table>";
		$(containerId+"_"+self.curPage).innerHTML = str;
	}
	
	this.show = function(){
		var cont = $(containerId);
		self.curPage = 1;
		self.friendsTotalCount = 0;
		var table = document.createElement("table");
		table.width="100%";
		var sendCont = document.createElement("tbody");							
		table.appendChild(sendCont);
		cont.parentNode.appendChild(table);
		cont.innerHTML = "<div id="+containerId+"_1></div>";
		req_getFriends();
	}
	self.show();
}

var sendInvitation = function(friendId) {
	var inviteCallback = function(result){
		
	}
	opensocial.requestShareApp(friendId, defaultInviteMessage, inviteCallback);
}

var sendMessage = function(friendId){
	var form = document.forms["inviteForm"];
	var inviteType = form.inviteType[0].checked ? "PRIVATE_MESSAGE" : "PUBLIC_MESSAGE";
	var friend = getPersonObj(friendId);
	var signIndex = getSignByBirthdate(friend.getField(opensocial.Person.Field.DATE_OF_BIRTH));
	var subject = MP_APP.NAME+": "+nowStr;
	var content = "Hi "+friend.getDisplayName()+". I thought you'd like to know "+
		"what results there are in <a target=_blank href='"+MP_APP.CANVAS_URL+"'>"+MP_APP.NAME+"</a> for you.";
	if (signIndex){
		content = "<img src='"+signs[signIndex].img_large+"'>"+
				  signs[signIndex].result.substring(0, signs[signIndex].result.length/2)+
				  "...  <a href='"+MP_APP.CANVAS_URL+"'>read more</a>";
	}
	var callback = function(response){
		if (form.activity.checked && response.getData() == 1){//&& app.approved == "1"
			sendActivity(friendId);
		}
	}
	postTo_(subject, content, friend, inviteType, callback);
}

var doNothing = function(response){
	
}

var getId = function(person){
	var id = person.getId();
	id = id.substring(id.indexOf(":")+1, id.length);
	return id;
}

var getPagingHTML = function(colCount, pageCount, currentPage, handler){
	var str = "";
	if (pageCount > 1){
		str += "<tr><td style='font-size:17px;' colspan="+colCount+" align=right>";
		for (var p = currentPage-2; p<currentPage+2;p++){
			if (p > 0 && p <= pageCount){
				var font = p == currentPage ? "bold" : "normal";
				str += "<a style='margin: 0px 7px;font-weight:"+font+"' href=javascript:"+handler+"("+p+"); >"+p+"</a>";
			}
		}
		if (currentPage < pageCount){
			str += "<a style='margin: 0px 7px;' href='javascript:"+handler+"("+(currentPage+1)+")'>Next</a>";
		}
		str += "</td><tr>";
	}
	return str;
}

var getPersonObj = function(id){
	for (var i=0;i<allFriends.length;i++){
		var friendId = getId(allFriends[i]);
		if (id == friendId){
			return allFriends[i];
		}
	}
}

var getIdSpec = function(id){
	// create the parameters for the idspec to send into the fetch app data request
	var idParams = {};
	idParams[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId[id];
	idParams[opensocial.IdSpec.Field.NETWORK_DISTANCE] = 1;
	// create the idspec
	var idspec = opensocial.newIdSpec(idParams);
	return idspec;
}

var refreshIframes = function(){
	var iframes = document.getElementsByTagName("iframe");
	for (var i=0;i<iframes.length;i++){
		iframes[i].src=iframes[i].src;
	}
}