var container;
var errorDiv;
var hasTaken;
var approved;
var osContainer;
var surveyImgUrl;
var PAGE=0;
var allFriends = []; 
var friendsTotalCount = 1;
var friendPage = 0;
var friendsToInvite = [];
var app=null;
var selectedFriend;
var selectedGift;
//MyOpenSpace.ClientLibraries.includeScript(MyOpenSpace.ClientLibraries.Scripts.MYSPACE_WIDGETS);

var init = function(){
	req_getLevels(false);
	embedGoogleAnalitics();
}

var req_getLevels = function(refresh){
	selectTab("present");
	container.innerHTML = 
	"<div style='margin-bottom:20px;' id=gamespace></div>"+
	"<center>"+getAd(MIDDLE)+"</center>"+
	"<div id=inbox></div>";
	Request.sendGET(SERVICE_URL+"q"+presentId+"?t=levels&userId="+userId+'&ajax=1', resp_getLevels, CONTENT_TYPE_JSON, false);
	Request.sendGET(SERVICE_URL+"q"+presentId+"?t=presentlist_game&userId="+userId, resp_getInbox, CONTENT_TYPE_TEXT, refresh);
}

var resp_getInbox = function(response){
	$("inbox").innerHTML = 
	'<div id=bullSpace style="margin-bottom:10px; font-size:20px; vertical-align:top; text-align:center;">'+
	'You\'ve got <span id=giftCount></span> '+presentName+'s!!!!<br>'+
	'<a id=bulletin>Post Bulletin to Get More</a><br>'+
	'</div>'+response.text;
	if ($("presentlist")){
		var giftCount = $("presentlist").getAttribute("count");
		$("giftCount").innerHTML = giftCount;
		$("bulletin").href = "javascript:postWhatWasReceived("+giftCount+", \"BULLETINS\")";
	}else{
		$("bullSpace").innerHTML = "You haven't received "+presentName+"s yet :( Send "+presentName+" to your friends to encourage them to send it back to you.";
	}
	gadgets.window.adjustHeight();
}

var levels = [];

var resp_getLevels = function(response){
	levels = response.data;
	giftImgUrls = [];
	for (var i=0;i<levels.length;i++){
		giftImgUrls[i] = SERVER_URL+levels[i].img_url+"_100.jpg";
	}
	req_getFriends();
	gadgets.window.adjustHeight();
}

var getRandomElement = function(ar, limit){
	var limit = limit ? limit : ar.length; 
	return ar[Math.floor(Math.random()*(limit-1))];
}

var nextRandomPair = function(){
	var lvl = getRandomElement(levels);
	var friend = getRandomElement(allFriends);
	if (!$("currentGift")){
		var str = 
		"<center><table cellspacing=13>"+
		"<tr><td colspan=3 align=center style='margin-bottom:10px; font-size:18px;color:#5973A9'>"+
			"Play Game. Send random "+presentName+"s to your friends.<br>And Remember!!!<br>The more you send the more you receive ;)"+	
		"</td></tr>"+
		"<tr style=height:190px;>"+
		"<td id=currentGift style='border:1px solid #cccccc;padding:10px; width:180px;' align=center>"+
			"<img src='"+SERVER_URL+lvl.img_url+"_160.jpg'>"+ 
			"<br><b>"+lvl.name+"</b>"+
		"</td>"+
		"<td style='width:60px;'>"+
			"<a href='javascript:sendGift(true)'><img src='"+IMG_URL+"send.png'></a>"+
			"<br><br><a href='javascript:nextRandomPair()'><img src='"+IMG_URL+"skip.png'></a>"+
		"</td>"+
		"<td id=currentFriend style='border:1px solid #cccccc;padding:10px; width:180px;' align=center>"+
			"<img src='"+friend.getField(opensocial.Person.Field.THUMBNAIL_URL)+"'>"+
			"<br><b>"+friend.getField(opensocial.Person.Field.NAME)+"</b>"+
		"</td>"+
		"</tr></table></center>";
		$("gamespace").innerHTML = str;
		gadgets.window.adjustHeight();
	}else{
		$("currentGift").innerHTML = 
			"<img src='"+SERVER_URL+lvl.img_url+"_160.jpg'>"+ 
			"<br><b>"+lvl.name+"</b>";
		$("currentFriend").innerHTML = 
			"<img src='"+friend.getField(opensocial.Person.Field.THUMBNAIL_URL)+"'>"+
			"<br><b>"+friend.getField(opensocial.Person.Field.NAME)+"</b>";
	}
	selectedFriend = friend;
	selectedGift = lvl;
}

