// JavaScript Document// JavaScript Document
var gViewer;
var gNoteHtml;
var gFriendHtml;
var gAppFlashVars;

var gFriendIndex = 0;
var gFriendIdArray = new Array();
var gFriendList = new Array();
var gFriendBatchSize = 40;
var gFriendMax = 1000;

function updateDataCallback(response) {
    if (!response.hadError()) {
	    document.getElementById('saving').style.display = 'none';
		document.getElementById('success').style.display = 'block';
		document.getElementById('subscriber_form').style.display = 'none';;
	}
	else {
		// server error
		document.getElementById('saving').style.display = 'none';
		document.getElementById('unavailable').style.display = 'block';
	}
}
function saveNote() {	
	if (validateAll()) {
		document.getElementById('saving').style.display = 'block';
		document.getElementById('unavailable').style.display = 'none';
		document.getElementById('success').style.display = 'none';
		document.getElementById('invalid_data').style.display = 'none';
		var flashVars = getFlashVars();
		var req = opensocial.newDataRequest();
		req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'flash_vars', escape(flashVars)));
		req.send(updateDataCallback);
	}
	else {
		document.getElementById('invalid_data').style.display = 'block';
	}
}

function viewSubscriberCallback(data, url, errored) {
	if (!errored) {
		document.getElementById('main').innerHTML = data.text;
		if (gAppFlashVars != undefined) {
			// populate all fields
			var flashVars = gAppFlashVars;
			var backgroundColor = getQueryVariable('background_color', flashVars);
			document.createForm.background_color.value = backgroundColor;
			var textColor = getQueryVariable('text_color', flashVars);
			document.createForm.text_color.value = textColor;
			var maskColor = getQueryVariable('mask_color', flashVars);
			document.createForm.mask_color.value = maskColor;
			var textMessage = getQueryVariable('text', flashVars);
			document.createForm.text.value = textMessage;
			var textFont = getQueryVariable('text_font', flashVars);
			for (var i = 0; i < document.createForm.text_font.options.length; ++i) {
				if (document.createForm.text_font.options[i].value == textFont) {
					document.createForm.text_font.options[i].selected = true;
					break;
				}
			}
			var textSize = getQueryVariable('text_size', flashVars);
			for (var i = 0; i < document.createForm.text_size.options.length; ++i) {
				if (document.createForm.text_size.options[i].value == textSize) {
					document.createForm.text_size.options[i].selected = true;
					break;
				}
			}
			var isTransparent = getQueryVariable('is_transparent', flashVars);
			for (var i = 0; i < document.createForm.is_transparent.options.length; ++i) {
				if (document.createForm.is_transparent.options[i].value == isTransparent) {
					document.createForm.is_transparent.options[i].selected = true;
					break;
				}
			}
			previewMyspace();
		}
		cp_init("background_color");
        cp_init("text_color");
		cp_init("mask_color");
		document.getElementById('preview').style.display = 'block';
		document.getElementById('loading').style.display = 'none';
	} 
	else {
		// server error
		document.getElementById('unavailable').style.display = 'block';
		document.getElementById('loading').style.display = 'none';
	}
}

function init() {
    var req = opensocial.newDataRequest();
    var fields = ['flash_vars'];
    req.add(req.newFetchPersonAppDataRequest('VIEWER', fields), 'viewerData');
    req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER));
    req.send(viewerResponse);

    function viewerResponse(response) {
        var viewerData = response.get('viewerData');
		gViewer = response.get(opensocial.DataRequest.PersonId.VIEWER).getData(); 
		if (gViewer == null) {
			document.getElementById('not_installed').style.display = 'block';
			return;
		}

        var userId = gViewer.getId();
		
        if (viewerData.hadError()) {
          // server error
		  document.getElementById('unavailable').style.display = 'block';
        }	
		else {
			var data = viewerData.getData();
			if (data != undefined) {
				gAppFlashVars = data[userId]['flash_vars'];
				if (gAppFlashVars != undefined) {
					// keep saving because myspace has a bug
					req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'flash_vars', escape(gAppFlashVars)));
					req.send(function() {});
				}
			}
		}
		var	url = 'http://www.stunme.com/widgets/glitter_text/opensocial/view_subscriber';
		var params = {};
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
    	gadgets.io.makeRequest(url, viewSubscriberCallback, params);
    } 
}

