 /**
 * @author Lalit (http://www.lalit.org)
 * Copyright 2008 BitRhymes Inc. (http://www.bitrhymes.com)
 */
// Jungle Apps Object
JA.Options = {
	FRIENDS_PER_FETCH: 100,
	FRIENDS_PER_PAGE: 45,
	TAGS_PER_PAGE: 5,
	GIFTS_PER_PAGE: 5,
	MESSAGES_PER_PAGE: 5,
	PEOPLE_PER_FETCH: 35,
	MAX_AJAX_RETRIES: 2,
	MAX_PANTS_PER_PAGE: 100,
	MAX_SLOGANS_PER_PAGE: 20,
	selector_loaded: false
	
};

JA.Selector ={};
JA.State = {
	fireIndex:1,	// start with one
	fireAttempts:[]
};
JA.viewer = {
	id: 0,
	friends: [],
	friendsDict:[]
};

JA.init = function (){
	JA.Dialog.init();

	//$('d_startup').getElementsBySelector('.c_dialog_text').first().update('<br><font color="blue" class="c_small"> Some users have reported not being able to use Firefox. Please use Internet Explorer for the time being...</font>');
	JA.Dialog.show(JA.Dialog.STARTUP);
	JA.Tabs.init();
	JA.fetchViewer();
	JA.util.resize();

	var	urlParams = gadgets.util.getUrlParameters();
	JA.util.log(urlParams);
	if (urlParams.installState  == "2") {
		$('app_intro').show();
	}
	if (urlParams.p && urlParams.p != 'null') {
		var p = urlParams.p.evalJSON();
		JA.util.log(p);
		if (p && p.userPatch) {
			JA.Navigate.userPatch(p.userPatch);
		} else if (p && p.refer && p.method) {
			JA.registerInvite(p.refer, p.method);
		}
	}
	//JA.util.log(gadgets.util.getUrlParameters());
};

JA.fetchViewer =  function() {
    var os = opensocial.Container.get();
    var req = os.newDataRequest();
    
	var params = {};
	params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [opensocial.Person.Field.ID,MyOpenSpace.Person.Field.ABOUT];
    var viewerReq = req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER, params);
    req.add(viewerReq);
	
    req.send(function(resp) {
		var viewer = resp.get(opensocial.DataRequest.PersonId.VIEWER);
	    if (viewer.hadError()) {
			if (viewer.getErrorCode() == opensocial.ResponseItem.Error.UNAUTHORIZED) {
				JA.Action.error('You have not added the application.<br>Please click on \'Add this app\' above to add the application.');
				$('add_app_arrow').show();
				$('sr_2476_728x90').hide();
				$('ifr_ad1').hide();
			} else if (viewer.getErrorMessage().indexOf('found') != -1) {
				JA.Action.error('There was some problem fetching your details. Make sure you are <a href="http://www.myspace.com" target="_blank">logged in</a>.');
			} else {
				JA.	Action.error('There was some problem fetching your details. <a href="javascript:void(0)" onclick="JA.Dialog.show(JA.Dialog.LOADING);JA.fetchViewer();">Click here</a> to try again.</a>');
			}
		} else {
			var viewerData = viewer.getData();
			//JA.util.log(viewerData);
			JA.viewer.object = viewerData;
			JA.viewer.id = viewerData.getField(opensocial.Person.Field.ID);
			JA.viewer.name = viewerData.getField(opensocial.Person.Field.NAME);
			JA.viewer.gender = viewerData.getField(MyOpenSpace.Person.Field.GENDER).charAt(0).toUpperCase(); // M || F
			JA.viewer.profile = viewerData.getField(opensocial.Person.Field.PROFILE_URL);
			JA.viewer.image = viewerData.getField(opensocial.Person.Field.THUMBNAIL_URL).replace('s_','l_');
			JA.viewer.country = viewerData.getField(MyOpenSpace.Person.Field.COUNTRY);
			JA.viewer.region = viewerData.getField(MyOpenSpace.Person.Field.REGION);
			JA.viewer.age = viewerData.getField(MyOpenSpace.Person.Field.AGE);
			JA.viewer.marital_status = viewerData.getField(MyOpenSpace.Person.Field.MARITAL_STATUS);
			JA.viewer.meet = viewerData.getField(MyOpenSpace.Person.Field.DESIRE_TO_MEET);
			JA.viewer.about = viewerData.getField(MyOpenSpace.Person.Field.ABOUT);
			JA.viewer.status = viewerData.getField(MyOpenSpace.Person.Field.STATUS);
			JA.util.log(JA.viewer);
			
			$('head_user_image').update('<img src="'+JA.viewer.image+'" border="1" size="30" width="30" align="absmiddle" style="border:1px solid #666">');
			JA.URL.redirect += '&appparams=' +  escape('{\'refer\':\'' + JA.viewer.id +'\', \'method\':\'GP1\'}');

			JA.Friends.init();
			JA.util.emailLink();

			// Done loading!
		}
	});
};
JA.State.friendPage = 0;
JA.State.appFriendsTry = 0;
JA.Friends = {
	init: function(){
		JA.viewer.friends = [];
		JA.viewer.appFriends = [];
		JA.viewer.nonAppFriends = [];
		JA.viewer.friendsDict = [];
		this.fetch();
	},
	fetch: function(){
		var os = opensocial.Container.get();
		var req = os.newDataRequest();
		var params = {};
		MyOpenSpace.DefaultPageSize = JA.Options.FRIENDS_PER_FETCH;
		params[opensocial.DataRequest.PeopleRequestFields.FIRST] = JA.State.friendPage * JA.Options.FRIENDS_PER_FETCH + 1;
		req.add(req.newFetchPeopleRequest(opensocial.DataRequest.Group.VIEWER_FRIENDS, params), 'VIEWER_FRIENDS');
		JA.State.friendPage++;
		
		req.send(function(resp){
			if (!resp.hadError() && !resp.get('VIEWER_FRIENDS').hadError()) {
			
				var friendsData = resp.get('VIEWER_FRIENDS').getData();
				
				friendsData.each(function(fd){
					if (fd.getField(opensocial.Person.Field.ID) == 6221) {
						//JA.util.log('Filtered non RegularUser');
						return;
					}
					var f = {
						id: fd.getField(opensocial.Person.Field.ID),
						name: fd.getField(opensocial.Person.Field.NAME),
						profile: fd.getField(opensocial.Person.Field.PROFILE_URL),
						thumb: fd.getField(opensocial.Person.Field.THUMBNAIL_URL),
						hasApp: false,
						sqft: 0,
						obj: fd
					};
					if (f.name) {
						JA.viewer.friends.push(f);
						JA.viewer.friendsDict[f.id] = f;
					}
				});
				
				if (JA.State.friendPage > 0 && (friendsData.size() >=JA.Options.FRIENDS_PER_FETCH )) {
					JA.Friends.fetch();
				} else {
					JA.Friends.fetchAppFriends();				
				}
			} else {
				JA.Friends.fetchAppFriends();
			}
		});
	},
	fetchAppFriends: function() {
		/*
		var os = opensocial.Container.get();
		var req = os.newDataRequest();
		var params = {};
		MyOpenSpace.DefaultPageSize = JA.Options.FRIENDS_PER_FETCH;
		params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 0;
		params[opensocial.DataRequest.PeopleRequestFields.FILTER] = opensocial.DataRequest.FilterType.HAS_APP;
		req.add(req.newFetchPeopleRequest(opensocial.DataRequest.Group.VIEWER_FRIENDS, params), 'VIEWER_FRIENDS_APP');
		
		req.send(function(resp){
			if (!resp.hadError() && !resp.get('VIEWER_FRIENDS_APP').hadError()) {
				var friendsData = resp.get('VIEWER_FRIENDS_APP').getData();
				friendsData.each(function(fd){
					var id = fd.getField(opensocial.Person.Field.ID);
					if (JA.viewer.friendsDict[id]) {
						JA.viewer.friendsDict[id].hasApp = true;
						JA.viewer.appFriends.push(id);
					} else {
						if (fd.fields_.USER_TYPE != 'RegularUser' || fd.getField(opensocial.Person.Field.ID) == 6221) {
							//JA.util.log('Filtered non RegularUser');
							return;
						}
						var f = {
							id: fd.getField(opensocial.Person.Field.ID),
							name: fd.getField(opensocial.Person.Field.NAME),
							gender: null,
							profile: fd.getField(opensocial.Person.Field.PROFILE_URL),
							thumb: fd.getField(opensocial.Person.Field.THUMBNAIL_URL),
							hasApp: true,
							obj: fd
						};
						if (f.name) {
							JA.viewer.friends.push(f);
							JA.viewer.appFriends.push(f.id);
							JA.viewer.friendsDict[f.id] = f;
						}
					}
				});
			} else {
				if (JA.State.appFriendsTry == 0) {
					JA.State.appFriendsTry++;
					JA.Friends.fetchAppFriends();
				}
			}

			
			JA.viewer.friends.each(function(f){
				if (!f.hasApp) {
					JA.viewer.nonAppFriends.push(f.id);
				}
			});

			//JA.Points.totalAppFriends = JA.viewer.appFriends.length;
			JA.Points.init();
			//JA.FriendSelector.friends = JA.viewer.friends;
			//JA.FriendSelector.friendsDict = JA.viewer.friendsDict;



			//JA.FriendSelector.init('friends_selector');
			JA.Dialog.close();
		});
		*/
		JA.Points.init();
	}
};


/**
 * Prototabs
 */
JA.Tabs = {
	init: function(){
		
		var tabs = new Control.Tabs('h_pagetabs', {
			afterChange: function(new_tab){
				
				/*
				if (new_tab.id == 'plants' && JA.State.more_feet == true) {
					$('more_feet_tab').addClassName('active');
					$('plants_tab').removeClassName('active');
				}else {
					$('more_feet_tab').removeClassName('active');
				}
				*/
				
				JA.util.urchin('/green/tabs/'+new_tab.id);
				switch (new_tab.id) {
					case 'green_patch':
						JA.Navigate.greenPatch();
						break;
					case 'top_people':
						JA.Navigate.topPeople();
						break;
					case 'plants':
						JA.Navigate.plants();
						JA.util.resize();
						break;
					case 'send_plants':
						$('buy_mesg').hide();
						$('send_plant_mesg').show();
						break;
					case 'store':
						JA.Navigate.store();
						JA.util.resize();
						break;
					case 'market':
						JA.Navigate.market();
						break;
					case 'buy_plants':
						JA.Navigate.buyPlants();
						break;
					case 'send_pumpkin':
						JA.Navigate.sendPumpkin();
						break;
					case 'pumpkin_farm':
						break;
					case 'pumpkin_friends':
						//$('pumpkin_send_selected').hide();
						break;
					case 'pumpkin_leader':
						JA.Pumpkins.leader();
						break;
					case 'faqs':
						break;
					case 'offerpal':
						JA.Navigate.offerpal();
						break;
					case 'green_team':
						JA.Navigate.greenTeam();
						break;
					case 'more_points':
						JA.Navigate.morePoints();
						break;
					case 'articles':
						
						JA.Navigate.fetchArticles();
						break;
					default:
						setTimeout('JA.util.resize()',100);
				}
				if (new_tab.id != 'plants' && new_tab.id != 'nonapp_patch') {
					JA.State.nonUserPatch = null;
					JA.State.toCurrentUser = null;
				}
				
				// to highlight the your patch tab
				if (new_tab.id == 'user_patch') {
					$('green_patch_tab').addClassName('active');
				}
				
				// to highlight the your patch tab
				if (new_tab.id == 'buy_plants') {
					$('market_tab').addClassName('active');
				}
				
				JA.Invites.next();
				JA.util.top();
				JA.util.resize();
			}
		});
		setTimeout('JA.util.resize()',100);
		JA.Tabs = tabs;
		JA.Tabs.lastTab = $('last_tab');
		//JA.util.log(JA.Tabs);
	}
};
/**
 * DataStore wrapper
 */
JA.Data = {
	store: function(key, value){
		JA.util.log('Saving in Persistance Storage: ' + key + '=' + value);
		var req = opensocial.newDataRequest();
		req.add(req.newUpdatePersonAppDataRequest("VIEWER", key, value));
		req.send(function(r){
			if (r.hadError()){
				JA.util.log('Error while saving!');
			}
		});
	},
	friendRetrive: function(key, value){
		JA.util.log('Reriving from Persistance Storage: ' + key);
		var req = opensocial.newDataRequest();
		req.add(req.newFetchPersonAppDataRequest("VIEWER_FRIENDS", key), key);
		req.send(function(resp){
			JA.util.log(resp);
			try {
				var data = resp.get(key);
				if (data.hadError()) {
					throw new Error();
				}
				data = data.getData();
				JA.State.topFriends = [];
				JA.util.log(data);
				$H(data).each(function(d){
					JA.util.log(d.key + ' -- ' + d.value[key]);
					JA.State.topFriends.push({
						id: d.key,
						feet: d.value[key]
					});
				});
				JA.util.log(JA.State.topFriends);
				/*
				JA.util.log('Persistance storage: ' + key +' = '+ data[key]);
				if(!data[key] || data[key] == undefined || data[key] == 'undefined' || data[key] == 'null') {
					throw new Error();
				} else {
					return data[key];
				}*/
			} catch (e) {
				JA.util.log(e);
			}
		});
	},
	
	retrive: function(key){
		JA.util.log('Reriving from Persistance Storage: ' + key);
		var req = opensocial.newDataRequest();
		req.add(req.newFetchPersonAppDataRequest("VIEWER", key), key);
		req.send(function(r){
			JA.util.log(r);
		});
	},
	getKey: function(resp, key) {
		try {
			var data = resp.get(key);
			if (data.hadError()) {
				throw new Error();
			}
			data = data.getData()[JA.viewer.id];
			JA.util.log('Persistance storage: ' + key +' = '+ data[key]);
			if(!data[key] || data[key] == undefined || data[key] == 'undefined' || data[key] == 'null') {
				throw new Error();
			} else {
				return data[key];
			}
		} catch (e) {
			return null;
		}
	}
};

