var _STATE = null;
var _NETWORK_TYPE = "";

function getNextFriendNeedingHelp() {

	var nextFriend = null;

	_VIEWER_FRIENDS.each(
		function(person) {
			if(nextFriend == null) {
			    var pid = person.getId();
			    if (_STATE == null || _STATE.skipFriends == null || _STATE.skipFriends.indexOf(pid) == -1) {
				    nextFriend = person;
				    //return person;
			    }
            }
		}
	);
    
    if(_STATE != null && nextFriend != null) {
        if(_STATE.skipFriends != null) {
            _STATE.skipFriends += ":" + nextFriend.getId();;
        }
        else {
            _STATE.skipFriends = nextFriend.getId();
        }
    }
	return nextFriend;
}

function generateGreenPatchBody() {

	var greenPatchUrl = _BASE_URL + "os/greentrees/green-patch.php";
	greenPatchUrl += "?userId=" + _VIEWER.getId();

    if(_STATE != null) {
        for(i in _STATE) {
            if(i != "userId") {
                greenPatchUrl += "&" + i + "=" + _STATE[i]; 
            }
        }
    }
    else {
	    if(_PATCH_OWNER_ID == null) {
		    _PATCH_OWNER_ID = _VIEWER.getId();
	    }
	    greenPatchUrl += "&userType=" + _USER_TYPE;
	    greenPatchUrl += "&patchOwnerId=" + _PATCH_OWNER_ID;
	    var person = getNextFriendNeedingHelp();
	    if (person != null) {
            greenPatchUrl += "&nextFriendId=" + person.getId();
		    var name = person.getDisplayName();
		    name = name.replace(' ', '%20');
            greenPatchUrl += "&nextFriendName=" + name;
        }
    }

	greenPatchUrl += "&op=getPatch";
	greenPatchUrl += "&uq=" + (new Date().getUTCMilliseconds());

	var params = {};
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
	gadgets.io.makeRequest(greenPatchUrl, onGetPatchRequestComplete, params);
	
	return 'Loading...';
}

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

    var htmls = obj.data.htmls;
    _STATE = obj.data.state;
	_NETWORK_TYPE = obj.data.networkType;
	
    // clear previous action
    _STATE.patchAction = "";

	var greenPatchHtml = htmls.greenPatchHtml;
	var patchStateHeaderHtml = null;
    var actionButtonHtml = null;
    var skipButtonHtml = null;
    var visitFriendHtml = null;
    var recentHelpersHtml = htmls.recentHelpersHtml;

    if(_STATE.patchState == "PATCHSTATE_ISSUE") {
	    patchStateHeaderHtml = htmls.patchStateHeaderHtml;
	    actionButtonHtml = htmls.actionButtonHtml;
	    skipButtonHtml = htmls.skipButtonHtml;
    }
    else if(_STATE.patchState == "PATCHSTATE_TENDED") {
	    patchStateHeaderHtml = htmls.patchStateHeaderHtml;
        visitFriendHtml = htmls.visitFriendHtml;
        updateGreenBucks(-1);
    }
    else if(_STATE.patchState == "PATCHSTATE_DONE") {
    }

	var html = '<BR>';
    html += generateFriendsNeedingHelpHtml();
	html += generateGreenLine();
	html += generateTopActionBar();
	html += generateGreenLine() ;
	html += '<BR>';
//	html += '<form id="nextActionForm" method="post" action="javascript:nextActionFormSubmitted();">';
	html += patchStateHeaderHtml != null ? patchStateHeaderHtml : "";
	html += '<div id="usergreenpatch">';
	html += greenPatchHtml;
	html += '</div">';
    html += actionButtonHtml != null ? actionButtonHtml : "";
    html += visitFriendHtml != null ? visitFriendHtml : "";
    html += skipButtonHtml != null ? skipButtonHtml : "";
	html += generateGreenLine() ;
    html += recentHelpersHtml;
	html += generateGreenLine() ;
//	html += '<form>';

	htmlNew = replaceGTTags(html);
	document.getElementById('gt-body').innerHTML = htmlNew;
	gadgets.window.adjustHeight();
	_PATCH_OWNER_ID = null;
}

function generateGreenLine() {
	html = '<div>';
	html += '  <hr class="a"/>';
	html += '</div>';
	return html;
}

function generateTopActionBar() {
    
	if(_PATCH_OWNER_ID == null) {
		_PATCH_OWNER_ID = _VIEWER.getId();
	}
    
    var patchOwner = (_STATE == null || _STATE.userId == _STATE.patchOwnerId) ? _VIEWER : getPerson(_STATE.patchOwnerId);

	var html = '<table width="100%" align="center">';
	html += '  <tr width="100%" align="center">';
	html += '    <td width="50%" align="center" style="text-align: center">';
	html += '      <input type="button" name="HomeAction" class="inputbutton" value="Send more Plants to receive more Plants!" onclick="onSendMorePlantsClicked();"/>';
	html += '    </td>';
	html += '    <td width="20%" align="center" style="text-align: center">';
	html += '    		<img width="45px" height="45px" src="' + patchOwner.getField(opensocial.Person.Field.THUMBNAIL_URL) + '" alt="' + patchOwner.getDisplayName() + '"/>';
	html += '    </td>';
	html += '    <td width="30%" align="center" style="text-align: center">';
    if(_STATE == null || _STATE.userId == _STATE.patchOwnerId) {
	    html += '      <div style="text-align: center; ">';
	    html += '      <input id="givegift" name="ArrangePatchAction" type="button" ';
	    html += '            class="inputbutton" onclick="onArragePatchClicked();"';
	    html += '            value="Arrange Patch" />';
	    html += '      </div>';
    }
	html += '    </td>';
	html += '  </tr>';
	html += '</table>  ';                                         

	return html;
}

