// JavaScript Document
var gViewer;
var gSubscriberId = -1;
var gSum = '';
function selectedValue(selBox) {
  return selBox.options[selBox.selectedIndex].value;
}
function createSubscriber() {
	//if (confirm('Bist du sicher, dass du einen komplett neuen Kalender erstellen willst?')) {
		saveSubscriber();
	//}
}
function saveSubscriber() {
	document.getElementById('saving').style.display = 'block';
	document.getElementById('unavailable').style.display = 'none';
	// check duplicate feeds
    var url = 'http://stickit.stunme.com/widgets/calendar/opensocial/save_subscriber';
	
    var params = {};
    var postdata = {};
    postdata['user_id'] = gViewer.getId();
	postdata['subscriber_id'] = gSubscriberId;
	postdata['sum'] = gSum;
	postdata['language'] = 'de';
	postdata['name'] = encodeURIComponent(document.subscriberForm.name.value);
	postdata['birthday'] = selectedValue(document.subscriberForm.birthday);
	postdata['birthmonth'] = selectedValue(document.subscriberForm.birthmonth);
	postdata['is_birthday_private'] = document.subscriberForm.is_birthday_private.checked ? "Y" : "N";
	postdata['holiday_set_id'] = selectedValue(document.subscriberForm.holiday_set_id);
	postdata['is_shared'] = selectedValue(document.subscriberForm.is_shared);
	postdata['background_image'] = document.subscriberForm.background_image.value;
	var selectedColor = '666666';
	for (var i=0; i < document.subscriberForm.background_color.length; ++i) {
		if (document.subscriberForm.background_color[i].checked) {
			selectedColor = document.subscriberForm.background_color[i].value;
		}
	}
	postdata['background_color'] = selectedColor;
    params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
    params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postdata);
    gadgets.io.makeRequest(url, saveSubscriberCallback, params);
        
    function saveSubscriberCallback(data, url, errored) {
        if (!errored) {
			if (data.text == 'updated') {
				// updated
				document.getElementById('saving').style.display = 'none';
				document.getElementById('subscriber_form').style.display = 'none';
				document.getElementById('success').style.display = 'block';
			}
			else {
				// created
				var isSaved = false;
				var params = data.text.split("|");
				if (params[0] == 'created' && params.length >= 4) {
					var req = opensocial.newDataRequest();
					gSubscriberId = params[1];
					gSum = params[2];
					document.getElementById('saving').style.display = 'none';
					document.getElementById('subscriber_form').style.display = 'none';
					document.getElementById('success').style.display = 'block';
					isSaved = true;
				}
				if (!isSaved) {
					// server error
					document.getElementById('unavailable').style.display = 'block';
					document.getElementById('saving').style.display = 'none';
				}
			}
        } 
        else {
			// server error
			document.getElementById('saving').style.display = 'none';
            document.getElementById('unavailable').style.display = 'block';
        }
    }
}

function viewSubscriberCallback(data, url, errored) {
	if (!errored) {
		document.getElementById('main').innerHTML = data.text;
		document.getElementById('loading').style.display = 'none';
	} 
	else {
		// server error
		document.getElementById('unavailable').style.display = 'block';
		document.getElementById('loading').style.display = 'none';
	}
}
function authCallback(data, url, errored) {
	if (!errored) {
		var params = data.text.split("|");
		var	url = 'http://stickit.stunme.com/widgets/calendar_de/opensocial/view_subscriber';
		if (params[0] == 'found' && params.length >=  4) {
			var subscriberId = params[1];
			var sum = params[2];
			gSubscriberId = subscriberId;
			gSum = sum;
			url += '?subscriber_id=' + subscriberId + '&sum=' + sum + '&timestamp=' + new Date().getTime();
		}
		else {
			url += '?name=' + escape(gViewer.getDisplayName());
		}

		var params = {};
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
    	gadgets.io.makeRequest(url, viewSubscriberCallback, params);
	} 
	else {
		// server error
		document.getElementById('unavailable').style.display = 'block';
		document.getElementById('loading').style.display = 'none';
	}
}
function init() {
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER));
    req.send(viewerResponse);

    function viewerResponse(response) {
		gViewer = response.get(opensocial.DataRequest.PersonId.VIEWER).getData(); 
		if (gViewer == null) {
			document.getElementById('main').innerHTML = '&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr;&uarr; Zum Fortfahren bitte "Dieses Widget benutzen (Add this App)" clicken &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
			document.getElementById('loading').style.display = 'none';
			return;
		}
        var userId = gViewer.getId();
		
		var url = 'http://stickit.stunme.com/widgets/calendar_de/opensocial/get_subscriber';
		var params = {};
		params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;					
		var postdata = {};
		postdata['timestamp'] = new Date().getTime();
		params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postdata);
		gadgets.io.makeRequest(url, authCallback, params);
    } 
}

function invite() {
	var subject = "Zieh dir meinen Kalender rein!";
	
	var html = 'Hallo,<br />Falls du meinen Kalender noch nicht gesehen hast,  <br />' +
			  '<a href="http://www.myspace.com/' +
			  gViewer.getId() +
			  '" target="_top">zieh ihn dir rein auf meinem Profil.</a>';
	postInvite(subject, html, gViewer, 'BULLETINS');
}

function postInvite(subject, html, receiver, where) {
	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);	
} 