JA.Navigate = {
	changeFolder: function(which, what){
		JA.util.urchin('/green/tabs/my_'+which.toLowerCase() + '/' + what);
		if (JA.State[which].folder == what) {
			return;
		} else {
			JA.State[which].folder = what;
			switch(which) {
				case 'Tags':
					this.myTags(-1);
					break;
				case 'Inbox':
					this.myInbox(-1);
					break;
				case 'Gifts':
					this.myGifts(-1);
					break;
			}
		}
	},
	sendPumpkin: function(){
		$('carve_and_send').hide();
		if (JA.State.send_pumpkin_loaded) {
			return;	
		}
		JA.State.send_pumpkin_loaded = true;
		JA.Pumpkins.init();
	},
	sendPlants: function(){
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.sendplants.php', 'send_plants');
	},
	greenPatch: function(){
		JA.GreenPatch.load();
	},
	fetchArticles: function(){
		JA.Articles.fetch(1);
	},
	plants: function(currentUser){
		if (JA.Plants.self) {
			JA.Plants.ownPatch = true;
			JA.Plants.self=false;
			$('sendplant_user_details').hide();
		} else if (JA.State.toCurrentUser != null){
			$('sendplant_user_name').update(JA.State.currentUserName.truncate(30));
			$('sendplant_user_image').src = JA.State.currentUserImage;
			$('sendplant_user_details').show();
		} else if (JA.State.nonUserPatch != null){
			var user = JA.viewer.friendsDict[JA.State.nonUserPatch];
			$('sendplant_user_name').update(user.name.truncate(30));
			$('sendplant_user_image').src = user.thumb;
			$('sendplant_user_details').show();
		} else {
			JA.Plants.ownPatch = false;
			if (JA.State.more_feet) {
				JA.State.more_feet = false;
				//JA.Selector.plants.onlyNonAppFriends = true;
				$('non_more_sq_feet_text').hide();
				$('more_sq_feet_text').show();
				$('more_sq_feet_link').show();
			} else {
				//JA.FriendSelector.onlyNonAppFriends = false;
				$('non_more_sq_feet_text').show();
				$('more_sq_feet_text').hide();
				$('more_sq_feet_link').hide();
			}
			$('sendplant_user_details').hide();
		}
	},
	userPatch: function(user_id) {
		if (!user_id) {
			user_id = JA.GreenPatch.getNextUser();
		}
		//if (JA.viewer.friendsDict[user_id] && !JA.viewer.friendsDict[user_id].hasApp) {
		//	JA.GreenPatch.getForNonUser(user_id);
		//} else {
			JA.GreenPatch.getForUser(user_id, 0);		
		//}
	},
	topPeople: function(){
		if (JA.State.topPeopleLoaded && typeof page == 'undefined') {
			JA.util.resize();
			return;
		}
		JA.State.topPeopleLoaded = true;
		//JA.Dialog.show(JA.Dialog.LOADING);
		var html = '<div class="c_pagination" style="float:left">';
		html += ' <b class="c_small c_dgray" style="float:none">Show:</b>';
		html += '<span><a id="lb_link_team" class="active" class="" onclick="JA.Leaderboard.topTeam()" href="javascript:void(0)">Most Recruits</a></span>';
		html += '<span><a id="lb_link_people" class="" onclick="JA.Leaderboard.topPeople()" href="javascript:void(0)">Most Sq Ft</a></span>';
		html += '<span><a id="lb_link_friend" onclick="JA.Leaderboard.topFriends();JA.util.resize()" href="javascript:void(0)">Top Friends</a></span></div>';
		html += '<br><br>';
		html += '<div class="c_tablewidth" id="lb_friend_tab" style="display:none">' + JA.Messages.LOADING + '</div>';
		html += '<div class="c_tablewidth" id="lb_team_tab">' + JA.Messages.LOADING + '</div>';
		html += '<div class="c_tablewidth" id="lb_people_tab" style="display:none">' + JA.Messages.LOADING + '</div>';
		$('top_people').update(html);

		JA.Leaderboard.showTopFriends();
		setTimeout('JA.util.resize()',1000);
		setTimeout('JA.util.resize()',3000);
		JA.Leaderboard.getTopPeople(0);
		JA.Leaderboard.getTopTeams(0);
	},
	store: function(){
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.store.php', 'store', $H({}).toQueryString());
	},
	buyPlants: function() {
		JA.Market.points = 0;
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.buyplants.php', 'buy_plants', $H({}).toQueryString());		
	},
	market: function(){
		JA.Market.points = 0;
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.market.php', 'market', $H({}).toQueryString());
	},
	greenTeam: function(){
		if (JA.State.teamLoaded && typeof page == 'undefined') {
			JA.util.resize();
			return;
		}
		JA.State.teamLoaded = true;
		var html = '<h1>The larger your Green Team, the more Green bucks you earn every day.. Recruit your friends in your team!!</h1>'
		html += '<div class="c_pagination" style="text-align:left;">';
		html += '<span><a id="gt_link_invite" class="" onclick="JA.Team.showInvite()" href="javascript:void(0)">Recruit Friends </a></span>';
		html += '<span><a id="gt_link_pending" class="" onclick="JA.Team.pending()" href="javascript:void(0)">Pending Invites</a></span>';
		html += '<span><a id="gt_link_team" class="active" onclick="JA.Team.showTeam()" href="javascript:void(0)">My Green Team</a></span></div>';
		html += '<br>';
		html += '<p align="right"><input type="button" style="font-size:14px;padding:1px" value="Send Bulletin" onclick="JA.Share.postBulletin();"></p>';
		html += '<div class="c_tablewidth" id="gt_invite_tab"><p align="center"><input type="button" style="font-size:18px;padding:3px" value="Invite Friends To Join Your Green Team" id="team_comment_button" onclick="JA.Team.send(true);"></p><div id="gt_invite_selector">' + JA.Messages.LOADING + '</div></div> <div class="c_tablewidth" id="gt_pending_tab" style="display:none">' + JA.Messages.LOADING + '</div> <div class="c_tablewidth" id="gt_team_tab" style="display:none">' + JA.Messages.LOADING + '</div>';
		
		$('green_team').update(html);
		JA.Team.showInvite();
	},
	offerpal: function(){
		if (JA.State.offerpalLoaded) {
			JA.util.resize();
			return;
		}
		JA.State.offerpalLoaded = true;
		
		//var html = '<ol><li><span style="font-size: 18px;">1. <a href="javascript:void(0)" onclick="JA.Tabs.setActiveTab(\'plants\');">Send Plants to your friends:</a> You save an extra 1 sq ft for every friend who accepts your plants from here!!</span></li>'
		//var html = '<ol><li style="margin: 10px 0px;"><span style="font-size: 18px;">1. <a href="http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=108417"><font color="red">TAG ME:</font></a> You save an extra 10 sq ft when you use this fun application!!<br>Note: Only first time app installs get rewarded.</span></li>'
		//			+ '<li><span style="font-size: 18px;">2. <a href="javascript:JA.Share.postBulletin();">Send Bulletin</a></span></li>'
		//	+ '<li><span style="font-size: 18px;">2. ??? </span><iframe src="http://pub.myofferpal.com/ecbc6bff43a30b31dfc24e0e601abae6/showoffers.action?snuid='+ JA.viewer.id +'" width="100%" height="500" frameborder="no"></li></ol>';
		var	html = 	'<iframe src="http://pub.myofferpal.com/ecbc6bff43a30b31dfc24e0e601abae6/showoffers.action?snuid='+ JA.viewer.id +'" width="100%" height="2500" frameborder="no">';
		
		$('offerpal').update(html)
	},
	morePoints: function() {
		if (JA.State.morePointsLoaded) {
			JA.util.resize();
			return;
		}
		JA.State.morePointsLoaded = true;
		
		  //var html = '<ol><li><span style="font-size: 18px;">1. <a href="javascript:void(0)" onclick="JA.Tabs.setActiveTab(\'plants\');">Send Plants to your friends:</a> You save an extra 1 sq ft for every friend who accepts your plants from here!!</span></li>'
		//			+ '<li><span style="font-size: 18px;">2. <a href="javascript:JA.Share.postBulletin();">Send Bulletin</a></span></li>'
		//			+ '<li><span style="font-size: 18px;">3. ??? </span><iframe src="http://pub.myofferpal.com/ecbc6bff43a30b31dfc24e0e601abae6/showoffers.action?snuid='+ JA.viewer.id +'" width="100%" height="500" frameborder="no"></li></ol>';
		var	html = 	'<iframe src="http://pub.myofferpal.com/30e23ae23d1a45ad6c1b7b4a118a91f7/showoffers.action?snuid='+ JA.viewer.id +'" width="100%" height="500" frameborder="no">';
		
		$('points_offerpal').update(html)		
	},
	slogans: function(folder){
		JA.Tabs.setActiveTab('slogans');
		JA.Slogans.page(0,folder);
	}
};

/**
 * Viral APIs
 */
JA.Share = {
	ids: [],
	c_users: [],
	sendPumpkin:function(users, pid){

		var subject = 'Happy Halloween!';
		var message = '<font size="4">I have carved a <b>Pumpkin</b> for you.'
			+ '<br><a href="'+JA.URL.canvas+'">Click here to carve your own... </a></font>'
			+ JA.Pumpkins.getEmbed({imgid:pid,islit:1,comment:1},250,250);
		this.multiComment(users, subject, message, function(r){JA.util.urchin('/green/sendPumpkin/comment/'+r);});
	},
	
	multiComment:function(users, subject, message, callback){
		var id = users.pop();
		if (!id) {
			return;
		}
		var user = JA.viewer.friendsDict[id];
		if (!user) {
			return;
		}
		this.postTo('COMMENTS', subject, message, user.obj, function(r){
			callback(r);
			this.multiComment(users, subject, message, callback);
		}.bind(this));
	},
	
	
	sendPlant: function(user,callback) {
		this.postTo('COMMENTS', 'Together we can fight Global Warming!',
			'<font size="3">Hey '+  user.getField(opensocial.Person.Field.NAME) +', I am sending you a <b> gift</b>. <a href="'+JA.URL.redirect+'">Could you please accept it.</a>' 
			+'<br>'
			//+'<a href="'+ JA.URL.redirect+ '">Click here to accept it</a></font>'
			+'<br><a href="'+ JA.URL.redirect+ '"><img src="http://a93.ac-images.myspacecdn.com/images01/57/l_527a8c282ae1b9d64dfb3c5fa1b8956c.gif"></a>'
			+'<br> Click on the gift box you think '+  JA.viewer.name +' sent!'
		, user, function(r){
			JA.util.urchin('/green/sendPlant/comment/'+r);
			JA.util.log('Callback from sendPlant comments');
			callback(r);
		});
	},
	joinTeam: function(user,callback) {
		this.postTo('COMMENTS', 'Join My Green Team!',
			'<font size="3">Hey '+  user.getField(opensocial.Person.Field.NAME) +', <br>'
			+'	<a href="'+JA.URL.canvas+'">Can you please endorse my green mission..</a>' 
			+'<br>'
			+'<br><a href="'+ JA.URL.canvas+ '"><img src="http://a638.ac-images.myspacecdn.com/images01/33/l_83c17476963bd26144800e015e687895.jpg"></a>'
			+'<br> Click on the image to join '+  JA.viewer.name +' in their mission!'
		, user, function(r){
			JA.util.urchin('/green/sendTeam/comment/'+r);
			callback();
		});
	},
	joinTeamAppInvite: function(user,callback) {
		JA.util.urchin('/green/sendTeam/appinvite/');
		var message = opensocial.newMessage(JA.Messages.TEAMINVITES);
		message.setField(opensocial.Message.Field.TITLE, 'Green Planet');
		opensocial.requestShareApp(user, message, function(r){
		    JA.util.log('Callback from invite: ' + r);
			JA.util.urchin('/green/share/post_to/APPINVIES/' +r );
			callback();
		});
	},
	sendPlantBulletin: function(callback){
		this.postTo('BULLETINS', 'Together we can fight Global Warming!',
			'<font size="3">Here is a <b>'+JA.Plants.current_plant.name + '</b> plant for your <a href="'+JA.URL.canvas+'">Green Patch</a>. Could you help me by sending a plant back? Together we can fight Global Warming!'
			+'<br><br>'
			+'<a href="'+ JA.URL.canvas+ '"><img src="'+JA.Plants.current_plant.url+'"><br>Click here to accept it</a></font>'
			+'<br><br><a href="'+ JA.URL.canvas+ '"><img src="http://a663.ac-images.myspacecdn.com/images01/101/l_f7655746b3c17144712d2f8d7c41acc6.gif"></a>'
		, JA.viewer.object, function(r){
			JA.util.urchin('/green/share/invite/'+r);
			JA.util.log('Callback from invite: ' + r);
			callback(r);
		});
	},
	invite: function(callback){
		this.postTo('BULLETINS', 'Test Bulletin Subject',
			'<a href="'+ JA.URL.canvas+ '">Body Link</a>'
		, JA.viewer.object, function(r){
			JA.util.urchin('/green/share/invite/'+r);
			JA.util.log('Callback from invite: ' + r);
			callback(r);
		});
	},

	appInvite: function(howMany,callback) {
		callback = callback || Prototype.emptyFunction;
		JA.util.urchin('/green/share/appinvite/' +howMany );
		JA.Share.ids = [];
		while (JA.Share.ids.length < howMany && JA.Share.ids.length < JA.viewer.nonAppFriends.length) {
			var r = Math.floor(Math.random() * JA.viewer.nonAppFriends.length);
			if (JA.Share.ids.indexOf(JA.viewer.nonAppFriends[r]) == -1){
				JA.Share.ids.push(JA.viewer.nonAppFriends[r]);
			}
		}
		this.multipleInvite(howMany,callback);
	},
	singleAppInvite: function(user_id,callback){
		callback = callback || Prototype.emptyFunction;
		var message = opensocial.newMessage(JA.Messages.INVITES);
		message.setField(opensocial.Message.Field.TITLE, 'Green Planet');
		opensocial.requestShareApp(user_id, message, function(r){
			JA.util.urchin('/green/share/post_to/APPINVIES/' +r );
		    JA.util.log('Callback from invite: ' + r);
			callback(r);
		});
	},
	multipleInvite: function(howMany,callback){
		try{
			callback=callback||Prototype.emptyFunction;
			oneclick=20;
			if(!(JA.Share.ids) || (JA.Share.ids.length<1)){
				return ;
			}
			user_ids=JA.Share.ids.slice(0,oneclick);
			JA.Share.ids=JA.Share.ids.slice(oneclick);
			var message = opensocial.newMessage(JA.Messages.INVITES);
			message.setField(opensocial.Message.Field.TITLE, 'Green Planet');
			opensocial.requestShareApp(user_ids, message, function(r){
				invitees=user_ids.join(",");
				JA.util.urchin('/green/share/post_to/APPMULTIPLEINVITES/' +r );
			    JA.util.log('Callback from invite: ' + r);
				JA.Fire.andForget('/action.registerteaminvite.php', {ja_user: invitees,ja_multiple: "yes"});
				if(((howMany-oneclick)>0)){
					JA.Share.multipleInvite((howMany-oneclick));
				}else{
					callback();
				}
			});
		}catch(e){
			JA.util.log(e);
		}
	},
	popupInvite: function() {
		var id = JA.Share.ids.pop();
		if (!id) {
			return;
		}
		var message = opensocial.newMessage(JA.Messages.INVITES);
		message.setField(opensocial.Message.Field.TITLE, 'Green Planet');
		opensocial.requestShareApp(id, message, function(r){
			JA.util.urchin('/green/share/post_to/APPINVIES/' +r );
		    JA.util.log('Callback from invite: ' + r);
			JA.Share.popupInvite()
		});
	},
	inviteFriend: function(user, callback) {
		// comment to non app friend when user wants to tag him
		this.postTo('COMMENTS', 'Want to see how I tagged you?',
			'<font size="4">Hey! You are already famous, we friends have been tagging you. <a href="'+ JA.URL.canvas+ '">Click here</a> to find out what we think about YOU!'
			+'<br><br>'
			+'<a href="'+ JA.URL.canvas+ '"><img src="http://a530.ac-images.myspacecdn.com/images01/2/l_9cb0c75df64ae794d1aa0de94986ba91.gif" border="0"></a><br>'
			+'<br><br></font>'
			+'<br><a href="'+ JA.URL.canvas+ '"><img src="http://a663.ac-images.myspacecdn.com/images01/101/l_f7655746b3c17144712d2f8d7c41acc6.gif"></a>'
		,user, callback);
	},
	postBulletin: function() {
		//this.postTo('BULLETINS', 'Global Warming isn\'t cool, but stopping it is!!',
		this.postTo('BULLETINS', 'Things you can do to keep this planet Green!!',
		'<font size="3">'
		+'I just adopted a garden in my mission to save rainforests.<br> '
		+'Could you help me by sending a plant back? Together we can fight Global Warming. '
		+'Global Warming is getting worse and doing nothing is not an option anymore. '
		+'<br><a href="' + JA.URL.canvas + '">Please act now >></a>'
		+'<br><br><a href="' + JA.URL.canvas + '"><img src="http://a663.ac-images.myspacecdn.com/images01/101/l_f7655746b3c17144712d2f8d7c41acc6.gif"></a>'
		, JA.viewer.object);
	},
	postTo: function(target, subject, content, user, callback) {
		JA.util.urchin('/green/share/post_to/'+target);
		var osContainer = opensocial.Container.get();
		JA.supportedTargets = osContainer.getMySpaceEnvironment().getSupportedPostToTargets();
		// ["COMMENTS", "BLOG", "BULLETINS", "PROFILE", "SEND_MESSAGE"]
	    // create a new message object passing in the content to be posted 
		// and then set the subject and target fields
	    var message = opensocial.newMessage(content);
	    message.setField(opensocial.Message.Field.TITLE, subject);
	    message.setField(opensocial.Message.Field.TYPE, target);
	    // show post to
	    osContainer.postTo(MyOpenSpace.MySpaceContainer.OSToken, message, user, callback || Prototype.emptyFunction);
	}
};