function previewMyspace() {
	if (validateAll()) {
		var flashVars = getFlashVars();
		document.getElementById('preview').innerHTML = getHtmlFromFlashVars(flashVars, 435);
	}
	else {
		document.getElementById('invalid_data').style.display = 'block';
	}
}

function getFriends(start, functionCall) {
	var req = opensocial.newDataRequest();
	var params = {};
	params[opensocial.DataRequest.PeopleRequestFields.FIRST] = start; 
   	params[opensocial.DataRequest.PeopleRequestFields.MAX] = gFriendBatchSize;
   	req.add(req.newFetchPeopleRequest(opensocial.DataRequest.Group.VIEWER_FRIENDS, params), 'viewerFriends');
    req.send(getFriendsResponse);
	
	function getFriendsResponse(response) {
        var friendsResponse = response.get('viewerFriends');
		if (friendsResponse.hadError()) {
			functionCall();
		}
		else {
			var friendsData = friendsResponse.getData();
			if (friendsData.size() > 0){
				friendsData.each(
					function(friendData) {
						gFriendList.push(friendData);
					}
				);
				start += gFriendBatchSize;
				if (start >= gFriendMax)
					functionCall();
				else
					getFriends(start, functionCall);
			}
			else {
				functionCall();
			}

		}
	}
}

function getInviteHtml() {
	var friendHtml = '<br /><span class="greyplain"><a href="javascript:void(0)" onclick="selectAllFriends()">select all</a> | ';
	friendHtml += '<a href="javascript:void(0)" onclick="deselectAllFriends()">deselect all</a></span><br /> ';
	friendHtml += '<input type="button" value="click here to send glitter text to selected friends" style="color:#FFFFFF; background-color: #999999; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight: bold" onclick="inviteSelectedFriends()">';
			
	var colNum = 4;
	friendHtml += '<br /><div style="height: 350; overflow: auto;">';
	friendHtml += '<table border="0" cellspacing="0" cellpadding="8">';
	for (var i = 0; i < gFriendList.length; i++) {
		var friendData = gFriendList[i];

		if (i % colNum == 0) {
			friendHtml += '<tr>';
		}
		friendHtml += '<td align="center" class="greyplain" valign="bottom">';
		var friendId = friendData.getField(opensocial.Person.Field.ID);
		var friendName = friendData.getField(opensocial.Person.Field.NAME);
		var thumbnail = friendData.getField(opensocial.Person.Field.THUMBNAIL_URL);
		var aTag = '<a href="javascript:void(0)" class="greyplain" onclick="document.createForm.check' + friendId + '.checked = true;">';
		friendHtml += '<div align="center" style="width: 95px; overflow: hidden; white-space: nowrap;">' + aTag + '<img src="' + thumbnail + '" border="0"/></a>';
		friendHtml += '<br /><input type="checkbox" name="check' + friendId + '"/>';
		friendHtml += aTag + friendName + '</a></div> ';
		friendHtml += '</td>';
		if (i % colNum == colNum - 1) {
			friendHtml += '</tr>';
		}
	}
	var count = gFriendList.length;
	if (count == 0) {
		friendHtml += '<tr><td class="greyplain">Sorry, you don\'t have any friends to invite.</td></tr>';
	}
	else if (count % colNum != 0) {
		var moreColumms = colNum - (count % colNum);
		for (var i = 0; i < moreColumms; ++i) {
			friendHtml += '<td>&nbsp;</td>';
		}
		friendHtml += '</tr>';
	}
	friendHtml += '</table>';
	friendHtml += '</div>';
	gFriendHtml = friendHtml;
	viewInvite();
}

