_UNSELECTED_FRIENDS = new Array();
_SELECTED_FRIENDS = new Array();
_INVITE_SEQUENCE = -1;
_INVITE_COUNT = 0;
_DAILY_INVITE_LIMIT = 20000;
_VIEWER_FRIENDS_ARR = new Array();
_VIEWER_FRIENDS_WITHAPP = new Array();
_VIEWER_FRIENDS_IDS_ARR = null;

/**
 * Request for friend information
 */
function loadFriends() { 
	//alert("in loadFrineds");
	var os = opensocial.Container.get();
	var req = opensocial.newDataRequest(); 
	req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER), 'viewer');
	req.add(req.newFetchPeopleRequest(opensocial.DataRequest.Group.VIEWER_FRIENDS), 'viewerFriends');
	req.send(onLoadFriends); 
	//alert('out loadfriends');
}

/**
 * Parses the response to the friend information request and generates
 * html to list the friends by their display name.
 *
 * @param {Object} dataResponse Friend information that was requested.
 */
function onLoadFriends(dataResponse) {

    if (dataResponse.hadError() == true) {
        if(_USER_TYPE == 6) {
            var html = generateCanvasForNonUser();
	        document.write(html);
		    gadgets.window.adjustHeight();
        }
        return;
    }

	//alert (" in onLoadFriends");
	_VIEWER = dataResponse.get('viewer').getData();
	_VIEWER_FRIENDS = dataResponse.get('viewerFriends').getData();

	_VIEWER_FRIENDS.each(
		function(person) {
			_VIEWER_FRIENDS_ARR.push(person);
		});

	var os = opensocial.Container.get();
	var req = opensocial.newDataRequest(); 
	var filterParam = {};
	filterParam[opensocial.DataRequest.PeopleRequestFields.FILTER] = opensocial.DataRequest.FilterType.HAS_APP;
	req.add(req.newFetchPeopleRequest (opensocial.DataRequest.Group.VIEWER_FRIENDS, filterParam), 'viewerFriendsWithApp' );

	req.send(onLoadFriendsWithApp); 

	// Go back to app-main so that it can do something meaningful
	onFriendsInitializeComplete();
}

function onLoadFriendsWithApp(dataResponse) {
	//alert('in onLoadFriendsWithApp');
    var friends= dataResponse.get('viewerFriendsWithApp').getData();
	friends.each(
		function(person) {
	        _VIEWER_FRIENDS_WITHAPP.push(person);
		});
}

function populateFriendsInSelectFriends() {
	//alert ("no of viewer friends = ");

	_UNSELECTED_FRIENDS = new Array();
	_SELECTED_FRIENDS = new Array();

	_VIEWER_FRIENDS.each(
		function(person) {
			_UNSELECTED_FRIENDS.push(person);
		}
	);
	
	refreshFriendLists();
}

function refreshFriendLists() {
	refreshUnselectedList();
	refreshSelectedList();
}

function refreshUnselectedList() {
	refreshList("outFriends", _UNSELECTED_FRIENDS, "selectFriend", "");
}

function refreshSelectedList() {
	refreshList("inFriends", _SELECTED_FRIENDS, "unselectFriend", "CHECKED");
}

function generateOnSelectFunction(i, onselectfunc) {
	var html = '';
	//		html += '" onselect="void(0); ' + onselectfunc + '(' + i + ')" ';
	html += '" onclick="void(0); ' + onselectfunc + '(' + i + ')" ';
	//		html += '" onchange="void(0); ' + onselectfunc + '(' + i + ')" ';
	return html;
}


function refreshList(domele, alist, onselectfunc, checked) {
	var i = 0;
	var html = "";

	if(alist.length <= 0) {
		if (domele == "outFriends") {
			html = "Thanks for selecting all friends!";
		}
		else {
			html = "You haven't selected anyone";
		}
	}

	for(var i=0; i < alist.length; i++) {
		var person = alist[i];
		var pName = person.getDisplayName();
		html += '<LABEL><INPUT type="checkbox" value="select' + i + generateOnSelectFunction(i, onselectfunc) + checked + ' >' 
			+ pName + '</LABEL> <BR/>';
		//alert(pName);
	}
	document.getElementById(domele).innerHTML = html;
	gadgets.window.adjustHeight();
}

function selectFriend(friend) {
	//alert(friend  + " selected");
	_SELECTED_FRIENDS.push(_UNSELECTED_FRIENDS[friend]);
	_UNSELECTED_FRIENDS.splice(friend, 1);
	refreshFriendLists();
}

function unselectFriend(friend) {
	//alert(friend  + " unselected");
	_UNSELECTED_FRIENDS.push(_SELECTED_FRIENDS[friend]);
	_SELECTED_FRIENDS.splice(friend, 1);
	refreshFriendLists();
}