/**
 * MakeRequest wrappers
 */
JA.Fire = {
	/**
	 * Make a call to the server and forget about the response.
	 * @param {String} url
	 * @param {Hash} postdata [Optional]
	 */
	andForget: function(url, postdata, request_id) {
		request_id = request_id || JA.State.fireIndex++;
		JA.State.fireAttempts[request_id] = JA.State.fireAttempts[request_id] || 0;
		
		postdata = postdata || {};
		if(typeof postdata != typeof 'string') {
			postdata = $H(postdata).toQueryString();
		}
		var params = {};
	    params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
		params[gadgets.io.RequestParameters.POST_DATA] = postdata;
	    gadgets.io.makeRequest(JA.URL.callback + url + '?nocache=' + (new Date()).getTime(), function(r){
			JA.util.log(r);
			if (r.errorCode || r.errorMessage) {
				//rety 2 more times
				if (JA.State.fireAttempts[request_id] < JA.Options.MAX_AJAX_RETRIES) {
					JA.util.log('JA.Fire.andRecoil: Call failed, retrying... ' + JA.State.fireAttempts[request_id]);
					JA.State.fireAttempts[request_id]++;
					JA.Fire.andForget(url, postdata, request_id);
				}
				return null;
			}
			else {
				//process response for metadata and dont show error if it errors out.
				JA.Fire.processResponse(r, true);
				// do nothing
				JA.util.log('JA.Fire.andForget: Response without callback');
			}
		}, params);
	},

	/**
	 * Make a call to ther server and the callback function will be called when server return value
	 * @param {String} url
	 * @param {Hash} postdata
	 * @param {Function} callback
	 * @param {Hash} params [Optional]
	 */
	andRecoil: function(url, postdata, callback, params, request_id) {
		request_id = request_id || JA.State.fireIndex++;
		JA.State.fireAttempts[request_id] = JA.State.fireAttempts[request_id] || 0;

		params = params || {};
		if(typeof postdata != typeof 'string') {
			postdata = $H(postdata).toQueryString();
		}
	    params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
		params[gadgets.io.RequestParameters.POST_DATA] = postdata;
	    gadgets.io.makeRequest(JA.URL.callback + url + '?nocache=' + (new Date()).getTime(), function(r){
			JA.util.log(r);
			if (r.errorCode || r.errorMessage) {
				//rety 2 more times
				if (JA.State.fireAttempts[request_id] < JA.Options.MAX_AJAX_RETRIES) {
					JA.State.fireAttempts[request_id]++;
					JA.util.log('JA.Fire.andRecoil: Call failed, retrying... ' + JA.State.fireAttempts[request_id]);
					JA.Fire.andRecoil(url, postdata, callback, params, request_id);
				}
				return null;
			}
			else {
				var response = JA.Fire.processResponse(r);
				JA.util.log('JA.Fire.andRecoil: Response with callback');
				// call callback only if response is not null.
				if (response != null) {
					callback(response);
				}
			}
		}, params);
	},
	
	/**
	 * Makes a call to the server and updated the contents with the response
	 * @param {String} url
	 * @param {HTMLElement} el
	 * @param {Hash} postdata
	 */
	andUpdate: function(url, el, postdata, request_id){
		request_id = request_id || JA.State.fireIndex++;
		JA.State.fireAttempts[request_id] = JA.State.fireAttempts[request_id] || 0;
		
		if(typeof postdata != typeof 'string') {
			postdata = $H(postdata).toQueryString();
		}
		postdata = postdata || '';
		var params = {};
	    params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
		params[gadgets.io.RequestParameters.POST_DATA] = postdata;
	    gadgets.io.makeRequest(JA.URL.callback + url + '?nocache=' + (new Date()).getTime(), function(r){
			//process response for metadata
			JA.util.log(r);
			if (r.errorCode || r.errorMessage) {
				//rety one more time
				if (JA.State.fireAttempts[request_id] < JA.Options.MAX_AJAX_RETRIES) {
					JA.State.fireAttempts[request_id]++;
					JA.util.log('JA.Fire.andUpdate: Call failed, retrying... ' + JA.State.fireAttempts[request_id]);
					JA.Fire.andUpdate(url, el, postdata, request_id);
				} else {
					JA.Action.error(JA.Messages.REFRESH, true);
					$(el).update('MySpace is facing some problems! Retrying should solve the problem.');
				}
				return null;
			} else {
				$(el).update(r.text);
				JA.Dialog.close();
				JA.util.resize();
				JA.util.log('JA.Fire.andUpdate: Response recieved and updated element');
			}
		}, params);
	},
	
	handleError: function(response){

	},
	/**
	 * Process the response from our server.
	 * Takes out meta data and handles the string.
	 * @param {Object} response
	 */
	processResponse: function(response, noError) {
		JA.util.log(response);
		if (response.errorCode) {
			if (!noError) {
				JA.Action.error(JA.Messages.REFRESH);
			}
			return null;
		} else {
			try {
				var resObj = response.text.evalJSON();
				JA.util.log(resObj);
			} catch(e) {
				// error in evaluating JSON returned. Returing the string.
				JA.util.log('Error evaluating JSON');
				//JA.util.log(e);
				return response.text;
			}
			if (resObj.error && resObj.error.message != '') {
				JA.Action.error(resObj.error.message);
				return null;
			}
			if (resObj || resObj == 0) {
				if (resObj.meta) {
					if (typeof resObj.meta.tags_count != 'undefined') {
						//JA.Bubble.update('tags', resObj.meta.tags_count);
					}
					if (typeof resObj.meta.inbox_count != 'undefined') {
						//JA.Bubble.update('inbox', resObj.meta.inbox_count);
					}
					if (typeof resObj.meta.points != 'undefined') {
						JA.Points.addPoints(resObj.meta.points);
					}
					if (typeof resObj.meta.total_points != 'undefined') {
						JA.Points.setPoints(resObj.meta.total_points);
					}
					if (typeof resObj.meta.feet != 'undefined') {
						JA.Points.addFeet(resObj.meta.feet);
					}
					if (typeof resObj.meta.total_feet != 'undefined') {
						JA.Points.setFeet(resObj.meta.total_feet);
					}
				}
				if (resObj.response && resObj.response.html !== undefined) {
					return resObj.response.html;
				} else if (resObj.response && resObj.response.json !== undefined) {
					return resObj.response.json;
				}

				return resObj;
			}
			return null;
		}
	}
};



JA.Action = {
	invite: function() {
		this.fire(null, null, '/action.invite.php', null);
	},
	error: function(error_mesg, close) {
		$('error_message').update(error_mesg);
		(close) ? $('error_close').show() : $('error_close').hide();
		JA.Dialog.show(JA.Dialog.ERROR);
		JA.util.urchin('/green/errors/'+(close?'fatal':''));
	},
	setMessage: function(message,user_name) {
		return message.replace('%user%', user_name);
	},
	useTool: function(user_id, action_id, tool_id) {
		// make the call and forget.
		$('patch_question').hide();
		$('action_request').hide();
		$('action_tools_bar').hide();
		$('action_doing_mesg').show();
		setTimeout(function(){
			if ($('patch_object')) {
				$('patch_object').hide();
			}
			$('action_doing_mesg').hide();
			$('user_green_patch').className = 'patch_'+user_id;
			$('action_thanks_bar').show();
		}, 2000);
		JA.Fire.andForget('/action.usetool.php', {
			ja_subject_id: user_id,
			ja_tool_id: tool_id,
			ja_action_id: action_id
		});
		//TODO:
		JA.State.currentAction = null;
		if (action_id == 709) {
			setTimeout('JA.Tabs.setActiveTab("green_patch")',1000);
		}
		JA.util.resize();
	}
};

/**
 * Points UI handler
 */
JA.Points = {
	points: 0,
	carbon: 0,
	feet: 0,
	total: 0,
	level: 0,
	totalAppFriends: 0,
	init: function(){
		var allfrnds = "";
		JA.viewer.friends.each(function(f, index){
			if (index > 0) {
				allfrnds += ",";
			}
			allfrnds += f.id;
		});
		//JA.Fire.andRecoil('/action.points.php', { ja_num_friends: JA.viewer.appFriends.length }, function(r){
		JA.Fire.andRecoil('/action.points.php', { ja_friends: allfrnds }, function(r){
			JA.util.log(r.total_sq_feet);
			this.total = r.total_sq_feet;
			//this.totalAppFriends = r.total_app_friends;
			JA.Points.totalAppFriends = r.total_app_friends;
			var mesg = r.points_mesg || '';
			if (r.new_invites > 0) {
				mesg += "<br><br>You have new invites from friends to join their Green Teams. <a href=\"javascript:void(0)\" onclick=\"JA.Team.gotoPending()\">Accept Invitation Now</a>";
			} else if (mesg != '') {
				mesg += "<br><br>Tip: You will earn more $$ if you have bigger Green Team. <a href=\"javascript:void(0)\" onclick=\"JA.Team.gotoInvite();JA.Dialog.close();\">Recruit Now!</a>";
			}
			if (mesg != '') {
				//$('welcome_bucks').update(mesg).show();
				JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, mesg, '', true));
				JA.Dialog.noClose = true;
			}
			$('total_sq_feet').update('<a onclick="JA.Dialog.postIframe(\'gmaps.html\', this);" href="javascript:void(0)">'+this.total+'</a>');
			$('level_head').update(r.level);
			JA.Points.level = r.level;
			JA.Data.store('sq_feet_saved', JA.Points.feet);
			JA.util.log('num friends: ' + JA.Points.totalAppFriends);
			r.app_friends = r.app_friends || '';
			var appFriends = r.app_friends.split(",");
			appFriends.each(function(f){
				if (f.length < 2) { return; }
				var fr = f.split("-");
				if (fr[0] && JA.viewer.friendsDict[fr[0]]) {
					JA.viewer.friendsDict[fr[0]].hasApp = true;
					JA.viewer.friendsDict[fr[0]].sqft = parseInt(fr[1]) / 10;
					JA.viewer.appFriends.push(fr[0]);
				}
			});
			JA.viewer.appFriends = JA.viewer.appFriends.uniq();
			JA.viewer.friends.each(function(f){
				if (!f.hasApp) {
					JA.viewer.nonAppFriends.push(f.id);
				}
			});
			
			if (r.theme_set) {
				$('theme_renew_div').show();
				$('theme_renew_date').update(r.theme_set_at);
			}
			
			JA.Plants.init();
			JA.Selector.plants =  new JA.FriendSelector('plants','friends_selector',function(){
				//this.sendGifts();
			}, []);
			JA.Team.pendingHome();
			JA.Invites.next();
			
			/* featured gifts
			var adgifts = '<table align="center">';
			r.adgifts.each(function(g){
				adgifts += '<tr><td><div style="display: inline; float: left; border: 1px solid #989898; margin:5px; padding:5px;"><div style="height: 125px; width: 125px; display:block; background-color: #FFFFFF; text-align: center; cursor:pointer;"><a href="javascript:void(0)" onclick="JA.Plants.select('+g.id+', this)"><img src="'+g.url+'" height="90" width="90"/></a><br/><a href="'+g.extra1+'"style="color: #883E2F; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 10px; cursor: pointer; text-align: center; font-weight: normal; text-decoration: none;" onmouseover="this.style.color=\'#FF0000\';this.style.textDecoration=\'underline\';" onmouseout="this.style.color=\'#883E2F\';this.style.textDecoration=\'none\';">'+g.name+'</a></div><img src="http://goods.adnectar.com/apis/record_impression?site_key=0274c672e880325365d4&creative_key='+g.extra2+'&user_id='+JA.viewer.id+'" width="1" height="0" border="0"/></div></td></tr>';
				 JA.Plants.add(g.id, g.name,'adn',g.url,0);
			});
			adgifts += '</table>';
			$('home_featured_gifts').update(adgifts);
                        */
			$('home_featured_users').update('<table align="center"><tr><td><a href="javascript:;" onclick="JA.Navigate.userPatch('+r.featured[0].user_id+')"><img src="'+r.featured[0].p_image.replace('l_','s_')+'" /></a></td></tr><tr><td><a href="javascript:;" onclick="JA.Navigate.userPatch('+r.featured[0].user_id+')"><b>'+r.featured[0].name+'</b></a></td></tr><tr><td><b>Sq. Ft. saved: '+(r.featured[0].plants_sent/10)+'</b></td></tr><tr><td><b>Recruits: '+r.featured[0].team_size+'</b></td></tr></table>');
			JA.Dialog.close();
			//JA.Data.friendRetrive('sq_feet_saved');
		});
	},
	update: function() {
		$('points_head').update(this.points);
		var feetstr = this.feet + ' ';
		var index = feetstr.indexOf('.');
		if (index != -1) {
			index+=2;
			feetstr = feetstr.substr(0,index);
		}
		$('feet_head').update(feetstr);
		$('carbon_head').update(this.carbon);
	},
	setPoints: function(pnts) {
		this.points = parseInt(pnts);
		this.update();
	},
	addPoints: function(pnts) {
		this.points += parseInt(pnts);
		this.update();
	},
	setFeet: function(ft) {
		this.feet = parseInt(ft) / 10;
		this.carbon = Math.round(this.feet*14) / 10;
		this.update();
	},
	addFeet: function(ft) {
		this.feet += parseInt(ft) / 10;
		this.carbon = Math.round(this.feet*14) / 10;
		this.update();
	}
};


/**
 * Dialogs
 */