var req_getFriends = function(){
	if (allFriends.length < friendsTotalCount){
		var req = opensocial.newDataRequest();
		opensocial.DefaultPageSize = 50;
		var params = {}; 
		params[opensocial.DataRequest.PeopleRequestFields.FIRST] = friendPage*opensocial.DefaultPageSize;
		params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] =
	    [opensocial.Person.Field.THUMBNAIL_URL, 
	     opensocial.Person.Field.NAME, 
	     opensocial.Person.Field.PROFILE_URL
	     ];
		req.add(req.newFetchPeopleRequest("VIEWER_FRIENDS", params), "friends");
		req.send(resp_getFriends);
	}else{
		nextRandomPair();
	}
}
	
var resp_getFriends = function(response){
	var friends = response.get("friends").getData().asArray();
	allFriends = allFriends.concat(friends);
	friendsTotalCount = response.get('friends').getData().getTotalSize();
	nextRandomPair();
}

var req_getHTMLToDisplay = function(action, params){
	var callback = resp_getHTMLToDisplay;
	if (action == "presentlist_game"){
		callback = resp_getInbox;
		$("inbox").innerHTML = loadingImgStr;
	}else{
		selectTab(action);
		container.innerHTML = loadingImgStr;
	}
	Request.sendGET(SERVICE_URL+"q"+presentId+"?t="+action+"&userId="+userId+(params ? params : ''), callback, CONTENT_TYPE_TEXT);
}

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


var sendGift = function(isGame){
	var fr = selectedFriend;
	var id = fr.getField(opensocial.Person.Field.ID);
	var name = fr.getField(opensocial.Person.Field.NAME);
	var thumbnail = fr.getField(opensocial.Person.Field.THUMBNAIL_URL);
	var profile = fr.getField(opensocial.Person.Field.PROFILE_URL);
	var friendList = [];
	friendList[0] = {id:id, hasApp: true, name: name, profile: profile, thumbnail: thumbnail, person: fr};
	if (!isGame){
		selectedGift = levels[0];
	}
	sendPresent(friendList);
	invite(friendList);
	if (isGame){
		req_getFriends();
	}
}


var sendPresent=function(friends){
	var postData="";
	for(var i=0; i<friends.length; i++){
		postData+="ids[]="+friends[i].id+"&";
		postData+="names[]="+friends[i].name+"&";
		postData+="profiles[]="+friends[i].profile+"&";
		postData+="pictures[]="+friends[i].thumbnail+"&";
	}
	postData+="&gift_selector="+selectedGift.id;
	postData+="&giftMessage="+app.default_msg_txt;
	Request.sendPOST(SERVICE_URL+"q"+presentId+"?t=present&userId="+userId, postData, doNothing);
}


var showFriends = function(){
	selectTab("friends");
	container.innerHTML = 
	"<div id=friendCont><h1>Click on a friend's image to see his/her gifts.</h1><div id=friend></div></div>"+
	"<div id=profile style='display:none'>"+
		"<a href='javascript:backToFriendList()'><h1>Back to friend list</h1></a>"+
		"<div id=friendInbox>"+
	"</div>";
	var inviteObj = new FriendSelector("friend", [showFriendProfile], "", false);
}