function generateSelectFriends() {
	var html = '<TABLE  border="0" cellpadding="5" cellspacing="5" width="100%" align="center"';
	//	    html += '<TR  border="0" cellpadding="5" cellspacing="5" width="100%" align="left"';
	//		html += '<TD>';
	//		html += '  <LABEL style="font-size:18; font-weigth:bold; ">Select Friends</LABEL>          ';
	//		html += '</TD>';
	//	    html += '</TR>';
	html += '<TR  border="0" cellpadding="2" cellspacing="2" width="100%" align="left"';
	html += '<TD>';
	html += '<div class="friends-box" id="outFriends">         ';
	html += '   Friends to select                              ';
	html += '</div>                                            ';
	html += '</TD>';
	html += '</TR>';
	html += '<TR  border="0" cellpadding="2" cellspacing="2" width="100%" align="left"';
	html += '<TD>';
	html += '<div class="friends-box" id="inFriends">          ';
	html += '      Selected friends                            ';
	html += '</div>                                            ';
	html += '</TD>';
	html += '</TR>';
	html += '<TR  border="0" cellpadding="5" cellspacing="5" width="100%" align="left"';
	html += '<TD>';
	html += '<input id="send" class="friendspagebutton" type="button" ';
	if(_USER_TYPE == 6) {
		html += ' value="Send ' + _SELECTED_PLANT_DISPLAY_NAME + ' Plant *" ';
	}
	else {
		html += ' value="Send ' + _SELECTED_PLANT_DISPLAY_NAME + ' Plant" ';
	}
	html += '       name="send" onclick="onSelectFriends();"/> ';
	html += '</TD>';
	html += '</TR>';
	html += '<TR  border="0" cellpadding="5" cellspacing="5" width="100%" align="left"';
	html += '<TD>';
	if(_USER_TYPE == 6) {
		html += '<LABEL style="font-size:11;">* Post personalized message or comment</LABEL>';
	}
	html += '</TD>';
	html += '</TR>';
	html += '</TABLE>';

	return html;
}


function generateSelectFriendsPage(plantName) {

	var sendPlantUrl = _BASE_URL + "os/greentrees/send-plant.php";
	sendPlantUrl += "?userId=" + _VIEWER.getId();
	sendPlantUrl += "&userType=" + _USER_TYPE;
	sendPlantUrl += "&op=getPlantToSend";
	sendPlantUrl += "&plantName=" + plantName;
	sendPlantUrl += "&uq=" + (new Date().getUTCMilliseconds());

	var params = {};
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
	params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
	gadgets.io.makeRequest(sendPlantUrl, onGetPlantToSendRequestComplete, params);
}

function onGetPlantToSendRequestComplete(obj) {
    if(checkMaintenanceMode(obj) == true) {
        return;
    }

	var json = obj.data;
	_INVITE_SEQUENCE = json.inviteSequence;
	_INVITE_COUNT = json.inviteCount;
	_SELECTED_PLANT_DISPLAY_NAME = json.plantDisplayName;
	_SELECTED_PLANT_URL = json.plantUrl;

	//alert ("invite count = " + _INVITE_COUNT);
	
	var html = '<div class="plantsToSendBoxMessage">';
	html += '<LABEL>';
	html += 'Great! Now select your special friends who get to grow a ' + _SELECTED_PLANT_DISPLAY_NAME + ' plant in their (Lil) Green Patch!';
	html += '</LABEL> <BR><BR>';
	html += '</div>';
	html += '<div class="plantsToSendBoxMessage" >';
	html += '<TABLE  border="0" cellpadding="5" cellspacing="5" width="90%" align="center"';
	html += '  <TR border="0" cellpadding="5" cellspacing="5" width="100%" align="center">'; 
	html += '  <div style="align:center;">';
	html += '    <TD border="0" cellpadding="5" cellspacing="5" width="40%" align="center">';
	html  +=        json.html; // obj.text;
	html += '    </TD>';
	html += '  </div>';
	html += '  <div style="align:center;">';
	html += '    <TD border="0" cellpadding="5" cellspacing="5" width="60%" align="center">';
	html +=        generateSelectFriends();
	html += '    </TD>';
	html += '  <div>';
	html += '</TR>';
	html += '</TABLE>';
    html += '<div id="inviteLimitMsg" style="visibility:hidden;">';
	html += '</div>';
	html += '</div>';

	//alert ("before setting inner html");
	document.getElementById('gt-body').innerHTML = html;
	gadgets.window.adjustHeight();
	//alert ("after setting inner html");

	populateFriendsInSelectFriends();
}