JA.Dialog = {
	NOTE	: 'd_note',
	CONFIRM	: 'd_confirm',
	FACT	: 'd_fact',
	ERROR	: 'd_error',
	LOADING	: 'd_loading',
	GENERAL : 'd_general',
	PUMPKIN : 'd_pumpkin',
	STARTUP : 'd_startup',
	overlay : 'd_overlay',
	current : null,
	init: function(){
		this.NOTE		= $(this.NOTE);
		this.ERROR		= $(this.ERROR);
		this.CONFIRM	= $(this.CONFIRM);
		this.FACT		= $(this.FACT);
		this.LOADING	= $(this.LOADING);
		this.GENERAL	= $(this.GENERAL);
		this.PUMPKIN	= $(this.PUMPKIN);
		this.STARTUP 	= $(this.STARTUP);
		this.overlay 	= $(this.overlay);

		//Translucent background
		Object.extend(this.overlay.style,this['overlay' + (Prototype.Browser.IE ? 'IE' : '') + 'Styles']);
		this.overlay.setStyle({
			zIndex: 9990,
			opacity: 0.85
		});
		this.overlay.hide();
		
		//ESC key listener
		//Event.observe($(document.getElementsByTagName('body')[0]),'keydown',this.onKeyDown);
	},
	show: function(element) {
		if(this.current != null) {
			this.close();
		}
		this.overlay.show();
		this.current = element;
		element.show();
		this.center(element);
		JA.util.top();
		return element;
	},
	close: function() {
		if (JA.Dialog.noClose) {
			JA.Dialog.noClose = false;
			return;
		}
		this.current.hide();
		this.overlay.hide();
	},
	confirm: function(title, body, callback, yes_label, no_label) {
		this.setContent(this.CONFIRM, title, body, true);
		// we already have JA.Dialog.close() set to 
		callback = callback || Prototype.emptyFunction;
		$('d_confirm_yes').value = (yes_label ? yes_label : 'Yes');
		$('d_confirm_no').value = (no_label ? no_label : 'No');
		
		$('d_confirm_yes').onclick = function(){
			JA.Dialog.close();
			callback(1);
		};
		$('d_confirm_close').onclick = function(){
			JA.Dialog.close();
			callback(-1);
		};
		$('d_confirm_no').onclick = function(){
			JA.Dialog.close();
			callback(0);
		};
		this.show(this.CONFIRM);
	},
	fact: function(title, body, callback, yes_label, no_label) {
		this.setContent(this.FACT, title, body, true);
		// we already have JA.Dialog.close() set to 
		callback = callback || function(){};
		$('d_fact_yes').value = (yes_label ? yes_label : 'Yes');
		//$('d_fact_no').value = (no_label ? no_label : 'No');
		this.show(this.FACT);
	},

	center: function(element){
		if(!element._absolutized){
			element.setStyle({
				position: 'absolute'
			});
			element._absolutized = true;
		}
		var dimensions = element.getDimensions();
		Position.prepare();
		var offset_left= (Position.deltaX + Math.floor((this.getWindowWidth() - dimensions.width) / 2));
		var offset_top = (Position.deltaY + ((this.getWindowHeight() > dimensions.height) ? Math.floor((this.getWindowHeight() - dimensions.height) / 2) : 0));
		var p_top = ((dimensions.height <= this.getDocumentHeight()) ? ((offset_top != null && offset_top > 0) ? (offset_top > 150 ? 150 : offset_top) : '0') + 'px' : 0);
		var p_left= ((dimensions.width <= this.getDocumentWidth()) ? ((offset_left != null && offset_left > 0) ? offset_left : '0') + 'px' : 0);
		element.setStyle({
			top: p_top,
			left: p_left
		});
		//for IE
		if(Prototype.Browser.IE){
			this.overlay.setStyle({
				height: this.getDocumentHeight() + 'px',
				width: this.getDocumentWidth() + 'px'
			});
		}	
	},
	setUserName: function(element,user_name) {
		element.getElementsBySelector('.user_name').first().update(user_name);
		return element;
	},
	setContent: function(element, title, text, actions) {
		element.getElementsBySelector('.c_dialog_title').first().update(title);
		element.getElementsBySelector('.c_dialog_text').first().update(text);
		var div = element.getElementsBySelector('.c_actions').first();
		(actions) ? div.show() : div.hide();
		return element;
	},
	postIframe: function(uri, a){
		var offset = Position.cumulativeOffset($(a));
		var dialog = $('comment_dialog');
		$('dialog_iframe').show();
		$('dialog_iframe').src = JA.URL.callback + '/' + uri;
		$('comment_dialog_close').onclick = function(){
			$('comment_dialog').hide();
		};
		dialog.style.left = (960 - dialog.getWidth()) / 3;
		var top = offset[1] - dialog.getHeight()/2;
		dialog.style.top = ( top > 0  ? top : 0) ;
		dialog.show();
	},	
	getWindowWidth: function(){
		return (self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0);
	},
	getWindowHeight: function(){
		return (self.innerHeight ||  document.documentElement.clientHeight || document.body.clientHeight || 0);
	},
	getDocumentWidth: function(){
		return Math.min(document.body.scrollWidth,this.getWindowWidth());
	},
	getDocumentHeight: function(){
		return Math.max(document.body.scrollHeight,this.getWindowHeight());
	},
	overlayStyles: {
		position: 'fixed',
		top: 0,
		left: 0,
		width: '100%',
		height: '100%',
		zIndex: 9990
	},
	overlayIEStyles: {
		position: 'absolute',
		top: 0,
		left: 0,
		width: '100%',
		height: '100%',
		zIndex: 9990
	},
	onKeyDown: function(event){
		if (event.keyCode == Event.KEY_ESC) {
			this.close();
		}
	}
};

 
JA.Messages = {
	INVITES: 'I just adopted a garden on [app] in my quest to save rainforests. Could you help me by sending a plant on [app] ? Together we can help fight Global Warming!',
	TEAMINVITES: 'Please endorse my Green Mission by joining my Team on [app]. Together we will be a stronger force against Global Warming!',
	LOADER:	'<img src="http://a804.ac-images.myspacecdn.com/images01/9/l_288e18847956c90c26b0ce7d54376373.gif" style="margin-bottom:-3px">',
	LOADING:'<img src="http://a804.ac-images.myspacecdn.com/images01/9/l_288e18847956c90c26b0ce7d54376373.gif" style="margin-bottom:-3px"> Loading...',
	REFRESH:'There was some problem loading. <a href="javascript:void(0)" onclick="JA.util.reload()">Please refresh browser</a>!',
	SAVING:	'<img src="http://a804.ac-images.myspacecdn.com/images01/9/l_288e18847956c90c26b0ce7d54376373.gif" style="margin-bottom:-3px"> Saving...',
	POKE:	'You poked %user%',
	SLAP:	'You slapped %user%',
	FLIRT:	'Flirt sent to %user%',
	THANK:	'You thanked %user%',
	REPLY:	'Reply sent to %user%',
	NOTE:   'Note sent to %user%'
};

JA.util = {
	truncate: function(text, len) {
		len = len ? len : 15;
		text = text ? text : '';
		return text.length <= len ? text : text.substr(0,len) + "…";
	},
	resize: function(size){
	    opensocial.Container.get().resizePanel();
	},
	emailLink: function(){
		$('h_body').getElementsBySelector('.feedback_link').each(function(l){
			$(l).href = 'mailto:bitrhymes@gmail.com?subject=[Green]%20Feedback%20from:%20' + JA.viewer.id;				
		});		
	},
	reload: function(){
	    location.reload();
	},
	log: function(relay){
		if (Prototype.Browser.Gecko && typeof console != 'undefined') {
			console.log(relay);
		}
	},
	top: function(){
		//location.replace('#top');
	},
	urchin: function(url){
		return JA.util.Tracker._trackPageview(url);
	},
	showPromotion: function(country) {
		url = 'http://partners.tattomedia.com/sw/4/CD191';
		switch(country) {
			case 'UK': 	url = 'http://partners.tattomedia.com/sw/10/CD191/';
						break;
			case 'AU':  url = 'http://partners.tattomedia.com/sw/23/CD191/&dp=626';
						break;
			case 'CA':  url = 'http://partners.tattomedia.com/sw/12/CD191/&dp=627';
						break;
			default :   url = 'http://partners.tattomedia.com/sw/4/CD191';
						break;
		}
		var images = [];
		images.push('http://a892.ac-images.myspacecdn.com/images01/24/l_4ff41d848f2050f6b4a40577d4e785a3.gif');
		images.push('http://a443.ac-images.myspacecdn.com/images01/67/l_cbd4f4ef5790d9a82cd9983b15505bba.gif	');
		images.push('http://a883.ac-images.myspacecdn.com/images01/120/l_0df07688d60c908489856473165784a2.gif');
		var index = (new Date()).getTime() % images.length;
		var trackurl='http://994642f6.fb.joyent.us/tagme/res/img/blnk.gif?r='+Math.random();
		$('promo_above').update('<a href="'+url+'" onclick="javascript:(new Image()).src=\''+trackurl+'\';return true;" target="_blank"><img src="'+images[index]+'" /></a>');
	}
};
JA.FriendSelector=Class.create();
JA.FriendSelector.prototype={
	name:'',
	formId:null,
	container:null,
	cbClass:'__fs_cb',
	activeClass:'sel',
	inactiveClass:'friend_off',
	onlyNonAppFriends:true,
	selectedFriends:[],
	friends: [],
	nonAppFriends: [],
	friendsDict: [],
	deactList: [],
	withoutAppText: 'Friends without App',
	callback: Prototype.emptyFunction,
	initialize:function(name, formId, execute, deact, woaText, allfriends){
		this.onlyNonAppFriends = !(allfriends);
		this.name=name;
		this.formId=formId;
		this.container=$(formId);
		this.nonAppFriends=[];
		this.callback=execute.bind(this);
		this.friends= JA.viewer.friends;
		this.friendsDict= JA.viewer.friendsDict;
		this.totalFriends = this.friends.length;
		this.deactList = deact;
		if (woaText) {this.withoutAppText = woaText;}
		var total = 0;
		this.friends.each(function(f){
			if (!f.hasApp) {
				this.nonAppFriends.push(f);
				total ++;
			}
		}.bind(this));
		this.totalWithOutApp = total;
		this.formId = formId;
		this.container = $(formId);

		this.create();
		JA.util.resize();

	},
	randomize:function(){
		return 1;
		//for(var j,x,i=JA.State.friends.length; i; j=parseInt(Math.random() * i),x=JA.State.friends[--i],JA.State.friends[i]=JA.State.friends[j],JA.State.friends[j]=x);
		var totalfriends  = this.onlyNonAppFriends ? this.nonAppFriends.length : this.friends.length;
		var totalPages=Math.ceil(totalfriends / JA.Options.FRIENDS_PER_PAGE);
		return Math.ceil(Math.random() * totalPages);
	},
	create:function(){
		var p=this.randomize();
		this.page(p);
	},
	page:function(p){
		JA.util.log('Show Page:'+p);
		this.container.innerHTML=this.generateHTML(p);
	},
	select:function(howMany){
		var cbs=this.container.getElementsBySelector('.'+this.cbClass);
		var len=cbs.length;
		JA.util.log('Total checkboxes: '+len);
		//all
		if(howMany==-1){
			for (var i=0; i < len; i++){
				cbs[i].checked=true;
				$(cbs[i].parentNode).addClassName(this.activeClass);
			}
		}else if(howMany==0){
			//none
			for (var i=0; i < len; i++){
				cbs[i].checked=false;
				$(cbs[i].parentNode).removeClassName(this.activeClass);
			}
		}else{
			var ids=[];
			//gen random ids
			for (var i=0; i < howMany&&i < len; i++){
				while(1){
					r=Math.ceil(Math.random() * 10000) % len;
					if(ids.indexOf(r)==-1){
						ids.push(r);
						break;
					}
				}
			}
			//select them
			for (var i=0; i < len; i++){
				if(ids.indexOf(i)!=-1){
					cbs[i].checked=true;
					$(cbs[i].parentNode).addClassName(this.activeClass);
				}else{
					cbs[i].checked=false;
					$(cbs[i].parentNode).removeClassName(this.activeClass);
				}
			}
		}
	},
	getSelected:function(){
		var cbs=this.container.getElementsBySelector('.'+this.cbClass);
		var ids=[];
		for(var i=0; i<cbs.length; i++){
			if(cbs[i].checked){
				ids.push(cbs[i].value);
			}
		}
		JA.util.log(ids);
		return ids;
	},
	generatePageNumbers:function(selected){
		var total = this.onlyNonAppFriends ? this.totalWithOutApp : this.totalFriends;
		var totalPages=Math.floor(total / JA.Options.FRIENDS_PER_PAGE)+1;
		html='';
		$R(1,totalPages).each(function(n){
			if(n==selected){
				html+= '<b>'+n+'</b>  ';	
			}else{
				html+= '<a href="javascript:void(0)" onclick="JA.Selector[\''+this.name+'\'].page('+n+')">'+n+'</a>  ';
			}
		}.bind(this));
		return html;
	},
	generateHTML:function(page){
		var html='<div style="border:1px solid #aaa;padding:10px 5px;background:#f3f3f3;">';
		html+= '<span id="page_numbers_'+this.formId+'" style="float:right"><b>Page: </b>'+this.generatePageNumbers(page)+'</span>'
		html+= '<p style="padding-top:5px;clear:both;text-align:left;"><a href="javascript:void(0)" onclick="JA.Selector[\''+this.name+'\'].select(-1)"><b>Select All</b></a>';
		html+= '  |  <a href="javascript:void(0)" onclick="JA.Selector[\''+this.name+'\'].select(10)">Select Random 10</a>';
		//html+= '<a href="javascript:void(0)" onclick="JA.Selector[\''+this.name+'\'].select(0)">Select None</a>';
		if (this.onlyNonAppFriends) {
			html += '  |  <b>Showing '+this.withoutAppText+'</b> (<a href="javascript:void(0)" onclick="JA.Selector[\''+this.name+'\'].onlyNonAppFriends=false;JA.Selector[\''+this.name+'\'].create();">Show All Friends</a>)';
		} else {
			html += '  |   <b>Showing All friends</b> (<a href="javascript:void(0)" onclick="JA.Selector[\''+this.name+'\'].onlyNonAppFriends=true;JA.Selector[\''+this.name+'\'].create();">Show '+this.withoutAppText+'</a>)';
		}
		html+= '</p></div>';
		html+= '<div style="height:500px;border:1px solid #aaa;overflow:auto">';
		var friends = this.onlyNonAppFriends ? this.nonAppFriends : this.friends;
		friends = friends.slice((page-1)*JA.Options.FRIENDS_PER_PAGE,page*JA.Options.FRIENDS_PER_PAGE);
		friends.each(function(f){
			if(f.hasApp){
				//return;
			}
			if (this.onlyNonAppFriends && this.deactList[f.id] == 1){return;}
			html+= '<div class="'+this.inactiveClass+'">'
				+'<input type="checkbox" value='+f.id+' name="hb_to_id" style="float:left" id="cb_'+this.formId+'_'+f.id+'" class="'+this.cbClass+'" onclick="(this.checked)?$(this.parentNode).addClassName(\''+this.activeClass+'\'):$(this.parentNode).removeClassName(\''+this.activeClass+'\')">';
			html+= '<label for="cb_'+this.formId+'_'+f.id+'"><img src="'+f.thumb+'" title="'+f.name.escapeHTML()+'" width="50" height="50" style="border:1px solid #aaa;cursor:pointer;">';
			html+= '<br>'+f.name.truncate(15)+'</label>';
			html+= '</div>';
		}.bind(this));
		html+= '<div class="c_clear"> </div>'
		html+= '</div>';
		return html;
	},
	reset:function(){
		this.select(0);
	},
	execute:function(){
		this.callback();
		this.reset();
	},
	sendPlants: function(callback){
		JA.util.urchin('/green/sendplant/checkbox/' + ($('send_with_comments').checked ? 'on': 'off'));
		this.selectedFriends = this.getSelected();
		this.callback = callback;
		if (this.selectedFriends.length != 0) {
			this.iterate();
		}
	},
	iterate: function() {
		if (this.selectedFriends.length) {
			var fid = this.selectedFriends.pop();
			var frnd = this.friendsDict[fid].obj;
			var f = this.friendsDict[fid];
			this.callback(fid, function(success){
				$('d_general').setStyle({
					width: '480px'
				});
				JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Sending...', '', false));
				if (!success) {
					this.iterate();
					return;
				} else {
					if (this.sendTo == 'all') {
						this.sendComments(fid, 'all');
					} else if (this.sendTo == 'app' && f && !f.hasApp){
						this.sendComments(fid, 'app');
					} else {
						//show dialog box to confirm if sendto is not set
						JA.Dialog.show(
							JA.Dialog.setContent(JA.Dialog.GENERAL, 'Your plant has been sent to <span class="c_red">'+ f.name.truncate(15) + '...</span>'
								,'<br>Tell your friend via comments you sent them a green gift!!<br><br>'
								+'<button style="*width:430px" class="button" onclick="JA.Selector.plants.sendComments('+fid+',\'all\');">Notify All Selected (recommended) </button>'
								+'<br><br><button style="*width:430px;" class="button" onclick="JA.Selector.plants.sendComments('+fid+',\'app\')">Notify only those without Green Planet </button>'
								+'<br><br><button style="*width:430px" class="button" onclick="JA.Selector.plants.sendComments('+fid+',null);">No Thanks (let plants die)</button>'
								,false
							)
						);
					}
				}
			}.bind(this));
		} else {
			// done sending plants
			//JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Your plant has been sent!', '', true));
			JA.Dialog.close();
			$('d_general').setStyle({
				width: '350px'
			});
			JA.Tabs.setActiveTab("plants");
		}
	},
	sendComments: function(fid, whom) {
		//get selected friends again.
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Sending plants to your friends...', '', false));
		this.sendTo = whom;
		var f = JA.viewer.friendsDict[fid];
		if (whom == 'all'  || (whom == 'app' && f && !f.hasApp)) {
			// if we should send comment
			this.sendComment(f);
		} else {
			//else just iterate
			this.iterate();
		}
	},
	sendComment: function(f){
		JA.Share.sendPlant(f.obj, function(r){
			JA.util.urchin('/green/share/inviteFriend/' + r);
			JA.util.log('Callback from Comment: ' + r);
			JA.util.log('User: ' + f.id);
			this.iterate();
		}.bind(this));
	}
};