var backToFriendList = function(){
	$("friendCont").style.display = "";
	$("profile").style.display = "none";
	gadgets.window.adjustHeight();
}
var selectedFriend = null;
var showFriendProfile = function(friends, selectorObj){
	$("friendCont").style.display = "none";
	$("profile").style.display = "";
	$("friendInbox").innerHTML = loadingImgStr;
	selectedFriend = selectorObj.getPersonObj(friends[0].id);
	Request.sendGET(SERVICE_URL+"q"+presentId+"?t=presentlist_game&friend=true&userId="+friends[0].id, resp_getFriendProfile);
}

var resp_getFriendProfile = function(response){
	var friendName = selectedFriend.getField(opensocial.Person.Field.NAME);
	$("friendInbox").innerHTML = 
	'<div id=bullSpace style="margin-bottom:10px; font-size:20px; vertical-align:top; text-align:center;">'+
	friendName+" has got <span id=giftCount></span> "+presentName+"s!!!!"+
	'</div>'+response.text;
	if ($("presentlist")){
		var giftCount = $("presentlist").getAttribute("count");
		$("giftCount").innerHTML = giftCount;
	}else{
		$("bullSpace").innerHTML = 
		friendName+" hasn't received any "+presentName+" yet.<br>"+
		"<a href='javascript:sendGift()'>Be the first to send.</a>";
	}
	gadgets.window.adjustHeight();
}

var friendIndex = 0;
var defaultInviteMessage = opensocial.newMessage("Hey I'm sending you [app]. Take it.");

var inviteViaBulletin = function(forwardToResultsPage){
	selectTab("invite");
   	var str = "<center><h1 style='font-size:19px'>Invite Your Friends to have more fun!!!<br/></h1>"+
   			"<img onclick='postInvite()' src='"+IMG_URL+"bulletin.png' style='cursor: pointer;'/></center>";
  	str += "<div style='margin: 30px 0px;'><div id=friend><div></div>";
    container.innerHTML = str;
    var inviteObj = new FriendSelector("friend", [sendOnlyInvitation], "Invite", false);
}

var postInvite = function(){
	var subject = "Send "+presentName+" to your friends.";
	var imgStr = "";
	for (var i=0;i<giftImgUrls.length;i++){
		imgStr += "<a target='_blank' href='"+MP_APP.CANVAS_URL+"'><img boder='0px' style='margin:8px;' src='"+giftImgUrls[i]+"' /></a>";
	}
	var content =
	"<b>Hey!<br/>"+
	"See how nice <a target='_blank' href='"+MP_APP.CANVAS_URL+"'>"+presentName+"</a> I've got. "+
	"<br>You may also <a target='_blank'  href='"+MP_APP.CANVAS_URL+"'>send "+presentName+"</a> to your friends!</b><br>"+imgStr;
	postTo_(subject, content, user, "BULLETINS");
}

var postWhatWasReceived = function(count, placeToPost){
	var subject = "I have received "+count+" "+presentName+"s!!!";
	var content = 
	"<b>I have received "+count+" <a href='"+MP_APP.CANVAS_URL+"'>"+presentName+"s.</a>"+
	"<br>You may also <a href='"+MP_APP.CANVAS_URL+"'>send "+presentName+"</a> to me and your friends!!!<br><br>";
	content += getPostContent();
	placeToPost = placeToPost ? placeToPost : "BULLETINS";
	postTo_(subject, content, user, placeToPost);
}

var postWhatWasSent = function(count, placeToPost){
	var subject = "I have sent "+count+" "+presentName+"s!!!";
	var content = 
	"<b>I have sent "+count+" <a href='"+MP_APP.CANVAS_URL+"'>"+presentName+"s.</a>"+
	"<br>You may also <a href='"+MP_APP.CANVAS_URL+"'>send "+presentName+"</a> to me and your friends!!!<br><br>";
	content += getPostContent();
	placeToPost = placeToPost ? placeToPost : "COMMENTS";
	postTo_(subject, content, user, placeToPost);
}