function selectAllFriends() {
	for (var i = 0; i < gFriendList.length; i++) {
		var friendData = gFriendList[i];
		var friendId = friendData.getField(opensocial.Person.Field.ID);	 
		eval('document.createForm.check' + friendId).checked = true;
	}
}
function deselectAllFriends() {
	for (var i = 0; i < gFriendList.length; i++) {
		var friendData = gFriendList[i];
		var friendId = friendData.getField(opensocial.Person.Field.ID);	 
		eval('document.createForm.check' + friendId).checked = false;
	}
}
function inviteSelectedFriends() {
	document.getElementById('invite_error').style.display = 'none';
	validateAll();
	var flashVars = getFlashVars();
	gNoteHtml = getHtmlFromFlashVars(flashVars, 250);
	gFriendIdArray = new Array();
	for (var i = 0; i < gFriendList.length; i++) { 
		var friendData = gFriendList[i];
		var friendId = friendData.getField(opensocial.Person.Field.ID);	 
		if (eval('document.createForm.check' + friendId).checked) {
			gFriendIdArray.push(friendId);
		}
	}
	gFriendIndex = 0;
	if (gFriendIdArray.length == 0) {
		document.getElementById('invite_error').style.display = 'block';
		return;
	}
	inviteNextFriend();
}

function inviteNextFriend() {
	if (gFriendIndex < gFriendIdArray.length) {
		inviteFriend(gFriendIdArray[gFriendIndex], inviteNextFriend);
		++gFriendIndex;
	}
}
function inviteFriend(userId, callback) {
	var thisFriend = null;
	for (var i = 0; i < gFriendList.length; i++) {
		var friendData = gFriendList[i];
		var friendId = friendData.getField(opensocial.Person.Field.ID);	 	
		if (friendId == userId) {
			thisFriend = friendData;
		}
	};
	if (thisFriend == null) {
		return;
	}
	var subject = "Glitter text for you!";
	postInvite(subject, gNoteHtml, thisFriend, 'COMMENTS', callback);
}
function invite() {
	var subject = "Check out my glitter text!";
	var html = 'Hi,<br />If you haven\'t seen my glitter text <br />' +
			  '<a href="http://www.myspace.com/' +
			  gViewer.getId() +
			  '" target="_top">check it out on my profile.</a><br /><br />' +
			  'You can also make your own glitter text by <a href="http://www.myspace.com/467869845" target="_top">clicking here.</a>';
	postInvite(subject, html, gViewer, 'BULLETINS');
}
function postInvite(subject, html, receiver, where, callback) {
	var postType = MyOpenSpace.PostTo.Targets[where];
	var osToken = MyOpenSpace.MySpaceContainer.OSToken;
	var message = opensocial.newMessage(html);
	message.setField(opensocial.Message.Field.TITLE, subject);
	message.setField(opensocial.Message.Field.TYPE, postType);
	opensocial.Container.get().postTo(osToken, message, receiver, callback);	
} 
function viewInviteCallback(data, url, errored) {
	if (!errored) {
		document.getElementById('invite').innerHTML = data.text;
		document.getElementById('invite').style.display = 'block';
		document.getElementById('loading').style.display = 'none';
		document.getElementById('friends').innerHTML = gFriendHtml;
		cp_init("background_color");
        cp_init("text_color");
		cp_init("mask_color");
	} 
	else {
		// server error
		document.getElementById('unavailable').style.display = 'block';
		document.getElementById('loading').style.display = 'none';
	}
}
function viewInvite() {
	var	url = 'http://www.stunme.com/widgets/glitter_text/opensocial/invite';
	var params = {};
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
	gadgets.io.makeRequest(url, viewInviteCallback, params);
}

function switchToMain() {
	document.getElementById('success').style.display = 'none';
	document.getElementById('invite').innerHTML = '';
	document.getElementById('loading').style.display = 'block';
	init();
}

function switchToInvite() {
	document.getElementById('success').style.display = 'none';
	document.getElementById('main').innerHTML = '';
	document.getElementById('loading').style.display = 'block';
	gFriendList = new Array();
	getFriends(0, function () {
		getInviteHtml();
	});
}