function generateDailyLimitExceededMessage() {
	var html = '';
	//var $rem = _SELECTED_FRIENDS.length - (_DAILY_INVITE_LIMIT - $_INVITE_COUNT);
	
	html += '<LABEL>Oops! You can send only ' + _DAILY_INVITE_LIMIT + ' plants in a day. (You already have sent  ' + _INVITE_COUNT + ' plants today.) </LABEL>';
	html += '<BR/>';
	html += '<input id="dailyMsg" class="friendspagebutton" type="button" value="Ok" ';
	html += '       name="send" onclick="onDailyLimitOkClicked();"/> ';
	return html;
}

function onDailyLimitOkClicked() {
	document.getElementById('inviteLimitMsg').style.visibility= 'hidden';
}

function onSelectFriends() {

	//		alert ('onSelectFriends');

	if(_SELECTED_FRIENDS.length <= 0) {
		alert("Select at least one friend.");
		return;
	}

	//alert("selected friends = " + _SELECTED_FRIENDS.length + "  invite count = " +_INVITE_COUNT + " daily limit = " + _DAILY_INVITE_LIMIT);
	var tobeCount = ((_SELECTED_FRIENDS.length * 1) + (_INVITE_COUNT * 1));

	if ( tobeCount > _DAILY_INVITE_LIMIT) {
		
		//alert ("is " + tobeCount  + " greater than " + _DAILY_INVITE_LIMIT);  
		var html = generateDailyLimitExceededMessage();
		document.getElementById('inviteLimitMsg').innerHTML = html;
		document.getElementById('inviteLimitMsg').style.visibility= 'visible';	
		gadgets.window.adjustHeight();
		return;
	}

	var sendPlantUrl = _BASE_URL + "os/greentrees/send-plant.php";
	sendPlantUrl += "?userId=" + _VIEWER.getId();
	sendPlantUrl += "&userType=" + _USER_TYPE;
	sendPlantUrl += "&op=addInvitations";
	sendPlantUrl += "&plantName=" + _SELECTED_PLANT;
	sendPlantUrl += "&inviteSequence=" + _INVITE_SEQUENCE;
	sendPlantUrl += "&uq=" + (new Date().getUTCMilliseconds());
	sendPlantUrl += '&friendIds=';

	for(var i=0; i < _SELECTED_FRIENDS.length; i++) {

		var person = _SELECTED_FRIENDS[i];
		sendPlantUrl += person.getId();

		if(i != (_SELECTED_FRIENDS.length -1)) {
			sendPlantUrl += ":";
		}
	} 

	//alert(sendPlantUrl);

	// Perform actual send plant back on the server using PHP
	var params = {};
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
	params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
	gadgets.io.makeRequest(sendPlantUrl, onAddInvitationsRequestComplete, params);

	//alert('calling notify on respective network');
	networkBasedNotifyOnSendPlant();
}

function onAddInvitationsRequestComplete(obj) {
    if(checkMaintenanceMode(obj) == true) {
        return;
    }
    updateSqft(-1);
	document.getElementById('gt-body').innerHTML = obj.data.html;
	gadgets.window.adjustHeight();
	onTabClick(1);
}


function getPerson(id) {

	//alert("id = " + id + " _VIEWER = " + _VIEWER.getId());
	if(_VIEWER.getId() == id) {
		return _VIEWER;
	}
    var ret = null;
	_VIEWER_FRIENDS.each(
		function(person) {
            if (ret == null) {
			    if(person.getId() == id) {
				    ret = person;
			    }
            }
		}
	);
	
	return ret;
}

function getFriendsNeedingHelp(max) {
    var friends = new Array();

    if(_VIEWER_FRIENDS_ARR.length == 0) {
        friends;
    }

    if(_VIEWER_FRIENDS_IDS_ARR == null) {
        _VIEWER_FRIENDS_IDS_ARR = new Array();
        for (var i=0; i < _VIEWER_FRIENDS_ARR.length; i ++) {
            _VIEWER_FRIENDS_IDS_ARR.push(_VIEWER_FRIENDS_ARR[i].getId());
        }
    }

    _VIEWER_FRIENDS_IDS_ARR.shuffle();

    for (var i = 0; (i < max || i < _VIEWER_FRIENDS_IDS_ARR.length); i++) {
        friends.push( _VIEWER_FRIENDS_IDS_ARR[i]);
    } 

    return friends;
}


function getFriendsImageHtml(friendId) {
    var html = "";
    html += ' <a href="javascript: visitFriendsPatchClicked(' + friendId + ');" >';
    html += '  <img width="45px" height="45px" src="<gt:image>' + friendId + '</gt:image>" alt="<gt:firstname>' + friendId + '</gt:firstname>"/>';
    html += ' </a>';
    return html;
}

function getFriendsNameHtml(friendId) {
    var html = "";
    html += ' <a href="javascript: visitFriendsPatchClicked(' + friendId + ');" >';
    html += '  <gt:firstname>' + friendId + '</gt:firstname>';
    html += ' </a>';
    return html;
}