JA.Store = {
	buy: function() {
		var items = [];
		var quantity = [];
		var proceed = false;
		$('supplies_table').getElementsBySelector('.supply_price').each(function(s){
			var name = s.name.split('sel_');
			if (s.name.length == 0) {
				return;
			}
			if (s.value > 0) {
				// atleaset one item has been purchased
				proceed = true;
			}
			items.push(name[1])
			quantity.push(s.value);
			
		});
		if (!proceed){
			JA.Action.error('Please select atleast 1 supply item to purchase.', true);
			JA.util.top();
		}
		items = items.join();
		quantity = quantity.join();
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andRecoil('/action.buysupplies.php', {
			ja_items: items,
			ja_quantity: quantity
		}, function(r){
			JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Supplies were purchased!', '', true));
			if (JA.State.currentUser) {
				JA.Tabs.setActiveTab('user_patch');
				if (JA.State.currentAction) {
					JA.GreenPatch.getTools();				
				}
			}
		});
	},
	buyPlant: function(plant_id) {
		JA.Fire.andForget('/action.buyplant.php', {
			ja_plant: plant_id
		});
		JA.Tabs.setActiveTab('plants_tab');
		JA.Plants.select(plant_id, this, true);
		$('buy_mesg').show();
		$('send_plant_mesg').hide();
	}
};