var getPostContent = function(){
	var content = "";
	var imgs = container.getElementsByTagName("img");
	var sentGifts = [];
	for (var i=0;i<imgs.length;i++){
		if (imgs[i].name == 'gift'){
			var isSent = false;
			for (var j=0;j<sentGifts.length;j++){
				if (imgs[i].src == sentGifts[j]){
					isSent = true; break;
				}
			}
			if (!isSent){
				content += "<a href='"+MP_APP.CANVAS_URL+"'><img border='0px' src='"+imgs[i].src+"' >&nbsp;</a>";
				sentGifts[sentGifts.length] = imgs[i].src;
			}
		}
	}
	content += "<br><br>Send <a href='"+MP_APP.CANVAS_URL+"'>"+presentName+"</a> to your friends!!!</b>";
	
	var additionalGifts = "";
	for (var i=0;i<giftImgUrls.length;i++){
		var isSent = false;
		for (var j=0;j<sentGifts.length;j++){
			if (giftImgUrls[i] == sentGifts[j]){
				isSent = true; break;
			}
		}	
		if (!isSent){
			additionalGifts += "<a href='"+MP_APP.CANVAS_URL+"'><img border='0px' src='"+giftImgUrls[i]+"' >&nbsp;</a>";
		}
	}
	if (additionalGifts != ""){
		content += "<br><br><b>See also</b><br><br>"+additionalGifts;
	}
	return content;
}

var postWhatWasJustSent = function(friends, selectorObj){
	if (app!=null && app.approved && app.approved==1){
		var subject = "I have just sent "+presentName+" to my friends!!!";
		var content = 
		"<b>I have sent <a href='"+MP_APP.CANVAS_URL+"'>"+presentName+"</a> to my friends."+
		"<br><br><img border='0px' style='margin:8px;' src='"+SERVER_URL+selectedGift.img_url+"' />"+
		"<br><br>You may also <a href='"+MP_APP.CANVAS_URL+"'>send "+presentName+"</a> to me and your friends!!!</b>";
		var additionalGifts = "";
		for (var i=0;i<giftImgUrls.length;i++){
			additionalGifts += "<a href='"+MP_APP.CANVAS_URL+"'><img border='0px' src='"+giftImgUrls[i]+"' >&nbsp;</a>";
		}
		content += "<br><br><b>See also</b><br><br>"+additionalGifts;
		
		var postComment = function(){
			if (selectorObj.isCommentChecked()){
				postTo_(subject, content, user, "COMMENTS");	
			}
		}
		
		if (selectorObj.isBulletinChecked()){
			postTo_(subject, content, user, "BULLETINS", postComment);	
		}else{
			postComment();
		}
	}
}

var fillBody = function(){
	allContent = $("allContent");
	var butName = presentId == 51 ? "Say Good Morning" : "Send "+presentName;
	allContent.innerHTML = 
	'<table><tr>'+
	'<td style="vertical-align:top">'+
		'<table cellspacing=0 cellpadding=0>'+
			'<tr class="tabs" id="tabContainer">'+
				'<td name=present id="present"><a href="javascript:req_getLevels()">'+butName+'</a></td>'+
				'<td name=friends id="friendProfile"><a href="javascript:showFriends()">Friends</a></td>'+
				'<td name=invite id="invite"><a href="javascript:inviteViaBulletin()">Invite</a></td>'+
			'</tr>'+
		'</table>'+
		'<div id="top_banner" style="margin-top:5px;text-align:center" >'+getAd(TOP)+'</div>'+
		'<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 width=100% valign=top>'+
				'<div id=error style="display: none"></div>'+
				'<div id=container><div class=loading><img src="http://s2.appotec.com/ha/gift_m/images/loading.gif" /></div></div>'+
			'</td>'+
		'</tr></table>'+ 
		'<div style="margin-top:0px;text-align:center" id="bottom_banner"></div>'+
	'</td>'+
	'<td style="padding-left:20px;vertical-align:top" id=rightbar></td>'+
	'</tr></table>';
		
	container = $("container");
	errorDiv = $("error");
	getUser();
	setTimeout(bottomBanner, 10000);
	getAppInfo();
}