function onSendMorePlantsClicked() {
	onTabClick(0);
}

function onArragePatchClicked() {
	var html = generateArrangablePatch();
	document.getElementById('usergreenpatch').innerHTML = html;
	gadgets.window.adjustHeight();
}

function onArrangeComplete(id) {
	generateGreenPatchBody();
}

function generateArrangablePatch() {

	var html = '';
	var params = 'targetUrl=onArrangeComplete&userId=' + _VIEWER.getId() + "&networkType=" + _NETWORK_TYPE;
	var url = _BASE_URL + 'fb/greentrees/arranger/arranger.swf?' + params;
	html += '   <div style="margin:auto;width:650px;">';
	html += '     <div style="position:relative;width:120px;height:50px;left:425px;top:20px; border:thin-solid-green;">';
	html += '     <a href="javascript:void(0);onArrangeComplete(-1)"><img border="0" src="http://greenpatch.s3.amazonaws.com/clear.gif" width="90" height="50" /></a>';
	html += '     </div>';

	html += '  	<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
	html += '			id="PatchArranger" width="640" height="560"';
	html += '			codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">';
	html += '			<param name="movie" value="' + url + '" />';
	html += '			<param name="quality" value="high" />';
	html += '			<param name="bgcolor" value="#869ca7" />';
	html += '			<param name="allowScriptAccess" value="always" />';
	html += '			<embed src="' + url + '" quality="high" bgcolor="#869ca7"';
	html += '				width="700" height="560" name="PatchArranger" align="middle"';
	html += '				play="true"';
	html += '				loop="false"';
	html += '				quality="high"';
	html += '				allowScriptAccess="always"';
	html += '				type="application/x-shockwave-flash"';
	html += '				pluginspage="http://www.adobe.com/go/getflashplayer">';       
	html += '			</embed>';
	html += '	   </object>';                               
	html += '  </div>';
	
	return html;
}


function acceptPlantInvite(inviteId) {
	
	var url = _BASE_URL + "os/greentrees/green-patch.php";
	url += "?userId=" + _VIEWER.getId(); // 709042250; 
	url += "&userType=" + _USER_TYPE;
	url += "&op=acceptPlant"
	url += "&inviteId=" + inviteId;
	url += "&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(url, onAcceptPlantRequestComplete, params);
}

function onAcceptPlantRequestComplete(obj) {
	//onTabClick(1);
}

function buyClicked() {
    onTabClick(3);
}

function useClicked() {
	_STATE.patchAction = "use";
    patchActionClicked()
}

function patchActionClicked() {

	var person = getNextFriendNeedingHelp();
	if (person != null) {
        _STATE.nextFriendId = person.getId();
		var name = person.getDisplayName();
		name = name.replace(' ', '%20');
		_STATE.nextFriendName =  name;
	    _STATE.patchState = "PATCHSTATE_TENDED";
	}
    else {
        _STATE.patchState = "PATCHSTATE_DONE";
    }
    generateGreenPatchBody();
}

function visitPatchClicked() {

    _STATE.patchOwnerId = _STATE.nextFriendId;
    _STATE.patchState = _STATE.patchOwnerId == null ? "PATCHSTATE_DONE" : "PATCHSTATE_ISSUE";
    generateGreenPatchBody();
}

function visitFriendsPatchClicked(helperId) {
    if(_STATE == null) {
        _STATE = new Array();
    }
    _STATE.patchOwnerId = helperId;
    _STATE.patchState = _STATE.patchOwnerId == null ? "PATCHSTATE_DONE" : "PATCHSTATE_ISSUE";
    generateGreenPatchBody();
}

function skipPatchClicked() {
    
    _STATE.patchOwnerId = _STATE.nextFriendId;

	var person = getNextFriendNeedingHelp();
	if (person != null) {
        _STATE.nextFriendId = person.getId();
		var name = person.getDisplayName();
		name = name.replace(' ', '%20');
		_STATE.nextFriendName =  name;
	    _STATE.patchState = "PATCHSTATE_ISSUE";
	}
    else {
        _STATE.patchState = "PATCHSTATE_DONE";
    }
    generateGreenPatchBody();
}

function generateFriendsNeedingHelpHtml() {
    var maxFriendCount = 6;
    var friends = getFriendsNeedingHelp(maxFriendCount);

    var html = '';

    if ((friends == null) || (friends.length == 0)) {
      return html;
    }

    html += '<table width="100%">';
    html += '  <tr width="100%">';
    html += '    <td colspan="7" style="padding-bottom: 2px; font-size:10px;">';
    html += '      Greenies needing help:';
    html += '    </td>'; 
    html += '  </tr>';

    html += '<tr width="100%">';
    var tableWidth = Math.floor(100/maxFriendCount);

    var friendCount = friends.length;
    for (var i = 0 ; i < maxFriendCount ; i++) {
        html += '<td width="' + tableWidth + '%">';
        if (friendCount > 0) {
            html += '<div style="border-top: 5px; text-align: center;font-size:10px;">';
            html += getFriendsImageHtml(friends[i]);
            html += '</div>';
        } 
        html += '</td>';
        friendCount--;
    }
    html += '</tr>';
    
    html += '<tr width="100%">';
    var friendCount = friends.length;
    for (var i = 0 ; i < maxFriendCount ; i++) {
        html += '<td width="' + tableWidth + '%">';
        if (friendCount > 0) {
            html += '<div style="border-top: 5px; text-align: center;font-size:10px;">';
            html += getFriendsNameHtml(friends[i]);
            html += '</div>';
        } 
        html += '</td>';
        friendCount--;
    }
    html += '</tr>';
    html += '</table>'; 

    return html;
}