JA.Plants = {
	items: {},
	plants: {},
	current_user: null,
	current_plant: null,
	friends: null,
	friendsDict: [],
	self: false,
	init: function(){
		JA.Plants.add(101,'Tangy O','fruits','http://a142.ac-images.myspacecdn.com/images01/105/l_058d4534e957b59615473fd693648c35.png',1);
		JA.Plants.add(102,'Appy Blossom','plant','http://a720.ac-images.myspacecdn.com/images01/46/l_3c5c817fc0ad8068b049051e7f797b87.png',1);
		JA.Plants.add(103,'Boxy Pear','fruits','http://a974.ac-images.myspacecdn.com/images01/27/l_3a063eca0ef5b60bf46ff6d3429b2cc5.png',1);
		JA.Plants.add(104,'Cloud Ballet Iris','plant','http://a342.ac-images.myspacecdn.com/images01/32/l_275edc27940c1b6812424f9089279275.png',1);
		JA.Plants.add(105,'Dumbell Tom','vegetable','http://a966.ac-images.myspacecdn.com/images01/97/l_231d8477dbe78fc8d6bf1ea215b94925.png',1);
		JA.Plants.add(106,'Gameon Cucu','vegetable','http://a92.ac-images.myspacecdn.com/images01/74/l_3a1230be2afc603b5eda0ef045dea423.png',1);
		JA.Plants.add(118,'Mister Patch','vegetable','http://a440.ac-images.myspacecdn.com/images01/31/l_8462fab585d0c6a83397b0344a810c3f.png',1);
		JA.Plants.add(119,'Towery Corn','vegetable','http://a620.ac-images.myspacecdn.com/images01/59/l_5903c42d44fabaa8de724925319943f3.png',1);
		JA.Plants.add(121,'Onny','vegetable','http://a973.ac-images.myspacecdn.com/images01/66/l_14185ccf73d0ce41912ee0c9dc563f9c.png',1);
		JA.Plants.add(123,'Lemon Drops','vegetable','http://a356.ac-images.myspacecdn.com/images01/80/l_006df85bd61aa5e4a0470d9895841593.png',1);
		JA.Plants.add(107,'Bench o Carrots','vegetable','http://a293.ac-images.myspacecdn.com/images01/22/l_92c14fb0e184235e971c765ef64ee734.png',1);
		JA.Plants.add(108,'Pansies','plant','http://a777.ac-images.myspacecdn.com/images01/46/l_74e112276626cf306a26134c96de86b8.png',1);
		JA.Plants.add(109,'StrawBublicious','fruits','http://a771.ac-images.myspacecdn.com/images01/51/l_477d72c1a170656d8a1799f85014988a.png',1);
		JA.Plants.add(110,'Strolling Banna','fruits','http://a519.ac-images.myspacecdn.com/images01/44/l_c6f4a387c631103b282fae73907fb56e.png',1);
		JA.Plants.add(114,'Ello Blossom','plant','http://a294.ac-images.myspacecdn.com/images01/75/l_2ba5f7cea235a37b634bce7f8a8aa0cd.png',1);
		JA.Plants.add(117,'Sunny Face','plant','http://a988.ac-images.myspacecdn.com/images01/50/l_5b820040010b373efe9202c700948f33.png',1);
		JA.Plants.add(129,'Pur Tulip','plant','http://a861.ac-images.myspacecdn.com/images01/71/l_19125613e8130c26ec1e016c58f77fe4.png',1);
		JA.Plants.add(113,'Wild Rose','plant','http://a826.ac-images.myspacecdn.com/images01/79/l_cfa8d3033789acf62117bdb0f3177499.png',1);
		JA.Plants.add(126,'Daisies','plant','http://a216.ac-images.myspacecdn.com/images01/22/l_d49bcac785f7b3ef7f94c97594ef7df7.png',2);
		JA.Plants.add(127,'Yellow Dew','plant','http://a354.ac-images.myspacecdn.com/images01/5/l_5ac590d5e2683b4472c694e624ffbea9.png',2);
		JA.Plants.add(128,'Yellow Pansies','plant','http://a860.ac-images.myspacecdn.com/images01/38/l_6d1d26f7ca392dd1a24b773d8672e843.png',3);
		JA.Plants.add(116,'Passionate Red','plant','http://a589.ac-images.myspacecdn.com/images01/123/l_40276b96640e50b2b10ac0ecf768fb4c.png',3);
		JA.Plants.add(115,'Hawaiian Breeze','plant','http://a682.ac-images.myspacecdn.com/images01/107/l_df159a117607cb86f47ab46876278a99.png',3);
		JA.Plants.add(111,'Joy Daffodils','plant','http://a996.ac-images.myspacecdn.com/images01/88/l_b0efdd0451620457ab89f8239f57a873.png',4);
		JA.Plants.add(112,'Teary ions','vegetable','http://a213.ac-images.myspacecdn.com/images01/70/l_5f520fa0539b2fa3b07592d20de4a4d4.png',2);
		JA.Plants.add(120,'Eggy','vegetable','http://a374.ac-images.myspacecdn.com/images01/60/l_019b30426189a916683e6975269f9bad.png',2);
		JA.Plants.add(122,'Watery Melon','fruits','http://a717.ac-images.myspacecdn.com/images01/88/l_9072ba25981e32d5a4190af196cb640c.png',1);
		JA.Plants.add(124,'Mushy','vegetable','http://a637.ac-images.myspacecdn.com/images01/21/l_52e4a39820a8239f2362666d20a3d3fc.png',3);
		JA.Plants.add(125,'Impressionist','plant','http://a552.ac-images.myspacecdn.com/images01/9/l_f5e2cb96d6007da1a45885ef830045ef.png',4);

		JA.Plants.add(135,'Sluggy','animal','http://a434.ac-images.myspacecdn.com/images01/36/l_badc20786b16a50d504b42d5f1524f29.png',1);
		JA.Plants.add(136,'Dino','animal','http://a873.ac-images.myspacecdn.com/images01/37/l_0cdcc7e0bee30372c1ae3e1b3f032ef8.png',1);
		JA.Plants.add(132,'Cuti','animal','http://a848.ac-images.myspacecdn.com/images01/11/l_d1eba89cf04f9644b17180022902af1f.png',2);
		JA.Plants.add(134,'Greeni','animal','http://a138.ac-images.myspacecdn.com/images01/59/l_527b4dd07e7be0446292f51ce5b970e1.png',2);
		JA.Plants.add(139,'Golden Bee','animal','http://a932.ac-images.myspacecdn.com/images01/107/l_4105c78c61c5083322d06fa6f0a34883.png',3);
		JA.Plants.add(140,'Red Bee','animal','http://a274.ac-images.myspacecdn.com/images01/66/l_ab74fc1dcc819b8ff289e6212e3f86b1.png',3);
		JA.Plants.add(130,'Shi','animal','http://a288.ac-images.myspacecdn.com/images01/44/l_63a287c688da5495717a23bee0a4864f.png',4);
		JA.Plants.add(138,'Buzz Bee','animal','http://a313.ac-images.myspacecdn.com/images01/36/l_73d7ea3bf1ffd35b29dabb48262e6ae0.png',4);
		JA.Plants.add(131,'Blinki','animal','http://a302.ac-images.myspacecdn.com/images01/58/l_f2fdade8a1e9739b4e411abafb48d055.png',4);
		JA.Plants.add(133,'Geni','animal','http://a157.ac-images.myspacecdn.com/images01/119/l_f8181cba61b37ba6a5dad6ff8f606f2c.png',5);
		JA.Plants.add(137,'Princess','animal','http://a773.ac-images.myspacecdn.com/images01/18/l_c15dac6c1b269c56970fc056883a80bc.png',5);

		JA.Plants.add(147, 'Growing Hearts', 'growing', 'http://c1.ac-images.myspacecdn.com/images02/55/l_fc28762f1eb2426582b2d3885c3cc214.png', 1);
		JA.Plants.add(149, 'Growing Roses', 'growing', 'http://c4.ac-images.myspacecdn.com/images02/53/l_262f390a67624a76b4707082a11907c3.png', 3);
		JA.Plants.add(148, 'Growing Love Birds', 'growing', 'http://c3.ac-images.myspacecdn.com/images02/49/l_59f24e68307147cdb159df3647b600f2.png', 4);
		JA.Plants.add(145, 'Growing Bear Hug', 'growing', 'http://c3.ac-images.myspacecdn.com/images02/34/l_7a9507dd9ab545729f9a13d7bc41c9ca.png', 5);
		JA.Plants.add(162,'Rose','growing','http://c3.ac-images.myspacecdn.com/images02/36/l_d3b923370a8e476c8b3a735588810452.jpg',5);
		JA.Plants.add(165,'cute n luv','growing','http://c1.ac-images.myspacecdn.com/images02/39/l_fc86b717acca4338a1c8506d893d3e7c.jpg',6);
		JA.Plants.add(166,'cute n flowers','growing','http://c3.ac-images.myspacecdn.com/images02/56/l_8f0ca3b9379c42a0a738595c6c54a14a.jpg',6);
	
		//JA.Plants.add(167, 'Happy Thanksgiving', 'growing', 'http://c3.ac-images.myspacecdn.com/images02/43/l_f3b1e1bb7e1f467092af952e69c596be.png', 1);
		JA.Plants.add(177, 'Happy', 'growing', 'http://c1.ac-images.myspacecdn.com/images02/33/l_34e22fd2f2284c8799cff92346beb8b0.png', 1);
		JA.Plants.add(146, 'Growing Ladybug', 'growing', 'http://c3.ac-images.myspacecdn.com/images02/12/l_60ac173054db402d888690e1acfd7d82.png', 1);
		//JA.Plants.add(168,'Cookie','growing','http://c2.ac-images.myspacecdn.com/images02/21/l_67924d5dfce24eb586ba5c1c12a698a1.png',2);
		JA.Plants.add(169, 'Reiny', 'growing', 'http://c4.ac-images.myspacecdn.com/images02/47/l_26a4e03b25254b6a8a76ab94c60fb0cb.png', 3);
		//JA.Plants.add(170, 'Good Old Santa', 'growing', 'http://c3.ac-images.myspacecdn.com/images02/1/l_4f1e54ad339e421e980144685c9e1b62.png', 3);
		
		JA.Plants.add(171,'Snow Man','growing','http://c4.ac-images.myspacecdn.com/images02/7/l_60ce425c66ba430c9afc9667ab29f957.png',4);
		JA.Plants.add(172, 'Wreath', 'growing', 'http://c1.ac-images.myspacecdn.com/images02/12/l_2455e35be6d344dbba6dd7299e0793c4.png', 5);

		JA.Plants.add(150, 'Growing Surprise', 'growing', 'http://c4.ac-images.myspacecdn.com/images02/56/m_caeb379587eb4a6d80add88c13428253.png', 1);
		JA.Plants.add(151,'Growing Tree','growing','http://c1.ac-images.myspacecdn.com/images02/53/l_c0106beb940d42fda6352cbe362866fc.jpg',2);
		JA.Plants.add(152,'Growing Anger','growing','http://c1.ac-images.myspacecdn.com/images02/13/l_bca225cf7a67481e82d46a8a5dfc9834.jpg',2);	JA.Plants.add(160,'Rooster','growing','http://c3.ac-images.myspacecdn.com/images02/29/l_153a6071c6f64e03a041c8471ca1868a.jpg',2);
     	JA.Plants.add(153,'Growing Savings','growing','http://c1.ac-images.myspacecdn.com/images02/6/l_69548e8fd12640d59be89f0522d05994.jpg',4);
		JA.Plants.add(154,'Cymbalic Monk','growing','http://c4.ac-images.myspacecdn.com/images02/10/l_b101116bd386465baefa7ab0f61c176f.jpg',4);
		JA.Plants.add(155,'Growing Furr','growing','http://c2.ac-images.myspacecdn.com/images02/26/l_5f296eef713448c2a77f94ec96e0017d.jpg',4);
		JA.Plants.add(156,'Joker','growing','http://c1.ac-images.myspacecdn.com/images02/35/l_8ddb8441e2e74bf6ae6ee0c600420ecc.jpg',4);
		JA.Plants.add(157,'Tree Man','growing','http://c1.ac-images.myspacecdn.com/images02/19/l_a03c1b763cc14e3c8a643a15e113d330.jpg',5);
		JA.Plants.add(158,'Patriotic','growing','http://c3.ac-images.myspacecdn.com/images02/9/l_c3208f277264438cb00295a130b58c56.jpg',5);
		JA.Plants.add(159,'Bush Man','growing','http://c1.ac-images.myspacecdn.com/images02/1/l_5d0f30567cf64737bdd0a5e6d3406388.jpg',5);
		//JA.Plants.add(161,'Double Cheese','growing','http://c1.ac-images.myspacecdn.com/images02/4/l_47e26c3a0fe5440caf079d0449b97af4.jpg',5);	
		//JA.Plants.add(163,'Happy Holidays','growing','http://c2.ac-images.myspacecdn.com/images02/3/l_00350a5d062046c7a0ded68b5f56f3b1.jpg',6);
		JA.Plants.add(164,'Happy Family','growing','http://c2.ac-images.myspacecdn.com/images02/43/l_5b450138291548b882437925b5e8924d.jpg',6);

		//JA.Plants.add(141,'R.I.P','halloween','http://c3.ac-images.myspacecdn.com/images02/12/l_10bfdb6e9d0f4d0fa0b6a4e8189bb2e6.png',1);
		//JA.Plants.add(142,'Ghostie','halloween','http://c4.ac-images.myspacecdn.com/images02/25/l_b70a092faea44b8c8dffa321fdf44c7b.png',1);
		//JA.Plants.add(143,'Axe','halloween','http://c4.ac-images.myspacecdn.com/images02/1/l_21fa5e18e77f4486a117884a96d61473.png',2);
		//JA.Plants.add(144,'Witch','halloween','http://c2.ac-images.myspacecdn.com/images02/63/l_c398ba8d473940dcb94f073567fdb2d9.png',3);

		//JA.Plants.add(173,'Starry','christmas','http://c2.ac-images.myspacecdn.com/images02/21/l_d9fd1b54f39b416b963159bb9ab41109.png',1);
		//JA.Plants.add(174,'Come together','christmas','http://c2.ac-images.myspacecdn.com/images02/32/l_9a4ae13c111f49e9b053945aade2bbe1.png',2);
		//JA.Plants.add(175,'Happy Together','christmas','http://c4.ac-images.myspacecdn.com/images02/64/l_703d06420c1b4b1098bd620d6949251b.png',3);
		//JA.Plants.add(176,'Happy Christmas','christmas','http://c1.ac-images.myspacecdn.com/images02/21/l_2d0d8f2ed82f4789b755a7f4bd92a694.png',4);

		JA.Plants.add(187,'Rose','valentine','http://c4.ac-images.myspacecdn.com/images02/37/l_67e0a87d04a349fa84b22636439e532f.png',1);
		JA.Plants.add(180,'Rose Bud','valentine','http://c1.ac-images.myspacecdn.com/images02/64/l_6fdc531117db455b812c8abe7addc488.png',2);
		JA.Plants.add(181,'Angelic Love','valentine','http://c4.ac-images.myspacecdn.com/images02/18/l_3ef3c2c8b4ce4814be0d640e1b580b8b.png',2);
		JA.Plants.add(182,'Love Birds','valentine','http://c4.ac-images.myspacecdn.com/images02/20/l_15500174618e470db5ecbace088b81cb.png',3);
		JA.Plants.add(183,'Cute "r" us','valentine','http://c4.ac-images.myspacecdn.com/images02/7/l_115924e0e5c545bcbf8297e76b0000ab.png',4);
		JA.Plants.add(184,'Cute "r" us','valentine','http://c1.ac-images.myspacecdn.com/images02/59/l_03e18c2b47924a9f9e6363c3a371620c.png',4);
		JA.Plants.add(185,'Cute "r" us','valentine','http://c4.ac-images.myspacecdn.com/images02/31/l_fb21f69a493742d3a554b9da0174764f.png',4);
		JA.Plants.add(186,'Messenger with my Heart','valentine','http://c4.ac-images.myspacecdn.com/images02/54/l_f500aff33485496090ce0fff1dd7dd07.png',5);

		//JA.Plants.add(199,'Bunny','easter','http://c1.ac-images.myspacecdn.com/images02/108/l_5060f0efb247465996465e4dc3bd7854.png',1);
		//JA.Plants.add(189,'Blue Egg','easter','http://c2.ac-images.myspacecdn.com/images02/79/l_bf4cde864c4640e28444840824d69995.png',1);
		//JA.Plants.add(190,'Pink Egg','easter','http://c4.ac-images.myspacecdn.com/images02/65/l_b7d79424a73542ed8c3611cee54ff24f.png',2);
		//JA.Plants.add(191,'Red Egg','easter','http://c3.ac-images.myspacecdn.com/images02/110/l_6a098bc3702c4ffbbf2079f4a84496da.png',2);
		//JA.Plants.add(192,'Yellow Egg','easter','http://c2.ac-images.myspacecdn.com/images02/110/l_7a32e3700e764a5faf7c7402e8ed2905.png',2);
		//JA.Plants.add(193,'Bunny in Red','easter','http://c3.ac-images.myspacecdn.com/images02/76/l_7bf310776e9941238fb9ef642574f11a.png',3);
		//JA.Plants.add(194,'Bunny in Yellow','easter','http://c3.ac-images.myspacecdn.com/images02/109/l_918c7e0e9ae84620ba1c947f317ba9f2.png',3);
		//JA.Plants.add(195,'Bunny in Pink','easter','http://c2.ac-images.myspacecdn.com/images02/109/l_bdef4a20ee2047feb39cbeac7d4f0e59.png',3);
		//JA.Plants.add(196,'Bunny in Blue','easter','http://c2.ac-images.myspacecdn.com/images02/94/l_6fe74f4fdc004acab3a89409be3cd05d.png',3);
		//JA.Plants.add(197,'Bunny with a message','easter','http://c2.ac-images.myspacecdn.com/images02/91/l_0e4a055c87a1419e91439cc9120c410d.png',4);
		//JA.Plants.add(198,'Happy Easter','easter','http://c2.ac-images.myspacecdn.com/images02/67/l_3cee2c7301e848dd80eca77474e87d01.png',5);


		//this.category('halloween', 'Halloween Special - LIMITED TIME ONLY <sup class="c_tiny c_red" style="font-weight:normal">New!</sup>');
		//this.category('valentine', 'Valentine Special - LIMITED TIME ONLY <sup class="c_tiny c_red" style="font-weight:normal">New!</sup>');
		//this.category('easter', 'Easter Special - LIMITED TIME ONLY <sup class="c_tiny c_red" style="font-weight:normal">New!</sup>');
		this.category('growing', 'Growing Gifts - Keep your friends guessing!! <small>(When your friends receive the gift, its a seedling which will take 4 days to grow into gift below)</small> <sup class="c_tiny c_red" style="font-weight:normal">New!</sup>');
		this.category('animal', 'Green Buddies');
		this.category('plant', 'Plants');
		this.category('vegetable', 'Vegetables');
		this.category('fruits', 'Fruits');
	},
	add: function(id, name, cat, url, worth) {
		if (this.plants[id]) {
			return;
		}
		var plant = {
			'id': id,
			'name': name,
			'category': cat,
			'url': url,
			'worth': worth
		};
		this.items[cat] = this.items[cat] || [];
		this.items[cat].push(plant);
		this.plants[id] = plant;
	},
	send: function() {
		if (JA.Selector.plants.getSelected().length == 0) {
			//JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL,'Please select friends whom you want to gift!','', true));
			JA.Dialog.show(
				JA.Dialog.setContent(JA.Dialog.GENERAL, 'Green Gift<br><br>'
					,'<button style="*width:260px" class="button" onclick="JA.Selector.plants.select(-1);JA.Plants.send(true);JA.Dialog.close();">Send Gift to All Friends<span class="c_tiny">(maximum impact)</span></button>'
					+'<br><br><button style="*width:260px" class="button" onclick="JA.Selector.plants.select(20);JA.Plants.send(true);JA.Dialog.close();">Send Gift to random 20 Friends</span></button>'
					+'<br><br><button style="*width:190px" class="button" onclick="JA.Dialog.close();">Let me select friends myself</button>'
					,false
				)
			);
			return;
		}
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Sending...', '', false));
		JA.Selector.plants.sendPlants(function(user_id, callback){
			if (!this.current_plant) {
				JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL,'Please select a gift to send!','', true));
				return;
			}
			
			var params = {
				ja_user_id: user_id,
				ja_plant_id: this.current_plant.id
			};
			JA.Fire.andRecoil('/action.sendplant.php', params, function(r){
				var u = JA.viewer.friendsDict[user_id];
				if (r.message && r.message != ''){
					var m = u ? "Your Plant was NOT sent to "+u.name.truncate(20)+"...\r\n\r\n" : '';
					$('d_confirm_no').hide();
					JA.Dialog.confirm(m, r.message, function(v){
						callback(false);
					}, 'Close');
					//window.confirm(m);
					//callback(false);
				} else {
					callback(true);
				}
			});
			//JA.Points.add(1);
		}.bind(this));
	},
	sendAll: function() {
		//send bulletin,
		JA.Share.sendPlantBulletin(function(r){
			//select all
			JA.Selector.plants.select(-1);
			//send comments to all
			this.send();
		}.bind(this))
	},
	reset: function() {
		this.current_plant = null;
		$('selected_plant').update();
		this.category('flowers');
	},
	select: function(plant_id, el, override) {
		var p = this.plants[plant_id];
		JA.util.log(p);
		this.current_plant = JA.Plants.plants[plant_id];
		var total =JA.Points.totalAppFriends;
		if (!override && p.worth > 0 && p.worth > JA.Points.level) {
			JA.Action.error('You send this gift only after reaching Level ' + (p.worth) + '.<br> Tip: Go to next level by <a href="javascript:void(JA.Tabs.setActiveTab(\'green_team\'))">inviting more friends</a> to your Green Team', true);
			return;
		}
		
		if (JA.Plants.ownPatch) {
			var params = {
				ja_user_id: JA.viewer.id,
				ja_plant_id: plant_id
			};
			JA.Fire.andForget('/action.sendplant.php', params);
			JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Your plant has been added to the patch!', '', true));
			return;
		}
		
		if (JA.State.toCurrentUser) {
			var params = {
				ja_user_id: JA.State.currentUser,
				ja_plant_id: plant_id
			};
			JA.Fire.andRecoil('/action.sendplant.php', params, function(r) {
				var u = JA.viewer.friendsDict[JA.State.currentUser];
				if (u && r.message && r.message != ''){
					JA.Action.error("Your Plant was NOT sent to "+u.name.truncate(20)+"...\r\n\r\n" + r.message, true);
				}
			});

			var person = JA.viewer.friendsDict[JA.State.currentUser];
			if (person) {
				JA.Share.sendPlant(person.obj, function(r){
					JA.util.urchin('/green/share/inviteFriend/' + r);
					JA.util.log('Callback from Comment: ' + r);
					JA.Plants.current_plant = null;
					JA.Dialog.confirm('Your plant has been sent!', '<br><br><button class="button" onclick="JA.Dialog.close();JA.Share.appInvite(5)">Quick Invite 5 friends without app</button>', function(r){
						if (r){
							JA.Share.appInvite(5);
						}
						JA.Tabs.setActiveTab("green_patch");
					});
				});
			} else {
				JA.Dialog.confirm('Your plant has been sent!', '<br><br><button class="button" onclick="JA.Dialog.close();JA.Share.appInvite(5)">Quick Invite 5 friends without app</button>', function(r){
					if (r){
						JA.Share.appInvite(5);
					}
					JA.Tabs.setActiveTab("green_patch");
				});
			}
			JA.State.toCurrentUser = null;
			return;
		} else if (JA.State.nonUserPatch != null) {
			var user = JA.viewer.friendsDict[JA.State.nonUserPatch];
			var params = {
				ja_user_id: JA.State.nonUserPatch,
				ja_plant_id: plant_id
			};
			JA.Share.singleAppInvite(JA.State.nonUserPatch, function(r){
				JA.Dialog.confirm('Your plant has been sent!', '<br><br><button class="button" onclick="JA.Dialog.close();JA.Share.appInvite(5);JA.Navigate.userPatch();">Quick Invite 5 friends without app</button>', function(r){
					if (r){
						JA.Share.appInvite(5);
					}
					JA.Navigate.userPatch();
				});
			});
			JA.State.nonUserPatch = null;
			return;
		}
		JA.Selector.plants.create();
		JA.Tabs.setActiveTab('send_plants');
		var html = '<img src="'+p.url+'"><br>'+p.name;
		$('selected_plant').update(html);
		//$('send_with_comments').checked =true;
		//$('plants_comment_button').value = 'Send ' + p.name + ' with comments';
		//$('plants_comment_button').value = 'Send ' + p.name + '';
		$('send_plants').getElementsBySelector('.sel_plant').each(function(el) {
			el.update(p.name);
		});
		JA.Selector.plants.select(0);
	},
	category: function(which, tab) {
		
		/*if (tab) {
			$('gifts_category').getElementsBySelector('.gift_cat_item').each(function(cat) {
				cat.removeClassName('active');
			});
			$(tab).up().addClassName('active');
		}
		//$('gifts_display').addClassName('loading');
		*/
		var html = '<div style="padding-bottom:20px">';
		html += '<h3 style="clear:both; padding:2px; background:#f3f3f3">'+tab+'</h3>';
		var total = JA.Points.totalAppFriends;

		if (this.items[which] && this.items[which].length){
			this.items[which].each(function(gift){
				//if (item) {
				//item[1].each(function(gift) {
				//JA.util.log(gift);
				html += '<a href="javascript:void(0)" class="gifts_item ' +(gift.worth > JA.Points.level? 'inactive' : '')+ '" onclick="JA.Plants.select('+gift.id+', this)" style="height:128px; *height:130px;"><img src="'+gift.url+'" onload="JA.util.resize()"><br><b>'+gift.name.escapeHTML()+'</b>';
				html += (gift.worth > JA.Points.level) ? '<br>(Unlocks at Level '+gift.worth+')' : '';
				html += '</a>';
			});	
		} else {
			html += '<p align="center"><br/><br/>Coming soon...</p>'
		}
		html += '<div class="c_clear"></div></div>';
		$('gifts_display').innerHTML += html;
		//$('gifts_display').removeClassName('loading');
		//$('gifts_display').getElementsBySelector('.gifts_item').first().addClassName('active');
		$('gifts_display').getElementsBySelector('.inactive').each(function(p){
			$(p).setStyle({
				opacity:0.5
			});
		});
	}
};
JA.GreenPatch = {
	browsedUsers: [],
	load: function(page){
		if (JA.State.greenPatchLoaded && (typeof page == 'undefined')) {
			// do not refesh page if:
			//  - page have been loaded
			//  - we are just switching tabs
			//  - and there are no new messages
			JA.util.resize();
			//return;
		}
		//-1 if folder has changed.
		page = page && page >= 0 ? page : 0;

		JA.Dialog.show(JA.Dialog.LOADING);
		var postdata = $H({
			ja_page_num : page,
			ja_folder: 'r',
			ja_page_size: JA.Options.MAX_PANTS_PER_PAGE
		}).toQueryString();
		JA.Tabs.setActiveTab('user_patch');
		JA.Fire.andUpdate('/page.greenpatch.php', 'user_patch', postdata);
		JA.State.greenPatchLoaded = true;
	},
	getForUser: function(user_id, page) {
		page = parseInt(page) > 0 ? page : 0;
		JA.Tabs.setActiveTab('user_patch');
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andRecoil('/page.greenpatch.php', {
			ja_user_id: user_id,
			ja_page_num: page,
			ja_page_size: JA.Options.MAX_PANTS_PER_PAGE
		}, function(r){
			if (r.nonUser) {
				JA.GreenPatch.getForNonUser(user_id);
			} else {
				$('user_patch').update(r);
			}
			JA.Dialog.close();
		});
	},
	patchPage:function(user_id, page){
		$('patch_plants_'+user_id).update(JA.Messages.LOADING);
		var html = '';
		if (page > 0) {
			html += '<a onclick="JA.GreenPatch.patchPage('+user_id+' , '+(parseInt(page)-1)+')" href="javascript:;">« Prev</a>';
		}
		html += '<b class="c_small c_dgray">Page '+ (parseInt(page)+1)+'</b>';
		html += '<a onclick="JA.GreenPatch.patchPage('+user_id+','+ (parseInt(page)+1)+')" href="javascript:;">Next »</a>';
		//$('patch_pages_'+user_id).update(html);

		JA.Fire.andUpdate('/page.patchplants.php', 'patch_plants_'+user_id,{
			ja_user_id: user_id,
			ja_page_num: page
		});
	},
	nurseryPage:function(user_id, page){
		$('nursery_plants_'+user_id).update(JA.Messages.LOADING);
		var html = '';
		if (page > 0) {
			html += '<a onclick="JA.GreenPatch.nurseryPage('+user_id+' , '+(parseInt(page)-1)+')" href="javascript:;">« Prev</a>';
		}
		html += '<b class="c_small c_dgray">Page '+ (parseInt(page)+1)+'</b>';
		html += '<a onclick="JA.GreenPatch.nurseryPage('+user_id+','+ (parseInt(page)+1)+')" href="javascript:;">Next »</a>';
		//$('patch_pages_'+user_id).update(html);

		JA.Fire.andUpdate('/page.nurseryplants.php', 'nursery_plants_'+user_id,{
			ja_user_id: user_id,
			ja_page_num: page
		});
	},
	getForNonUser: function(user_id) {
		var user = JA.viewer.friendsDict[user_id];
		if (!user) {
			return;
		}
		//$('nonapp_user_name_button').update(user.name.truncate(20));
		$('nonapp_user_name').update(user.name.truncate(20));
		$('nonapp_user_image').src =user.thumb;
		JA.State.nonUserPatch = user_id;
		JA.Tabs.setActiveTab('nonapp_patch');
		JA.util.resize();
	},
	showFriends: function() {
		var random_ids = [];
		var r = 0;
		while(1) {
			r = Math.round(Math.random()*1000) % JA.viewer.friends.length;
			if (random_ids.indexOf(r) == -1){
				random_ids.push(r);
			}
			if (random_ids.length == 5 || random_ids.length == JA.viewer.friends.length){
				break;
			}
		}
		html = '<h3 style="float:left;padding:top:20px;">Help Greenies<br> and Earn:</h3>';
		random_ids.each(function(r){
			html += '<a href="#" onclick="JA.Navigate.userPatch('+ JA.viewer.friends[r].id +')" class="c_small" style="float:left;display:block;height:70px;width:80px;*width:80px;margin-right:10px;text-align:center;overflow:hidden"><img src="'+JA.viewer.friends[r].thumb+'" height="50" width="50" border="1"><br>' + JA.viewer.friends[r].name.truncate(10) + '</a>';
		});
		html += '<div class="c_clear"></div>';
		$('friend_patches').update(html);
		JA.util.resize();
	},
	getTools: function(action_id, user_id){
		if (action_id) {
			JA.State.currentAction = action_id;
		} else {
			// while coming back from store
			 action_id = JA.State.currentAction;
		}
		JA.Dialog.show(JA.Dialog.LOADING);
		var postdata = $H({
			ja_action_id: action_id,
			ja_user_id: JA.State.currentUser
		}).toQueryString();
		JA.Fire.andUpdate('/page.tools.php', 'action_tools_bar', postdata);
		$('action_tools_bar').show();
		JA.util.resize();
	},
	readGreenFact:function(fact_id) {
		var params = {};
		if (fact_id) {
			params['ja_fact_id'] = fact_id;
		}
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andRecoil('/action.getfact.php', params, function(r) {
			JA.Dialog.fact('Fresh Green Fact for you...', r.fact, Prototype.emptyFunction, 'Close');
		});
	},
	viewForest:function() {
		var params = {};
		if (fact_id) {
			params['ja_fact_id'] = fact_id;
		}
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andRecoil('/gmaps.html', params, function(r) {
			JA.Dialog.fact('Fresh Green Fact for you...', r, Prototype.emptyFunction, 'Close');
		});
	},
	getNextUser: function(){
		JA.State.nextUserType = JA.State.nextUserType || 1;
		var new_user = null;
		if (JA.State.nextUserType % 2 == 0) {
			//app user;
			var c = 0;
			do {
				if(c == JA.viewer.appFriends.length) {
					new_user = null;
					break;
				}
				var r = Math.round(Math.random() * 1000);
				r = r%JA.viewer.appFriends.length;
				JA.util.log('Random id:' + r);
				new_user = JA.viewer.appFriends[r];
				//new_user = JA.viewer.friendsDict[new_user];
				c++;
			} while(this.browsedUsers.indexOf(new_user) != -1);		
		} else {
			// non app user;
			var c = 0;
			do {
				if(c == JA.viewer.friends.length) {
					new_user = null;
					break;
				}
				var r = Math.round(Math.random() * 1000);
				r = r%JA.viewer.friends.length;
				JA.util.log('Random id:' + r);
				new_user = JA.viewer.friends[r].id
				c++;
			} while(this.browsedUsers.indexOf(new_user) != -1);
		}
		JA.State.nextUserType ++;
		if (new_user != null) {
			this.browsedUsers.push(new_user);			
		}
		return new_user;
	},
	setupPatch: function(){
		var params = {
			ja_user_id: JA.State.nonUserPatch
		};
		JA.Fire.andForget('/action.help.php',params);
		JA.Tabs.setActiveTab('plants');
	},
	updateProfile: function(){
		JA.Fire.andRecoil('/page.profilejson.php', {only_plants:1}, function(r){
			JA.util.log(r);			
			if (r.plants){
				JA.util.log(r.plants.toJSON());
				JA.Data.store('plants_list', r.plants.toJSON());
				JA.Data.store('data_fetch_at', (new Date()).getTime());
			}
		});
	},
	movePlant: function(plant_id, user_id){
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL,'Moving...',''));
		JA.Fire.andRecoil('/action.moveplant.php', {ja_plant_id:plant_id}, function(r){
			JA.util.log(r);
			JA.Tabs.setActiveTab('green_patch');
		});
	}
};