var MP_APP = {};
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 hideTabs = function(msg) {
	init();
	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";
	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 to start using "+presentName+"</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){}
}


function bottomBanner() {
	$('bottom_banner').innerHTML = getAd(BOTTOM);
	gadgets.window.adjustHeight();
}

var level = 0;

function showAddGift(){
	selectTab('addgift');
	$("top_banner").style.display = "none";
	$("bottom_banner").style.display = "none";
	level = 0;
	var str = '<div id=error></div>'+
			  '<div id=giftSpace></div>'+
			  '<div><a href="javascript:addGift()">Add One More Gift</a></div>'+
			  '<input id="sendReqBut" style="float:right" type=button value="Add Gifts" onclick="req_addGift()" />';
	container.innerHTML = str;
	addGift();
}

function addGift(){
	level++;
	var str = 
	'<table id=gift'+level+'>'+
		'<tr>'+
			'<td width="30%" style="color: rgb(85, 85, 85); font-size: 11px; font-weight: bold;">Gift Name</td>'+
			'<td><input id="giftname'+level+'" type="text" name="title3" style="width: 286px;"/></td>'+
			'<td coslpan=2 valign=top><img onclick="deleteGift('+level+')" src="http://s2.appotec.com/ha/gift_m/images/delete.gif" /></td>'+
		'</tr>'+
		'<tr>'+
			'<td style="color: rgb(85, 85, 85); font-size: 11px; font-weight: bold;">Gift Picture</td>'+
			'<td>'+
				'<img id="giftimg'+level+'" width=100px height=100px src="http://s2.appotec.com/ha/gift_m/images/noimage.jpg" /><br>'+
				'<form onsubmit="return AIM.submit(this, {onStart : uploadStarted, onComplete : uploadCompleted, id:'+level+'})" enctype="multipart/form-data" action="http://s2.appotec.com/ha/gift_m/?t=upload&userId='+userId+'&level='+level+'" method="post">'+ 
					'<input id="uploadField'+level+'" type="file" id="fileUpload" name="file"/><input id="submit'+level+'" type="submit" value="Upload"/>'+
				'</form>'+
			'</td>'+
		'</tr>'+
	'</table>';
	$("giftSpace").innerHTML += str;
	gadgets.window.adjustHeight();
}

function deleteGift(level){
	$("gift"+level).parentNode.removeChild($("gift"+level));	
}

function uploadStarted(level) {
   var re_text = /\.jpg|.jpeg|.gif/i; 
   var filename = $("uploadField"+level).value;
   /* Checking file type */
   if (filename.search(re_text) == -1){
        alert("File does not have text(jpg, jpeg) extension");
        return false;
    }
	$("submit"+level).disabled = true;
    return true;
}

function uploadCompleted(level) {
	$("submit"+level).disabled = false;
	$("submit"+level).setAttribute("uploaded", "true");
	$("giftimg"+level).src = "http://s2.appotec.com/ha/gift_m/cache/img_upload/"+userId+"_"+level+"_100.jpg?v="+Math.random();
}

function req_addGift(){
	var tables = container.getElementsByTagName("table");
	var data = '';
	for (var i=0;i<tables.length;i++){
		var level = tables[i].id.substring(4,tables[i].id.length);
		if ($("submit"+level).getAttribute("uploaded") == "true"){
			var name = $('giftname'+level).value;
			if (name == ""){
				$("error").innerHTML = ("Fill in gift names.");
			}else{
				data += '&gifts[' + level + ']=' + name;
			}
		}
	}
	if (data != ''){
		$("sendReqBut").disabled = true;
		Request.sendPOST(SERVICE_URL+"q"+presentId+"?t=addgift&userId="+userId, data, resp_addGift);
	}else{
		$("error").innerHTML = ("You haven't uploaded any gift.");
	}
}

function resp_addGift(response){
	$("sendReqBut").disabled = false;
	container.innerHTML = "<div class='heading'>Thank you for uploading new gifts. <br>We will review and publish them to our gallery in order they are compatable with the application.</div>";
}