JA.Team = {
	loadedInvite: 0,
	sendIdx: 0,
	selectedFriends: [],
	hideTabs : function() {
		$('gt_link_team').removeClassName('active');
		$('gt_link_pending').removeClassName('active');
		$('gt_link_invite').removeClassName('active');
		$('gt_team_tab').hide();
		$('gt_pending_tab').hide();
		$('gt_invite_tab').hide();
	},
	showInvite : function() {
		JA.Team.hideTabs();
		if (JA.Team.loadedInvite == 0) {
			JA.Fire.andRecoil('/page.sent_team_invites.php', {}, function(r){
				var sent_users = r.invites.split(",");
				var sent_dict = [];
				sent_users.each(function(f){
					sent_dict[f] = 1;
				});
				JA.Selector.team = new JA.FriendSelector('team','gt_invite_selector',function(){
					this.sendGifts();
				}, sent_dict, 'Friends not Invited yet',false);
				JA.Team.loadedInvite = 1;
			});
		} else {
			//Reset selector
			JA.Selector.team.create();
		}
		$('gt_link_invite').addClassName('active');
		$('gt_invite_tab').show();
		setTimeout('JA.util.resize()',1000);
	},
	showTeam : function() {
		JA.Team.hideTabs();
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.team.php', 'gt_team_tab', {});
		$('gt_link_team').addClassName('active');
		$('gt_team_tab').show();
		setTimeout('JA.util.resize()',2000);
	},
	pending: function() {
		JA.Team.hideTabs();
		JA.Dialog.show(JA.Dialog.LOADING);
		//JA.Fire.andUpdate('/page.pending_team.php', 'gt_pending_tab', $H({}).toQueryString());
		JA.Fire.andUpdate('/page.pending_team2.php', 'gt_pending_tab', {});
		$('gt_link_pending').addClassName('active');
		$('gt_pending_tab').show();
		setTimeout('JA.util.resize()',2000);
	},
	pendingHome: function(){
		//JA.Dialog.show(JA.Dialog.LOADING);
		//JA.Fire.andUpdate('/page.pending_team.php', 'gt_pending_tab', $H({}).toQueryString());
		JA.Fire.andRecoil('/page.pending_team.php', {}, function(r){
			$('gt_pending_tab_home').update(r);
			JA.Dialog.confirm('Get your friends to join your team in one click.<br/>','The bigger your team, more plants you unlock and more $$$ you earn', function(r) {
                                        if (r) {

                                                JA.Share.appInvite(20, function(r) {
                                                        	JA.Fire.andRecoil('/action.invite.payout.php',{},function(){});
                                                });
                                        }
                                });
		});
		setTimeout('JA.util.resize()',2000);
	},
	accept: function(user_id, el) {
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andRecoil('/action.acceptteam.php', {ja_user: user_id}, function(r){
			JA.Dialog.close();
			$(el).replace('Added to your team.');
		});
	},
	send: function(reset_idx) {
		if (reset_idx ||  JA.Team.selectedFriends.length == 0) {
			JA.Team.sendIdx = 0;
			JA.Team.selectedFriends = JA.Selector.team.getSelected();
		}
		if (JA.Team.selectedFriends.length == 0) {
			//JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL,'Please select friends whom you want in your team!','', true));
			JA.Dialog.show(
				JA.Dialog.setContent(JA.Dialog.GENERAL, 'Green Team Invites<br><br>'
					,'<button style="*width:260px" class="button" onclick="JA.Selector.team.select(-1);JA.Team.send(true);JA.Dialog.close();">Invite All Friends <span class="c_tiny">(maximum impact)</span></button>'
					+'<br><br><button style="*width:260px" class="button" onclick="JA.Selector.team.select(20);JA.Team.send(true);JA.Dialog.close();">Invite only 20</button>'
					+'<br><br><button style="*width:190px" class="button" onclick="JA.Dialog.close();">Let me select friends myself</button>'
					,false
				)
			);
			return;
		}
		if (JA.Team.sendIdx >= JA.Team.selectedFriends.length) {
			return;
		}
		var fid = JA.Team.selectedFriends[JA.Team.sendIdx++];
		JA.Share.ids=JA.Team.selectedFriends;
		howmany=JA.Team.selectedFriends.length;
		JA.Share.multipleInvite(howmany);
/*		var frnd = JA.viewer.friendsDict[fid].obj;
		JA.Fire.andForget('/action.registerteaminvite.php', {ja_user: fid});
		JA.Share.joinTeam(frnd, JA.Team.send);
		/*
		if (JA.viewer.friendsDict[fid].hasApp) {
			JA.Share.joinTeam(frnd, JA.Team.send);
		} else {
			JA.Share.joinTeamAppInvite(fid, JA.Team.send);
		}
		*/
	},
	gotoPending:function(){
		JA.Tabs.setActiveTab('green_team');
		JA.Team.pending();
	},
	gotoInvite:function(){
		JA.Tabs.setActiveTab('green_team');
		JA.Team.showInvite();
	}
};

JA.Leaderboard = {
	duration: 1,
	team_duration:1,
	topPeople : function() {
		$('lb_link_friend').removeClassName('active');
		$('lb_link_people').addClassName('active');
		$('lb_link_team').removeClassName('active');
		//$('lb_pages').show();
		$('lb_friend_tab').hide();
		$('lb_team_tab').hide();
		$('lb_people_tab').show();
		setTimeout('JA.util.resize()',1000);
	},
	topFriends : function() {
		$('lb_link_friend').addClassName('active');
		$('lb_link_people').removeClassName('active');
		$('lb_link_team').removeClassName('active');
		//$('lb_pages').hide();
		$('lb_people_tab').hide();
		$('lb_team_tab').hide();
		$('lb_friend_tab').show();
		setTimeout('JA.util.resize()',1000);
	},
	topTeam : function() {
		$('lb_link_friend').removeClassName('active');
		$('lb_link_people').removeClassName('active');
		$('lb_link_team').addClassName('active');
		//$('lb_pages').hide()
		$('lb_people_tab').hide();
		$('lb_team_tab').show();
		$('lb_friend_tab').hide();
		setTimeout('JA.util.resize()',1000);
	},
	getTopPeople: function(page){
		page = page && page >= 0 ? page : 0;
		var folder = 'A';
		JA.Dialog.show(JA.Dialog.LOADING);
		var postdata = $H({
			ja_page_num: page,
			ja_folder: folder,
			ja_duration: JA.Leaderboard.duration,
			ja_page_size: 20
		}).toQueryString();
		JA.Fire.andUpdate('/page.leaderboard.php', 'lb_people_tab', postdata);
	},
	getTopTeams: function(page){
		page = page && page >= 0 ? page : 0;
		var folder = 'A';
		JA.Dialog.show(JA.Dialog.LOADING);
		var postdata = $H({
			ja_page_num: page,
			ja_folder: folder,
			ja_duration: JA.Leaderboard.team_duration,
			ja_page_size: 20
		}).toQueryString();
		JA.Fire.andUpdate('/page.teamboard.php', 'lb_team_tab', postdata);
	},
	showTopFriends: function() {
		//sort

		JA.State.topFriends = JA.viewer.appFriends;
		/*
		for(ii=0; ii<JA.State.topFriends.length; ii++) {
			for(jj=ii; jj<JA.State.topFriends.length; jj++) {
				if(parseFloat(JA.State.topFriends[ii].feet) < parseFloat(JA.State.topFriends[jj].feet)) {
					var temp = JA.State.topFriends[ii];
					JA.State.topFriends[ii] = JA.State.topFriends[jj];
					JA.State.topFriends[jj] = temp;
				}
			}
		}
		*/
		var html  = '<br><table border="0" width="100%">';
		var i = 1;
		if (JA.State.topFriends.length == 0) {
			html += '<tr><td><br><br><font size="4">Oops, none of your friends have saved any square feet :( </font><br><br><div onclick="JA.Share.appInvite(10)" class="button">Invite 10 of your friends to Green Patch</div></td></tr>';
			//JA.Leaderboard.topPeople();
		}
		else {
			var c = 0;
			JA.State.topFriends.each(function(f){
				var user = JA.viewer.friendsDict[f];
				html += (c %2 == 0 ? '<tr>' : '');
				html += '<td width="50" style="font-size:36px;color:#ccc">' + (i++) + '</td>';
				html += '<td width="120" style="padding:10px 0px">';
				html += '<a href="javascript:JA.Navigate.userPatch(' + user.id + ')"><img src="' + user.thumb + '" width="100" class="c_user_image"></a>';
				html += '</td>';
				html += '<td width="80%">';
				html += '<h3><a href="javascript:JA.Navigate.userPatch(' + user.id + ')">' + user.name + '</a></h3>';
				html += '(' + user.sqft + ' square feet)       ';
				html += '<a href="javascript:void(0)" onclick="JA.Tabs.setActiveTab(\'plants\');">Save more than this</a><br>';
				html += '<br><span class="button" onclick="JA.Navigate.userPatch(' + user.id + ')">View Patch</span>';
				//html += '<a href="javascript:JA.Navigate.userPatch(' + user.id + ')">Send Plant</a>';
				html += '</td>';
				html += (c %2 == 1 ? '</tr>' : '');
				c++;
			});
		}
		html += '</table>';
		$('lb_friend_tab').update(html);
		JA.util.resize();
	}
};

JA.registerInvite = function(user_id, method) {
    var os = opensocial.Container.get();
    var postdata = {
        g_refer_id: user_id,
        g_method: method
    };

    JA.Fire.andForget('/action.registerinvite.php', postdata);
};

JA.Market = {
	points: 0,
	select: function(cb, p) {
		this.points += ($(cb).checked ? p : -p);
		this.points ? $('market_sell_button').enable(): $('market_sell_button').disable();
		$('market_points').update(this.points);
	},
	sell: function(){
		var postdata = Form.serialize('market_form');
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Plants sold!', 'You earned <b>'+JA.Market.points+'</b> green bucks.', false));
    	JA.Fire.andRecoil('/action.sell.php', postdata, function(r){
			JA.Tabs.setActiveTab('market');
			JA.GreenPatch.updateProfile();
		});
	}
};

JA.Wall = {
	post: function(wall_id) {
		var mesg = $('wall_ta_'+wall_id).value;
		var postdata = {
			ja_wall_id:wall_id,
			ja_mesg:mesg
		};
		JA.Fire.andRecoil('/action.wallpost.php', postdata, function() {
			html = '<div calss="wall_post"><img hspace="10" src="'+JA.viewer.image+'" width="50" height="50" align="left">';
			html += '<b style="display:block;padding:2px;background:#eee;border-top:1px solid #ccc">'+JA.viewer.name+'</b>';
			html += '<p style="float:left">'+mesg.escapeHTML().gsub("\n",'<br>')+'</p>';
			html += '</div>';
			$('new_wall_post_'+wall_id).update(html);
		})
	},
	remove: function(post_id) {
		var mesg = $('wall_post_'+post_id).hide();
		var postdata = {
			ja_post_id: post_id
		};
		JA.Fire.andForget('/action.deletepost.php', postdata, function() {
		});		
	},
	page: function(wall_id, page_no){
		$('green_wall_posts').update(JA.Messages.LOADING);
		page_no =  page_no ? page_no : 0;
		var postdata = {
			ja_wall_id:wall_id,
			ja_page_num:page_no
		};
		JA.Fire.andRecoil('/action.getwallpage.php', postdata, function(r) {
			$('green_wall_posts').update(r);
		})
	}
};
JA.Slogans = {
	page:function(num, folder){
		folder = folder || 'R';//N=>New P=>Popular R=>Recently Popular
		JA.Dialog.show(JA.Dialog.LOADING);
		var postdata = $H({
			ja_page_num : num,
			ja_folder: folder,
			ja_page_size: JA.Options.MAX_SLOGANS_PER_PAGE
		}).toQueryString();
		JA.Tabs.setActiveTab('slogans');
		JA.Fire.andUpdate('/page.slogans.php', 'slogans', postdata);
	},
	use:function(id){
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, JA.Messages.SAVING, '', false));
		JA.Fire.andRecoil('/action.slogans.php', {
			ja_slogan_id:id
		}, function(r){
			JA.Dialog.close();
			JA.Tabs.setActiveTab('green_patch');
		});
	},
	custom:function(sl){
		if (sl.strip() == ''){
				JA.Action.error('Please enter a message!', true);
				return;
		}
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, JA.Messages.SAVING, '', false));
		JA.Fire.andRecoil('/action.saveslogan.php', {
			ja_slogan:sl
		}, function(r){
			JA.Dialog.close();
			JA.Tabs.setActiveTab('green_patch');
		});
	},
	preview:function(el){
		$(el).value = $(el).value.substr(0,100);
		var sl = $(el).value;
		var cl = 15;
		if(sl.length < 30){
			cl = 24;
		} else if(sl.length < 40){
			cl = 20;
		} else if(sl.length < 50){
			cl = 18;
		}
		cl = "board_"+cl;
		$('board_preview').update(sl);
		$('board_preview').className = "board_text "+ cl;
	},
	disable:function(){
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, JA.Messages.SAVING, '', false));
		JA.Fire.andRecoil('/action.disableslogans.php', {
		}, function(r){
			JA.Dialog.close();
			JA.Tabs.setActiveTab('green_patch');
		});
	}
}; 
JA.Pumpkins = {
	to:[],
	friends: false,
	points:'',
	//movie: 'http://layer2.bitrhymes.com/greenplanet10/res/swf/halloween.swf',
	movie: 'http://cache01-widget01.myspacecdn.com/1/l_b6c3e8e81100e94306d2c5777545ab2a.swf',
	patch: false,
	init:function(){
		/*
		JA.Selector.pumpkin =  new JA.FriendSelector('pumpkin','pumpkin_sel',function(){
			if(!JA.Selector.pumpkin.getSelected().length){
				JA.Selector.pumpkin.select(-1);
				//JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'NO friends selected!', '<br>Please select atleast 1 friend.', true));
				//return;
			}
			this.to = JA.Selector.pumpkin.getSelected();
			JA.Tabs.setActiveTab('pumpkin_carve');
			$('carve_pumpkin').update(this.getEmbed({}));
			//this.embedPumpkin('carve_pumpkin');
		}.bind(this), []);
		JA.Selector.pumpkin..onlyNonAppFriends=false;
		JA.Selector.pumpkin.create();
		*/
	},
	flashCallback:function(r){
		JA.util.log(r);
		if(r == undefined || r.strip() == ''){
			return;
		}
		this.points = r;
		this.save();
		$('carve_pumpkin').update('<h3>Pumpkin saved!</h3>');
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Pumpkin saved!', '', true));
		JA.Dialog.GENERAL.setStyle({
			top:'350'
		});

	},
	sendToFriends:function(pid,leader){
		JA.util.urchin('/green/Pumpkin/send_to_friends');
		leader = leader? 1:0;
		JA.Tabs.setActiveTab('pumpkin_friends');
		/*this.embedPumpkin('carve_pumpkin',{
			imgid: pid,
			islit: 1
		},250,250));
		*/
		$('pumpkin_to_send').update(this.getEmbed({
			imgid: pid,
			islit: 1
		},250,250));
		if(!JA.State.send_pumpkin_friends_loaded) {
			JA.State.send_pumpkin_friends_loaded = true;
			JA.Selector.send_pumpkin = new JA.FriendSelector('send_pumpkin','pumpkin_to_send_selector',function(){
				if(!JA.Selector.send_pumpkin.getSelected().length){
					JA.Selector.send_pumpkin.select(-1);
					//JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'NO friends selected!', '<br>Please select atleast 1 friend.', true));
					//return;
				}
				var ids=JA.Selector.send_pumpkin.getSelected();
				JA.Fire.andForget('/action.pumpkin_send.php',{
					ja_users: ids.join(','),
					ja_pid:pid,
					ja_leader:leader
				});
				JA.util.log('Send pumpkin ID:'+pid+' to: '+ ids.length + ' friends.');
				JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Pumpkin sent!', '', true));
				JA.Tabs.setActiveTab('send_pumpkin');
				JA.Share.sendPumpkin(ids, pid);
			}.bind(this), []);
			JA.Selector.send_pumpkin.onlyNonAppFriends=false;
			JA.Selector.send_pumpkin.create();
		}
		JA.util.resize();
	},
	save:function(){
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andRecoil('/action.pumpkin_save_new.php',{
			ja_friends: this.friends ? 1 : 0,
			ja_points: this.points
		},function(r){
			JA.Dialog.close();
			JA.util.log(r);
			if (this.friends) {
				this.sendToFriends(r.pid, false);
			} else{ 
				//save in persistance if it is carved for self.
				JA.Data.store('pumpkin',r.pid);
				JA.Navigate.greenPatch();
			}
		}.bind(this));
	},
	vote:function(pid, weight, input){
		JA.util.urchin('/green/Pumpkin/vote/'+weight);
		$(input).disabled = true;
		JA.Fire.andRecoil('/action.pumpkin_vote.php',{
			ja_pid: pid,
			ja_weight: weight
		},function(r){
			if (r.success == 1){
				var votes = parseInt($('vote_'+pid).innerHTML);
				votes += weight;
				$('vote_'+pid).update(votes);
			} else {
				$(input).value = 'already voted!';
			}
		}.bind(this));
	},
	setOnPatch:function(id){
		JA.util.urchin('/green/Pumpkin/set_on_patch/');		
		JA.Fire.andForget('/action.pumpkin_patch.php',{
			ja_pid: id
		});
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Pumpkin has set on your Green Garden!', '', true));
		JA.Data.store('pumpkin',id);
	},
	carvePatch: function(for_freinds){
		this.friends = !(!for_freinds);
		JA.Tabs.setActiveTab('pumpkin_carve');
		$('carve_pumpkin').update(this.getEmbed({}));
		JA.util.resize();
		setTimeout('JA.util.resize();',1000);
		JA.util.urchin('/green/Pumpkin/carve/');
	},
	remove:function(id, div){
		JA.util.urchin('/green/Pumpkin/remove/');
		JA.Fire.andForget('/action.pumpkin_remove.php',{
			ja_pid: id
		});
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, 'Pumpkin has been removed!', '', true));
		$(div).setStyle({
			visibility:'hidden'
		});
	},
	show:function(id){
		JA.Dialog.show(JA.Dialog.PUMPKIN);
		$('d_carve_pumpkin').update();
		$('d_carve_pumpkin').update(this.getEmbed({
			imgid:id,
			islit:1,
			garden:1
		}));
		JA.util.urchin('/green/Pumpkin/lit_on_patch/');
	},
	userFarm:function(user_id){
		JA.Tabs.setActiveTab('pumpkin_farm');
		this.farm(user_id);
	},
	farm:function(user_id, page, folder){
		//if (typeof page == 'undefined' && JA.State.farm_laoded) {
			//return;
		//}
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.pumpkin_farm.php', 'pumpkin_farm', {
			ja_user_id: user_id || JA.viewer.id,
			ja_page_num: page || 0,
			ja_folder: folder || 'R',
			ja_page_size: JA.Options.PUMPKIN_PER_PAGE
		});
		JA.State.farm_laoded  = true;
	},
	leader:function(page, folder){
		if (typeof page == 'undefined' && JA.State.pumpkin_leader_laoded) {
			return;
		}
		JA.Dialog.show(JA.Dialog.LOADING);
		JA.Fire.andUpdate('/page.pumpkin_leader.php', 'pumpkin_leader', {
			ja_page_num:  page || 0,
			ja_folder:folder,
			ja_page_size: JA.Options.PUMPKIN_PER_PAGE
		});
		JA.State.pumpkin_leader_laoded  = true;
	},
	getEmbed: function(args, width, height){
		args = args ? $H(args).toQueryString() : '';
		width = width || 450;
		height = height || 450;
		
		return  '<object allowScriptAccess="always" allowNetworking="all" type="application/x-shockwave-flash" data="'+this.movie+'?'+args+'" width="'+width+'" height="'+height+'" wmode="transparent">'+
				'<param name="movie" value="'+this.movie+'?'+args+'" />'+
				'<param name="quality" value="high" />' +
				'<param name="allowNetworking" value="all" />' +
				'<param name="allowScriptAccess" value="always" />' +
				'<param name="wmode" value="transparent" />' +
				'<embed wmode="transparent"  height="'+height+'" align="middle" width="'+width+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" src="'+this.movie+'?'+args+'"></embed>'+
				'</object>';
	}
};
JA.Invites = {
	curr_id: -1,
	sent_ids: [],
	next:function(){
		if (!JA.viewer.nonAppFriends || !JA.viewer.nonAppFriends.length){
			return;
		}
		var rand  = 0;
		do {
			rand = Math.ceil(JA.viewer.nonAppFriends.length * Math.random()) - 1;
		} while (this.sent_ids.indexOf(JA.viewer.nonAppFriends[rand]) != -1 && this.sent_ids.length != JA.viewer.nonAppFriends.length);
		this.curr_id = JA.viewer.nonAppFriends[rand];
		var frnd = JA.viewer.friendsDict[JA.viewer.nonAppFriends[rand]];
		if (!frnd) {	
			this.next();
			return;
		}
		var html = '<img src="'+frnd.thumb+'" height="60" style="float:left;margin-right:10px;border:1px solid #ccc">'
				 + '<br><b>'+frnd.name.truncate(15)+'</b> is not in your green team!';
		$('invite_friend').update(html);
		$('invite_friend_name').update('Invite '+frnd.name.truncate(15));
		$('invite_friend_buttons').show();
	},
	invite:function(){
		JA.Share.singleAppInvite(this.curr_id);
		this.sent_ids.push(this.curr_id);
		this.next();
	}
};

JA.Themes = {
	change: function() {
		JA.Dialog.show(JA.Dialog.setContent(JA.Dialog.GENERAL, JA.Messages.SAVING, '', false));
		var theme_id = Form.getInputs('theme_form','radio','theme_img').find(function(radio) { return radio.checked; }).value;
		JA.util.log('Theme selected: ' + theme_id);
		JA.Fire.andRecoil('/action.savetheme.php', { ja_theme_id: theme_id }, function(r){
			JA.Tabs.setActiveTab("green_patch");
		});
	}
};


JA.Articles = {
	fetch: function(page, sort_by, for_user, st_dir, st_id, pop_d, watchlist) {
	
		JA.util.log(page);
		if (JA.State.fetchArticlesLoaded && (typeof page == 'undefined')) {
				// do not refesh page if:
				//  - page have been loaded
				//  - we are just switching tabs
				//  - and there are no new messages
				JA.util.resize();
				//return;
		}
		
		var os = opensocial.Container.get();
		if (!page) {
			page = 1;
		}
		postdata = $H({
			hb_user_id : JA.viewer.id,
			hb_page: page,
			hb_sort_votes: sort_by,
			hb_for_user: for_user,
			hb_st_dir: st_dir,
			hb_st_id: st_id,
			hb_pop_d: pop_d,
			hb_watchlist : watchlist
		}).toQueryString();
		JA.Dialog.show(JA.Dialog.LOADING);
	
		//JA.Tabs.setActiveTab('articles');
		JA.Fire.andUpdate('/page.articles.php', 'articles', postdata);
		JA.State.fetchArticlesLoaded = true;
		setTimeout('JA.util.resize()',3000);
	},

	vote: function(confess_id, link) {
		if (JA.new_user) {
			$('h_body').hide();
			JA.util.resize();
			alert("You need to add the App to be able to empathize!");
			return;
		}

		var postdata = 'hb_confess_id=' + confess_id;
		JA.Fire.andRecoil('/action.article_vote.php',postdata, function(r){
			var status = (r.success == 1) ? 'done!' : 'You can only do it once!';
			$(link).replace('<span>' + status + '</span>');
		}.bind(this));
	},

	bury: function(confess_id, link) {
		//var postdata = 'hb_confess_id=' + confess_id;
		postdata = $H({
			hb_confess_id: confess_id
		}).toQueryString();
		JA.Fire.andRecoil('/action.article_bury.php',postdata, function(r){
			var status = (r.success == 1) ? 'done!' : 'You can only do it once!';
			$(link).replace('<span>' + status + '</span>');
		}.bind(this));
	},
	
	article_delete: function(confess_id, link) {
	        var postdata = 'hb_confess_id=' + confess_id;
	        JA.Fire.andRecoil('/action.article_delete.php',postdata, function(r){
	                var status = (r.success == 1) ? 'deleted!' : 'Error while deleting!';
	                $(link).replace('<span>' + status + '</span>');
	        }.bind(this));
	},
	
	fetchThread: function(parent_id, page) {
		page = page ? page : 1;
		//set content = loading	
		
		//JA.fetchSecretsLoaded = false;
		//$('h_tabs_confess_content').update(JA.loading);
	
		postdata = $H({
			hb_user_id: JA.viewer.id,
			hb_parent_id: parent_id,
			hb_page: page
		}).toQueryString();
	
		JA.Fire.andUpdate('/page.article_detail.php','articles',postdata);
		$('articles').update(JA.loading);
		setTimeout('JA.util.resize()',2000);
	},
	
	addToWatchlist: function(item_id, item_type, link) {
		postdata = $H({
			hb_item_id : item_id,
			hb_user_id: JA.viewer.id,
			hb_item_type: item_type
		}).toQueryString();	
	
		JA.Fire.andRecoil('/action.article_watchlist_add.php', postdata, function(r){
			var status = (r.success == 1) ? 'done!' : 'Item already present in your watchlist!';
			$(link).replace('<span>' + status + '</span>');
		}.bind(this));
	},
	
	removeFromWatchlist: function(item_id, item_type, link) {
		postdata = $H({
			hb_item_id : item_id,
			hb_user_id: JA.viewer.id,
			hb_item_type: item_type
		}).toQueryString();
		JA.Fire.andRecoil('/action.article_watchlist_remove.php', postdata, function(r){
			//console.log(r.text);
			var status = (r.success == 1) ? 'removed!' : 'Item already removed!';
			$(link).replace('<span>' + status + '</span>');
		}.bind(this));
	},
	
	showFriendSelector: function(a, ans_id, callback) {
	        //console.log(e);
	        //store the answer in global variable.
	        callback = callback ? callback : JA.friendSelected;
	        if (!JA.Options.selector_loaded) {
	                JA.friendPicker = new MyOpenSpace.Widgets.FriendPicker({
	                        element: "h_friendsel",
	                        friendClickAction: callback
	                });
	                JA.Options.selector_loaded = true;
	        }
	        JA.currAnswer = $(ans_id).innerHTML;
	        var offset = Position.cumulativeOffset($(a));
	        $('h_friendsel_wrap').style.top = offset[1];
	        $('h_friendsel_wrap').style.left = offset[0];
	        $('h_friendsel_wrap').show();
	},
	
	share: function(f) {
	        $('h_friendsel_wrap').hide();
	        JA.Share.postTo('SEND_MESSAGE', 'Read this interesting post on \''+JA.AppName + '\'', ''
	                 + JA.currAnswer + '<br>-----<br>'
	                 + 'Comment and read what people commented '
	                 + '<a href="'+ JA.URL.canvas +'">HERE</a>!', f);
	},

	friendSelected: function(f) {
	        $('h_friendsel_wrap').hide();
	        JA.Share.postTo('SEND_MESSAGE', 'checkout my '+JA.AppName+' message', 'Look what I got in my '+JA.AppName+':<br><BR>'
	                 + '-----<br>' + JA.currAnswer + '<br>-----'
	                 + '<br><br>'
	                 + '<a href="'+ JA.URL.canvas +'">Share your '+JA.AppName+' messages with me</a>!'
	                 + '<br><a href="'+ JA.URL.canvas +'"><img src="http://a548.ac-images.myspacecdn.com/images01/1/m_2faa1c495bce1e92a6e94820710b1d0b.gif" border="0"></a>', f);
	},
	
	postTo: function(target, subject, content, user, callback) {
	        var osContainer = opensocial.Container.get();
	        JA.supportedTargets = osContainer.getMySpaceEnvironment().getSupportedPostToTargets();
	        //["COMMENTS", "BLOG", "BULLETINS", "PROFILE", "SEND_MESSAGE"]
	    // create a new message object passing in the content to be posted and then set the subject and target fields
	    var message = opensocial.newMessage(content);
	    message.setField(opensocial.Message.Field.TITLE, subject);
	    message.setField(opensocial.Message.Field.TYPE, target);
	    // show post to
	    osContainer.postTo(JA.OStoken, message, user,callback || Prototype.emptyFunction);
	}
};
