var remembermecookieoptions = {path: '/', expires: 730};
var tourcookieoptions = { path: '/', expires: 2};
var profilecookieoptions = { path: '/', expires: 365};
/* localize it */
jQuery.i18n.properties({
	name: 'messages_en',
	path: 'messages/',
	language: 'fi',
	mode: 'both',
	callback: function() {
		//alert(login.password.empty);
		//console.log(foo.bar);
	}
});
function jwPlayer(playerDivId, videoUrl, w, h) {
	if (w == undefined) var w = 200;
	if (h == undefined) var h = 100;
	
	var vul = videoUrl.length;
	var imgUrl = videoUrl.substring(0,vul-3)+'jpg';
	
	jwplayer(playerDivId).setup({
        flashplayer: "http://flockler.com/static/js/jwplayer/player.swf",
        file: videoUrl,
		image: imgUrl,
		skin: "http://flockler.com/static/js/jwplayer/dangdang.swf",
        height: h,
        width: w
    });

}
function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}	
function decode_utf8( s )
{
  return decodeURIComponent( escape( s ) );
}
function validateEmail(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}
function createLinks(text) {
	  var exp = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
	  return text.replace(exp,'<a href="$1" target="_blank">$1</a>'); 
}
function createTube(youtubeUrl, element, contentHeight, contentWidth, mode) {
	if ( youtubeUrl.substr(0,31) == 'http://www.youtube.com/watch?v=' ) youtubeUrl = 'http://www.youtube.com/v/' + youtubeUrl.substr(31)
	/*var params = {
        menu : "false",
        loop : "false",
        wmode : "opaque"
    };
	//setTimeout(function() {
		swfobject.embedSWF(youtubeUrl, element, contentWidth, contentHeight, '8', null, null, params);
	//},2500);*/
	var tubeHtml = '';
	tubeHtml +=	'<object width="'+contentWidth+'" height="'+contentHeight+'">';
	tubeHtml += '<param value="'+youtubeUrl+'" name="movie"/>';
	tubeHtml += '<param value="true" name="allowFullScreen"/>';
	tubeHtml += '<param value="always" name="allowScriptAccess"/>';
	tubeHtml += '<embed width="'+contentWidth+'" height="'+contentHeight+'" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash" src="'+youtubeUrl+'"/>';
	tubeHtml += '</object>';
	if (mode == 'print') {
	$('.content').find('.pagePart.sparks #'+element).parent().append(tubeHtml);
	$('.content').find('.pagePart.sparks #'+element).remove();
	}
	if (mode == 'preview') {
		$('.content').find('.pagePart.addspark #'+element).parent().append(tubeHtml);
		$('.content').find('.pagePart.addspark #'+element).remove();		
	}
}
function refreshMyGroups(uid) {
	$.ajax({
		type: "POST",
		url: "api/sparkbox/list",
		data: "profile="+uid,
		dataType: 'json',
		success: function(data) {
			var html = "";
			var groupcount = data.response.count;
			if (groupcount > 0) {
				for (var i=0; i<groupcount; i++) {
					var groupId = data.response.list[i].id;
					var groupName = data.response.list[i].name;
					html += '<li class="group"><a href="#listGroup_' + groupId + '" title="'+ groupName +'"><span>' + groupName + '</span></a></li>';
				}
			}
			$("#usersGroups li.group").remove();
			$("#usersGroups li:eq(0)").after(html);
		}
	});
}
function listGroups(listType) {
	/* list new groups by default */
	$('.groupsul a').removeClass("selected");
	if (listType == undefined) {
		listType = "new";
		$('.groupsul a[href=#groups_new]').addClass("selected");
	} else {
		$('.groupsul a[href=#groups_' + listType + ']').addClass("selected");
	}
	// IE needs halp
	nocache = Math.random();
	$.ajax({
		type: "POST",
		url: "api/sparkbox/all/" + listType,
		data: "nocache="+nocache,
		dataType: "json",
		success: function(data) {
			//console.log(data);
			if (data.response.count > 0) {
				html = "";
				for (var i=0; i<data.response.count;i++) {
					html += '<div class="group">';
					groupDesc = data.response.list[i].description;
					if (groupDesc == undefined) {
						groupDesc = "";
					}
					if (data.response.list[i].avatar.absoluteUrl) {
						html += '<img src="'+data.response.list[i].avatar.fullUrl+'?wh=50x50x10" alt="avatar" class="groupAvatar" />';
					}
					html += '<a href="#listGroup_' + data.response.list[i].id + '">';
					html += data.response.list[i].name;
					html += '</a>';
					html += '<p>'+groupDesc+'</p>';
					html += '<div class="clear"></div>';
					html += '</div>';
				}
			}
			$(".groups.list #groups_" + listType).html(html);
			$('.gspark').busy(false);
		}
	});
}

function paging(url, pages, current, pagingClass) {
	if (pagingClass == undefined) var pagingClass = "pager";
	if (!pages || pages <= 1) return '';
	url += "?page=";
	
	var limit = 12;
	var prev = (current - 1) <= 0 ? 0 : current - 1;
	var next = (current + 1) >= pages ? pages - 1 : current + 1;
	var html = '<div class="paging '+pagingClass+'"><a href="'+url+prev+'" class="prev">'+$.i18n.prop('sparks.paging.previous')+'</a>';
	var start = current - (limit/2);
	if (start < 0) start = 0;
	
	var end = current + (limit/2);
	if (end < limit) end = limit;
	if (limit > pages || end > pages) end = pages;
	
	if ((current - (limit/2) > 0) && pages > limit)
		html += '...';
	
	for( var i = start; i < end; i++) {
		html += '<a href="'+url+i+'" '+ ( (i == current) ? 'class="selected"' : '') +'>'+(i+1)+'</a>'
	}
	
	if (pages > end)
		html += '...';
	
	html += '<a href="'+url+next+'" class="next">'+$.i18n.prop('sparks.paging.next')+'</a></div>'
	return html;
}
function listMedias(listType, listId, contentWidth) {
	nocache = Math.random();
	if (contentWidth == undefined) {
		var contentWidth = 465;
	}
	var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));

	var page = document.location.href.split("?page=")[1];
	if (page == undefined) var page = 0;
	if (pageSize == undefined) var pageSize = 15;
	if (listType == "group") {
		/* all sparks in group */
		$('.paging.groupSparksPaging a').live('click', function() {
			var page = $(this).attr("href").split("?page=")[1];
			var dataString = "sparkbox=" + listId + "&page=" + page + "&pageSize=" + pageSize + '&nocache=' + nocache;
			$.ajax({
				type: "GET",
				url: "api/media/list",
				data: dataString,
				dataType: 'json',
				success: function(data) {
					//console.log(data);
					if (data.response.list.length > 0) {
						html = "";
						for (var i=0;i<data.response.list.length;i++) {
							html += printSpark(data.response.list[i], contentWidth, contentHeight);
						}
						html += paging('#listGroup_'+listId, data.response.pageCount, data.response.page, "groupSparksPaging");
						$(".pagePart.sparks").html(html).show();
						showVisualContent(contentWidth, contentHeight);
						$('.pagePart.noSparks').hide();

						var $root = $(document).find('body');
						$root.find('.pagePart.sparks .spark').each(function() {
							var sparkId = $(this).attr('id').split('_')[1];
							$root.find('#spark_'+sparkId+' .sparkAttachments div').each(function() {
								if ($(this).find('a').attr('href').indexOf('youtube.com') >= 0) {
									var tubeAtt = $(this).find('a').html();
									// if($root.find('.editPreview
									// .sparkAttachments .link
									// a[href='+tubeAtt+']')) {
									var trimTube = '';								
									if (tubeAtt.indexOf('&') >= 0) {
										trimTube = tubeAtt.split('&')[0];
									}
									else {
										trimTube = tubeAtt;
									}
									var tubeElement = trimTube.split('=')[1];
									var tubeHtml = '<div class="embed">';
									tubeHtml += '<div id="'+tubeElement+'"></div>';
									tubeHtml += "</div>";
									$root.find('#spark_'+sparkId+' .imageWindow').append(tubeHtml);
									createTube(trimTube, tubeElement, contentHeight, contentWidth, 'print');
									$root.find('#spark_'+sparkId+' .sparkAttachments .link a[href='+tubeAtt.replace('&amp;', '&')+']').parent().remove();
									// }
								}
							});							
							if($(this).find('.spContainer .imageWindow').html() == '') {
								$(this).find('.spContainer .imageWindowControls').hide();
								$(this).find('.spContainer .imageWindow').hide();
							}
							/*
							 * setTimeout(function() {
							 * $root.find('#spark_'+sparkId+'
							 * .imageWindow').show(); },2500);
							 */					
						});
						
						$('.pagePart.sparks .message .attachments object').append('<param name="wmode" value="opaque" />');
						$('.pagePart.sparks .message .attachments object embed').attr('wmode', 'opaque');
						/*
						setTimeout(function(){
							var sparks = $('.pagePart.sparks .spark');
							$.each(sparks, function() {
								var sparkId = $(this).find('.sparkId').html();
								var visuCount = parseInt( $(this).find('.imageWindow > div').length );
								if (visuCount == 0) return;
								
								visPager = "";
								for (i=0;i<visuCount;i++) {
									var p = i+1;
									visPager += '<a href="#v_'+i+'"';
									if (i == 0) { visPager += ' class="s"'; }
									visPager += '>'+p+'</a>';					
								}
								if (visuCount > 1) {
									$(this).find('.imageWindowControls').html(visPager);
								} else if (visuCount == 1) {
									$(this).find('.imageWindow').css('border-top', 'none');
								}
			
								$(this).find('.imageWindow > div').hide();
								$(this).find('.imageWindow').show();
								$(this).find('.imageWindow div:eq(0)').show();
							});
						},3000);
						*/
					}
				}			
			});			
			return false;
		});
		var dataString = "sparkbox=" + listId + "&page=" + page + "&pageSize=" + pageSize + '&nocache=' + nocache;
		$.ajax({
			type: "GET",
			url: "api/media/list",
			data: dataString,
			dataType: 'json',
			success: function(data) {
				//console.log(data);
				//alert(data.response.list.length);
				if (data.response.list.length > 0) {
					html = "";
					for (var i=0;i<data.response.list.length;i++) {
						//alert(data.response.list[i].content);
						//html += printSpark(data.response.list[i]);
						html += printSpark(data.response.list[i], contentWidth, contentHeight);
					}
					html += paging('#listGroup_'+listId+'/', data.response.pageCount, data.response.page, "groupSparksPaging");
					$(".pagePart.sparks").html(html).show();
					showVisualContent(contentWidth, contentHeight);
					

					html = "";
					for (var i=0;i<data.response.list.length;i++) {
						html += printSpark(data.response.list[i], contentWidth, contentHeight);
					}
					html += paging('#listGroup_'+listId, data.response.pageCount, data.response.page, "groupSparksPaging");
					$(".pagePart.sparks").html(html).show();
					showVisualContent(contentWidth, contentHeight);
					
					var $root = $(document).find('body');
					$root.find('.pagePart.sparks .spark').each(function() {
						var sparkId = $(this).attr('id').split('_')[1];
						$root.find('#spark_'+sparkId+' .sparkAttachments div').each(function() {
							if ($(this).find('a').attr('href').indexOf('youtube.com') >= 0) {
								var tubeAtt = $(this).find('a').html();
								// if($root.find('.editPreview .sparkAttachments
								// .link a[href='+tubeAtt+']')) {
								var trimTube = '';								
								if (tubeAtt.indexOf('&') >= 0) {
									trimTube = tubeAtt.split('&')[0];
								}
								else {
									trimTube = tubeAtt;
								}
								var tubeElement = trimTube.split('=')[1];
								var tubeHtml = '<div class="embed">';
								tubeHtml += '<div id="'+tubeElement+'"></div>';
								tubeHtml += "</div>";
								$root.find('#spark_'+sparkId+' .imageWindow').append(tubeHtml);
								createTube(trimTube, tubeElement, contentHeight, contentWidth, 'print');
								$root.find('#spark_'+sparkId+' .sparkAttachments .link a[href='+tubeAtt.replace('&amp;', '&')+']').parent().remove();
								// }
							}
						});
						if($(this).find('.spContainer .imageWindow').html() == '') {
							$(this).find('.spContainer .imageWindowControls').hide();
							$(this).find('.spContainer .imageWindow').hide();
						}
						else {
							setTimeout(function() {
								$root.find('#spark_'+sparkId+' .imageWindow').show();
							},2500);
						}
					});
					
					$('.pagePart.sparks .message .attachments object').append('<param name="wmode" value="opaque" />');
					$('.pagePart.sparks .message .attachments object embed').attr('wmode', 'opaque');
					
					setTimeout(function(){
						var sparks = $('.pagePart.sparks .spark');
						$.each(sparks, function() {
							var sparkId = $(this).find('.sparkId').html();
							var visuCount = parseInt( $(this).find('.imageWindow > div').length );
							if (visuCount == 0) return;
							
							visPager = "";
							for (i=0;i<visuCount;i++) {
								var p = i+1;
								visPager += '<a href="#v_'+i+'"';
								if (i == 0) { visPager += ' class="s"'; }
								visPager += '>'+p+'</a>';					
							}
							if (visuCount > 1) {
								$(this).find('.imageWindowControls').html(visPager);
							} else if (visuCount == 1) {
								$(this).find('.imageWindow').css('border-top', 'none');
							}
		
							$(this).find('.imageWindow > div').hide();
							$(this).find('.imageWindow').show();
							$(this).find('.imageWindow div:eq(0)').show();
						});
					},3000);
					
												
				}	

			}
		});
	} else if (listType == "user") {
		/* only one users sparks */
		$('.paging.userSparksPaging a').live('click', function() {
			var page = $(this).attr("href").split("?page=")[1];
			var dataString = "profile=" + listId + "&page=" + page + "&pageSize=" + pageSize + '&nocache=' + nocache;
			$.ajax({
				type: "GET",
				url: "api/media/list",
				data: dataString,
				dataType: 'json',
				success: function(data) {
					//console.log(data);
					//alert(data.response.list.length);
					if (data.response.list.length > 0) {
						html = "";
						for (var i=0;i<data.response.list.length;i++) {
							//alert(data.response.list[i].content);
							//html += printSpark(data.response.list[i]);
							html += printSpark(data.response.list[i], contentWidth, contentHeight);
						}
						html += paging('#users_'+listId+'/', data.response.pageCount, data.response.page, "userSparksPaging");
						$(".pagePart.sparks").html(html).show();
						showVisualContent(contentWidth, contentHeight);
						
						var $root = $(document).find('body');
						$root.find('.pagePart.sparks .spark').each(function() {
							var sparkId = $(this).attr('id').split('_')[1];
							$root.find('#spark_'+sparkId+' .sparkAttachments div').each(function() {
								if ($(this).find('a').attr('href').indexOf('youtube.com') >= 0) {
									var tubeAtt = $(this).find('a').html();
									// if($root.find('.editPreview
									// .sparkAttachments .link
									// a[href='+tubeAtt+']')) {
									var trimTube = '';								
									if (tubeAtt.indexOf('&') >= 0) {
										trimTube = tubeAtt.split('&')[0];
									}
									else {
										trimTube = tubeAtt;
									}
									var tubeElement = trimTube.split('=')[1];
									var tubeHtml = '<div class="embed">';
									tubeHtml += '<div id="'+tubeElement+'"></div>';
									tubeHtml += "</div>";
									$root.find('#spark_'+sparkId+' .imageWindow').append(tubeHtml);
									createTube(trimTube, tubeElement, contentHeight, contentWidth, 'print');
									$root.find('#spark_'+sparkId+' .sparkAttachments .link a[href='+tubeAtt.replace('&amp;', '&')+']').parent().remove();
									// }
								}
							});
							/*setTimeout(function() {
								$root.find('#spark_'+sparkId+' .imageWindow').show();
							},2500);*/					
						});
						
						$('.pagePart.sparks .message .attachments object').append('<param name="wmode" value="opaque" />');
						$('.pagePart.sparks .message .attachments object embed').attr('wmode', 'opaque');
					}			
				}
			});
			
			return false;
		});
		var dataString = "profile=" + listId + "&page=" + page + "&pageSize=" + pageSize + '&nocache=' + nocache;
		$.ajax({
			type: "GET",
			url: "api/media/list",
			data: dataString,
			dataType: 'json',
			success: function(data) {
				//console.log(data);
				if (data.response.list.length > 0) {
					html = "";
					for (var i=0;i<data.response.list.length;i++) {
						//alert(i);
						//alert(data.response.list[i].content);
						html += printSpark(data.response.list[i], contentWidth, contentHeight);
					}
					html += paging('#users_'+listId+'/', data.response.pageCount, data.response.page, "userSparksPaging");
					$(".pagePart.sparks").html(html).show();
					showVisualContent(contentWidth, contentHeight);
					
					var $root = $(document).find('body');
					$root.find('.pagePart.sparks .spark').each(function() {
						var sparkId = $(this).attr('id').split('_')[1];
						$root.find('#spark_'+sparkId+' .sparkAttachments div').each(function() {
							if ($(this).find('a').attr('href').indexOf('youtube.com') >= 0) {
								var tubeAtt = $(this).find('a').html();
								// if($root.find('.editPreview .sparkAttachments
								// .link a[href='+tubeAtt+']')) {
								var trimTube = '';								
								if (tubeAtt.indexOf('&') >= 0) {
									trimTube = tubeAtt.split('&')[0];
								}
								else {
									trimTube = tubeAtt;
								}
								var tubeElement = trimTube.split('=')[1];
								var tubeHtml = '<div class="embed">';
								tubeHtml += '<div id="'+tubeElement+'"></div>';
								tubeHtml += "</div>";
								$root.find('#spark_'+sparkId+' .imageWindow').append(tubeHtml);
								createTube(trimTube, tubeElement, contentHeight, contentWidth, 'print');
								$root.find('#spark_'+sparkId+' .sparkAttachments .link a[href='+tubeAtt.replace('&amp;', '&')+']').parent().remove();
								// }
							}
						});
						if ($root.find('#spark_'+sparkId+' .imageWindow').html() != '' && $root.find('#spark_'+sparkId+' .imageWindow div').html() != '') {
							setTimeout(function() {
								$root.find('#spark_'+sparkId+' .imageWindow').show();
							},2500);
						}
					});
					
					$('.pagePart.sparks .message .attachments object').append('<param name="wmode" value="opaque" />');
					$('.pagePart.sparks .message .attachments object embed').attr('wmode', 'opaque');
					var sparks = $('.pagePart.sparks .spark');
					$.each(sparks, function() {
						var sparkId = $(this).find('.sparkId').html();
						var visuCount = parseInt( $(this).find('.imageWindow > div').length );
						if (visuCount == 0) return;
						
						visPager = "";
						for (i=0;i<visuCount;i++) {
							var p = i+1;
							visPager += '<a href="#v_'+i+'"';
							if (i == 0) { visPager += ' class="s"'; }
							visPager += '>'+p+'</a>';					
						}
						if (visuCount > 1) {
							$(this).find('.imageWindowControls').html(visPager);
						} else if (visuCount == 1) {
							$(this).find('.imageWindow').css('border-top', 'none');
						}
	
						$(this).find('.imageWindow > div').hide();
						$(this).find('.imageWindow').show();
						$(this).find('.imageWindow div:eq(0)').show();
					});
				}		
			}
		});

	}
	return false;
}

// EDIT SPARK
function editSpark($root, sparkId){
	$root.find('input[name=cancelEdit]:eq(0)').click();
	if (sparkId == undefined) return;
	$root.find('.editMessage').remove();
	$root.find('.hiddenContent').show();
	var titlebar = '<div class="titlebar">'+$root.find('#spark_'+sparkId+' .titlebar:eq(0)').html()+'</div>';
	$root.find('#spark_'+sparkId+' .spContainer:eq(0)').wrapInner('<div class="hiddenContent" style="display: none;" />');
	var hiddenTmpHtml = '';
	//alert(sparkId);
	nocache = Math.random();
	$.ajax({
		type: "GET",
		url: "api/media/get",
		dataType: 'json',
		data: "media="+sparkId+'&nocache='+nocache,
		success: function(data) {
			//console.log(data);
			spark = data.response.list[0];

			at = [];
			var fullContent = spark.content.split('\n\n');
			
			// text content
			var mainContent = fullContent[0].replace(/<br\/>/g, '\n');
			
			// got attachments? (embeds, links, files)
			/*if (fullContent[1] != "") {
				at = new listAttachments(fullContent[1]);
			}*/

			tit = spark.title;
			msg = mainContent;

			
			editform = '<div class="sparkMessage editMessage">';
			editform += '<form accept-charset="utf-8" class="editspark" name="editSpark_'+sparkId+'" id="editSpark_'+sparkId+'">';
			editform += '<label for="etitle"><span id="etitleCounter">'+$.i18n.prop('spark.create.charactersleft')+' <span></span></span>'+$.i18n.prop('adspark.spark.create.title')+'</label>';
			editform += '<input type="text" name="etitle" class="etitle" value="'+tit+'" />';
			editform += '<label for="econtent"><span id="emessageCounter">'+$.i18n.prop('spark.create.characters')+' <span></span></span>'+$.i18n.prop('adspark.spark.create.message')+'</label>';
			editform += '<textarea name="econtent" class="econtent">'+msg+'</textarea>';
			editform += '<label>'+$.i18n.prop('spark.create.attachments')+'</label>';
			editform += '<div class="eattachments">';
			// images and embeds
			/*if (at["visual"] != "" && at["visual"] != undefined) {
				editform += at["visual"];
			}
			// links
			if (at["link"] != "" && at["link"] != undefined) {
				editform += at["link"];
			}
			// other?
			if (at["other"] != "" && at["other"] != undefined) {
				editform += at["other"];
			}

			if ((at["visual"] == "" || at["visual"] == undefined) && (at["link"] == "" || at["link"] == undefined) && (at["other"] == "" || at["other"] == undefined)) {				
				editform += '<span class="noAttachments">'+$.i18n.prop('spark.edit.noattachments')+'</span>';
			}*/
			var mediaFrom = spark.from.id;
			if (spark.includes != undefined) {
				editform += listEditAttachments(spark.includes, mediaFrom);
			}
			else {
				editform += '<span class="noAttachments">'+$.i18n.prop('spark.edit.noattachments')+'</span>';
			}			
			editform += '</div>';
			editform += '<label>'+$.i18n.prop('spark.edit.newattachment')+'</label>';
			editform += '<div class="newAttachment">';
			$root.find('#fileInputContainer').remove();
			editform += '<span id="fileInputContainer"><input type="file" name="file" id="file" /></span>';
			editform += '<button type="button" class="uploadFiledit">'+$.i18n.prop('spark.create.uploadbutton')+'</button>';
			editform += '</div>';
			editform += '<div class="link">';
			editform += '<fieldset class="input">';
			editform += '<button class="icon sparkAdd" type="button"><span>Enter</span></button>';			
			editform += '<input id="newLink" type="text"/>';
			editform += '</fieldset>';
			editform += '</div>';			
			editform += '<div>';
			editform += '<input type="button" name="saveEdit" value="'+$.i18n.prop('spark.edit.savebutton')+'" />';
			editform += '<input type="button" name="cancelEdit" value="'+$.i18n.prop('spark.edit.cancelbutton')+'" />';
			editform += '<input type="button" name="previewEdit" value="'+$.i18n.prop('spark.edit.previewbutton')+'" />';			
			editform += '</div>';
			editform += '</form>';
			editform += '</div>';

 			$('.sparks #spark_'+spark.id+' .spContainer:eq(0)').append(titlebar+editform);
 			$('.sparks #spark_'+spark.id+' .spContainer').append('<div class="editPreview" style="display:none"></div>'); 			

 			$root.find('#spark_'+sparkId+' .spContainer .hiddenContent .sparkAttachments').html($root.find('#spark_'+sparkId+' .spContainer .sparkMessage.editMessage .eattachments').html());
 			hiddenTmpHtml = $root.find('#spark_'+sparkId+' .hiddenContent').html();

			var titleLimit = 50;
			var titleLen = tit.length;
			var msgLen = msg.length;
			var titleLeft = titleLimit - titleLen;
			$('.sparks #etitleCounter').html($.i18n.prop('spark.create.charactersleft')+' <span>'+titleLeft+'/'+titleLimit+'</span>');
			$('.sparks #emessageCounter').html($.i18n.prop('spark.create.characters')+' <span>'+msgLen+'</span>');
			$root.find('.sparkMessage.editMessage input#newLink').val($.i18n.prop('spark.create.attachment'));
			$root.find('.sparkMessage.editMessage input#newLink').addClass('idle');
			$root.find('.sparkMessage.editMessage input#newLink').focus(function() {
				$(this).val('');
				$(this).removeClass('idle');
			});
			$root.find('.content').busy(false);
			// ADD NEW EMBEDS OR LINKS TO SPARK
			//$root.find('.sparkMessage.editMessage input#newLink').change(function() {
			$root.find('.sparkMessage.editMessage .link .sparkAdd').click(function(){
				// addLink($root, 'div.addspark ul.linkList', $(this).val());
		 		var name,size;		 		
		 		//var input = $(this).val();
		 		var input = $(this).parent().find('input#newLink').val();
	 			// if ( input.indexOf('http://') == 0) {
	 			if ( input.indexOf('http://') == 0 || input.indexOf('https://') == 0 || input.indexOf('spotify://') == 0 ) {
	 				// maybe LINK
	 				name = input;
	 				size = '';
	 				//url = input;
	 				url = "url:"+input;
					var linkData = '<div class="link"><div class="dataurl" style="display: none;">'+url+'</div><a href="#remove" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a><a href="'+name+'" target="_blank">'+name+'</a></div>';
					$('.sparkMessage.editMessage .eattachments').append(linkData);
	 			} else if (input.indexOf('http://') != -1) {
	 				// possibly EMBED
	 				name = 'EMBED';
	 				size = '';
	 				//url = input;
	 				url = "embed:"+input;
					var embedData = '<div class="embed"><div class="dataurl" style="display: none;">'+url+'</div><a href="#remove" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>'+name+'</div>';
					$('.sparkMessage.editMessage .eattachments').append(embedData);
	 			} else {
	 				$('html, body').animate({scrollTop:0}, 'fast');
	 				//$root.find('.sparkMessage.editMessage').busy(true, {
	 				$root.busy(true,{
						message: '<p>'+$.i18n.prop('message.spark.nolink')+'</p>',
						buttons: [{
							text: ''+$.i18n.prop('message.buttonok')+''
						}]
					});
	 				return;
	 			}	 	
	 			
				$('.noAttachments').remove();	 			
				$(this).val('');
			});
			// PREVIEW EDITED SPARK			
			//$root.find('input[name=previewEdit]').live('click', function() {				
			$root.find('input[name=previewEdit]').live('click',function() {
				var sparkId = $(this).parent().parent('form').attr('id').split('_')[1];
	 			$root.find('#spark_'+sparkId+' .spContainer .hiddenContent .sparkAttachments').html($root.find('#spark_'+sparkId+' .spContainer .sparkMessage.editMessage .eattachments').html());
				$root.find('#spark_'+sparkId+' .sparkMessage.editMessage').slideUp('fast');
				//hiddenTmpHtml = $root.find('#spark_'+sparkId+' .hiddenContent').html();
				//$root.find('#spark_'+sparkId+' .hiddenContent .imageWindow').html('');
				$root.find('#spark_'+sparkId+' .hiddenContent .imageWindow div.embed').remove();
				if (contentWidth == undefined) {
					var contentWidth = 470;
				}
				if (contentHeight == undefined) {		
					var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));
				}
				atPreview = [];
				var attContent = '';
				var gotAtt = 'false';
				// got attachments? (embeds, links, files)
				if ($('#spark_'+sparkId+' .sparkMessage.editMessage .eattachments span').hasClass('noAttachments')) {
					gotAtt = 'false';
				}
				$('#spark_'+sparkId+' .sparkMessage.editMessage .eattachments div').each(function() {
					if ($(this).html() != undefined && $(this).html() != '') {
						gotAtt = 'true';
					}
				});
				if (gotAtt == 'true') {
					$('#spark_'+sparkId+' .sparkMessage.editMessage .eattachments div').each(function() {
						/*
						if ($(this).html() != undefined && $(this).html() != '' && $(this).find('.dataurl').html() != null) {
							attContent += $(this).find('.dataurl').html() + '\n';
						}
						*/
						if ($(this).html() != undefined && $(this).html() != '' && $(this).find('.dataurl').html() != null) {
							//attContent += $(this).find('.dataurl').html() + '\n';
							if ($(this).hasClass('image')) {
								attContent += $(this).find('a:eq(1)').attr('href')+'\n';
							}
							else if ($(this).hasClass('embed')) {
								attContent += $(this).find('.dataurl').html().replace('embed:','')+'\n';
							}
							else if ($(this).hasClass('link')){
								attContent += $(this).find('.dataurl').html().replace('url:','')+'\n';
							}
							else if ($(this).hasClass('uploaded')) {
								attContent += $(this).find('.dataurl').html()+'\n';
							}
						}
					});
				}
				if (attContent != '') {
					atPreview = new checkAttachments(attContent, contentWidth, contentHeight);
				}								
				var html = '';
				var $form = $('#spark_'+sparkId+' .sparkMessage.editMessage form');
				html += '<h4>'+createLinks($form.find('input[name=etitle]').val())+'</h4>';
				// images and embeds 'paged'
				if (atPreview["visual"] != "" && atPreview["visual"] != undefined) {
					html += '<div class="imageWindowControls"></div>';
					html += '<div class="imageWindow" style="display:none;">';
					html += atPreview["visual"];
					html += '</div>';
				}
				else {
					html += '<div class="imageWindowControls"></div>';
					html += '<div class="imageWindow" style="display:none;">';
					html += '</div>';
				}
				/*
				 * else { html += '<div class="imageWindowControls"></div>';
				 * html += '<div class="imageWindow">'; html += '<div
				 * id="tube"></div>'; html += '</div>'; }
				 */				
				html += '<div class="sparkMessage">';
				var editedContent = $form.find('textarea[name=econtent]').val().replace(/</g, '&lt;')
                    .replace(/>/g, '&gt;')
                    .replace(/&/g, '&amp;')
                    .replace(/\n/g, '<br/>')
					.replace(/\u20AC/g, '&euro;');
				html += createLinks(editedContent);
				var editTime = new Date();
				html += '<div class="editTime">'+$.i18n.prop('sparks.edited')+' '+createTimetag(editTime)+'</div>';
				html += '</div>';
				// non-image and url attachments
				// var tubeAtt = '';
				if (attContent != "") {
					html += '<div class="sparkAttachments">';
					// html += splitAttachments(spark.content, contentWidth,
					// contentHeight);
					// links (uploaded non-image files and urls)
					if (atPreview["link"] != "" && atPreview["link"] != undefined) {
						html += atPreview["link"];
					}
					// other links?
					if (atPreview["other"] != "" && atPreview["other"] != undefined) {
						html += atPreview["other"];
					}
					html += '</div>'; // sparkAttachments
				}
				html += '<div class="clear"></div>';												
				html += '<div class="sparkActions">';
				html += '<span class="actItem"><a class="sparkLikePreview" href="#" title="'+$.i18n.prop('sparks.likethis')+'"><span>'+$.i18n.prop('sparks.like')+'</span></a> (<span class="likeCount">'+spark.likeCount+'</span>)</span>';
				html += '<span class="actItem"><a class="sparkCommentsPreview" href="#" title="'+$.i18n.prop('sparks.comments')+'"><span>'+$.i18n.prop('sparks.comments')+'</span></a> (<span class="commentCount">'+spark.commentCount+'</span>)</span>';
				html += '</div>';
				html += '<div class="clear"></div>';
				html += '<div>';
				html += '<input type="button" name="saveEdit" value="'+$.i18n.prop('spark.edit.savebutton')+'" />';
				html += '<input type="button" name="cancelEdit" value="'+$.i18n.prop('spark.edit.cancelbutton')+'" />';
				html += '<input type="button" name="editEdit" value="'+$.i18n.prop('spark.edit.editbutton')+'" style="display:none;"/>';
				html += '</div>';
				$root.find('#spark_'+sparkId+' .editPreview').html(html);
				
				$root.find('#spark_'+sparkId+' .editPreview .sparkAttachments div').each(function() {
					if ($(this).find('a').attr('href') != undefined) {
						if ($(this).find('a').attr('href').indexOf('youtube.com') >= 0) {
							var tubeAtt = $(this).find('a').html();
							// if($root.find('.editPreview .sparkAttachments
							// .link a[href='+tubeAtt+']')) {
							var trimTube = '';								
							if (tubeAtt.indexOf('&') >= 0) {
								trimTube = tubeAtt.split('&')[0];
							}
							else {
								trimTube = tubeAtt;
							}
							var tubeHtml = '<div class="embed">';
							var tubeId = trimTube.split('=')[1];
							tubeHtml += '<div id="'+tubeId+'" class="'+contentWidth+'x'+contentHeight+'"></div>';
							tubeHtml += "</div>";
							$root.find('#spark_'+sparkId+' .editPreview .imageWindow').append(tubeHtml);
							$root.find('#spark_'+sparkId+' .editPreview .sparkAttachments .link a[href='+tubeAtt.replace('&amp;', '&')+']').parent().remove();
							// }
						}
					}
				});

				setTimeout(function(){
					var imgW = $root.find('#spark_'+sparkId+' .editPreview .imageWindow div');
					$.each(imgW, function() {
						var tubeId = $(this).attr('id');
						if (tubeId != undefined && tubeId != '') {
							var tubeUrl = 'http://www.youtube.com/watch?v='+tubeId;
							var contentHeight = $(this).attr('class').split('x')[0];
							var contentWidth = $(this).attr('class').split('x')[1];
							createTube(tubeUrl, tubeId, contentWidth, contentHeight, 'print');
						}
					});
				},1500);			

				$root.find('.editPreview a').live('click', function(event) {
					event.preventDefault();
				});
				setTimeout(function() {
					var sparks = $('#spark_'+sparkId+' .editPreview').parent().parent();
					$.each(sparks, function() {
						//var sparkId = $(this).find('.sparkId').html();
						var visuCount = parseInt( $(this).find('.editPreview .imageWindow > div').length );
						if (visuCount == 0) return;
						
						visPager = "";
						for (i=0;i<visuCount;i++) {
							var p = i+1;
							visPager += '<a href="#v_'+i+'"';
							if (i == 0) { visPager += ' class="s"'; }
							visPager += '>'+p+'</a>';					
						}
						if (visuCount > 1) {
							$(this).find('.editPreview .imageWindowControls').html(visPager);
						} else if (visuCount == 1) {
							$(this).find('.editPreview .imageWindow').css('border-top', 'none');
						}
	
						$(this).find('.editPreview .imageWindow > div').hide();
						$(this).find('.editPreview .imageWindow').show();
						$(this).find('.editPreview .imageWindow div:eq(0)').show();
					});					
					$root.find('#spark_'+sparkId+' .editPreview input[name=editEdit]').show();
					$root.find('#spark_'+sparkId).parent().busy(false);
				},2500);
				$root.find('#spark_'+sparkId+' .editPreview').slideDown('fast');
			});
			$root.find('input[name=editEdit]').live('click', function() {
				$root.find('#spark_'+sparkId+' .editPreview').slideUp('fast');
				var gotAtt = 'false';
				var found = 'false';
				if ($('#spark_'+sparkId+' .sparkMessage.editMessage .eattachments span').hasClass('noAttachments')) {
					gotAtt = 'false';
					found = 'true';
				}
				$('#spark_'+sparkId+' .sparkMessage.editMessage .eattachments div').each(function() {					
						/*if ($(this).html() != '') {
							gotAtt = 'true';
							found = 'false';
						}*/
						if ($(this).hasClass('clear')) {
						}
						else {
							gotAtt = 'true';
							found = 'false';
						}
				});
				setTimeout(function() {
					if (gotAtt == 'false' && found == 'false') {
						$root.find('#spark_'+sparkId+' .sparkMessage.editMessage .eattachments').html('<span class="noAttachments">'+$.i18n.prop('spark.edit.noattachments')+'</span>');
					}
				},1500);
				$root.find('.sparkMessage.editMessage input[name=file]').val('');
				$root.find('.sparkMessage.editMessage input#newLink').val($.i18n.prop('spark.create.attachment'));
				$root.find('.sparkMessage.editMessage input#newLink').addClass('idle');
				$root.find('.sparkMessage.editMessage').slideDown('fast');
				$root.find('.editPreview').html('');
			});
		}
	});
	// char counters
	$('.sparks input[name=etitle]').live('keydown, focus', function() {
		var titleLimit = 50;
		if ($(this).val().length > titleLimit) {
			$(this).val($(this).val().substring(0,titleLimit));
		} else {
			var titleCharsLeft = titleLimit - $(this).val().length;
			$(this).parent().find('label span#etitleCounter span').html(titleCharsLeft+'/'+titleLimit);
		}
	});
	$('.sparks input[name=etitle]').live('keyup',function() {
		var titleLimit = 50;
		if ($(this).val().length > titleLimit) {
			$(this).val($(this).val().substring(0,titleLimit));
		} else {
			var titleCharsLeft = titleLimit - $(this).val().length;
			$(this).parent().find('label span#etitleCounter span').html(titleCharsLeft+'/'+titleLimit);
		}
	});
	$('.sparks textarea[name=econtent]').live('keydown',function() {
		$(this).parent().find('label span#emessageCounter span').html($(this).val().length);
	});
	$('.sparks textarea[name=econtent]').live('keyup',function() {
		$(this).parent().find('label span#emessageCounter span').html($(this).val().length);
	});
	// SAVE EDITED SPARK
	$('input[name=saveEdit]').live('click', function() {
		var f = '';
		if($(this).parent().parent().hasClass('editPreview')) {
			f = $(this).parent().parent().parent().find('form');
		}
		else {
			f = $(this).parent().parent("form");
		}
		var sparkId = f.attr('id').split('_')[1];
		var t = f.find('input[name=etitle]').val().replace(/</g, '&lt;')
                            .replace(/>/g, '&gt;')
							.replace(/&/g, '&amp;');
							//.replace(/\u20AC/g, '&euro;');
		var m = f.find('textarea[name=econtent]').val().replace(/</g, '&lt;')
                            .replace(/>/g, '&gt;')
                            .replace(/&/g, '&amp;')
                            .replace(/\n/g, '<br/>');
							//.replace(/\u20AC/g, '&euro;');
		t = encodeURIComponent(t);			
		m = encodeURIComponent(m);
		//t = escape(t);
		//m = escape(m);
		/*var embeds = escape("\n\n");
		f.find('.eattachments div.dataurl').each(function() {
			embeds += encodeURIComponent($(this).html()) + escape("\n");
		});
		m += embeds;*/
		// NEW attachment-handling		
		var embeds = '';
		f.find('.eattachments div.dataurl').each(function() {
			var emb = '';
			if ($(this).parent().data('url') != undefined) {
				emb = $(this).parent().data('url');
			}
			else {
				emb = $(this).html();
			}
			embeds += '&item='+encodeURIComponent(emb);
			//embeds += '&item='+encodeURIComponent($(this).html());
		});		
		var groupId = document.location.href.split('_')[1];
		var saveData = "media="+sparkId+'&content='+m+'&title='+t;
		if (embeds != '') {
			saveData = saveData+embeds;
		}
		
		$.ajax({
			type: "GET",
			url: "api/media/edit",
			dataType: 'json',
			data: saveData,
			success: function(data) {
				listMedias("group", groupId);				
				// show group info
				//showGroupProfile(groupId);
				$('html, body').animate({scrollTop:0}, 'fast');
			}
		});
	});
	// REMOVE ATTACHMENT FROM SPARK
	$('a.delAttachment').live('click', function() {
		$(this).parent().slideUp().remove();
		return false;
	});
	// CANCEL EDIT
	$('input[name=cancelEdit]').live('click', function() {
		//var org = $(this).parent().parent().parent().parent().find('.hiddenContent').html();
		$(this).closest('.spContainer').html(hiddenTmpHtml);
	});
	return false;
}

// DELETE SPARK
function deleteSpark($root, sparkId, userId) {
	var dataString = "media="+sparkId;
	$('html, body').animate({scrollTop:0}, 'fast');
	$root.busy(true, {
		message: '<p>'+$.i18n.prop('message.spark.removespark')+'</p>',
		buttons: [{
			text: ''+$.i18n.prop('message.buttonok')+'',
			click: function () {
				$.ajax({
					type: "POST",
					url: "api/media/delete",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						//console.log(data);
						if (data.response["@result"] == "success") {
							var group = $root.find('.navi.left #usersGroups a.selected').attr('href');
							var groupId = group.split('_')[1];
							if (groupId == undefined && userId != undefined) {								
								listMedias("user", userId);
							} else {
								listMedias("group", groupId);								
							}
						} else if (data.response.errors) {
							$root.busy(true, {
								message: '<p>'+$.i18n.prop('message.spark.cannotremove')+'</p>',
								buttons: [{
									text: ''+$.i18n.prop('message.buttonok')+''
								}]
							});
						}
					}
				});
			}
		}, {
			text: ''+$.i18n.prop('message.buttoncancel')+''
		}]
	});
}
// SHARE SPARK
function shareSpark($root, sparkId, isAdmin) {
	$('.gspark .dialog').html('');
	var html = "";
	html += '<div class="fbtwitter"><div>Share to:</div><a id="share2fb" href="http://www.facebook.com/share.php?u=" target="_blank">Facebook</a> <a id="share2twitter" href="http://twitter.com/home?status=" target="_blank">Twitter</a></div>';
	html += '<div class="fieldList">';
	if (isAdmin == "true") {
		html += '<fieldset class="select">';
		html += '<label for="usersList">Find a user:</label>';
		html += '<span class="userTemp" style="display:none"><span class="userName"></span><span class="userId"></span></span>';
		html += '<input class="usersList ui-autocomplete-input" name="usersList"/>';
		html += '<span class="addUser" name="addUser" style="display:none">Add</span>';
		html += '</fieldset>';
	}
	html += '<fieldset class="input">';
	html += '<label for="shareToEmail">Write an email-address:</label>';
	html += '<input class="shareToEmail" name="shareToEmail" type="text" value=""/>';
	html += '<span class="addEmail" name="addEmail" style="display:none">Add</span>';
	html += '</fieldset>';
	html += '</div>';		
	html += '<span class="addedUserIds" style="display:none">';
	html += '<h4>Users:</h4>';
	html += '<ul class="userIdList"></ul>';
	html += '</span>';
	html += '<span class="addedUserEmails" style="display:none">';
	html += '<h4>Email-recipients:</h4>';
	html += '<ul class="userEmailList"></ul>';
	html += '</span>';
	$('.gspark .dialog').html(html);
	// <autocomplete>
	var query = "";
	$(".usersList").autocomplete({
		source: function(request, response) {
		query = request.term;
			$.ajax({
				type: "GET",
				url: "api/site/listProfiles",
				dataType: "json",
				data: "",
				success: function(data) {
					response($.map(data.response.list, function(item) {
						var useriName = item.name.toLowerCase();
						var useriNick = item.nickname.toLowerCase();
						query = query.toLowerCase();
						if(useriName.indexOf(""+query+"")>=0 || useriNick.indexOf(""+query+"")>=0){
						return {
							label: item.name+' ('+item.nickname+')',
							value: item.id
						}
						}
					}));
				}
			});
		},
		minLength: 2,
		focus: function(even, ui) {
			$('span.userTemp .userName').html(ui.item.label);
			$('span.userTemp .userId').html(ui.item.value);
			$('.usersList').val(ui.item.label);						
			return false;
		},
		select: function(event, ui) {
			$('.userIdList').append('<li rel="'+ui.item.value+'">'+ui.item.label+' <small><a class="userListRemove" href="#"  style="color: #3ef; text-decoration:none;">remove</a></small></li>');
			$('.addedUserIds').show();
			$('.usersList').val('');
			//$('.dialog span.addUser').show();
			return false;
		},
		open: function() {
		},
		close: function() {
		},
		change: function(event, ui) {
		}
		
	});
	/*$('span.addUser').live('click', function() {
		if ($(this).prev('input').val() != undefined && $(this).prev('input').val() != '' && $(this).prev('input').val() == $('span.userTemp .userName').text()) {
			$('.userIdList').append('<li rel="'+$('span.userTemp .userId').text()+'">'+$(this).prev('input').val()+' <small><a class="userListRemove" href="#"  style="color: #3ef; text-decoration:none;">remove</a></small></li>');
			$('.dialog span.addUser').hide();
			$('.addedUserIds').show();
			$('.usersList').val('');
		}
	});*/
	$('.gspark .dialog .userIdList .userListRemove').live('click', function() {
		$(this).parent('small').parent('li').remove();
		if ($('.addedUserIds ul li').text() == false) {
			$('.addedUserIds').hide();
		}			
	});
	// <email-validation>
	function validateEmail(emailAddress) {
	    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	    return pattern.test(emailAddress);
	}
	$('.dialog .shareToEmail').keyup(function(){
		var email = $(this).val();
		if(email != 0 && email != undefined && email != '') {
		    if(validateEmail(email))
		    {
		        $('.dialog .shareToEmail').css('background-color', '#affba9');
		        $('.dialog span.addEmail').show();
		    } else if(!validateEmail(email)){
		        $('.dialog .shareToEmail').css('background-color', '#ffbbbb');
		        $('.dialog span.addEmail').hide();
		    }
		}
		else {
			$('.dialog .shareToEmail').css('background-color', '#fff');
		}
		
	});
	
	$('.gspark .dialog .shareToEmail').live('blur', function() {
		var emailAddr = "";
		emailAddr = $(this).val();
		if (emailAddr != undefined && emailAddr != '' && validateEmail(emailAddr)) {
			$('.userEmailList').append('<li>'+emailAddr+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">remove</a></small></li>');
			$(this).val('');
			$('.dialog .shareToEmail').css('background-color', '#fff');
		    $('.dialog span.addEmail').hide();
			$('.addedUserEmails').show();
		}
		$('.shareToEmail').focus();
	});		
	$('.gspark .dialog .userEmailList .userEmailRemove').live('click', function() {
		$(this).parent('small').parent('li').remove();
		if ($('.addedUserEmails ul li').text() == false) {
			$('.addedUserEmails').hide();
			$('.shareToEmail').focus();
		}
	});
	// </email-validation>
	$(".dialog").dialog( {
		modal:true,
		resizable:false,
		draggable:false,
		width:420,
		height:500,					
		title:"Share spark id: "+sparkId,					
		dialogClass:'gspark',
		buttons: {
			'Cancel' : function () { $(this).dialog('close'); },						
			'Send' : function () { 
				$('ul.userIdList li').each(function() {
					alert($(this).attr('rel'));
				});
				$('ul.userEmailList li').each(function() {
					alert($(this).text().split(' remove')[0]);
				});
				$(this).dialog('close');					
			}
		}						
	});
	$('.usersList').focus();
}
/* list group admins */
function listAdmins(groupId, userIsAdmin, userIsSuperAdmin, userIsGroupAdmin){
	if (groupId == undefined) {
		return;
	}
	nocache = Math.random();
	var dataString = "sparkbox="+groupId+'&nocache='+nocache;
	$.ajax({
		type: "GET",
		url: "api/sparkbox/listAdmins",
		data: dataString,
		dataType: 'json',
		success: function(data) {
			//console.log(data);
			var adminCount = data.response.count;
			$('#groupProfile .groupAdminCount').html(adminCount);

			var html = "";
			var userActions = "";
			if (adminCount > 0) {
				for (var i=0; i<adminCount; i++) {
					var userId = data.response.list[i].id;
					var userNick = data.response.list[i].nickname;
					html += '<li class="groupmember">';
					html += '<a class="act" href="#" title="'+userNick+'">';
					if (data.response.list[i].avatar.fullUrl == '') {
						html += '<img src="http://' + document.location.href.split("/")[2] + '/static/css/img/empty-profile-35x35.png" width="30" height="30" alt="'+userNick+'" />';						
					} else {
						html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=30x30x0" alt="'+userNick+'" />';						
					}
					html += '<span>' + userNick + '</span></a>';
						html += '<div class="groupAdminActions" style="display: none">';
						html += '<ul>';
						html += '<li><h1>'+userNick+'</h1></li>';
						html += '<li><a href="#users_'+userId+'">Show user profile</a></li>';
						if (userIsAdmin == "true" || userIsSuperAdmin == "true" || userIsGroupAdmin == true) {
							html += '<li><a href="#demoteGroupAdmin_'+userId+'">'+$.i18n.prop('sparkbox.group.demoteadmin')+'</a></li>';
							html += '<li><a href="#kickUserFromSparkbox_'+userId+'">'+$.i18n.prop('sparkbox.group.removeuser')+'</a></li>';								
						}
						html += '</ul>';
						html += '</div>';
					html += '</li>';
				}
			}
			$('#groupProfile .groupadmins.box ul').html(html);
			$('#groupProfile .groupadmins.box ul li a.act').toggle(
					function() {
						$('.groupAdminActions').hide();
						$(this).next('.groupAdminActions').show();
					},
					function() {
						$(this).next('.groupAdminActions').hide();
			});
		}
	});			
}
// list members
function listMembers(groupId, userIsAdmin, userIsSuperAdmin, userIsGroupAdmin) {
	if (groupId == null) {
		// list all site members (my domain)
		nocache = Math.random();
		$.ajax({
			type: "POST",
			url: "api/site/listProfiles",
			data: "nocache="+nocache,
			dataType: 'json',
			success: function(data) {
				//console.log(data);
				var userCount = data.response.count;
				$('#domainUsers .countBox').html(userCount);
				var html = "";
				if (userCount > 0) {
					for (var i=0; i<userCount; i++) {
						var userId = data.response.list[i].id;
						var userNick = data.response.list[i].nickname;
						var userCity = data.response.list[i].location;
						var userCountry = data.response.list[i].country;
						var userName = data.response.list[i].name;
						var userDescr = data.response.list[i].description;
						var userEmail = data.response.list[i].email;
						html += '<div class="user" id="domainUser_'+userId+'">';
						if (data.response.list[i].avatar.fullUrl == '') {
							html += '<img src="http://' + document.location.href.split("/")[2] + '/static/css/img/empty-profile-35x35.png" width="32" height="32" alt="'+userNick+'" />';						
						} else {
							html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=32x32" alt="'+userNick+'" />';						
						}
						
						html += '<div class="userinfo">';
						html += '<a href="#" class="useractions">'+$.i18n.prop('mydomain.actions')+'</a>';
						html += '<span class="usernick">'+userNick+'</span>';
						html += ' <a href="#" class="showUserDescr">i</a>';
						html += '<br/>';
						if (userCity != undefined && userCity != "") {
							html += userCity;								
						}
						if (userCity != undefined && userCity != "" && userCountry != undefined && userCountry != "") {
							html += ", ";
						}
						if (userCountry != undefined && userCountry != "") {
							html += userCountry;								
						}
						html += '</div>';
						html += '<div class="userDescr" style="display: none;">';
						html += '<b>'+$.i18n.prop('login.email.label')+'</b>: <a href="mailto:' + userEmail +'">'+userEmail+'</a><br/>';
						if (userName != undefined) html += '<b>'+$.i18n.prop('mydomain.realname')+'</b> '+userName+'<br/>';
						if (userDescr != undefined) html += '<b>'+$.i18n.prop('mydomain.aboutme')+'</b><br/>'+userDescr;
						html += '</div>';
						html += '<div class="clear"></div>';
						html += '<div class="domainUserActions" id="userActions_'+userId+'" style="display:none;">';
						html += '<ul>';
						html += '<li><a href="#users_'+userId+'">'+$.i18n.prop('mydomain.userprofile')+'</a></li>';
						if ($('#domainAdminList > span').hasClass('adminUser_'+userId)) {
						} else {
							if (userIsAdmin == "true" ) {
								html += '<li><a href="#edituser_'+userId+'">'+$.i18n.prop('mydomain.edituser')+'</a></li>';
							}
							if (userIsSuperAdmin == "true" ) {
								html += '<li><a href="#promoteUser_'+userId+'">'+$.i18n.prop('mydomain.promoteadmin')+'</a></li>';
							}							
						}
						html += '<li><a href="#removeUser_'+userId+'">'+$.i18n.prop('mydomain.removeuser')+'</a></li>';
						html += '</ul>';
						html += '</div>';
						html += '</div>';
						$('#domainUsers #domainUserList').html(html);
					}
					$('#domainUsers #domainUserList .user .useractions').toggle(
							function() {
								$('#domainUsers #domainUserList .domainUserActions').hide();
								$(this).parent().parent().css('z-index', '1000');							
								$(this).parent().parent().find('.domainUserActions').show();							
								$(this).addClass("active");								
							},
							function() {
								$(this).parent().parent().find('.domainUserActions').hide();						
								$(this).removeClass("active");								
					});								
					$('#domainUsers #domainUserList .user .showUserDescr').toggle(
						function() {
							$(this).parent().parent().find('.userDescr').show();
						}, function() {
							$(this).parent().parent().find('.userDescr').hide();
							
						}
					);							
				}
			}
		});
	} else {
		// list members of group
		nocache = Math.random();
		var dataString = "sparkbox="+groupId+'&nocache='+nocache;
		$.ajax({
			type: "GET",
			url: "api/sparkbox/listProfiles",
			data: dataString,
			dataType: 'json',
			success: function(data) {
				//console.log(data);
				var memberCount = data.response.count;
				$('#groupProfile .groupMemberCount').html(memberCount);

				var html = "";
				var userActions = "";
				if (memberCount > 0) {
					for (var i=0; i<memberCount; i++) {
						var userId = data.response.list[i].id;
						var userNick = data.response.list[i].nickname;
						html += '<li class="groupmember">';
						html += '<a class="act" href="#" title="'+userNick+'">';

						if (data.response.list[i].avatar.fullUrl == '') {
							html += '<img src="http://' + document.location.href.split("/")[2] + '/static/css/img/empty-profile-35x35.png" width="30" height="30" alt="'+userNick+'" />';						
						} else {
							html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=30x30x0" alt="'+userNick+'" />';						
						}

						//html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=30x30x0" alt="'+userNick+'"/>';

						html += '<span>' + userNick + '</span></a>';
							html += '<div class="groupMemberActions" style="display: none">';
							html += '<ul>';
							html += '<li><h1>'+userNick+'</h1></li>';
							html += '<li><a href="#users_'+userId+'">'+$.i18n.prop('group.userprofile')+'</a></li>';
							if (userIsAdmin == "true") {
								html += '<li><a href="#promoteGroupAdmin_' + userId + '">'+$.i18n.prop('sparkbox.group.promoteadmin')+'</a></li>';
							}
							if (userIsAdmin == "true" || userIsGroupAdmin == true) {
								html += '<li><a href="#kickUserFromSparkbox_' + userId + '">'+$.i18n.prop('sparkbox.group.removeuser')+'</a></li>';
							}
							html += '</ul>';
							html += '</div>';
						html += '</li>';
					}
				}
				$('#groupProfile .groupmembers.box ul').html(html);
				$('#groupProfile .groupmembers.box ul li a.act').toggle(
						function() {
							$('.groupMemberActions').hide();
							$(this).next('.groupMemberActions').show();								
						},
						function() {
							$(this).next('.groupMemberActions').hide();								
				});
			}
		});			
		
	}
	return false;
	
}
/* list pending members */
function listPending(groupId){
	if (groupId == undefined) {
		return;
	}
	nocache = Math.random();
	var dataString = "sparkbox="+groupId+"&nocache="+nocache;
	$.ajax({
		type: "GET",
		url: "api/sparkbox/listPendingProfiles",
		data: dataString,
		dataType: 'json',
		success: function(data) {
			//console.log(data);
			var PmemberCount = data.response.count;
			$('#groupProfile .groupPendingMemberCount').html(PmemberCount);

			var html = "";
			var PuserActions = "";
			if (PmemberCount > 0) {
				for (var i=0; i<PmemberCount; i++) {
					var userId = data.response.list[i].id;
					var userNick = data.response.list[i].nickname;
					var userEmail = data.response.list[i].email;
					html += '<li class="groupmember">';
					html += '<a class="act" href="#" title="'+userNick+'">';
					if (data.response.list[i].avatar.fullUrl == '') {
						html += '<img src="http://' + document.location.href.split("/")[2] + '/static/css/img/empty-profile-35x35.png" width="30" height="30" alt="'+userNick+'" />';						
					} else {
						html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=30x30x0" alt="'+userNick+'" />';						
					}
					//html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=30x30x0" alt="'+userNick+'"/>';
					html += '<span>' + userNick + '</span></a>';
						html += '<div class="groupPendingMemberActions" style="display: none">';
						html += '<ul>';
						html += '<li><h1>'+userNick+' <small>'+userEmail+'</small></h1></li>';
						html += '<li><a href="#userP_'+userId+'">'+$.i18n.prop('group.userprofile')+'</a></li>';
						//html += '<li><a href="#users_'+userId+'">'+$.i18n.prop('group.userprofile')+'</a></li>';
						html += '<li><a href="#approveUser_'+userId+'">'+$.i18n.prop('sparkbox.group.approvemembership')+'</a></li>';
						html += '<li><a href="#rejectUser_'+userId+'">'+$.i18n.prop('sparkbox.group.rejectmembership')+'</a></li>';
						html += '</ul>';
						html += '</div>';
					html += '</li>';
				}
			}
			$('#groupProfile .grouppendingmembers.box ul').html(html);
			$('#groupProfile .grouppendingmembers.box ul li a.act').toggle(
					function() {
						$('.groupPendingMemberActions').hide();
						$(this).next('.groupPendingMemberActions').show();								
					},
					function() {
						$(this).next('.groupPendingMemberActions').hide();								
			});
		}
	});			
}
var userLang = '';
$.ajax({
	type: "GET",
	url: "api/profile/user",
	data: "",
	dataType: "json",
	success: function(data) {
		if (data.response.list != undefined) {		
			userLang = data.response.list[0].language;
		} else {
			userLang = "en";
		}
	}
});	
// CREATE TIMETAG FOR SPARKS
function createTimetag(created) {
	var time = new Date();
	var ago = time - created;
	var creationSeconds = ago/1000;
	var creationMinutes = ago/60000;
	var creationHours = ago/3600000;
	var creationDays = ago/86400000;
	var creationTime = new Array();
	creationTime["creationSeconds"] = parseInt(creationSeconds);
	creationTime["creationMinutes"] = parseInt(creationMinutes);
	creationTime["creationHours"] = parseInt(creationHours);
	creationTime["creationDays"] = parseInt(creationDays);
	if (creationTime["creationSeconds"]<1) {
		//return timetag.now;
		return $.i18n.prop('timetag.now');
	}
	else if (creationTime["creationSeconds"]>0 && creationTime["creationMinutes"]<1 && creationTime["creationHours"]<1 && creationTime["creationDays"]<1) {
		//return creationTime["creationSeconds"] + timetag.seconds;
		if (creationTime["creationSeconds"] < 2) {
			return $.i18n.prop('timetag.onesecond');
		}
		else {
			if (userLang == "de" || userLang == "se") {
				return $.i18n.prop('timetag.first')+' '+creationTime["creationSeconds"]+' '+$.i18n.prop('timetag.seconds');
			}
			else {
				return creationTime["creationSeconds"] + " " +$.i18n.prop('timetag.seconds');
			}
		}			
	}
	else if (creationTime["creationSeconds"]>0 && creationTime["creationMinutes"]>0 && creationTime["creationHours"]<1 && creationTime["creationDays"]<1) {
		//return creationTime["creationMinutes"] + timetag.minutes;
		if (creationTime["creationMinutes"] < 2 ) {
			return $.i18n.prop('timetag.oneminute');
		}
		else {
			if (userLang == "de" || userLang == "se") {
				return $.i18n.prop('timetag.first')+' '+creationTime["creationMinutes"]+' '+$.i18n.prop('timetag.minutes');
			}
			else {
				return creationTime["creationMinutes"] + " " +$.i18n.prop('timetag.minutes');
			}
		}
	}
	else if (creationTime["creationSeconds"]>0 && creationTime["creationMinutes"]>0 && creationTime["creationHours"]>0 && creationTime["creationDays"]<1) {
		//return creationTime["creationHours"] + timetag.hours;
		if (creationTime["creationHours"] < 2) {
			return $.i18n.prop('timetag.onehour');
		}
		else {
			if (userLang == "de" || userLang == "se") {
				return $.i18n.prop('timetag.first')+' '+creationTime["creationHours"]+' '+$.i18n.prop('timetag.hours');
			}
			else {				
				return creationTime["creationHours"] + " " +$.i18n.prop('timetag.hours');
			}
		}
	}
	else if (creationTime["creationSeconds"]>0 && creationTime["creationMinutes"]>0 && creationTime["creationHours"]>0 && creationTime["creationDays"]>0) {
		//return creationTime["creationDays"] + timetag.days;
		if (creationTime["creationDays"] < 2) {
			return $.i18n.prop('timetag.oneday');
		}
		else {
			if (userLang == "de" || userLang == "se") {
				return $.i18n.prop('timetag.first')+' '+creationTime["creationDays"]+' '+$.i18n.prop('timetag.days');
			}
			else {				
				return creationTime["creationDays"] + " " +$.i18n.prop('timetag.days');
			}
		}
	}		
}	

/*********************/
/* PRINT COMMENT OUT */
/*********************/
function printComment(comment) {
	html = "";
	html += '<div class="sparkComment" id="sparkComment_'+comment.id+'">';
	
	html += '<div class="avatar">';
	if (comment.from.avatar != undefined) {	
		if (comment.from.avatar.fullUrl == '') {
			html += '<a href="#users_'+comment.from.id+'"><img src="/static/css/img/empty-profile-35x35.png" width="25" height="25" /></a>';
		} else {
			html += '<a href="#users_'+comment.from.id+'"><img src="'+comment.from.avatar.fullUrl+'?wh=25x25x5" /></a>';				
		}
		//html += '<a href="#users_'+comment.from.id+'"><img src="'+comment.from.avatar.fullUrl+'?wh=25x25x5" /></a>';		
	} else {
		if (comment.from.twitterId != undefined) {
			avUrl = '<a href="http://twitter.com/'+comment.from.twitterId+'" target="_blank"><img src="http://img.tweetimag.es/i/'+comment.from.twitterId+'_m" alt="'+comment.from.twitterName+'" /></a>';
		} else if (comment.from.facebookId != undefined) {
			avUrl = '<a href="http://www.facebook.com/people/@/'+comment.from.facebookId+'" target="_blank"><img src="https://graph.facebook.com/'+comment.from.facebookId+'/picture" alt="'+comment.from.facebookName+'" width="25" height="25" /></a>';
		}
		html += avUrl;
	}
	html += '</div>';
	
	html += '<div class="spContainer">';
	html += '<div class="titlebar">';
	if (comment.canDelete == true) {
		html += '<a href="#delComment_'+comment.id+'" class="delComment">x</a>';
	}
	if (comment.from.avatar != undefined) {
		html += '<a href="#users_'+comment.from.id+'">'+comment.from.nickname+'</a>';					
	} else {
		if (comment.from.twitterId != undefined) {
			nick = '<a href="http://twitter.com/' + comment.from.twitterId + '" target="_blank">' + comment.from.twitterName + '</a>';
		} else if (comment.from.facebookId != undefined) {
			nick = '<a href="http://www.facebook.com/people/@/' + comment.from.facebookId + '" target="_blank">' + comment.from.facebookName + '</a>';
		}
		html += nick;
	}
	html += '<span>'+createTimetag(comment.created)+'</span>';					
	html += '</div>';
	html += '<div class="sparkMessage">';
	var mainContent = comment.content;
	html += createLinks(mainContent);
	html += '</div>'; // sparkMessage
	html += '</div>';
	html += '<div class="clear"></div>';
	html += '</div>';
	return html;

}

// list attachments for editing
function listAttachments(content) {
	atts = [];
	contentWidth = 100;
	
	var allAttachments = content;//content.split('\n\n')[1];
	if (allAttachments == undefined) return;
	
	var attachments = allAttachments.split('\n');
	var attachcount = attachments.length-1;		
	
	atts["visual"] = "";
	atts["link"] = "";
	atts["other"] = "";
	for (i=0; i<attachcount; i++) {
		if (attachments[i].indexOf('http://') == 0) {
			// links and images
			atlen = attachments[i].length;
			extst = atlen-4;
			if (attachments[i].substring(extst, atlen) == '.gif' || 
				attachments[i].substring(extst, atlen) == '.GIF' ||
				attachments[i].substring(extst, atlen) == '.jpg' ||
				attachments[i].substring(extst, atlen) == '.JPG' ||
				attachments[i].substring(extst, atlen) == '.png' ||
				attachments[i].substring(extst, atlen) == '.PNG') {
				atts.visual += '<div class="image">';
				atts.visual += '<div class="dataurl" style="display: none;">'+attachments[i]+'</div>';
				atts.visual += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
				// images
				var imgurl = attachments[i].split('/');
				var imgsite = "http://"+imgurl[2];
				// uploaded images use thumbs
				var thumbprefix = "";
				if (imgurl[3] == "util") {
					imaxheight = contentWidth * 2;
					thumbprefix = imgsite+"/util/thumb?width="+contentWidth+"&height="+imaxheight+"&url=";
				}
				// print image
				if ($.browser.msie) {
					atts["visual"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank"><img src="'+thumbprefix+attachments[i]+'" alt="'+attachments[i]+'" style="width: '+contentWidth+'px;" /></a>';
				} else {
					atts["visual"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank"><img src="'+thumbprefix+attachments[i]+'" alt="'+attachments[i]+'" style="max-width: '+contentWidth+'px;" /></a>';
				}
				atts["visual"] += "</div>";
				atts["visual"] += '<div class="clear"></div>';
			} else {
				atts["link"] += '<div class="link">';
				atts.link += '<div class="dataurl" style="display: none;">'+attachments[i]+'</div>';					
				atts.link += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
				// link to non-image url or mystic file somewhere on internet
				atts["link"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank">'+attachments[i]+'</a>';	
				atts["link"] += "</div>";
			}
		} else if (attachments[i].indexOf('<object') == 0) {
			atts["visual"] += '<div class="embed">';
			atts.visual += '<div class="dataurl" style="display: none;">'+attachments[i]+'</div>';
			atts.visual += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
			//embeds
			newWidth = 'width="'+contentWidth+'"';
			contentHeight = contentWidth - (contentWidth / 4);
			newHeight = 'height="'+contentHeight+'"';
			
			var modifiedAttachment = attachments[i].replace(/width="[0-9]+"/g, newWidth).replace(/height="[0-9]+"/g, newHeight);
			atts["visual"] += modifiedAttachment;
			atts["visual"] += "</div>";
		} else {
			atts["other"] += '<div class="other">';
			atts.other += '<div class="dataurl" style="display: none;">'+attachments[i]+'</div>';
			atts.other += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
			// other? what could it be? lets not make it a link before we see these somewhere
			atts["other"] += attachments[i];
			atts["other"] += '</div>';
		}
	}
	return atts;
}
// NEW list attachments to edit-form
function listEditAttachments(content, userId) {
    var contentWidth = 100;
    var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));
    var allAttachments = [];
    var attHtml = '';
    allAttachments = content;// content.split('\n\n')[1];
    if (allAttachments == undefined) return;			    
    for (i=0; i<allAttachments.length; i++) {
        if (allAttachments[i].mediaFile != undefined) {
            var fileUrl = allAttachments[i].mediaFile.fullUrl;
            var fileType = allAttachments[i].mediaFileType;
            // images
            if (fileType.split('/')[0] == 'image') {
                var thumbUrl = 'http://'+fileUrl.split('/')[2]+'/util/thumb?width='+contentWidth+'&height='+contentHeight+'&url='+fileUrl;
                attHtml += '<div class="image">';
                attHtml += '<div class="dataurl" style="display: none;">file:'+allAttachments[i].mediaFileId+'</div>';
                attHtml += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
                if ($.browser.msie) {
                        attHtml += '<a href="'+fileUrl+'" target="_blank"><img src="'+thumbUrl+'" style="width: '+contentWidth+'px;" /></a>';					
                } else {
                        attHtml += '<a href="'+fileUrl+'" target="_blank"><img src="'+thumbUrl+'" style="max-width: '+contentWidth+'px;" /></a>';					
                }
                attHtml += '</div>';                    
            }
            // videos
            if (fileType.split('/')[0] == 'video') {
            		var videoId = allAttachments[i].mediaFileId;
                    attHtml += '<div class="video">';
                    //attHtml += '<div class="dataurl" style="display: none;">file:http://' + fileUrl.split('/')[2] + '/video/'+userId+'/'+ videoId +'.flv</div>';                    
                    attHtml += '<div class="dataurl" style="display: none;">file:'+allAttachments[i].mediaFileId+'</div>';
                    attHtml += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
                    attHtml += '<div id="flvPlayer_' + videoId + '" style="height:'+contentHeight+'px;width:'+contentWidth+'px;"></div>';
                    attHtml += '<div class="flvUrl">http://' + fileUrl.split('/')[2] + '/video/'+userId+'/'+ videoId +'.flv</div>';
                    //attHtml += '<div class="flvUrl">'+fileUrl+'</div>';
                    attHtml += '</div>';					
            }
        }
        // embeds
        if (allAttachments[i].embed != undefined) {
                embed = allAttachments[i].embed;

				if (embed.indexOf('iframe') != -1 || embed.indexOf('IFRAME') != -1) {
					var isrc = embed.split('src="')[1].split('"')[0];
					attHtml += '<div class="embed">';
	                attHtml += '<div class="dataurl" style="display: none;">embed:'+allAttachments[i].embed+'</div>';
	                attHtml += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
					attHtml += '<a href="' + isrc + '" target="_blank">' + isrc + '</a>';
					attHtml += '</div>';
				} else {
	                newWidth = 'width="'+contentWidth+'"';
	                newHeight = 'height="'+contentHeight+'"';
	                var newEmbed = embed.replace(/width="[0-9]+"/g, newWidth).replace(/height="[0-9]+"/g, newHeight);
	                newEmbed = newEmbed.replace('<embed', '<embed wmode="opaque" ');
	                newEmbed = newEmbed.replace('</object>', '<param name="wmode" value="opaque" /></object>');
	                attHtml += '<div class="embed">';
	                attHtml += '<div class="dataurl" style="display: none;">embed:'+allAttachments[i].embed+'</div>';
	                attHtml += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
	                attHtml += newEmbed;
	                attHtml += '</div>';
				}

        }
        if (allAttachments[i].url != undefined) {
        	// the url might be a link to an image, so we have to process it accordingly...
        	var attUrl = allAttachments[i].url;
			var atlen = attUrl.length;
			var extst = atlen-4;
			// check if the link is to an image..
			if (attUrl.substring(extst, atlen) == '.gif' || 
					attUrl.substring(extst, atlen) == '.GIF' ||
					attUrl.substring(extst, atlen) == '.jpg' ||
					attUrl.substring(extst, atlen) == '.JPG' ||
					attUrl.substring(extst, atlen) == 'jpeg' ||
					attUrl.substring(extst, atlen) == 'JPEG' ||
					attUrl.substring(extst, atlen) == '.png' ||
					attUrl.substring(extst, atlen) == '.PNG') {
					attHtml += '<div class="image">';
					attHtml += '<div class="dataurl" style="display: none;">url:'+attUrl+'</div>';
					attHtml += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
					if($.browser.msie) {
						attHtml += '<a href="'+attUrl+'" title="'+attUrl+'" target="_blank"><img src="'+attUrl+'" alt="'+attUrl+'" style="width: '+contentWidth+'px;" /></a>';
					}
					else {
						attHtml += '<a href="'+attUrl+'" target="_blank"><img src="'+attUrl+'" style="max-width: '+contentWidth+'px;" /></a>';
					}        								
				attHtml += '</div>';
			}
			else {
	            attHtml += '<div class="link">';
	            attHtml += '<div class="dataurl" style="display: none;">url:'+allAttachments[i].url+'</div>';
	            attHtml += '<a href="#" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a>';
	            // other? what could it be? lets not make it a link before we see these somewhere
	            attHtml += allAttachments[i].url;
	            attHtml += '</div>';
			}
        }
    }
    return attHtml;
}

// check attachment types and return them nicely
function checkAttachments(content, contentWidth, contentHeight) {
	if (contentWidth == undefined) var contentWidth = 380;
	atts = [];
	
	var allAttachments = content;//content.split('\n\n')[1];
	if (allAttachments == undefined) return;
	
	var attachments = allAttachments.split('\n');
	var attachcount = attachments.length-1;		
	
	atts["visual"] = "";
	atts["link"] = "";
	atts["other"] = "";
	for (i=0; i<attachcount; i++) {
		if (attachments[i].indexOf('http://') == 0) {
			// links and images
			atlen = attachments[i].length;
			extst = atlen-4;
			if (attachments[i].substring(extst, atlen) == '.gif' || 
				attachments[i].substring(extst, atlen) == '.GIF' ||
				attachments[i].substring(extst, atlen) == '.jpg' ||
				attachments[i].substring(extst, atlen) == '.JPG' ||
				attachments[i].substring(extst, atlen) == 'jpeg' ||
				attachments[i].substring(extst, atlen) == 'JPEG' ||
				attachments[i].substring(extst, atlen) == '.png' ||
				attachments[i].substring(extst, atlen) == '.PNG') {
				atts.visual += '<div class="image">';
				// images
				var imgurl = attachments[i].split('/');
				var imgsite = "http://"+imgurl[2];
				// uploaded images use thumbs
				var thumbprefix = "";
				if (imgurl[3] == "util") {
					imaxheight = contentWidth * 2;
					thumbprefix = imgsite+"/util/thumb?width="+contentWidth+"&height="+imaxheight+"&url=";
				}
				// print image
				if ($.browser.msie) {
					atts["visual"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank"><img src="'+thumbprefix+attachments[i]+'" alt="'+attachments[i]+'" style="width: '+contentWidth+'px;" /></a>';
				} else {
					atts["visual"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank"><img src="'+thumbprefix+attachments[i]+'" alt="'+attachments[i]+'" style="max-width: '+contentWidth+'px;" /></a>';
				}
				atts["visual"] += "</div>";
			} else {
				atts["link"] += '<div class="link">';
				// link to non-image url or mystic file somewhere on internet
				atts["link"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank">'+attachments[i]+'</a>';	
				atts["link"] += "</div>";
			}
		} else if (attachments[i].indexOf('<object') == 0 || attachments[i].indexOf('<OBJECT') == 0 || attachments[i].indexOf('iframe') != -1 || attachments[i].indexOf('IFRAME') != -1) {
			if (attachments[i].indexOf('iframe') != -1 || attachments[i].indexOf('IFRAME') != -1) {
				var isrc = attachments[i].split('src="')[1].split('"')[0];
				atts["visual"] += '<div class="embed">';
				atts["visual"] += '<a href="' + isrc + '" target="_blank">' + isrc + '</a>';
				atts["visual"] += '</div>';
			} else {
				atts["visual"] += '<div class="embed">';
				//embeds
				// set correct width and height
				newWidth = 'width="'+contentWidth+'"';
				newHeight = 'height="'+contentHeight+'"';			
				var modifiedAttachment = attachments[i].replace(/width="[0-9]+"/g, newWidth).replace(/height="[0-9]+"/g, newHeight);
				// add wmode params to object and embed
				modifiedAttachment =  modifiedAttachment.replace('<embed', '<embed wmode="opaque" ');
				modifiedAttachment =  modifiedAttachment.replace('</object>', '<param name="wmode" value="opaque" /></object>');
				atts["visual"] += modifiedAttachment;
				atts["visual"] += "</div>";
			}

		} else {
			atts["other"] += '<div class="other">';
			// other? what could it be? lets not make it a link before we see these somewhere
			atts["other"] += attachments[i];
			atts["other"] += '</div>';
		}
	}
	return atts;
}
/********************************************************/
/* SHOW IMAGES AND EMBEDS PAGED AT THE TOP OF THE SPARK */
/********************************************************/
function showVisualContent(contentWidth, contentHeight) {
	var sparks = $('.pagePart.sparks .spark');
	$.each(sparks, function() {
		var sparkId = $(this).find('.sparkId').html();
		var visuCount = parseInt( $(this).find('.imageWindow > div').length );
		if (visuCount == 0) return;
		
		visPager = "";
		for (i=0;i<visuCount;i++) {
			var p = i+1;
			visPager += '<a href="#v_'+i+'"';
			if (i == 0) { visPager += ' class="s"'; }
			visPager += '>'+p+'</a>'; 
		}
		video = $(this).find('.imageWindow > div:eq(0) .flvUrl').html();
		if (visuCount > 1) {
			$(this).find('.imageWindowControls').html(visPager);
			if (video != null) {
				$(this).find('.imageWindowControls a.s').click();
			}
		} else if (visuCount == 1) {
			$(this).find('.imageWindow').css('border-top', 'none');
			if (video != null) {
				var playerDiv = $(this).find('.imageWindow .video > div:eq(0)').attr('id');
				jwPlayer(playerDiv, video, contentWidth, contentHeight);					
				//videoPlayer(playerDiv, video);
			}
		}

		$(this).find('.imageWindow > div').hide();
		$(this).find('.imageWindow').show();
		$(this).find('.imageWindow div:eq(0)').show();

	});
	
}
/***************************/
/* IMAGES AND EMBEDS PAGER */
/***************************/
$('.imageWindowControls a').live('click', function() {
	if (contentWidth == undefined) {
		var contentWidth = 465;
	}
	var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));
	var sparkId = '';
	if ($(this).parent().parent().hasClass('editPreview')) {
		sparkId = $(this).parent().parent().parent().parent('.spark').attr('id').split('_')[1];
	}
	else {
		sparkId = $(this).parent().parent().parent('.spark').attr('id').split('_')[1];
	}
	$(this).parent().find('a').removeClass('s');
	$(this).addClass('s');
	var i = $(this).attr('href').split('_')[1];
	$(this).parent().parent().find('.imageWindow div').hide();
	
	currVisu = $(this).parent().parent().find('.imageWindow > div:eq('+i+') > .flvUrl').html();
	if (currVisu != null && currVisu != undefined) {
		var currVL = currVisu.length;
		if (currVisu.substring(currVL-4, currVL) == '.flv' || currVisu.substring(currVL-4, currVL) == '.FLV' ||
			currVisu.substring(currVL-4, currVL) == '.mp4' || currVisu.substring(currVL-4, currVL) == '.MP4' ||
			currVisu.substring(currVL-4, currVL) == '.mpg' || currVisu.substring(currVL-4, currVL) == '.MPG' ||
			currVisu.substring(currVL-5, currVL) == '.mpeg' || currVisu.substring(currVL-5, currVL) == '.MPEG' ||
			currVisu.substring(currVL-4, currVL) == '.mov' || currVisu.substring(currVL-4, currVL) == '.MOV' ||
			currVisu.substring(currVL-4, currVL) == '.3gp' || currVisu.substring(currVL-4, currVL) == '.3GP' ||
			currVisu.substring(currVL-4, currVL) == '.3g2' || currVisu.substring(currVL-4, currVL) == '.3G2' ||
			currVisu.substring(currVL-4, currVL) == '.avi' || currVisu.substring(currVL-4, currVL) == '.AVI') {
			showPlayer = true;
			playerDiv = $(this).parent().parent().find('.imageWindow > div:eq('+i+') > div').attr('id');
			if (playerDiv == "") {
				playerDiv = $(this).parent().parent().find('.imageWindow > div:eq('+i+') > object').attr('id');				
			}
		} else {
			showPlayer = false;
		}
		if (showPlayer == true) {
			jwPlayer(playerDiv, currVisu, contentWidth, contentHeight);					
			//videoPlayer(playerDiv, currVisu);
		}
		
	}
	
	$(this).parent().parent().find('.imageWindow > div:eq('+i+')').show();
	return false;
});
				
function printSpark(data, contentWidth, contentHeight) {
	if (contentWidth == undefined) {
		var contentWidth = 490;
	}
	if (contentHeight == undefined) {		
		var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));
	}
	
	at = [];
	var fullContent = data.content.split('\n\n');
	
	// text content
	var mainContent = createLinks(fullContent[0]);
	
	html = "";
	html += '<div class="spark" id="spark_'+data.id+'">';
	
	html += '<div class="avatar">';
	if (data.from.avatar.fullUrl == '') {
		html += '<a href="#users_'+data.from.id+'"><img src="/static/css/img/empty-profile-35x35.png" width="35" height="35" /></a>';
	} else {
		html += '<a href="#users_'+data.from.id+'"><img src="'+data.from.avatar.fullUrl+'?wh=35x35x5" /></a>';				
	}
	//html += '<a href="#users_'+data.from.id+'"><img src="'+data.from.avatar.fullUrl+'?wh=35x35x5" /></a>';		
	html += '</div>';
	
	html += '<div class="spContainer">';
	html += '<div class="titlebar">';
	
	if (data.canDelete == true) {
		html += '<a href="#" id="closeSpark_' + data.id +'" class="sparkRemove" title="'+$.i18n.prop('sparks.deletespark')+'"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deletespark')+'"/></a>';
		html += '<a href="#" id="editSpark_' + data.id +'" class="sparkEdit" title="'+$.i18n.prop('sparks.editspark')+'"><img src="static/css/img/edit_icon1.png" alt="'+$.i18n.prop('sparks.editspark')+'" /></a>';
	}
	
	html += '<a href="#users_'+data.from.id+'">'+data.from.nickname+'</a>';					
	html += '<span>'+createTimetag(data.created)+'</span>';					
	html += '</div>';
	
	// spark title
	var tit = data.title;
	//var tit = "Title here";
	html += '<h4>'+tit+'</h4>';

	// NEW images and embeds attached to media
	if (data.includes != undefined) {
		html += '<div class="imageWindowControls"></div>';
		html += '<div class="imageWindow" style="display: none;">';
		
		$.each(data.includes, function(i) {
			// uploaded files
			if (data.includes[i].mediaFile != undefined) {
				fileUrl = data.includes[i].mediaFile.fullUrl;
				fileType = data.includes[i].mediaFileType;
				// images
				if (fileType.split('/')[0] == 'image') {
					thumbUrl = 'http://'+fileUrl.split('/')[2]+'/util/thumb?width='+contentWidth+'&height='+contentHeight+'&url='+fileUrl;
					html += '<div class="image">';
					if ($.browser.msie) {
						html += '<a href="'+fileUrl+'" target="_blank"><img src="'+thumbUrl+'" style="width: '+contentWidth+'px;" /></a>';					
					} else {
						html += '<a href="'+fileUrl+'" target="_blank"><img src="'+thumbUrl+'" style="max-width: '+contentWidth+'px;" /></a>';					
					}
					html += '</div>';					
				}
				// videos
				if (fileType.split('/')[0] == 'video') {
					html += '<div class="video">';
					var videoId = data.includes[i].mediaFileId;
					
					html += '<div id="flvPlayer_' + videoId + '" style="height:'+contentHeight+'px;width:'+contentWidth+'px;"></div>';
					html += '<div class="flvUrl">http://' + fileUrl.split('/')[2] + '/video/'+data.from.id+'/'+ videoId +'.flv</div>';
					html += '</div>';					
				}
			}
			// embeds
			if (data.includes[i].embed != undefined) {
				embed = data.includes[i].embed;
				if (embed.indexOf('iframe') != -1 || embed.indexOf('IFRAME') != -1) {
					var isrc = embed.split('src="')[1].split('"')[0];
					html += '<div class="embed">';
					html += '<a href="' + isrc + '" target="_blank">' + isrc + '</a>';
					html += '</div>';
				} else {
					newWidth = 'width="'+contentWidth+'"';
					newHeight = 'height="'+contentHeight+'"';
					var newEmbed = embed.replace(/width="[0-9]+"/g, newWidth).replace(/height="[0-9]+"/g, newHeight);
					newEmbed = newEmbed.replace('<embed', '<embed wmode="opaque" ');
					newEmbed = newEmbed.replace('</object>', '<param name="wmode" value="opaque" /></object>');
					html += '<div class="embed">';
					html += newEmbed;
					html += '</div>';
				}
			}
		});
		html += '</div>';
	}

	
	
	html += '<div class="sparkMessage">';
	html += mainContent;
	
	
	if (data.includes != undefined) {
		html += '<div class="includeUrls">';
		$.each(data.includes, function(i) {
			if (data.includes[i].mediaFile != undefined) {
				fileUrl = data.includes[i].mediaFile.fullUrl;
				fileType = data.includes[i].mediaFileType;
				// random files
				if (fileType.split('/')[0] != 'image' && fileType.split('/')[0] != 'video') {
					html += '<div class="incFile">';
					html += '<a href="' + fileUrl + '" target="_blank">' + fileUrl + '</a>';
					html += '</div>';
				}
			}
			// URLs attached to media
			if (data.includes[i].url != undefined) {
				html += '<div class="incUrl">';
				html += '<a href="'+data.includes[i].url+'">'+data.includes[i].url+'</a>';
				html += '</div>';
			}
		});
		html += '</div>';
	}
	
	
	if (data.editTime != "" && data.editTime != undefined) {
		html += '<div class="editTime">'+$.i18n.prop('sparks.edited')+' '+createTimetag(data.editTime)+'</div>';			
	}
	html += '</div>'; // sparkMessage

	// non-image and url attachments
	/*
	if (fullContent[1] != "") {
		html += '<div class="sparkAttachments">';
		//html += splitAttachments(spark.content, contentWidth, contentHeight);
		// links (uploaded non-image files and urls)
		if (at["link"] != "" && at["link"] != undefined) {
			html += at["link"];
		}
		// other links?
		if (at["other"] != "" && at["other"] != undefined) {
			html += at["other"];
		}
		html += '</div>'; // sparkAttachments
	}
	*/
	html += '<div class="clear"></div>';
	html += '<div class="sparkId" style="display: none">'+data.id+'</div>';
	html += '<div class="sparkActions">';
	//html += '<span class="actItem"><a class="sparkShare" href="#shareSpark_' +data.id +'" title="Share this spark"><span>Share</span></a></span>';
	html += '<span class="actItem"><a class="sparkLike" href="#likeSpark_' +data.id +'" title="'+$.i18n.prop('sparks.likethis')+'"><span>'+$.i18n.prop('sparks.like')+'</span></a> (<span class="likeCount">'+data.likeCount+'</span>)</span>';
	html += '<span class="actItem"><a class="sparkComments" href="#commentSpark_' +data.id +'" title="'+$.i18n.prop('sparks.comments')+'"><span>'+$.i18n.prop('sparks.comments')+'</span></a> (<span class="commentCount">'+data.commentCount+'</span>)</span>';
	html += '</div>';
	html += '<div class="clear"></div>';
	html += '</div>';
	if (data.commentCount == 0) {
		html += '<div class="commentForm"><form><textarea name="comment" title="'+$.i18n.prop('sparks.comment.write')+'" class="inactive">'+$.i18n.prop('sparks.comment.write')+'</textarea><input type="submit" name="addComment" value="'+$.i18n.prop('sparks.comment.comment')+'" /></form></div>';		
	} else {
		html += '<div class="commentForm" style="display: none;"><form><textarea name="comment" title="'+$.i18n.prop('sparks.comment.write')+'" class="inactive">'+$.i18n.prop('sparks.comment.write')+'</textarea><input type="submit" name="addComment" value="'+$.i18n.prop('sparks.comment.comment')+'" /></form></div>';
	}
	html += '<div class="commentList"></div>';
	html += '</div>';
	
	return html;
}

function updateUserRow() {
	// set user avatar and nickname
	// IE needs halp
	nocache = Math.random();
	$.ajax({
		type: "GET",
		url: "api/profile/user",
		data: "nocache="+nocache,		
		dataType: 'json',
		success: function(data) {
			var avatar = data.response.list[0].avatar.fullUrl;
			var nick = data.response.list[0].nickname;
			var lang = data.response.list[0].language;
			//var userAvatarFile = avatar.split("avatar/")[1];
			//if (userAvatarFile == 'x.png') {
			if (avatar == '') {
				if ($.cookie('userProfileAlerted')) {
					if ($.cookie('userProfileAlerted') == 'alerted&id='+data.response.list[0].id) {
						// already alerted..
					}
					else {
						$.cookie('userProfileAlerted', 'alerted&id='+data.response.list[0].id, profilecookieoptions);
						$('body').busy(true, {
							message: '<p>'+$.i18n.prop('message.user.addpicture')+'</p>',
							buttons: [{
								text: ''+$.i18n.prop('message.user.nowbutton')+'',
								click: function () {
									$('.header .nav2 li a[href=#usersettings]').click();
								}},
								{
								text: ''+$.i18n.prop('message.user.laterbutton')+'',
								click: function () {
								}
							}]
						});
					}
				}
			}
			$('ul.nav2 li#user img').attr('src', avatar+'?wh=24x24');
			$('ul.nav2 li#user img').attr('title', nick);
			$('ul.nav2 li#user a span').html(nick);
		}
	});		
}
// get date and time from milliseconds
function millis2datetime(created) {
	var date = new Date(created);
	var day = date.getDate();
	var month = date.getMonth();
	month++;
	var year = date.getFullYear();
	
	var hours = date.getHours();
	var mins = date.getMinutes();
	if (mins < 10) {
		mins = "0"+mins;
	}
	
	var dateStr = day+"/"+month+"/"+year+" "+hours+":"+mins;
	return dateStr;
}
function showContactRequests() {
	nocache = Math.random();
	$.ajax({
		type: "GET",
		url: "api/site/listContacts",
		data: "nocache="+nocache,		
		dataType: 'json',
		success: function(data) {
			//console.log(data);
			html = '';
			var cou = data.response.count;
			$('#contactRequests h3 .countBox').html(cou);
			$.each(data.response.list, function(i) {
				name = data.response.list[i].name;
				email = data.response.list[i].email;
				phone = data.response.list[i].telephone;
				company = data.response.list[i].company;
				created = millis2datetime(data.response.list[i].created);
				html += '<div class="req req_'+data.response.list[i].id+'">';
				html += '<a class="reqDelete" href="#delReq_'+data.response.list[i].id+'">'+$.i18n.prop('mydomain.deletereq')+'</a>';
				html += '<small>'+created+'</small>';
				html += '<div>';
				html += name;
				html += ' (<a href="mailto:'+email+'">'+email+'</a>)<br/>';
				if (company != undefined && company != "") {
					html += company+'<br/>';				
				}
				if (phone != undefined && phone != "") {
					html += phone;
				}
				html += '</div>';
				html += '</div>';
			});
			$('#contactRequestList').html(html);
		}
	});		
}

var cb = {};

(function($) {
	/************/
	/* Sparkbox */
 	/************/
 	$.fn.SparkBox = function(options){
		var defaults = {}
		options = $.extend(defaults, options);
		
		if ($.browser.msie && $.browser.version < "7.0") {
			alert('Seems like you are using Internet Explorer version below 7.0, please update to latest version of Internet Explorer or even better, install Mozilla Firefox or Google Chrome');
		}

		if (options.user) {
			// refresh my groups onload
			refreshMyGroups(options.user.id);
			// update user image and nick
			updateUserRow();
			if (options.user.isAdmin == "false") {
				$('ul.nav1 a[href=#faq]').parent("li").remove();
			}
		}
		// set site title
		//document.title = 'Sparkbox - Live reporting widget for news sites';

		/*******************************/
		/* load stylesheets on the fly */
		/*******************************/
		if (!$.fn.loadStylesheet) {
			$.fn.loadStylesheet = function(url,id) {
				this.each(function() {
					$('<link id="'+id+'" rel="stylesheet" media="screen" type="text/css" href="'+url+'"/>').appendTo(this);
					return this;
				});
			}
		}

		// PROMOTE USER TO DOMAIN ADMIN
		function promoteUser($root, userId) {
				$('html, body').animate({scrollTop:0}, 'fast');
				var nocache = Math.random();
				var dataString = "profile="+userId+"&admin=true&nocache="+nocache;
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.user.promoteadmin')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/site/changeAdmin",
								data: dataString,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										setTimeout(function () { 
											contentPage($root, "domain");				
										}, 1500);								
									} else if (data.response.errors) {
										alert($.i18n.prop('message.user.cannotpromote'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
		}	
		// DEMOTE DOMAIN ADMIN TO USER
		function demoteUser($root, userId) {
			$('html, body').animate({scrollTop:0}, 'fast');
			var dataString = "profile="+userId+"&admin=false";
			$root.busy(true, {
				message: '<p>'+$.i18n.prop('message.user.demoteadmin')+'</p>',
				buttons: [{
					text: 'Ok',
					click: function () {
						$.ajax({
							type: "POST",
							url: "api/site/changeAdmin",
							data: dataString,
							dataType: 'json',
							success: function(data) {
								//console.log(data);
								if (data.response["@result"] == "success") {
									contentPage($root, "domain");				
								} else if (data.response.errors) {
									alert($.i18n.prop('message.user.cannotdemote'));
								}
							}
						});
					}
				}, {
					text: ''+$.i18n.prop('message.buttoncancel')+''
				}]
			});
		}
		// REMOVE DOMAIN USER
		function removeUser($root, userId) {
				$('html, body').animate({scrollTop:0}, 'fast');
				var dataString = "profile="+userId;
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.user.remove')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/site/deleteMember",
								data: dataString,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										contentPage($root, "domain");				
									} else if (data.response.errors) {
										alert($.i18n.prop('message.user.cannotremove'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
		}	
		/************************/	
		/* activate idle fields */
		/************************/
		function idleFields($root){
			$root.find('.idle').bind('focus click', function(){
				$(this).removeClass('idle').unbind('focus click').val('')
			}).each(function(){
				var $t = $(this);
				$t.val($t.attr('title'));
			});
		}

		/**********************************************/
 		/* Analyze input and create list-item from it */
		/**********************************************/
 		function addLink($root, ul, input) {
 		
 			var name,size;
 			if ( input.indexOf('http://') == 0 || input.indexOf('https://') == 0 || input.indexOf('spotify://') == 0) {
 				//maybe LINK
 				name = input;
 				size = '';
 				//url = input;
 				url = "url:"+input;
 			} //else if (input.indexOf('http://') != -1 && input.indexOf('https://') != -1) {
 			else if (input.indexOf('http://') != -1) {
 				//possibly EMBED
 				name = "EMBED";
 				size = '';
 				//url = input;
 				url = "embed:"+input;
 			} else {
 				//$root.find('.addspark').busy(true, {
 				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.spark.nolink')+'</p>',
					buttons: [{
						text: 'OK'
					}]
				});
 				return;
 			}
 			$('<li class="icon sparkAttachment"><span class="attachmentUp">'+name+'</span><b>'+size+'</b><a href="#remove" class="icon linkRemove"><span>'+$.i18n.prop('spark.removeattachment')+'</span></a></li>')
 				.data('url',url)
 				.appendTo($root.find(ul));
 			
 		};
 		function addFileLink($root, ul, input) {
 		
 			var name,size;
			name = input;
			size = '';
			url = "file:"+input;
 			$('<li class="icon sparkAttachment"><span class="attachmentUp">'+name+'</span><b>'+size+'</b><a href="#remove" class="icon linkRemove"><span>'+$.i18n.prop('spark.removeattachment')+'</span></a></li>')
 				.data('url',url)
 				.appendTo($root.find(ul));
 			
 		};

 		// OPEN A SINGLE SPARK
 		function openSpark(sparkId) {
 			var html = "";
 			var dataString = "media="+sparkId;
 			var fromlink = '#users_';
 			$.ajax({
 				type: "GET",
 				url: "api/media/get",
 				dataType: 'json',
 				data: dataString,
 				success: function(data) {
 					//console.log(data);
					spark = data.response.list[0];

					html = printSpark(spark);
 		 			$('.pagePart.sparks').hide();
 		 			$('.pagePart.singleSpark').html(html).show();	
 				}
 			});
 		}
 		
 		function openOutsideSpark(sparkId) { 		
 				var html = "";
 	 			var dataString = "media="+sparkId;
 	 			var fromlink = '#users_';
 	 			var loginLink = '<div><a href="sparkbox" style="text-decoration:none;">Login</a> to comment</div>';
 	 			$.ajax({
 	 				type: "GET",
 	 				url: "api/media/get",
 	 				dataType: 'json',
 	 				data: dataString,
 	 				success: function(data) {
 	 					if (options.user == undefined) {
 	 	 					var data = data.response.list[0]; 
 	 	 					var from = data.from;
 	 	 					var mainContent = decode_utf8(data.content.split('\n\n')[0]);
 	 	 					$('.adspark .header ul.nav1 li a').attr('href', 'sparkbox');
 	 	 	 	 			$('.adspark .header ul.nav1 li a').text('Login');
 	 	 	 	 			//$('.adspark .header ul.nav1').append('<li><a href="./register_adspark_user">Register</a></li>');
 	 	 					html += '<div class="spark" id="spark_'+data.id+'">'; 	 					
 	 	 					html += '<div class="title"><img src="' + from.avatar.fullUrl + '?wh=48x48x3"/>' +
 	 	 							'<span style="padding:0 5px 0 5px;">' + from.nickname +'</span>' +
 	 	 							'<small>'+ createTimetag(data.created) + '</small>';
 	 	 					html +='</div><div class="message"><p>' +mainContent +'</p>' +
 	 	 					splitAttachments(data.content) +
 	 	 					'</div><!--<div class="comments">Should we show the comments?</div>--></div>';
 	 	 					html += loginLink;
 	 					}
 	 					else {
 	 	 					var data = data.response.list[0]; 
 	 	 					var from = data.from;
 	 	 					var mainContent = decode_utf8(data.content.split('\n\n')[0]);
 	 	 					$('.adspark .header ul.nav1 li a').attr('href', 'sparkbox');
 	 	 					html += '<div class="spark" id="spark_'+data.id+'">'; 	 					
 	 	 					//html += '<a class="btn icon sparkShare" href="sparkbox#" id="shareSpark_' +data.id +'" title="Share this spark"><span>Share</span><small>Share</small></a>';
 	 	 					html += '<div class="title"><img src="' + from.avatar.fullUrl + '?wh=48x48x3"/>' +
 	 	 							'<a class="user" href="' + fromlink + from.id +'" title="Show user profile"><span>' + from.nickname +'</span></a>' +
 	 	 							'<small><a class="timetag" href="sparkbox#openSpark_' + data.id + '" title="Show this spark">' + createTimetag(data.created) + '</a></small> :: <a class="title" href="sparkbox#openSpark_' + data.id + '" title="Show this spark">'+data.title+'</a>';
 	 	 							
 	 	 					// TODO!
 	 	 					// check who can delete
 	 	 					if (from.id == options.user.id || options.user.isAdmin == true) {
 	 	 						html += '<a class="icon sparkRemove" href="#" id="closeSpark_' + data.id +'" title="Delete spark"><span>Close</span></a>';
 	 	 					}
 	 	 					html +='</div><div class="message"><p>' +mainContent +'</p>' +
 	 	 					splitAttachments(data.content) +
 	 	 					'</div><div class="comments">Comments will be here...</div></div>';
 	 					}
 	 					//console.log(data); 	
 	 					
 	 					$('.pagePart.openSpark #open_spark .openSingleSpark').html(html);	
 	 				}
 	 			}); 				
 				
 			} 		
 		
		/********************/
		/* create new spark */
	 	/********************/
 		function sendSpark( $root, mode ) {
			// form
			var $form = $root.find('.addspark form');
			// message needed
			var $description = $form.find('textarea[name=content]');
			if ($description.val() == '') {
				//$description.busy(true, {
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.spark.nomessage')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () { $description.focus() }
					}]
				});
				return false;
			}
			// title needed
			var $title = $form.find('input[name=title]');
			if ($title.val() == '') {
				//$title.busy(true, {
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.spark.notitle')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () { $title.focus() }
					}]
				});
				return false;
			}
			
			/*
			var embeds = "\n\n";
			$root.find('.addspark .linkList li').each(function () {
				embeds += encodeURIComponent($(this).data('url')) + "\n";	
			});
			*/
			var embeds = "";
			$root.find('.addspark .linkList li').each(function () {
				embeds += "&item="+encodeURIComponent($(this).data('url'));	
			});


			// title and message
			var postTitle = $form.find('input[name=title]').val().replace(/</g, '&lt;')
                                .replace(/>/g, '&gt;')
								.replace(/&/g, '&amp;');
			var postContent = $form.find('textarea[name=content]').val()
								.replace(/</g, '&lt;')
                                .replace(/>/g, '&gt;')
                                .replace(/&/g, '&amp;')
                                .replace(/\n/g, '<br/>');
			postTitle = encodeURIComponent(postTitle);			
			postContent = encodeURIComponent(postContent);			
			//postContent += embeds;			

			// group id
			var params = location.href.split('_');
			if ($.cookie('groupCreated') && document.location.href.split("#")[1] == "tour") {
				var groupId = $.cookie('groupCreated');
			} else if ($.cookie('tourType') == "Usertour") {
				var groupId = $('#usersGroups .group a:eq(0)').attr('href').split('_')[1];
			} else {
				var groupId = parseInt(params[1]);
			}
			
			if (mode == "send") {
				// do send
				$root.find('div.addspark').busy(true, { message: '<p>'+$.i18n.prop('message.spark.sendingspark')+'</p>' });
				$root.find('div.addspark div.create').slideUp();
				// data for POST
				if (embeds == "") {
					var dataString = "sparkbox="+groupId+"&content=" + postContent + "&title=" + postTitle;				
				} else {
					var dataString = "sparkbox="+groupId+"&content=" + postContent + "&title=" + postTitle + embeds;
				}
				$.ajax({
					type: "POST",
					url: "api/media/create",
					data: dataString,
					dataType: "json",
					success: function(data) {
						$root.find('div.addspark').busy(false);
						// we came from tour, lets get back there
						if ($.cookie('groupCreated') && document.location.href.split("#")[1] == "tour") {
							$root.busy(true, {
								message: '<p>'+$.i18n.prop('message.spark.sparksent')+'</p>',
								buttons : [
									{ 
										text: 'Ok',
									 	click: function () {
											$root.busy(false);
											$root.find('.tourNaviContainer a.selected').parent().next().find('a').click();
										}
									}
								]
							});
							
						} else if ($.cookie('tourType') == "Usertour") {
							$root.find('.tourNaviContainer a.selected').parent().next().find('a').click();
						}
						else {
							// refresh spark list on success
							//listMedias(groupId);
							var userId = options.user.id;
							var isAdmin = options.user.isAdmin;
							listMedias("group", groupId);
							// show input field again
							$root.find('.addspark .activate').show();
						}
					}
				});
			} else if (mode == "preview") {
				// do preview
				var $form = $root.find('.addspark form');
				// title needed
				var $sparkTitle = $form.find('input[name=title]');
				// message needed
				var $description = $form.find('textarea[name=content]');
				if ($sparkTitle.val() == '' && $description.val() != '') {
					$sparkTitle.busy(true, {
						message: '<p>'+$.i18n.prop('message.spark.notitle')+'</p>',
						buttons: [{
							text: ''+$.i18n.prop('message.buttonok')+'',
							click: function () { $sparkTitle.focus() }
						}]
					});
					return false;
				}
				else if ($sparkTitle.val() != '' && $description.val() == '') {
					$description.busy(true, {
						message: '<p>'+$.i18n.prop('message.spark.nomessage')+'</p>',
						buttons: [{
							text: ''+$.i18n.prop('message.buttonok')+'',
							click: function () { $description.focus() }
						}]
					});
					return false;
				}
				else if ($sparkTitle.val() == '' && $description.val() == '') {
					return false;
				}				
				var html = "";
				var at = [];
				at["visual"] = "";
				at["link"] = "";
				at["other"] = "";
				var fullContent = postContent.split('\n\n');
				
				// text content
				var mainContent = fullContent[0];
				
				// got attachments? (embeds, links, files)
				/*
				if (fullContent[1] != "") {
					if (contentWidth == undefined) var contentWidth = 440; // spark is a bit smaller in preview-mode so we need to keep the width in check..
					if (contentHeight == undefined) {		
						var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));
					}
					var allAttachments = decodeURIComponent(fullContent[1]);//content.split('\n\n')[1];
					if (allAttachments == undefined) return;
					var attachments = allAttachments.split('\n');
					var attachcount = attachments.length-1;		
					
					for (i=0; i<attachcount; i++) {
						attachments[i] = ''+attachments[i]+''; // grab the attachments to a string..
						if (attachments[i].indexOf('http://') == 0 || attachments[i].indexOf('https://') == 0 || attachments[i].indexOf('spotify://') == 0) {
							// links and images
							atlen = attachments[i].length;
							extst = atlen-4;
							if (attachments[i].substring(extst, atlen) == '.gif' || 
								attachments[i].substring(extst, atlen) == '.GIF' ||
								attachments[i].substring(extst, atlen) == '.jpg' ||
								attachments[i].substring(extst, atlen) == '.JPG' ||
								attachments[i].substring(extst, atlen) == '.png' ||
								attachments[i].substring(extst, atlen) == '.PNG') {
								at["visual"] += '<div class="image">';
								// images
								var imgurl = attachments[i].split('/');
								var imgsite = "http://"+imgurl[2];
								// uploaded images use thumbs
								var thumbprefix = "";
								if (imgurl[3] == "util") {
									imaxheight = contentWidth * 2;
									thumbprefix = imgsite+"/util/thumb?width="+contentWidth+"&height="+imaxheight+"&url=";
								}
								// print image
								if ($.browser.msie) {
									at["visual"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank"><img src="'+thumbprefix+attachments[i]+'" alt="'+attachments[i]+'" style="width: '+contentWidth+'px;" /></a>';
								} else {
									at["visual"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank"><img src="'+thumbprefix+attachments[i]+'" alt="'+attachments[i]+'" style="max-width: '+contentWidth+'px;" /></a>';
								}
								at["visual"] += "</div>";
							} else {
								at["link"] += '<div class="link">';
								// link to non-image url or mystic file somewhere on internet
								at["link"] += '<a href="'+attachments[i]+'" title="'+attachments[i]+'" target="_blank">'+attachments[i]+'</a>';	
								at["link"] += "</div>";
							}
						} else if (attachments[i].indexOf('<object') == 0) {
							at["visual"] += '<div class="embed">';
							//embeds
							var newWidth = 'width="'+contentWidth+'"';
							var newHeight = 'height="'+contentHeight+'"';
							
							var modifiedAttachment = attachments[i].replace(/width="[0-9]+"/g, newWidth).replace(/height="[0-9]+"/g, newHeight);
							at["visual"] += modifiedAttachment;
							at["visual"] += "</div>";
						} else {
							at["other"] += '<div class="other">';
							// other? what could it be? lets not make it a link before we see these somewhere
							at["other"] += attachments[i];
							at["other"] += '</div>';
						}
					}
				}
				*/
				// NEW attachment-handling
				var allAttachments = '';
				var attachments = '';
				var attLinkHtml = '';
				var attVisualHtml = '';
				var gotVisuals = false;
				if ($root.find('.addspark .toolbar .linkList').html() != '') {
					$root.find('.addspark .toolbar .linkList li').each(function(){
						if ($(this).data('url').indexOf('file:') == -1) {
							allAttachments += $(this).data('url')+'\n';
						}
						else {
							allAttachments += 'file:'+$(this).find('.attachmentUp').html()+'\n';
						}
					});
				}				
				if (allAttachments != '') {
                    if (contentWidth == undefined) var contentWidth = 440; // spark is a bit smaller in preview-mode so we need to keep the width in check..
                    if (contentHeight == undefined) {		
                            var contentHeight = Math.ceil(contentWidth - (contentWidth / 4));
                    }
                    attachments = allAttachments.split('\n');
                    $.each(attachments, function(i){
                    	var attContent = '';
                    	attContent = attachments[i];
                    	if (attContent != '') {
                    		// user attached a link
                    		if (attContent.indexOf('url:') == 0) {
                    				var attUrl = attContent.split('url:')[1];
        							var atlen = attUrl.split('\n')[0].length;
        							var extst = atlen-4;
        							// check if the link is to an image..
        							if (attUrl.substring(extst, atlen) == '.gif' || 
        									attUrl.substring(extst, atlen) == '.GIF' ||
        									attUrl.substring(extst, atlen) == '.jpg' ||
        									attUrl.substring(extst, atlen) == '.JPG' ||
        									attUrl.substring(extst, atlen) == 'jpeg' ||
        									attUrl.substring(extst, atlen) == 'JPEG' ||
        									attUrl.substring(extst, atlen) == '.png' ||
        									attUrl.substring(extst, atlen) == '.PNG') {
        								attVisualHtml += '<div class="image">';
        								//var thumbUrl = 'http://'+fileUrl.split('/')[2]+'/util/thumb?width='+contentWidth+'&height='+contentHeight+'&url='+fileUrl;
        								if ($.browser.msie) {
        									attVisualHtml += '<a href="'+attUrl+'" title="'+attUrl+'" target="_blank"><img src="'+attUrl+'" alt="'+attUrl+'" style="width: '+contentWidth+'px;" /></a>';					
        								} else {
        									attVisualHtml += '<a href="'+attUrl+'" target="_blank"><img src="'+attUrl+'" alt="'+attUrl+'" style="max-width: '+contentWidth+'px;" /></a>';					
        								}        								
        								attVisualHtml += '</div>';
        							}
        							else {
                            			attLinkHtml += '<div class="link">';
                            			attLinkHtml += '<a href="'+attUrl+'" title="'+attUrl+'" target="_blank">'+attUrl+'</a>';
                            			attLinkHtml += '</div>';
        							}
                        			// user added a youtube-link, so we have visual content...
                        			if (attUrl.indexOf('youtube.com') >= 0) {
                        				gotVisuals = true;
                        			}
                    		}
                    		if (attContent.indexOf('embed:') == 0) {
                    			var attEmbed = attContent.split('embed:')[1];
								if (attEmbed.indexOf('iframe') != -1 || attEmbed.indexOf('IFRAME') != -1) {
									var isrc = attEmbed.split('src="')[1].split('"')[0];
									attVisualHtml += '<div class="embed">';
									attVisualHtml += '<a href="' + isrc + '" target="_blank">' + isrc + '</a>';
									attVisualHtml += '</div>';
								} else {
	        						var newWidth = 'width="'+contentWidth+'"';
	        						var newHeight = 'height="'+contentHeight+'"';
	        						var newEmbed = attEmbed.replace(/width="[0-9]+"/g, newWidth).replace(/height="[0-9]+"/g, newHeight);
	        						newEmbed = newEmbed.replace('<embed ', '<embed wmode="opaque" ');
	        						newEmbed = newEmbed.replace('</object>', '<param name="wmode" value="opaque" /></object>');
	                    			attVisualHtml += '<div class="embed">';
	                    			attVisualHtml += newEmbed;
	                    			attVisualHtml += '</div>';
								}

                    			// embed is visual content, so..
                    			gotVisuals = true;
                    		}
                    		if (attContent.indexOf('file:') == 0) {
                    			var attUrl = attContent.split('file:')[1];
    							var atlen = attUrl.split('\n')[0].length;
    							var extst = atlen-4;    							
    							if (attUrl.substring(extst, atlen) == '.gif' || 
    									attUrl.substring(extst, atlen) == '.GIF' ||
    									attUrl.substring(extst, atlen) == '.jpg' ||
    									attUrl.substring(extst, atlen) == '.JPG' ||
    									attUrl.substring(extst, atlen) == 'jpeg' ||
    									attUrl.substring(extst, atlen) == 'JPEG' ||
    									attUrl.substring(extst, atlen) == '.png' ||
    									attUrl.substring(extst, atlen) == '.PNG') {
    								attVisualHtml += '<div class="image">';
    								if($.browser.msie) {
    									attVisualHtml += '<a href="'+attUrl+'" target="_blank"><img src="'+attUrl+'" alt="'+attUrl+'" style="width: '+contentWidth+'px;" /></a>';
    								}
    								else {
    									attVisualHtml += '<a href="'+attUrl+'" target="_blank"><img src="'+attUrl+'" alt="'+attUrl+'"  style="max-width: '+contentWidth+'px;" /></a>';
    								}        								
    								attVisualHtml += '</div>';
    							}
    							else {
                        			attLinkHtml += '<div class="link">';
                        			attLinkHtml += '<a href="'+attUrl+'" title="'+attUrl+'" target="_blank">'+attUrl+'</a>';
                        			attLinkHtml += '</div>';
    							}
                    		}
                    	}
                    });
				}
				$root.find('.content').busy(true);
				var curTime = new Date();
				var titCreated = createTimetag(curTime);
				var uNick = '';
				var uAvatar = '';
				$.ajax({
					type: "POST",
					url: "api/profile/user",
					data: "",
					dataType: "json",
					success: function(data) {
						uNick = data.response.list[0].nickname;
						uAvatar = data.response.list[0].avatar.fullUrl;
					}
				});
				setTimeout(function() {
					html += '<h3>'+$.i18n.prop('spark.create.preview')+'</h3>';				
					html += '<div class="spark">';
					html += '<div class="avatar">';
					html += '<a href="#"><img src="'+uAvatar+'?wh=35x35" /></a>';		
					html += '</div>';
					html += '<div class="spContainer">';
					html += '<div class="titlebar">';				
					html += '<a href="#" class="sparkRemovePreview" title="'+$.i18n.prop('sparks.deletespark')+'"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deletespark')+'"/></a>';
					html += '<a href="#" class="sparkEditPreview" title="'+$.i18n.prop('sparks.editspark')+'"><img src="static/css/img/edit_icon1.png" alt="'+$.i18n.prop('sparks.editspark')+'" /></a>';				
					html += '<a href="#">'+uNick+'</a>';					
					html += '<span>'+titCreated+'</span>';					
					html += '</div>';
					
					// spark title
					var tit = decodeURIComponent(postTitle);
					html += '<h4>'+tit+'</h4>';
					// images and embeds 'paged'
					/*
					if (at["visual"] != "" && at["visual"] != undefined) {
						html += '<div class="imageWindowControls"></div>';
						html += '<div class="imageWindow" style="display: none;">';
						html += at["visual"];
						html += '</div>';
					}
					else {
						html += '<div class="imageWindowControls"></div>';
						html += '<div class="imageWindow" style="display: none;">';
						html += '</div>';
					}
					*/				
					if (attVisualHtml != '') {
						html += '<div class="imageWindowControls"></div>';
						html += '<div class="imageWindow" style="display: none;">';
						//html += at["visual"];
						html += attVisualHtml;
						html += '</div>';
					}
					else {
						html += '<div class="imageWindowControls"></div>';
						html += '<div class="imageWindow" style="display: none;">';
						html += '</div>';
					}
					html += '<div class="sparkMessage">';
					html += decodeURIComponent(mainContent);				
					html += '</div>'; // sparkMessage
	
					// non-image and url attachments
					/*
					if (fullContent[1] != "") {
						html += '<div class="sparkAttachments">';
						// links (uploaded non-image files and urls)
						if (at["link"] != "" && at["link"] != undefined) {
							html += at["link"];
						}
						// other links?
						if (at["other"] != "" && at["other"] != undefined) {
							html += at["other"];
						}
						html += '</div>'; // sparkAttachments
					}
					*/
					if (attLinkHtml != '') {
						html += '<div class="sparkAttachments">';
						html += attLinkHtml;
						html += '</div>';
					}
					html += '<div class="clear"></div>';
					html += '<div class="sparkId" style="display: none"></div>';
					html += '<div class="sparkActions">';
					html += '<span class="actItem"><a class="sparkLikePreview" href="#" title="'+$.i18n.prop('sparks.likethis')+'"><span>'+$.i18n.prop('sparks.like')+'</span></a> (<span class="likeCount">0</span>)</span>';
					html += '<span class="actItem"><a class="sparkCommentsComments" href="#" title="'+$.i18n.prop('sparks.comments')+'"><span>'+$.i18n.prop('sparks.comments')+'</span></a> (<span class="commentCount">0</span>)</span>';
					html += '</div>';
					html += '<div class="clear"></div>';
					html += '</div>';
					html += '<div class="toolbar">';
					html += '<button class="submit" type="button"><span>'+$.i18n.prop('spark.create.send')+'</span></button>';
					html += '<button class="txtBtn preview edit" type="button"><span>'+$.i18n.prop('spark.create.editspark')+'</span></button>';
					html += '</div>';				
					html += '</div>';
					html += '</div>';
					$root.find('.addspark .create').slideUp('fast');
					$root.find('.content').busy(false);
					$root.find('.addspark').css('padding-bottom', '50px');
					$root.find('.addspark .sparkPreview').html(html).slideDown('fast');
					$root.find('.addspark .sparkPreview .spark').css('padding', '0');
					
					$root.find('.sparkPreview .sparkAttachments div').each(function() {
						if ($(this).find('a').attr('href').indexOf('youtube.com') >= 0) {
							var tubeAtt = $(this).find('a').html();
							// if($root.find('.editPreview .sparkAttachments
							// .link a[href='+tubeAtt+']')) {
							var trimTube = '';								
							if (tubeAtt.indexOf('&') >= 0) {
								trimTube = tubeAtt.split('&')[0];
							}
							else {
								trimTube = tubeAtt;
							}
							var tubeElement = trimTube.split('=')[1];
							var tubeHtml = '<div class="embed">';
							tubeHtml += '<div id="'+tubeElement+'"></div>';
							tubeHtml += "</div>";
							$root.find('.imageWindow').append(tubeHtml);
							createTube(trimTube, tubeElement, contentHeight, contentWidth, 'preview');
							$root.find('.sparkPreview .sparkAttachments .link a[href='+tubeAtt.replace('&amp;', '&')+']').parent().remove();
							// }
						}
					});
					
					setTimeout(function(){					
						var sparks = $('.pagePart.addspark .sparkPreview .spark');
						$.each(sparks, function() {
							var sparkId = $(this).find('.sparkId').html();
							var visuCount = parseInt( $(this).find('.imageWindow > div').length );
							if (visuCount == 0) return;
							
							visPager = "";
							for (i=0;i<visuCount;i++) {
								var p = i+1;
								visPager += '<a href="#v_'+i+'"';
								if (i == 0) { visPager += ' class="s"'; }
								visPager += '>'+p+'</a>';					
							}
							if (visuCount > 1) {
								$(this).find('.imageWindowControls').html(visPager);
							} else if (visuCount == 1) {
								$(this).find('.imageWindow').css('border-top', 'none');
							}
		
							$(this).find('.imageWindow > div').hide();
							$(this).find('.imageWindow').show();
							$(this).find('.imageWindow div:eq(0)').show();
						});
					},1000);
					$root.find('.addspark .sparkPreview .spark .toolbar button').css('margin-top', '2px');
					$root.find('.addspark .preview.edit').live('click', function() {
						$root.find('.addspark').css('padding', '1em');
						$root.find('.addspark .sparkPreview').slideUp('fast');
						$root.find('.addspark .create').slideDown('fast');
						$root.find('.addspark .sparkPreview').html('');
						$('html, body').animate({scrollTop:0}, 'fast');
						$root.find('div.addspark input#newLink').val($.i18n.prop('spark.create.attachment'));
						$root.find('div.addspark input#newLink').addClass('idle');
						$root.find('div.addspark input#newLink').focus(function() {
							$(this).val('');
							$(this).removeClass('idle');
						});
					})
					$root.find('.addspark .sparkPreview button.submit').live('click', function() {
						sendSpark($root, "send");
						$root.find('.addspark').css('padding', '1em');
						$root.find('.addspark .sparkPreview').slideUp('fast');
						$root.find('.addspark .sparkPreview').html('');
						return false;
					});
					$root.find('.addspark .sparkPreview a').live('click', function(e) {
						e.preventDefault();
					});
				}, 800);				
				
			}
 		}
		

		/****************/
		/* switch views */
		/****************/
		function contentPage($root, page, userID){

			switch (page) {
				case "home":
					// hide support info
					$(".support").hide();
					// home page
					$root.find('.content .pagePart').hide();
					$root.find('.tourNaviContainer').html('');
					$root.find('.content .homePage').show();
					// .loginBox is only on login.jsp, wont be visible in sparkbox.jsp
					$root.find('.content .pagePart.loginBox').show();
					$root.find('.content .pagePart.resetPwdBox').show();
					
					$root.find('.content .pagePart.openSpark').show();
					
					// LIST DOMAINS THAT THE CURRENT USER IS A MEMBER OF
					if (options.user != undefined) {
						$root.busy(false);
						//$root.busy(true, { message: ''+$.i18n.prop('sparkbox.message.mainloading')+''});
						var html = '';
						var userGroupCount = 0;
						
						$.ajax({
							type: "POST",
							url: "api/site/list",
							data: "",
							dataType: 'json',
							success: function(data){
								userGroupCount = data.response.count;
								if (data.response.count > 0) {
									$.each(data.response.list, function(i){
										html += '<li><a class="coins_' + this["@useCoins"] + '" href="#userSite_' + this["@id"] + '">' + this["@id"] + ' <img class="coins_' + this["@useCoins"] + '" src=""/></a></li>';
									});
								}
								if (data.response.count == 1) {
									$root.find('.currDomainList').hide();
									$root.find('.currLangList').css('margin-top', '25px');
								}
								
								// NOW WITHOUT TIMEOUTS!
								if (userGroupCount > 1) {
									$root.find('.currDomainList .userDomainToggle').attr('src', './static/css/img/icon_down.png');
									$root.find('.currDomainList .userDomainList ul').html(html);
									$root.find('.currDomainList .userCurrDomain').html(options.user.site);
									$root.busy(false);
									$root.find('img.coins_undefined').attr("src", "./static/css/img/sblogosmall.png");
									$root.find('img.coins_true').attr("src", "./static/css/img/aslogosmall.png");
									$root.find('a[href*=#userSite]').live('click', function(){
										var siteId = $(this).attr('href').split('_')[1];
										// SITETYPES: undefined == sparkbox, true == adspark
										var siteType = $(this).attr('class').split('_')[1];
										$.ajax({
											type: "POST",
											url: "api/site/switch",
											data: "site=" + siteId,
											dataType: 'json',
											success: function(data){
												if (document.location.href.indexOf('localhost') >= 0) {
													if (siteType == 'undefined') {
														document.location.href = './sparkbox';
													}
													if (siteType == 'true') {
														document.location.href = './adspark';
													}
												}
												else {
													if (siteType == 'undefined') {
														document.location.href = 'http://' + siteId + '.flockler.com/util/resumeSession?session=' + $.cookie('login') + '&site=' + siteId;
													}
													if (siteType == 'true') {
														document.location.href = 'http://' + siteId + '.adspark.biz/util/resumeSession?session=' + $.cookie('login') + '&site=' + siteId;
													}
												}
											}
										});
										//$root.busy(false);
										return false;
									});
									
									$root.find('.currDomainList .userCurrDomain').live('click', function(){
										if ($(this).hasClass('active')) {
											$root.find('.currDomainList .userDomainList').slideUp('fast');
											$root.find('.currDomainList .userDomainToggle').attr('src', './static/css/img/icon_down.png');
											$(this).removeClass('active');
										}
										else {
											$root.find('.currDomainList .userDomainList').slideDown('fast');
											$root.find('.currDomainList .userDomainToggle').attr('src', './static/css/img/icon_up.png');
											$(this).addClass('active');
										}
									});
									$root.find('.currDomainList .userDomainList a[href=#userSite_' + options.user.site + ']').addClass('active');
								//$root.busy(false);
								}
								
								$root.busy(false);
							}
						});						
						
							
					}

					// LIST LANGUAGES
					if (options.user != undefined) {
						switch (options.user.lang) {
							case "en":
								$root.find('.currLangList .userCurrLang').html(''+$.i18n.prop('main.navi.langselect.en')+'');
								break;
							case "fi":
								$root.find('.currLangList .userCurrLang').html(''+$.i18n.prop('main.navi.langselect.fi')+'');
								break;
							case "de":
								$root.find('.currLangList .userCurrLang').html(''+$.i18n.prop('main.navi.langselect.de')+'');
								break;
							case "se":
								$root.find('.currLangList .userCurrLang').html(''+$.i18n.prop('main.navi.langselect.se')+'');
						}
						$root.find('.currLangList .userLangToggle').attr('src', './static/css/img/icon_down.png');
						$root.find('.currLangList .userCurrLang').live('click', function() {
							if ($(this).hasClass('active')) {											
								$root.find('.currLangList .userLangList').slideUp('fast');
								$root.find('.currLangList .userLangToggle').attr('src', './static/css/img/icon_down.png');
								$(this).removeClass('active');
							}
							else {
								var langHtml = '';
								langHtml += '<li><a href="#lang_en">'+$.i18n.prop('main.navi.langselect.en')+'</a></li>';
								langHtml += '<li><a href="#lang_fi">'+$.i18n.prop('main.navi.langselect.fi')+'</a></li>';
								langHtml += '<li><a href="#lang_de">'+$.i18n.prop('main.navi.langselect.de')+'</a></li>';
								//langHtml += '<li><a href="#lang_se">'+$.i18n.prop('main.navi.langselect.se')+'</a></li>';
								$root.find('.currLangList .userLangList ul').html(langHtml);							
								$root.find('.currLangList .userLangList').slideDown('fast');
								$root.find('.currLangList .userLangToggle').attr('src', './static/css/img/icon_up.png');
								$root.find('.currLangList .userLangList ul li a[href=#lang_'+options.user.lang+']').addClass('active');
								$(this).addClass('active');
							}
						});					
						$root.find('a[href*=#lang]').live('click', function() {
							var selectedLang = $(this).attr('href').split('_')[1];
							var dataString = "language="+selectedLang;
							$root.find('.currLangList .userLangList').slideUp('fast');
							$root.busy(true, { message: ''+$.i18n.prop('message.langselect.changing')+''});
							$.ajax({
								type: "POST",
								url: "api/profile/edit",
								data: dataString,
								dataType: "json",
								success: function(data) {
									setTimeout(function() {
										document.location.href = './sparkbox';										
									}, 1000);
								}
							});
							return false;
						});
					}					
					
					msgat = document.location.href.split("msg=")[1];
					msg = "";
					if (msgat == "newAdmin") {
						msg += "<h3>"+$.i18n.prop('sparkbox.message.newsuperadmin.congratulations')+"</h3>";
						msg += "<p>"+$.i18n.prop('sparkbox.message.newsuperadmin.welcometext')+"</p>";
						msg += "<p>"+$.i18n.prop('sparkbox.message.newsuperadmin.regards')+"<br/>"+$.i18n.prop('sparkbox.message.newsuperadmin.sparkboxesteam')+"</p>";
						$('#login_login').prepend(msg);
					}
					break;
				case "groups":
					// hide support info
					$(".support").hide();
					// group listings
					$("#userProfile, #groupProfile").slideUp();			
					$root.find('.tourNaviContainer').html('');
					$root.find('.content .pagePart').hide();
					$root.find('.content .pagePart.groups.list h1').html($.i18n.prop('sparkbox.main.navi.sparkboxes'));
					/* list groups at start (new by default) */
					listGroups();
					$root.find('.content .groups.list').show();
					$root.find('.listgroups ul a').click(function() {
						$root.find('#groups_new, #groups_hot, #groups_popular').html('');
						var typ = $(this).attr('href').split('_')[1];
						listGroups(typ);
						return false;
					});
					break;
				case "stats":
					$root.find('.content .pagePart').hide();
					$root.find('#groupProfile').hide();
					$("#userProfile").slideUp();
					$root.find('ul#usersGroups li a.selected').removeClass('selected');

					$root.find('.content .pagePart.stats h1').html($.i18n.prop('main.navi.stats'));

					var startYear = 2010;
					var currYear = new Date().getFullYear();
					var currMonth = new Date().getMonth() + 1;
					
					dateHtml = '<select name="statsMonth">';
					for (i=1;i<=12;i++) {
						if (currMonth == i) {
							dateHtml += '<option value="'+i+'" SELECTED="SELECTED">'+i+'</option>';						
						} else {
							dateHtml += '<option value="'+i+'">'+i+'</option>';						
						}
						
					}
					dateHtml += '</select>';
					dateHtml += '<select name="statsYear">';
					if (currYear > startYear) {
						for (y=startYear;y<=currYear;y++) {
							if (y == currYear) {
								dateHtml += '<option value="'+y+'" SELECTED="SELECTED">'+y+'</option>';																				
							} else {
								dateHtml += '<option value="'+y+'">'+y+'</option>';																				
							}
						}
					} else {
						dateHtml += '<option value="'+startYear+'">'+startYear+'</option>';						
					}
					dateHtml += '</select>';
					dateHtml += '<input type="button" value="OK" />';
					
					$root.find('.content .pagePart.stats #statsDate').html(dateHtml);
					
					$root.find('#statsDate input[type=button]').click(function() {
						var statM = $('select[name=statsMonth]').val();
						var statY = $('select[name=statsYear]').val();
						var statSite = options.user.site;
						
						mediaHtml = "<h4>"+$.i18n.prop('mydomain.statsmedia')+"</h4>";
						bannerHtml = "<h4>"+$.i18n.prop('mydomain.statsbanners')+"</h4>";
						widgetHtml = "<h4>"+$.i18n.prop('mydomain.statswidgets')+"</h4>";
						
						var pageTitle = $.i18n.prop('main.navi.stats')+" "+document.location.href.split('/')[2]+" "+statM+"/"+statY;
						$root.find('.content .pagePart.stats h1').html(pageTitle);
						
						$root.find('.content .pagePart.stats #mediaStats').html($.i18n.prop('mydomain.stats.generating'));
						$root.find('.content .pagePart.stats #bannerStats').html($.i18n.prop('mydomain.stats.generating'));
						$root.find('.content .pagePart.stats #widgetStats').html($.i18n.prop('mydomain.stats.generating'));
						
						// media stats
						$.ajax({
							type: "GET",
							url: "api/stats/media",
							data: "domain=flockler&site="+statSite+"&year="+statY+"&month="+statM+"&sidx=clicks&sord=desc",
							dataType: "json",
							success: function(data) {
								if (data.response.count == 0) {
									mediaHtml += $.i18n.prop('mydomain.stats.nostats');
								} else {
									mediaList = data.response.list;
									mediaHtml += '<table>';
									mediaHtml += '<tr class="title">';
									mediaHtml += '<td class="mediatitle">'+$.i18n.prop('mydomain.stats.media.title')+'</td>';
									mediaHtml += '<td class="mediafrom">'+$.i18n.prop('mydomain.stats.media.from.reporter')+'</td>';
									mediaHtml += '<td class="mediagroup">'+$.i18n.prop('mydomain.stats.media.group')+'</td>';
									mediaHtml += '<td class="mediaclicks">'+$.i18n.prop('mydomain.stats.media.clicks')+'</td>';
									mediaHtml += '<td class="mediaviews">'+$.i18n.prop('mydomain.stats.media.views')+'</td>';
									mediaHtml += '</tr>';
									$.each(mediaList, function(i) {
										mediaTitle = mediaList[i].title;
										mediaFrom = mediaList[i].user;
										mediaGroup = mediaList[i].group;
										mediaClicks = mediaList[i].clicks;
										mediaViews = mediaList[i].views;
										
										mediaHtml += '<tr>';
										mediaHtml += '<td class="mediatitle">';
										mediaHtml += mediaTitle;
										mediaHtml += '</td>';
										mediaHtml += '<td class="mediafrom">';
										mediaHtml += mediaFrom;
										mediaHtml += '</td>';
										mediaHtml += '<td class="mediagroup">';
										mediaHtml += mediaGroup;
										mediaHtml += '</td>';
										mediaHtml += '<td class="mediaclicks">';
										if (mediaClicks != undefined) {
											mediaHtml += mediaClicks;
										}
										mediaHtml += '</td>';
										mediaHtml += '<td class="mediaviews">';
										if (mediaViews != undefined) {
											mediaHtml += mediaViews;
										}
										mediaHtml += '</td>';
										mediaHtml += '</tr>';
									});
									mediaHtml += '</table>';
									
								}
								
								$root.find('.content .pagePart.stats #mediaStats').html(mediaHtml);
							}
						});
						// banner stats
						$.ajax({
							type: "GET",
							url: "api/stats/banner",
							data: "domain=flockler&site="+statSite+"&year="+statY+"&month="+statM,
							dataType: "json",
							success: function(data) {
								if (data.response.count == 0) {
									bannerHtml += $.i18n.prop('mydomain.stats.nostats');
								}
								else {
									bannerList = data.response.list;
									bannerHtml += '<table>';
									bannerHtml += '<tr class="title">';
									bannerHtml += '<td>' + $.i18n.prop('mydomain.stats.banner.banner') + '</td>';
									bannerHtml += '<td class="bannerloads">' + $.i18n.prop('mydomain.stats.banner.loads') + '</td>';
									bannerHtml += '<td class="bannerclicks">' + $.i18n.prop('mydomain.stats.banner.clicks') + '</td>';
									bannerHtml += '</tr>';
									$.each(bannerList, function(i){
										bannerHtml += '<tr>';
										bannerHtml += '<td>' + bannerList[i].banner + '</td>';
										bannerHtml += '<td class="bannerloads">' + bannerList[i].loads + '</td>';
										bannerHtml += '<td class="bannerclicks">' + bannerList[i].clicks + '</td>';
										bannerHtml += '</tr>';
										
									});
									bannerHtml += '</table>';
								}
								$root.find('.content .pagePart.stats #bannerStats').html(bannerHtml);
							}
						});
						// widget stats
						$.ajax({
							type: "GET",
							url: "api/stats/widget",
							data: "domain=flockler&site="+statSite+"&year="+statY+"&month="+statM,
							dataType: "json",
							success: function(data) {
								if (data.response.count == 0) {
									widgetHtml += $.i18n.prop('mydomain.stats.nostats');
								}
								else {
									widgetList = data.response.list;
									widgetHtml += '<table>';
									widgetHtml += '<tr class="title">';
									widgetHtml += '<td>' + $.i18n.prop('mydomain.stats.widget.widget') + '</td>';
									widgetHtml += '<td class="widgetloads">' + $.i18n.prop('mydomain.stats.widget.loads') + '</td>';
									//widgetHtml += '<td class="widgetmsgs">'+$.i18n.prop('mydomain.stats.widget.sparks')+'</td>';
									widgetHtml += '</tr>';
									$.each(widgetList, function(i){
										widgetHtml += '<tr>';
										widgetHtml += '<td>' + widgetList[i].widget + '</td>';
										widgetHtml += '<td class="widgetloads">' + widgetList[i].loads + '</td>';
										//widgetHtml += '<td class="widgetmsgs">'+widgetList[i].sparks+'</td>';
										widgetHtml += '</tr>';
										
									});
									widgetHtml += '</table>';
								}
								$root.find('.content .pagePart.stats #widgetStats').html(widgetHtml);
							}
						});
						
					});

					//$root.find('.content .pagePart.stats #bannerStats').html(bannerHtml);
					//$root.find('.content .pagePart.stats #widgetStats').html(widgetHtml);

									
					$root.find('.content .pagePart.stats').show();
					break;					
				case "domain":					
					// hide support info
					$(".support").hide();
					$root.find('.content .pagePart').hide();
					$root.find('.tourNaviContainer').html('');
					$root.find('.content .pagePart.domainPage').show();

					showContactRequests();

					// <MANUAL>
					$root.find('.pagePart.domainPage a[href=#manual]').live('click', function() {
						var manualsHtmlEn = '';
						var manualsHtmlFi = '';
						manualsHtmlEn += '<a href="static/manuals/Sparkboxes_user_manual_en.pdf">Sparkbox user-manual</a>';
						manualsHtmlFi += '<a href="static/manuals/Sparkboxes_user_manual_fi.pdf">Sparkbox k&auml;ytt&ouml;ohjeet</a>';
						$root.find('.userManuals .manual.en').html(manualsHtmlEn);
						$root.find('.userManuals .manual.fi').html(manualsHtmlFi);
						$('.gspark .dialog').html('');
						setTimeout(function() {
							function getFileInfo(filePath, lang)
							{
								if (typeof XMLHttpRequest == "undefined") {
									  XMLHttpRequest = function () {
									    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
									      catch (e) {}
									    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
									      catch (e) {}
									    try { return new ActiveXObject("Msxml2.XMLHTTP"); }
									      catch (e) {}
									    throw new Error("No XMLHttpRequest support..");
									  }
								}
								var http = new XMLHttpRequest();
								http.open('HEAD',filePath,false);
								http.send(null);
								var modDate = '';
								var fileSize = '';
								if (http.status != 200) {
									//return undefined;
									return '';
								}
								else {
									modDate = new Date(http.getResponseHeader('Last-modified'));
									fileSize = http.getResponseHeader('Content-Length');
									fileSize =  fileSize/1024/1024;
									fileSize = Math.round(fileSize*100)/100;
									var d = modDate.getDate();
									var m = modDate.getMonth() + 1;
									var y = modDate.getFullYear();
									var dateString = ''+d+'.'+m+'.'+y;								  
									if (lang == 'en') {
										return '<small>(pdf, '+fileSize+' mb) (updated: '+dateString+')</small>';
									}
									if (lang == 'fi') {
										return '<small>(pdf, '+fileSize+' mb) (p&auml;ivitetty: '+dateString+')</small>';
									}
								}
							}
							var filePathEn = 'static/manuals/Sparkboxes_user_manual_en.pdf';
							var filePathFi = 'static/manuals/Sparkboxes_user_manual_fi.pdf';
							$root.find('.userManuals .fileInfo.en').html(getFileInfo(filePathEn, 'en'));
							$root.find('.userManuals .fileInfo.fi').html(getFileInfo(filePathFi, 'fi'));
							var html = '';
							html = $root.find('.userManuals').html();						
							$('.gspark .dialog').html(html);
							$(".dialog").dialog( {
								modal:true,
								resizable:false,
								draggable:false,
								width:450,
			 					height:300,					
								title:''+$.i18n.prop('sparkbox.mydomain.manuals.manualtitle')+'',					
								dialogClass:'gspark',
								buttons: {						
									'Close' : function () {
										$(this).dialog('close');
									}
								}						
							});
							$('.ui-dialog-buttonpane :button').each(function() {
								if ($(this).text() == 'Close') {
									$(this).text($.i18n.prop('mydomain.manuals.buttonclose'));
								}
							});
							return false;
						},1000);
					});
					$root.find('.gspark .dialog .manual a').live('click', function() {
						return false;
					});
					// </MANUAL>
					$.ajax({
						type: "POST",
						url: "api/site/get",
						data: "",
						dataType: 'json',
						success: function(data) {
							var domainName = data.response.list[0]["@id"];
							$root.find('#subscribedDomain').html(domainName+'.flockler.com');
							
							var siteCompany = data.response.list[0].company;
							if (siteCompany == undefined) siteCompany = options.user.site;
							$root.find('#siteSettingsCompany').val(siteCompany);
							var siteLang = data.response.list[0].language;
							if (siteLang == undefined) siteLang = "fi";
							$root.find('#siteLanguage').val(siteLang);
							var siteEmail = data.response.list[0].contactEmail;
							if (siteEmail == undefined) siteEmail = "@";
							$root.find('#siteSettingsEmail').val(siteEmail);
							
							$root.find('.domainPage').busy(false);
						}
					});
					nocache = Math.random();
					$.ajax({
						type: "POST",
						url: "api/site/listAdmins",
						data: "nocache="+nocache,
						dataType: 'json',
						success: function(data) {
							//console.log(data);
							var adminCount = data.response.count;
							$('#domainAdmins .countBox').html(adminCount);
							var html = "";
							if (adminCount > 0) {
								for (var i=0; i<adminCount; i++) {
									var userId = data.response.list[i].id;
									var userNick = data.response.list[i].nickname;								
									var userCity = data.response.list[i].location;
									var userCountry = data.response.list[i].country;
									var userName = data.response.list[i].name;								
									var userDescr = data.response.list[i].description;
									var userEmail = data.response.list[i].email;
									html += '<span id="adminUser_'+userId+'" class="user adminUser_'+userId+'">';
									//html += '<a href="#users_'+data.response.list[i].id+'" title="'+data.response.list[i].nickname+'">';
									if (data.response.list[i].avatar.fullUrl == '') {
										html += '<img src="http://' + document.location.href.split("/")[2] + '/static/css/img/empty-profile-35x35.png" width="32" height="32" alt="'+userNick+'" />';						
									} else {
										html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=32x32" alt="'+userNick+'" />';						
									}
									//html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=32x32" alt="'+userNick+'" />';							
									html += '<div class="userinfo">';
									html += '<a href="#" class="useractions">'+$.i18n.prop('mydomain.actions')+'</a>';
									html += '<span class="usernick">'+userNick+'</span>';
									html += ' <a href="#" class="showUserDescr">i</a>';
									html += '<br/>';
									if (userCity != undefined && userCity != "") {
										html += userCity;								
									}
									if (userCity != undefined && userCity != "" && userCountry != undefined && userCountry != "") {
										html += ", ";
									}
									if (userCountry != undefined && userCountry != "") {
										html += userCountry;								
									}
									html += '</div>';
									html += '<div class="userDescr" style="display: none;">';
									html += '<b>'+$.i18n.prop('login.email.label')+'</b>: <a href="mailto:' + userEmail +'">'+userEmail+'</a><br/>';
									if (userName != undefined) html += '<b>'+$.i18n.prop('mydomain.realname')+'</b> '+userName+'<br/>';
									if (userDescr != undefined) html += '<b>'+$.i18n.prop('mydomain.aboutme')+'</b><br/>'+userDescr;
									html += '</div>';
									html += '<div class="clear"></div>';
									html += '<span class="domainAdminActions" id="adminActions_'+userId+'" style="display:none">';							
									html += '<ul>';
									html += '<li><a href="#users_'+userId+'">'+$.i18n.prop('mydomain.userprofile')+'</a></li>';
									// only superadmin can remove or demote other admins
									if (options.user.isSuperAdmin == "true") {
										html += '<li><a href="#demoteUser_'+userId+'">'+$.i18n.prop('mydomain.demoteadmin')+'</a></li>';
										html += '<li><a href="#removeUser_'+userId+'">'+$.i18n.prop('mydomain.removeuser')+'</a></li>';
									}
									html += '</ul>';
									html += '</span>';
									html += '</span>';
									$('#domainAdmins #domainAdminList').html(html);
								}
								$('#domainAdmins #domainAdminList .user .useractions').toggle(
										function() {
											$('#domainAdmins #domainAdminList .domainAdminActions').hide();
											$(this).parent().parent().find('.domainAdminActions').show();
											$(this).addClass("active");								
										},
										function() {
											$(this).parent().parent().find('.domainAdminActions').hide();						
											$(this).removeClass("active");								
								});
								$('#domainAdmins #domainAdminList .user .showUserDescr').toggle(
									function() {
										$(this).parent().parent().find('.userDescr').show();
									}, function() {
										$(this).parent().parent().find('.userDescr').hide();
										
									}
								);							
							}
						}
					});					
					listMembers(null, options.user.isAdmin, options.user.isSuperAdmin);
					$.ajax({
						type: "POST",
						url: "api/sparkbox/list",
						data: "nocache="+nocache,
						dataType: 'json',
						success: function(data) {
							//console.log(data);
							var groupCount = data.response.count;
							$('#domainGroups .countBox').html(groupCount);
							var html = "";
							for (i=0; i<groupCount; i++) {
								var groupId = data.response.list[i].id;
								html += '<div class="group group_'+groupId+'">';
								html += '<a href="#listGroup_'+groupId+'" title="'+data.response.list[i].name+'">';
								html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=32x32" alt="'+data.response.list[i].name+'" />';
								html += '</a>';
								html += '<div class="groupinfo">';
								html += '<a href="#delGroup_'+groupId+'" class="groupdelete">'+$.i18n.prop('mydomain.deletegroup')+'</a>';
								html += '<a href="#listGroup_'+groupId+'" title="'+data.response.list[i].name+'">';
								html += data.response.list[i].name;
								html += '</a>';
								var description = data.response.list[i].description;
								if (description != undefined && description != "") {
									html += '<br/>';
									html += description;
								}
								html += '</div>';
								html += '<div class="clear"></div>';
								
								html += '</div>';
							}
							$('#domainGroupList').html(html);
						}
					});
					//listMembers(null, options.user.isAdmin, options.user.isSuperAdmin);
					// LINK FOR INVITING USERS TO DOMAIN ADMIN VIA EMAIL
					if (options.user.isSuperAdmin == "true") {
						$('.pagePart.domainPage #domainInvite').html('<small><a href="#">'+$.i18n.prop('mydomain.inviteadmin.title')+'</a></small>');					
					}
					$('.pagePart.domainPage #domainInvite').live('click', function() {
						$('.gspark .dialog').html('');
						var html = "";
						html += '<div class="fieldList">';
						html += '<fieldset class="input">';
						html += '<label for="shareToEmail">'+$.i18n.prop('mydomain.inviteadmin.email')+'</label>';
						html += '<input class="shareToEmail" name="shareToEmail" type="text" value=""/>';
						html += '<span class="addEmail" name="addEmail" style="display:none">'+$.i18n.prop('mydomain.inviteadmin.add')+'</span>';
						html += '</fieldset>';
						// MAIL-LANGUAGE
						html += '<div class="langSelection">';
						html += '<span><small>'+$.i18n.prop('mydomain.inviteadmin.emaillanguage')+'</small></span>';
						html += '<select name="mailLang">';
						html += '<option value="en">'+$.i18n.prop('user.accountsettings.accountlanguageenglish')+'</option>';
						html += '<option value="fi">'+$.i18n.prop('user.accountsettings.accountlanguagefinnish')+'</option>';
						html += '<option value="de">'+$.i18n.prop('user.accountsettings.accountlanguagegerman')+'</option>';
						//html += '<option value="se">'+$.i18n.prop('user.accountsettings.accountlanguageswedish')+'</option>';
						html +='</select></div>';						
						html += '</div>';
						html += '<span class="noAdded">'+$.i18n.prop('mydomain.inviteadmin.notadded')+'</span>';
				        html += '<span class="addedUserEmails" style="display:none">';
						html += '<h4>'+$.i18n.prop('mydomain.inviteadmin.recipients')+'</h4>';
						html += '<ul class="userEmailList"></ul>';
						html += '</span>';
						$('.gspark .dialog').html(html);
						// USERS LANG AS DEFAULT
						setTimeout(function() {
							$('.langSelection select[name=mailLang] option[value='+options.user.lang+']').attr('selected', true);
						},500);						
		                // <email-validation>
						function validateEmail(emailAddress) {
						    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
						    return pattern.test(emailAddress);
						}
						$('.dialog .shareToEmail').keyup(function(){
							var email = $(this).val();
							if(email != 0 && email != undefined && email != '') {
							    if(validateEmail(email))
							    {
							        $('.dialog .shareToEmail').css('background-color', '#affba9');
							        $('.dialog span.addEmail').show();
							    } else if(!validateEmail(email)){
							        $('.dialog .shareToEmail').css('background-color', '#ffbbbb');
							        $('.dialog span.addEmail').hide();
							    }
							}
							else {
								$('.dialog .shareToEmail').css('background-color', '#fff');
							}
							
						});
						$('.dialog span.addEmail').click(function(){
							$('.gspark .dialog .shareToEmail').blur();
						});						
						$('.gspark .dialog .shareToEmail').live('blur', function() {
							var emailAddr = "";
							emailAddr = $(this).val();
							if (emailAddr != undefined && emailAddr != '' && validateEmail(emailAddr)) {
								$('.userEmailList').append('<li><b>'+emailAddr+'</b> <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
								$(this).val('');
								$('.dialog .shareToEmail').css('background-color', '#fff');
							    $('.dialog span.addEmail').hide();
								$('.addedUserEmails').show();
								$('.noAdded').hide();
							}
							$('.shareToEmail').focus();
						});
						$('.gspark .dialog .userEmailList .userEmailRemove').live('click', function() {
							$(this).parent('small').parent('li').remove();
							if ($('.addedUserEmails ul li').text() == false) {
								$('.addedUserEmails').hide();
								$('.noAdded').show();
							}
							$('.shareToEmail').focus();
						});
						// </email-validation>
						var inviteString = "";
						var sendMail = false;
						$(".dialog").dialog( {
							modal:true,
							resizable:false,
							draggable:false,
							width:420,
		 					height:500,					
							title:''+$.i18n.prop('mydomain.inviteadmin.title')+'',					
							dialogClass:'gspark',
							buttons: {
								'Send' : function () { 
									$('ul.userEmailList li b').each(function() {
										inviteString += '&email='+$(this).text();
									});
									il = inviteString.length;
									invs = inviteString.substring(1,il);
									if (inviteString != '') {
										sendMail = true;
									}
									else {
										$root.busy(true,{
											message: '<p>'+$.i18n.prop('mydomain.inviteadmin.nomailsadded')+'</p>',
											buttons: [{
												text: ''+$.i18n.prop('message.buttonok')+''
											}]
										});
									}
									// SEND DOMAIN ADMIN INVITATION EMAIL
									if (sendMail == true) {
										var mailLang = $('.langSelection select[name=mailLang] option:selected').val();
										inviteString += '&language='+mailLang;										
										$.ajax({
											type: "POST",
											url: "api/site/inviteAdmin",
											data: invs,
											dataType: 'json',
											success: function(data) {
												//console.log(data);
												$root.busy(true, {
													message: '<p>'+$.i18n.prop('mydomain.inviteadmin.sent')+'</p>',
													buttons: [{
														text: 'Ok'
													}]
												});
											}
										});																		
										$(this).dialog('close');
									}
								},
								'Cancel' : function () { $(this).dialog('close'); }
							}						
						});
						$('.ui-dialog-buttonpane :button').each(function() {
							if ($(this).text() == 'Cancel') {
								$(this).addClass('cancel');
								$(this).text($.i18n.prop('mydomain.inviteadmin.cancel'))
								}
							if ($(this).text() == 'Send') {
								$(this).text($.i18n.prop('mydomain.inviteadmin.send'));
							}
						});
						$('.shareToEmail').focus();
					});					
					break;
				case "faq":
					// hide support info
					$(".support").hide();
					$root.find('.content .pagePart').hide();
					$root.find('.tourNaviContainer').html('');
					$root.find('.content .pagePart.faqPage').show();
					break;
				case "tour":
					// eat cookies at start of tour
					$.cookie('groupCreated', null, tourcookieoptions);
					$.cookie('widgetcodeCreated', null, tourcookieoptions);
					$.cookie('tourType', null, tourcookieoptions);
					
					// show support info
					$(".support").slideDown();
					
					$("#userProfile, #groupProfile").slideUp();
					$("#usersGroups a.selected").removeClass("selected");
					$root.find('.content .pagePart').hide();
					// set tourtype per user role
					var tourType = "";
					if (options.user.isSuperAdmin == "true" && options.user.isAdmin == "true") {
						tourType = "SuperAdmintour";
					} else if (options.user.isSuperAdmin == "false" && options.user.isAdmin == "true") {
						tourType = "DomainAdmintour";
					} else if (options.user.isSuperAdmin == "false" && options.user.isAdmin == "false") {
						tourType = "Usertour";
					}
					$.cookie('tourType', tourType);
					// get tournavi from correct tourPage
					tourNavi = $root.find('.content .pagePart.tourPage.'+tourType+' .tourNaviHTML').html();
					// insert tournavi into container in the left column
					$root.find('.tourNaviContainer').html(tourNavi).slideDown();
					// hide tourparts
					$root.find('.content .pagePart.tourPage.'+tourType+' .tourcontent > div').hide();
					// show first part
					$root.find('.content .pagePart.tourPage.'+tourType+' .tourcontent div:eq(0)').show();					
					$root.find('.content .pagePart.tourPage.'+tourType).show();
					break;
				case "settings":
					// hide support info
					$(".support").hide();
					// user settings page
					$root.find('.content .pagePart').hide();
					$root.find('.tourNaviContainer').html('');
					$root.find('.content .settings.user').show();

					// IE needs halp
					nocache = Math.random();

					// EDIT ANOTHER USER (ADMIN)
					if (userID == undefined) userID = null;
					if (userID != null && userID != options.user.id) {
						var apiUrl = "api/profile/profile";
						var apiData = "nocache="+nocache+"&profile="+userID;
						$(".picture a[href=#uploadAvatar]").show();
					} else {
						// EDIT CURRENT USER (OWN PROFILE)
						var apiUrl = "api/profile/user";
						var apiData = "nocache="+nocache;
						$(".picture a[href=#uploadAvatar]").show();
					}

					$.ajax({
						type: "POST",
						url: apiUrl,
						data: apiData,
						dataType: 'json',
						success: function(data) {
							if (data.response.list[0]) {
								// populate user settings form
								var $f = $root.find('#userSettingsForm');
								$f.find('#euid').val(data.response.list[0].id);
								// profile settings
								$f.find('input[name=name]').val(data.response.list[0].name);
								$f.find('input[name=nickname]').val(data.response.list[0].nickname);
								$f.find('input[name=location]').val(data.response.list[0].location);
								$f.find('select[name=country]').val(data.response.list[0].country);
								if (data.response.list[0].description != undefined) {
									$f.find('textarea[name=description]').html(data.response.list[0].description.replace(/<br\/>/g, '\n'));
								} else {
									$f.find('textarea[name=description]').html('');
								}
								$f.find('.picture img').attr('src', data.response.list[0].avatar.fullUrl+'?wh=150x150');
								// account settings
								$f.find('input[name=email]').val(data.response.list[0].email);
								$f.find('select[name=language]').val(data.response.list[0].language);
								// empty avatar and password inputs and error messages
								$f.find('input[name=avatar]').val('').hide();
								$f.find('input[name*=password]').val('');
								$root.find('.passwordError').html('').hide();
								$root.find('.content').busy(false);
							}
							
						}
					});
					$('html, body').animate({scrollTop:0}, 'fast');
					break;
				case "members":
					/* TODOOO! */
					// maybe not?
					//$root.find('.content').busy(true, { message: 'Loading...'});
					$root.find('.content .pagePart').hide();
					$root.find('.tourNaviContainer').html('');
					// group id
					var params = location.href.split('_');
					var groupId = params[1];
					// get members of group to page
					$root.find('.content .pagePart.members').show();
					//$root.find('.content').busy(false);
					break;
				case "createNewGroup":
					// hide support info
					$(".support").hide();
					// create new group
					$root.find('.tourNaviContainer').html('');
					$root.find('.content').busy(true, { message : ''+$.i18n.prop('message.group.loading')+''});
					$root.find('.content .pagePart').hide();
					$root.find('.content .groups.createNew').show();
					$root.find('.content').busy(false);
					break;
			}
		
		}

		/*****************************/
		/* update group profile card */
		/*****************************/
		function showGroupProfile(groupId){
			$('.gspark').busy(true, { message: '<p>'+$.i18n.prop('message.group.loading')+'</p>' });
			$("#userProfile").slideUp();			
			$(".pendingMemberProfile").hide();			
			$('.tourNaviContainer').html('');
			//$('#groupProfile a[href^=#groupMembers]').attr('href', '#groupMembers_' + groupId);
			nocache = Math.random();
			// get group data
			var dataString = "sparkbox="+groupId+'&nocache='+nocache;
			$.ajax({
				type: "POST",
				url: "api/sparkbox/get",
				data: dataString,
				dataType: 'json',
				success: function(data) {
					$('.gspark').busy(false);
					//console.log(data);
					var groupName = data.response.list[0].name;
					var groupDesc = data.response.list[0].description;
					if (groupDesc == undefined) groupDesc = "";
					var groupWWW = data.response.list[0].homepage;
					if (groupWWW == undefined) groupWWW = "";
					var groupAvatar = data.response.list[0].avatar.fullUrl + "?wh=150x150";
					var memberApproval = data.response.list[0].memberApproval;
					var publicMedia = data.response.list[0].publicMedia;
					
					$('#groupProfile .info h2').text(groupName);
					$('#groupProfile .description.box').html(groupDesc);
					$('#groupProfile .info img').attr('src', groupAvatar);
					$('#groupProfile #groupHomepage').text(groupWWW);

					// permissions
					var groupMember = data.response.list[0].isMember;
					var canInviteProfiles = data.response.list[0].canInviteProfiles;
					var canDeleteSparkbox = data.response.list[0].canDeleteSparkbox;
					var canEditSparkbox = data.response.list[0].canEditSparkbox;
					var canEditWidget = data.response.list[0].canEditWidget;
					var canEmailMembers = data.response.list[0].canEmailMembers;

					// show message to user if NOT member and admin approval needed
					if (groupMember != true && memberApproval == true) {
						$("#privateGroupText").show();
						$(".addspark").hide();
					} else if (groupMember != true) {
						$(".addspark").hide();
					} else {
						$("#privateGroupText").hide();
					}
					
					// update links in group profile
					if (groupMember == 1) {
						$('#groupProfile a[href*=#joinGroup]').hide();
						$('#groupProfile a[href*=#leaveGroup]').attr('href', '#leaveGroup_' + groupId).show();
					} else {
						$('#groupProfile a[href*=#joinGroup]').attr('href', '#joinGroup_' + groupId).show();					
						$('#groupProfile a[href*=#leaveGroup]').hide();						
					}
					if (canInviteProfiles == true) {
						$('#groupProfile a[href*=#inviteToGroup]').attr('href', '#inviteToGroup_' + groupId).show();						
					} else {
						$('#groupProfile a[href*=#inviteToGroup]').hide();						
					}
					if (canEmailMembers == true) {
						$('#groupProfile a[href*=#emailMembers]').attr('href', '#emailMembers_' + groupId).show();
					} else {
						$('#groupProfile a[href*=#emailMembers]').hide();						
					}
					if (canEditSparkbox == true) {
						$('#groupProfile a[href*=#groupSettings]').attr('href', '#groupSettings_' + groupId).show();
						$('#groupProfile a[href*=#invites]').attr('href', '#invites_' + groupId);
						$('#groupProfile a[href*=#invites]').show();
						$('#groupProfile a[href*=#reportedComments]').show();
						// list group admins
						listAdmins(groupId, options.user.isAdmin, options.user.isSuperAdmin, canEditSparkbox);
						// list group members
						listMembers(groupId, options.user.isAdmin, options.user.isSuperAdmin, canEditSparkbox);
						// list pending members in group
						listPending(groupId);
					} else {
						$('#groupProfile a[href*=#groupSettings]').hide();
						$('#groupProfile a[href*=#invites]').hide();
						$('#groupProfile a[href*=#reportedComments]').hide();
						// list group admins
						listAdmins(groupId, options.user.isAdmin, options.user.isSuperAdmin, canEditSparkbox);
						// list group members
						listMembers(groupId, options.user.isAdmin, options.user.isSuperAdmin, canEditSparkbox);
						// hide pending members
						$('.navi.right h1:contains("Pending members")').hide();
					}			
					if (canEditWidget == true) {
						$('#groupProfile a[href*=#createWidget]').attr('href', '#createWidget_' + groupId).show();			
						$('#groupProfile a[href*=#createBanner]').attr('href', '#createBanner_' + groupId).show();			
					} else {
						$('#groupProfile a[href*=#createWidget]').remove();
						$('#groupProfile a[href*=#createBanner]').remove();
					}
				}
			});
			

			/***************/
			/* WIDGET LIST */
			/***************/
			if (options.user.isAdmin == "true" || options.user.isSuperAdmin == "true") {
				$('.widgetsTitle, .widgetsList').show();
				var rndm = Math.random();
				$.ajax({
					type: "GET",
					url: "api/widget/list",
					data: "sparkbox="+groupId+"&banner=false&nocache="+rndm,
					dataType: 'json',
					success: function(data) {
						var widgetCount = data.response.count;
						$('.widgetsTitle b').html(widgetCount);
						
						if (widgetCount > 0) {
							var widgets = '<select name="groupWidgets">';
							widgets += '<option value="">- '+$.i18n.prop('group.widget.selecttitle')+' -</option>';
							$.each(data.response.list, function(i) {
								widgets += '<option value="'+this.id+'">'+this.name+'</option>';
							});
							widgets += '</select>';
							$('.widgetsList').html(widgets);							
						} else {
							$('.widgetsList').html("");														
						}
					}					
				});				
			}
			/***************/
			/* BANNER LIST */
			/***************/
			if (options.user.isAdmin == "true" || options.user.isSuperAdmin == "true") {
				$('.bannersTitle, .bannersList').show();
				var rndm = Math.random();
				$.ajax({
					type: "GET",
					url: "api/widget/list",
					data: "sparkbox="+groupId+"&banner=true&nocache="+rndm,
					dataType: 'json',
					success: function(data) {
						var widgetCount = data.response.count;
						$('.bannersTitle b').html(widgetCount);
						
						if (widgetCount > 0) {
							var widgets = '<select name="groupBanners">';
							widgets += '<option value="">- '+$.i18n.prop('group.widget.selecttitle')+' -</option>';
							$.each(data.response.list, function(i) {
								widgets += '<option value="'+this.id+'">'+this.name+'</option>';
							});
							widgets += '</select>';
							$('.bannersList').html(widgets);							
						} else {
							$('.bannersList').html("");														
						}
					}					
				});				
			}

			// show group profile
			$('#groupProfile').show();
		}


		/***************************************************************************/
		/* AJAX upload files                	                                   */
		/* @param string	filefield		id of the file-input (eg. avatar)      */
		/* @param string	action			api action (eg. api/profile/edit)      */
		/* @param string	target			sparkbox							   */
		/* @param int		targetId		group id		    	               */
		/***************************************************************************/
		function ajaxFileUpload(filefield, action, target, targetId) {
			if (filefield == undefined || action == undefined) return;

			$.ajaxFileUpload
			(
				{
					url: action,
					secureuri:false,
					fileElementId: filefield,
					target: target,
					targetId: targetId,
					dataType: 'json',
					success: function(data, status)
					{
						if (filefield == "file") {
							if (target == "edit") {
								$('.noAttachments').remove();
								$('<div class="uploaded"><a href="#remove" class="delAttachment"><img src="static/css/img/delete_icon1.png" alt="'+$.i18n.prop('sparks.deleteattachment')+'" /></a><div class="dataurl" style="display: none;">'+data.response.mediaFile.fullUrl+'</div><a href="'+data.response.mediaFile.fullUrl+'" title="'+data.response.mediaFile.fullUrl+'">'+data.response.mediaFile.fullUrl+'</a></div>')
									.data('url','file:'+data.response.mediaFile.fullUrl.split('file/')[1].split('/')[0]).appendTo('.eattachments');
								//$('.content').busy(false);
								$(document).find('body').busy(false);
							} else {
								$('<li class="icon sparkAttachment"><a href="#remove" class="icon sparkRemove"><span>Remove</span></a><span class="attachmentUp">'+data.response.mediaFile.fullUrl+'</span></li>')
									.data('url','file:'+data.response.mediaFile.fullUrl.split('file/')[1].split('/')[0]).appendTo('.addspark ul.linkList');
								//$('.content').busy(false);
								$(document).find('body').busy(false);
							}
						}
					},
					error: function(data, status, e)
					{
						/*
						console.log("errordata:" +data);
						console.log("errorstatus:" +status);
						console.log("e:" + e);						
						*/
					}
				}
			)
			return false;
		}

		/************************/
		/* INIT everything!!!!! */
		/************************/
	 	function init($root){

	 		// SHOWING SPARK TO OUTSIDE
			/*
	 		var anchor2 = document.location.href.split("SparkBox/")[1];
 			if (anchor2.indexOf('openSpark') == 0) {
 				var sparkId = anchor2.split("?media=")[1];
 				openOutsideSpark(sparkId);
 			}
 			*/
	 		contentPage($root, 'home');

			// hide stuff from non-admins
			if (options.user && options.user.isAdmin == "false" && options.user.isSuperAdmin == "false") {
				var navi = $root.find('ul.nav1');
				navi.find('a[href=#myDomain]').parent('li').remove();
				$root.find('a[href=#createNewGroup]').remove();
				$root.find('.homePage #homecontentAdmin').remove();
				$root.find('.homePage #homecontentUser').show();
			}
			if (options.user && options.user.isAdmin == "true") {
				var navi = $root.find('ul.nav1');
				navi.find('a[href*=#stats]').parent('li').show();				
				
			}

			// ready all idle-fields
			idleFields($root);
			
			/*******************/
			/* list all groups */
			/*******************/
			$root.find('a[href=#groups]').click(function () {
				$('.gspark').busy(true, { message: '<p>'+$.i18n.prop('message.group.loading')+'</p>' });
				contentPage($root, 'groups');
			});
			
			/********************/
			/* create new group */
			/********************/
			$root.find('a[href*=#createNewGroup]').click(function () {
				$root.find('.navi.left a').removeClass('selected');
				$root.find(".profile").slideUp();
				contentPage($root, 'createNewGroup');
				var $p = $root.find('.content .groups.createNew');
				$p.find('h1').text($.i18n.prop('sparkbox.user.groups.create'));
				$p.find('input[type=text], input[type=file], textarea').val('');
				$p.find('input[name=memberApproval]:eq(1)').attr("checked", "checked");
				$p.find('input[name=publicMedia]:eq(1)').attr("checked", "checked");
				$p.find('button.deleteGroup,button.saveGroup').hide();
				$p.find('button.createGroup').show();
				$p.find('img').attr('src','blank.gif');
				return false;
			});	
			$root.find('button.createGroup').live('click', function () {
				var anc = document.location.href.split("#")[1];
				if (anc == "tour") {
					var fromTour = true;
				} else {
					var fromTour = false;
				}
				$root.find('#editGroupSparkbox').ajaxStart(function() {
					$(this).busy(true, {message: ''+$.i18n.prop('message.group.creating')+''});
				});
				$root.find('#editGroupSparkbox').ajaxStop(function() {
					$(this).busy(false);
				});
				var $form = $(this).parent();
				var groupName = $form.find('input[name=name]').val();
				var groupDesc = $form.find('textarea[name=description]').val()
								.replace(/</g, '&lt;')
                                .replace(/>/g, '&gt;')
                                .replace(/&/g, '&amp;')
                                .replace(/\n$/, '<br/>&nbsp;')
                                .replace(/\n/g, '<br/>');
				var groupWWW = $form.find('input[name=homepage]').val();
				var publicMedia = $form.find('input[name=publicMedia]:checked').val();
				var memberApproval = $form.find('input[name=memberApproval]:checked').val();
				if (publicMedia == undefined) {
					publicMedia = false;
				}
				if (memberApproval == undefined) {
					memberApproval = true;
				}
				
				var dataString = 'name='+groupName+"&description="+groupDesc+"&homepage="+groupWWW+"&publicMedia="+publicMedia+"&memberApproval="+memberApproval;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/create",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						if (data.response["@result"] == "success") {
							// refresh group list
							refreshMyGroups(options.user.id);
							// upload avatar
							var $fileInput = $form.find('input[name=avatar]');
							if ($fileInput.is(':visible') && $fileInput.val() != '') {
								ajaxFileUpload('groupavatar', 'api/sparkbox/edit', 'sparkbox', data.response.id);
							}
							
							// return to tour
							if (fromTour == true) {
								// bake groupCreated cookie with groupId
								$.cookie('groupCreated', data.response.id);
								// enable tourpages: invite members, sparking, creating widget, getting widgetcode
								$root.find('.tourNaviContainer .invitePage, .tourNaviContainer .sparkingPage, .tourNaviContainer .createwidgetPage').removeClass("inactive");
								// go to next page
								$root.find('.tourNaviContainer a.selected').parent().next('li').find('a').click();
							} else {
								// show group
								$root.find('.pagePart').hide();
								$root.find('.addspark div.create').hide();
								$root.find('.addspark div.activate').show();
								$root.find('.addspark').show();
								// set small timeout 
								setTimeout(function () { 
									showGroupProfile(data.response.id);
									document.location.href = "sparkbox#listGroup_" + data.response.id;
								}, 1500);								
							}
							
						} else if (data.response.errors) {
							alert($.i18n.prop('group.errorcreating'));
						}
					}
				});
				return false;
			});
			
			/***********************/
			/* save site settings */
			/***********************/
			$root.find('#saveSiteSettings').click(function(event) {
				event.preventDefault();
				$root.find('.content').busy(true, { message : 'Saving...'});
				
				var siteCompany = $root.find('#siteSettingsCompany').val();
				var siteEmail = $root.find('#siteSettingsEmail').val();
				var siteLang = $root.find('#siteLanguage').val();
				var dataString = "company="+siteCompany+"&contactEmail="+siteEmail+"&language="+siteLang+"&site="+options.user.site;
				$.ajax({
					type: "POST",
					url: "api/site/edit",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						$root.find('.content').busy(false);
						
					}
				});
				
				return false;
			});
			
			/***********************/
			/* show group settings */
			/***********************/
			$root.find('a[href*=#groupSettings]').live('click', function () {
				$root.find('.content').busy(true, { message : 'Loading...'});
				var groupHandle = $(this).attr('href').split('_')[1];
				$root.find('button.createGroup').hide();
				$root.find('button.deleteGroup').hide();
				$root.find('button.saveGroup').show();
				contentPage($root, 'createNewGroup');
				$root.find(".groups.settings h1").text($.i18n.prop('sparkbox.group.profile.settings'));
				// get group data
				var dataString = "sparkbox="+groupHandle;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/get",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						//console.log(data);
						var $f = $root.find('.groups.settings form');
						var groupName = data.response.list[0].name;
						var groupDesc = data.response.list[0].description;
						if (groupDesc != undefined) {
							groupDesc = groupDesc.replace(/<br\/>/g, '\n').replace(/&amp;/g, '&');
						} else {
							groupDesc = "";
						}
						var groupWWW = data.response.list[0].homepage;
						if (groupWWW == undefined) { groupWWW = ""; }
						var groupAvatar = data.response.list[0].avatar.fullUrl;
						var memberApproval = data.response.list[0].memberApproval;
						var publicMedia = data.response.list[0].publicMedia;
						
						// commenting
						var memberCommenting = data.response.list[0].memberCommentsEnabled;
						var userCommenting = data.response.list[0].userCommentsEnabled;
						var emailCommenting = data.response.list[0].emailCommentsEnabled;
						$f.find('input[name=memberCommentsEnabled]').attr('checked', memberCommenting);
						$f.find('input[name=userCommentsEnabled]').attr('checked', userCommenting);
						$f.find('input[name=emailCommentsEnabled]').attr('checked', emailCommenting);
						if (memberCommenting == true || userCommenting == true || emailCommenting == true) {
							$f.find('#commentingSelections').show();
						} else {
							$f.find('#commentingSelections').hide();							
						}
						$f.find('input[name=commentsOnOff]').click(function() {
							if ($(this).attr('checked') == true) {
								$f.find('input[name=memberCommentsEnabled]').attr('checked', true);
								$f.find('input[name=userCommentsEnabled]').attr('checked', true);
								$f.find('input[name=emailCommentsEnabled]').attr('checked', false);
								$f.find('#commentingSelections').slideDown();														
							} else {
								$f.find('input[name=memberCommentsEnabled]').attr('checked', false);
								$f.find('input[name=userCommentsEnabled]').attr('checked', false);
								$f.find('input[name=emailCommentsEnabled]').attr('checked', false);
								$f.find('#commentingSelections').slideUp();																						
							}
						});

						var inviteJoining = data.response.list[0].inviteJoining;
						if (inviteJoining == true) {
							var joining = false;
						} else {
							var joining = true;
						}
						$f.find('input[name=joining]').attr('checked', joining);
						if (joining == false) {
							$f.find('#joiningSelections').hide();
						} else {
							$f.find('#joiningSelections').show();							
						}
						$f.find('input[name=joining]').click(function() {
							if ($(this).attr('checked') == true) {
								$f.find('#joiningSelections').slideDown();														
							} else {
								$f.find('#joiningSelections').slideUp();																						
							}
						});
						
						$f.find('input[name=name]').val(groupName);
						$f.find('textarea[name=description]').val(groupDesc);
						$f.find('input[name=homepage]').val(groupWWW);
						$f.find('.picture img').attr("src", groupAvatar);
						// only owner admin can delete
						if ((options.user.isAdmin == "true" || options.user.isSuperAdmin == "true") && data.response.list[0].canDeleteSparkbox == true) {
							$root.find('button.deleteGroup').show();
						}
						if (memberApproval == true) {
							$f.find('input[name=memberApproval][value=true]').attr("checked", "checked");
						} else {
							$f.find('input[name=memberApproval][value=false]').attr("checked", "checked");							
						}
						if (publicMedia == true) {
							$f.find('input[name=publicMedia][value=true]').attr("checked", "checked");
						} else {
							$f.find('input[name=publicMedia][value=false]').attr("checked", "checked");							
						}
						$root.find('.content').busy(false);
						$('html, body').animate({scrollTop:0}, 'fast');
					}
				});
				
			});
			
			/***********************/
			/* save group settings */
			/***********************/
			$root.find('button.saveGroup').click(function () {
				
				$('html, body').animate({scrollTop:0}, 'fast');
				// group id				
				var params = location.href.split('_');
				var groupId = parseInt(params[1]);

				$form = $(this).parent('form');
				
				var groupName = $form.find('input[name=name]').val();
				var groupDesc = $form.find('textarea[name=description]').val()
								.replace(/</g, '&lt;')
                                .replace(/>/g, '&gt;')
                                .replace(/&/g, '&amp;')
                                .replace(/\n$/, '<br/>&nbsp;')
                                .replace(/\n/g, '<br/>');
				groupDesc = encodeURIComponent(groupDesc);
				var groupWWW = $form.find('input[name=homepage]').val();
				var publicMedia = $form.find('input[name=publicMedia]:checked').val();
				var memberApproval = $form.find('input[name=memberApproval]:checked').val();
				
				var memberCommenting = $form.find('input[name=memberCommentsEnabled]').attr('checked');
				var userCommenting = $form.find('input[name=userCommentsEnabled]').attr('checked');
				var emailCommenting = $form.find('input[name=emailCommentsEnabled]').attr('checked');
				
				if (publicMedia == undefined) {
					publicMedia = false;
				}
				if (memberApproval == undefined) {
					memberApproval = true;
				}
				
				// joining to group
				var inviteJoining = $form.find('input[name=joining]').attr('checked');
				if (inviteJoining == true) {
					var joining = false;
				} else {
					var joining = true;
				}
				
				var dataString = 'sparkbox='+groupId+'&name='+groupName+"&description="+groupDesc+"&homepage="+groupWWW+"&publicMedia="+publicMedia+"&inviteJoining="+joining+"&memberApproval="+memberApproval+"&memberCommentsEnabled="+memberCommenting+"&userCommentsEnabled="+userCommenting+"&emailCommentsEnabled="+emailCommenting;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/edit",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						//console.log(data);
						if (data.response["@result"] == "success") {
							// refresh group list
							refreshMyGroups(options.user.id);
							// TODO: show created group
							//alert(1);						
						} else if (data.response.errors) {
							alert($.i18n.prop('message.group.errorsaving'));
						}
					}
				});

				// upload new avatar
				var $fileInput = $form.find('input[name=avatar]');
				if ($fileInput.is(':visible') && $fileInput.val() != '') {
					ajaxFileUpload('groupavatar', 'api/sparkbox/edit', 'sparkbox', groupId);
				}
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.group.saved')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$root.find('.groups.settings').hide();
							showGroupProfile(groupId);
							listMedias("group", groupId);
							$root.find('.addspark div.activate').show();
							$root.find('.pagePart.addspark').show();
							$('html, body').animate({scrollTop:0}, 'fast');
						}
					}]
				});
			});
			/****************/
			/* delete group */
			/****************/
			$root.find('button.deleteGroup').click(function () {
				// group id
				var params = location.href.split('_');
				var groupId = parseInt(params[1]);
				var dataString = "sparkbox="+groupId;
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('sparkbox.message.group.deletegroup')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/sparkbox/delete",
								data: dataString,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										contentPage($root, "home");
										// refresh group list
										refreshMyGroups(options.user.id);
										$root.find('#groupProfile').slideUp();
										$('html, body').animate({scrollTop:0}, 'fast');				
									} else if (data.response.errors) {
										alert($.i18n.prop('message.group.cannotdelete'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
			});
			
			// INVITE TO A GROUP
			function inviteUser($groupHandle, mode) {
				$('.gspark .dialog').html('');
				var html = '';
				var dataString = "sparkbox="+$groupHandle;
				
				html += '<table id="inviteMembersTbl">';
				html += '<tr>';
				html += '<td>';
				
				html += '<div class="invitemailhelp">';
				html += $.i18n.prop('group.inviteuser.helptext');
				html += '<div class="addInviteLink">'+$.i18n.prop('group.inviteuser.addlink')+'</div>';
				html += '</div>';
				
				html += '<fieldset class="invitegroupmail">';
				html += '<label for="inviteMailSubject">'+$.i18n.prop('group.inviteuser.mailsubject')+'</label>';
				html += '<input id="inviteMailSubject" name="inviteMailSubject" value="'+$.i18n.prop('email.inviteSparkboxProfile.sparkbox.subject')+'" />';
				html += '<label for="inviteMailMessage">'+$.i18n.prop('group.inviteuser.mailmessage')+'</label>';
				html += '<textarea id="inviteMailMessage" name="inviteMailMessage">'+$.i18n.prop('email.inviteSparkboxProfile.sparkbox.message')+'</textarea>';
				html += '</fieldset>';
				
				html += '</td>';
				html += '<td>';
				
				html += '<div class="fieldList">';
				html += '<div class="openUserList">Select users from list</div>';
				html += '<div class="userSelectList" style="display:none;"></div>';				
				html += '<fieldset class="select">';
				html += '<label for="usersList">'+$.i18n.prop('group.inviteuser.finduser')+'</label>';
				html += '<input class="usersList ui-autocomplete-input" name="usersList"/>';
				html += '<span class="addUser" name="addUser" style="display:none">'+$.i18n.prop('group.inviteuser.buttonadd')+'</span>';
				html += '</fieldset>';
				html += '<fieldset class="input">';
				html += '<label for="inviteEmail">'+$.i18n.prop('group.inviteuser.emailtitle')+'</label>';
				html += '<input class="inviteEmail" name="inviteEmail" type="text" value=""/>';
				html += '<span class="addEmail" name="addEmail" style="display:none">'+$.i18n.prop('group.inviteuser.buttonadd')+'</span>';
				html += '</fieldset>';
				// MAIL-LANGUAGE
				html += '<div class="langSelection">';
				html += '<span><small>'+$.i18n.prop('mydomain.inviteadmin.emaillanguage')+'</small></span>';
				html += '<select name="mailLang">';
				html += '<option value="en">'+$.i18n.prop('user.accountsettings.accountlanguageenglish')+'</option>';
				html += '<option value="fi">'+$.i18n.prop('user.accountsettings.accountlanguagefinnish')+'</option>';
				html += '<option value="de">'+$.i18n.prop('user.accountsettings.accountlanguagegerman')+'</option>';
				//html += '<option value="se">'+$.i18n.prop('user.accountsettings.accountlanguageswedish')+'</option>';
				html +='</select></div>';				
				html += '</div>';					
				html += '<span class="addedUserIds" style="display:none">';
				html += '<h4>'+$.i18n.prop('group.inviteuser.userstitle')+'</h4>';
				html += '<ul class="userIdList"></ul>';
				html += '</span>';
				html += '<span class="noAdded">'+$.i18n.prop('group.inviteuser.notadded')+'</span>';
				html += '<span class="addedUserEmails" style="display:none">';
				html += '<h4>'+$.i18n.prop('group.inviteuser.emailrecipients')+'</h4>';
				html += '<ul class="userEmailList"></ul>';
				html += '</span>';

				html += '</td>';
				html += '</tr>';
				html += '</table>';

				$('.gspark .dialog').html(html);
				function populateEmailFields(lang) {
					$("#inviteMailMessage").attr("disabled", true);
					$("#inviteMailSubject").attr("disabled", true);
					$.ajax({
						type: "POST",
						url: "api/email/get",
						dataType: "json",
						data: "sparkbox="+$groupHandle+"&language="+lang,
						success: function(data) {
							var mCount = data.response.count;
							if (mCount > 0) {
								var emailMsg = data.response.list[0].message;
								var emailSub = data.response.list[0].subject;
								$("#inviteMailMessage").val(emailMsg);
								$("#inviteMailSubject").val(emailSub);
							}
							$("#inviteMailMessage").attr("disabled", false);
							$("#inviteMailSubject").attr("disabled", false);
						}
					});
				}
				$('.langSelection select[name=mailLang]').change(function() {
					populateEmailFields($(this).val());
				});
				// USERS LANG AS DEFAULT
				setTimeout(function() {
					$('.langSelection select[name=mailLang] option[value='+options.user.lang+']').attr('selected', true);
					var mLang = $('.langSelection select[name=mailLang] option:selected').val();
					populateEmailFields(mLang);
				},500);								
				// <autocomplete>
				// TODO: ADD CACHING FOR AJAX-DATA
				var query = "";
					$(".usersList").autocomplete({
						source: function(request, response) {
						query = request.term;
						// TODO: USERS ROLE WILL BE CHECKED SERVERSIDE IN api/site/listProfiles
							$.ajax({
								type: "GET",
								url: "api/site/listProfiles",
								dataType: "json",
								data: "",
								success: function(data) {
									//console.log(data);
									// <user-search for super/domain-admins>
									if (options.user.isAdmin == "true") {
										//response($.map(data.response.list, function(item) {
										response($.map(data.response.list, function(item) {
											// REMOVE THIS IF-CLAUSE (NOT POSSIBLE TO REGISTER W/O NAME OR NICKNAME)
											if (item.name != undefined && item.name != '' && item.nickname != undefined && item.nickname != '') {
												var useriName = item.name.toLowerCase();
												var useriNick = item.nickname.toLowerCase();
												query = query.toLowerCase();
												if(useriName.indexOf(""+query+"")>=0 || useriNick.indexOf(""+query+"")>=0){
													return {
														label: item.name+' ('+item.nickname+')',
														value: item.id
													}
												}
											}
										}));										
									}
									// </user-search for super/domain-admins>									
									// <user-search for <adbox-admins>
									else {
										response($.map(data.response.list, function(item) {
											// REMOVE THIS IF-CLAUSE (NOT POSSIBLE TO REGISTER W/O NAME OR NICKNAME)
											if (item.nickname != undefined && item.nickname != '') {
												var useri = item.nickname.toLowerCase();
												query = query.toLowerCase();
												if(useri.indexOf(""+query+"")>=0){
													return {
														label: item.nickname,
														value: item.id
													}
												}
											}
										}));
									}
									// </user-search for adbox-admins>
								}
							});
						},
						minLength: 2,
						focus: function(even, ui) {
							$('.usersList').val(ui.item.label);						
							return false;
						},
						select: function(event, ui) {
							$('.userIdList').append('<li rel="'+ui.item.value+'">'+ui.item.label+' <small><a class="userListRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
							$('.addedUserIds').show();
							$('.noAdded').hide();
							$('.usersList').val('');
							//$('.dialog span.addUser').show();
							return false;
						},
						open: function() {
						},
						close: function() {
						},
						change: function(event, ui) {
						}
						
					});
				$('.gspark .dialog .userIdList .userListRemove').live('click', function() {
					$(this).parent('small').parent('li').remove();
					if ($('.addedUserIds ul li').text() == false) {
						$('.addedUserIds').hide();
						$('.noAdded').show();
					}			
				});
				$('.gspark .dialog .addInviteLink').live('click', function() {
					var msg = $('#inviteMembersTbl #inviteMailMessage').val();
					$('#inviteMembersTbl #inviteMailMessage').val(msg+' %%link%%');
				});
				$('.gspark .dialog .openUserList').live('click', function() {
					var usersHtml = '';
					$.ajax({
						type: "GET",
						url: "api/site/listProfiles",
						data: "",
						dataType: 'json',
						success: function(data) {
							if (data.response.count > 0) {
								for (var i=0;i<data.response.count;i++) {
									usersHtml += '<span class="selectListUser"><input name="listUser" type="checkbox" value="'+data.response.list[i].id+'"/>'+data.response.list[i].name+' ( '+data.response.list[i].nickname+' )</span>';
								}
								setTimeout(function() {
									usersHtml += '<div class="userListButtons">';
									usersHtml += '<button name="cancelButton">Cancel</button><button name="selectButton">Select users</button>';
									usersHtml += '</div>';
									$('.gspark .dialog .userSelectList').html(usersHtml).slideDown('fast');
								},500);
							}
						}
					});
				});
				$('.gspark .dialog .userSelectList .selectListUser').live('click', function() {
					var userInput = $(this).find('input');
					if (userInput.is(':checked')) {
						userInput.attr('checked', '');
					}
					else {
						userInput.attr('checked', 'checked');
					}
				});								
				$('.gspark .dialog .userSelectList button[name=cancelButton]').live('click', function() {
					$('.gspark .dialog .userSelectList').slideUp('fast');
					$('.gspark .dialog .userSelectList').html('');
				});
				$('.gspark .dialog .userSelectList button[name=selectButton]').live('click', function() {
					var selectedUsers = '';
					$('.gspark .dialog .userSelectList .selectListUser').each(function() {
						var userInput = $(this).find('input');
						if (userInput.is(':checked')) {
							var addString = '<li rel="'+userInput.val()+'">'+userInput.parent().text()+' <small><a class="userListRemove" href="#" style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>';
							if (selectedUsers.indexOf(addString) >= 0) {
								// already there...												
							}
							else {								
								var addedUsers = $('.userIdList').html();
								if (addedUsers.indexOf(addString) >= 0) {
									// already in the list...
								}
								else {
									selectedUsers += addString;
								}								
							}
						}
					});
					setTimeout(function() {										
						$('.gspark .dialog .userSelectList').slideUp('fast');
						if (selectedUsers != '') {
							$('.userIdList').append(selectedUsers);
							$('.addedUserIds').show();
							$('.noAdded').hide();
						}
					},500);
				});				
				// <email-validation>
				$('.dialog .inviteEmail').keyup(function(){
					var email = $(this).val();
					if (email.indexOf(',') >= 0 || email.indexOf(';') >= 0) {
						// multiple emails..
					}
					else {
						if(email != 0 && email != undefined && email != '') {
						    if(validateEmail(email))
						    {
						        $('.dialog .inviteEmail').css('background-color', '#affba9');
						        $('.dialog span.addEmail').show();
						    } else if(!validateEmail(email)){
						        $('.dialog .inviteEmail').css('background-color', '#ffbbbb');
						        $('.dialog span.addEmail').hide();
						    }
						}
						else {
							$('.dialog .inviteEmail').css('background-color', '#fff');
						}
					}
				});
				$('.gspark .dialog .inviteEmail').live('keyup', function(){
					if ($('.gspark .dialog .inviteEmail').val().indexOf(',') >= 0 || $('.gspark .dialog .inviteEmail').val().indexOf(';') >= 0) {
						$('.dialog span.addEmail').show();
					}
					if ($('.gspark .dialog .inviteEmail').val() == '') {
						$('.dialog span.addEmail').hide();
						$('.dialog .inviteEmail').css('background-color', '#fff');
					}
				});
				$('.dialog span.addEmail').click(function(){
					$('.gspark .dialog .inviteEmail').blur();
				});
				$('.gspark .dialog .inviteEmail').live('blur', function() {
					var emailAddr = "";
					emailAddr = $(this).val();
					function multipleEmails(emailAddr) {
						emailAddr = escape(emailAddr);
						emailAddr = emailAddr.replace('%20', '');
						if (emailAddr.indexOf('%2C') >= 0 && emailAddr.indexOf('%3B') == -1) {
							var email = emailAddr.split('%2C');							
							setTimeout(function() {
								for (var i=0; i<email.length; i++) {
									var emails = $('.userEmailList').html();
										if (emails.indexOf(email[i]) >= 0) {
										// already in the list....
										}
										else {
											if (validateEmail(email[i])) {
												$('.userEmailList').append('<li>'+email[i]+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
											}
										}								
								}
								$('.dialog .addedUserEmails').show();
								$('.input .inviteEmail').val('');
								$('.noAdded').hide();
							},500);
							return true;
						}
						if (emailAddr.indexOf('%3B') >= 0 && emailAddr.indexOf('%2C') == -1) {													
							var email = emailAddr.split('%3B');							
							setTimeout(function() {
								for (var i=0; i<email.length; i++) {
									var emails = $('.userEmailList').html();
										if (emails.indexOf(email[i]) >= 0) {
											// already in the list....
										}
										else {
											if (validateEmail(email[i])) {
												$('.userEmailList').append('<li>'+email[i]+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
											}
										}								
								}
								$('.dialog .addedUserEmails').show();
								$('.input .inviteEmail').val('');
								$('.noAdded').hide();
							},500);
							return true;
						}
						if (emailAddr.indexOf('%3B') >= 0 && emailAddr.indexOf('%2C') >= 0) {							
							setTimeout(function() {
								if (emailAddr.indexOf('%2C') < emailAddr.indexOf('%3B')) {
									// comma found first..
									var email = emailAddr.split('%2C');
									for (var i=0;i<email.length;i++) {
										// alert(email[i]);
										var emails = $('.userEmailList').html();
										if (emails.indexOf(email[i]) >= 0) {
											// already in the list....
										}
										else {
											if (validateEmail(email[i])) {
												$('.userEmailList').append('<li>'+email[i]+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
											}
										}																		
										if (email[i].indexOf('%3B') >= 0) {
											email[i] = email[i].split('%3B');
											for (var j=0;j<email[i].length;j++) {
												//alert(email[i][j]);
												if (emails.indexOf(email[i][j]) >= 0) {
													// already in the list....
												}
												else {
													if (validateEmail(email[i][j])) {
														$('.userEmailList').append('<li>'+email[i][j]+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
													}
												}											
											}
										}
									}
								}							
								else if (emailAddr.indexOf('%3B') < emailAddr.indexOf('%2C')) {
									// semicolon found first..
									var email = emailAddr.split('%3B');
									for (var i=0;i<email.length;i++) {
										// alert(email[i]);
										var emails = $('.userEmailList').html();
										if (emails.indexOf(email[i]) >= 0) {
											// already in the list....
										}
										else {
											if (validateEmail(email[i])) {
												$('.userEmailList').append('<li>'+email[i]+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
											}
										}																		
										if (email[i].indexOf('%2C') >= 0) {
											email[i] = email[i].split('%2C');
											for (var j=0;j<email[i].length;j++) {
												//alert(email[i][j]);
												if (emails.indexOf(email[i][j]) >= 0) {
													// already in the list....
												}
												else {
													if (validateEmail(email[i][j])) {
														$('.userEmailList').append('<li>'+email[i][j]+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
													}
												}											
											}
										}
									}
								}
								$('.dialog .addedUserEmails').show();
								$('.input .inviteEmail').val('');
								$('.dialog .inviteEmail').css('background-color', '#fff');
								$('.dialog span.addEmail').hide();
								$('.noAdded').hide();
							},500);
						}
					}
					if (emailAddr.indexOf(',') >= 0 || emailAddr.indexOf(';') >= 0) {
						// handle multiple emails
						multipleEmails(emailAddr);						

					}
					else {
						if (emailAddr != undefined && emailAddr != '' && validateEmail(emailAddr)) {
							var emails = $('.userEmailList').html();
							if (emails.indexOf(emailAddr) >= 0) {
								// already in the list...
							}
							else {
								$('.userEmailList').append('<li>'+emailAddr+' <small><a class="userEmailRemove" href="#"  style="color: #3ef; text-decoration:none;">'+$.i18n.prop('group.inviteuser.removelink')+'</a></small></li>');
							}
							$(this).val('');
							$('.dialog .inviteEmail').css('background-color', '#fff');
						    $('.dialog span.addEmail').hide();
							$('.addedUserEmails').show();
							$('.noAdded').hide();
							$('.shareToEmail').focus();
						}
					}
				});		
				$('.gspark .dialog .userEmailList .userEmailRemove').live('click', function() {
					$(this).parent('small').parent('li').remove();
					if ($('.addedUserEmails ul li').text() == false) {
						$('.addedUserEmails').hide();
						$('.noAdded').show();
					}
				});
				// </email-validation>
				var groupName = "";
				$.ajax({
					type: "POST",
					url: "api/sparkbox/get",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						// console.log(data);
						var inviteString = 'sparkbox='+$groupHandle;
						var sendMail = false;
						groupName = data.response.list[0].name;
						$(".dialog").dialog( {
							modal:true,
							resizable:false,
							draggable:false,
							width:820,
							height:550,				
							title: ''+$.i18n.prop('sparkbox.group.inviteuser.invitetitle')+' '+groupName,					
							dialogClass:'gspark',
							buttons: {
								'Cancel' : function () { 
									$(this).dialog('close'); 
								},						
								'Send' : function () {
									$('ul.userIdList li').each(function() {
										//alert($(this).attr('rel'));
										if($(this).attr('rel') != undefined && $(this).attr('rel') != '') {
											sendMail = true;
											inviteString += '&profile='+$(this).attr('rel');
										}
									});
									$('ul.userEmailList li').each(function() {
										if($(this).text() != undefined && $(this).text() != '') {
										//alert($(this).text().split(' remove')[0]);
											sendMail = true;
											//inviteString += '&email='+$(this).text().split(' remove')[0];
											inviteString += '&email='+$(this).text().split(' ')[0];
										}
									});
									//alert('string: '+inviteString+', sendMail: '+sendMail);
									if (sendMail == false) {
										$root.busy(true,{
											message: '<p>'+$.i18n.prop('group.inviteuser.nomailsadded')+'</p>',
											buttons: [{
												text: ''+$.i18n.prop('message.buttonok')+''
											}]
										});		
										return;								
									}
									var msg = $('#inviteMembersTbl #inviteMailMessage').val();
									var subj = $('#inviteMembersTbl #inviteMailSubject').val();
									if ((msg == "" || subj == "") && sendMail == true) {
										$root.busy(true,{
											message: '<p>'+$.i18n.prop('group.inviteuser.nomailcontent')+'</p>',
											buttons: [{
												text: ''+$.i18n.prop('message.buttonok')+''
											}]
										});								
										return;
									} else {
										// check that msg has link in it
										if (msg.indexOf("%%link%%") != -1) {
											//alert("ok");
										} else {
											$root.busy(true,{
												message: '<p>'+$.i18n.prop('group.inviteuser.nolink')+'</p>',
												buttons: [{
													text: ''+$.i18n.prop('message.buttonok')+''
												}]
											});		
											return;						
										}
									}
									
									// SEND INVITATION EMAIL
									if (sendMail == true) {
										var mailLang = $('.langSelection select[name=mailLang] option:selected').val();
										inviteString += '&language='+mailLang;
										var mSub = encodeURIComponent( $('#inviteMailSubject').val() );
										var mMsg = encodeURIComponent( $('#inviteMailMessage').val() );
										inviteString += '&message='+mMsg+'&subject='+mSub;								
										$.ajax({
											type: "POST",
											url: "api/sparkbox/inviteEmail",
											data: inviteString,
											dataType: 'json',
											success: function(data) {
												//console.log(data);
												$root.busy(true, {
													message: '<p>'+$.i18n.prop('group.inviteuser.sent')+'</p>',
													buttons: [{
														text: 'Ok'
													}]
												});
											}
										});																		
										$(this).dialog('close');
									}
								},
								'Save' : function() {
									var mSub = encodeURIComponent( $('#inviteMailSubject').val() );
									var mMsg = encodeURIComponent( $('#inviteMailMessage').val() );
									var mLang = $('.langSelection select[name=mailLang] option:selected').val();
									$("#inviteMailMessage").attr("disabled", true);
									$("#inviteMailSubject").attr("disabled", true);
									
									if (mSub == "" || mMsg == "") {
										$root.busy(true,{
											message: '<p>'+$.i18n.prop('group.inviteuser.nomailcontent')+'</p>',
											buttons: [{
												text: ''+$.i18n.prop('message.buttonok')+''
											}]
										});								
										$("#inviteMailMessage").attr("disabled", false);
										$("#inviteMailSubject").attr("disabled", false);
										return;
									}
									if ($('#inviteMailMessage').val().indexOf("%%link%%") != -1) {
										//alert("ok");
									} else {
										$root.busy(true,{
											message: '<p>'+$.i18n.prop('group.inviteuser.nolink')+'</p>',
											buttons: [{
												text: ''+$.i18n.prop('message.buttonok')+''
											}]
										});		
										$("#inviteMailMessage").attr("disabled", false);
										$("#inviteMailSubject").attr("disabled", false);
										return;						
									}
									// check if email already created
									$root.busy(true,{
										message: '<p>Saving..</p>'
									});
									$.ajax({
										type: "POST",
										url: "api/email/get",
										dataType: "json",
										data: "sparkbox="+$groupHandle+"&language="+mLang,
										success: function(data) {
											var mCount = data.response.count;
											if (mCount == 0) {
												
												var datas = "sparkbox="+$groupHandle+"&language="+mLang+"&subject="+mSub+"&message="+mMsg;
												// create new email if there are none for this group
												$.ajax({
													type: "POST",
													url: "api/email/create",
													dataType: "json",
													data: datas,
													success: function(data) {
														$("#inviteMailMessage").attr("disabled", false);
														$("#inviteMailSubject").attr("disabled", false);
													}
												});
											} else {
												// save existing email
												$.ajax({
													type: "POST",
													url: "api/email/edit",
													dataType: "json",
													data: "email="+data.response.list[0].id+"&subject="+mSub+"&message="+mMsg,
													success: function(data) {
														$("#inviteMailMessage").attr("disabled", false);
														$("#inviteMailSubject").attr("disabled", false);
													}
												});												
											}
											$root.busy(false);
										}
									});
									
									//$(this).dialog('close');
								}
								
							}
						});
						$('.ui-dialog-buttonpane button:eq(2)').css("float", "left").css("marginLeft", "20px");
						$('.ui-dialog').css("height", "570px");
						return false;
					}
				});
			}
			// EMAIL GROUP MEMBERS
			function emailMembers($root, groupId) {
				$('.gspark .dialog').html('');
				var dataString = "sparkbox="+groupId;
				var html = "";
				html += '<div class="emailField">';
				html += '<fieldset class="input">';
				html += '<label for="memberEmailSubject">'+$.i18n.prop('group.emailmembers.subjecttitle')+'</label>';
				html += '<input class="memberEmailSubject"/>';
				html += '</fieldset>';
				html += '<fieldset class="textarea">';
				html += '<label for="memberEmailMessage">'+$.i18n.prop('group.emailmembers.messagetitle')+'</label>';
				html += '<textarea name="memberEmailMessage"></textarea>';
				html += '</fieldset>';
				html += '<div class="charsLeft"></div>';				
				html += '</div>';
				$('.gspark .dialog').html(html);				
				var emailString = "sparkbox="+groupId;
				var emailSubject = "";
				var emailMessage = "";				
				$.ajax({
					type: "POST",
					url: "api/sparkbox/get",
					data: dataString,
					dataType: 'json',
					success: function(data) {
						// console.log(data);
						var groupName = "";
						groupName = data.response.list[0].name;
						$(".dialog").dialog({
							modal:true,
							resizable:false,
							draggable:false,
							width:325,
		 					height:365,					
							title: ''+$.i18n.prop('group.emailmembers.emailmemberstitle')+' '+groupName,					
							dialogClass:'gspark',
							buttons: {
								'Send' : function () {
									var memberSubject = false;
									var memberMessage = false;
									emailSubject = $('.gspark .dialog .memberEmailSubject').val();
									emailMessage = $('.gspark .dialog textarea[name=memberEmailMessage]').val();
									if (emailSubject != undefined && emailSubject != '') {
										memberSubject = true;
									}
									if (emailMessage != undefined && emailMessage != '') {
										memberMessage = true;
									}
									if (memberSubject == true && memberMessage == true) {
									   	emailString += '&subject='+emailSubject+'&message='+emailMessage;
										$.ajax({
											type: "POST",
											url: "api/sparkbox/emailMembers",
											data: emailString,
											dataType: 'json',
											success: function(data) {
												$root.busy(true, {
													message: '<p>'+$.i18n.prop('group.emailmembers.sent')+'</p>',
													buttons: [{
														text: 'Ok'
													}]
												});
											}
										});
										$(this).dialog('close');
									}									
								},
								'Cancel' : function () { $(this).dialog('close'); }
							}
						});
						$('.ui-dialog-buttonpane :button').each(function() {
							if ($(this).text() == 'Cancel') {
								$(this).addClass('cancel');
								$(this).text($.i18n.prop('group.emailmembers.buttoncancel'));
							}
							if ($(this).text() == 'Send') {
								$(this).text($.i18n.prop('group.emailmembers.buttonsend'));
							}
						});						
					}
				});				
			}
			
			$root.find('a[href*=#inviteToGroup]').click( function () {
				var groupHandle = location.href.split('_')[1];
				var mode = "group";
				inviteUser(groupHandle, mode);
				return false;
			});
			function showReportedComments(groupHandle) {
				$root.find(".pagePart").hide();
				
				cHtml = "<h1>"+$.i18n.prop('group.profile.reportedcomments')+"</h1>";
				cHtml += '<div class="commentList">';
				rndm = Math.random();
				$.ajax({
					type: "POST",
					url: "api/comment/reported",
					data: "sparkbox="+groupHandle+"&nocache="+rndm,
					dataType: 'json',
 					success: function(data) {
						//console.log(data);
						$('html, body').animate({scrollTop:0}, 'fast');
						if (data.response.list) {
							$.each(data.response.list, function(i) {
								cReport = data.response.list[i].description;
								
								cHtml += '<div class="reportRow">';
								cHtml += '<p class="reportContent">'+$.i18n.prop('group.profile.commentreport')+': '+cReport;
								cHtml += ' <a class="approveReport" href="#approveReport_'+data.response.list[i].id+'">'+$.i18n.prop('group.profile.reportedcomment.approve')+'</a>';
								cHtml += ' <a class="rejectReport" href="#rejectReport_'+data.response.list[i].id+'">'+$.i18n.prop('group.profile.reportedcomment.reject')+'</a>';
								cHtml += '</p>';
								cHtml += printComment(data.response.list[i].comment);
								cHtml += '</div>';
							});
						} else {
							cHtml += '<div class="reportRow">';
							cHtml += 'n/a';
							cHtml += '</div>';
						}
						cHtml += '</div>'; // commentList
						$root.find(".pagePart.reportedComments").html(cHtml).show();
					}
				});
				
			}
			$root.find('a[href*=#reportedComments]').click( function () {
				var groupHandle = location.href.split('_')[1];
				showReportedComments(groupHandle);
				return false;
			});
			$root.find('a[href*=#approveReport]').live('click', function () {
				var groupHandle = location.href.split('_')[1];
				var repId = $(this).attr('href').split('_')[1];
				$.ajax({
					type: "GET",
					url: "api/comment/approveReport",
					data: "commentReport=" + repId,
					dataType: 'json',
					success: function(data){
						showReportedComments(groupHandle);
					}
				});
				
				return false;
			});
			$root.find('a[href*=#rejectReport]').live('click', function () {
				var groupHandle = location.href.split('_')[1];
				var repId = $(this).attr('href').split('_')[1];
				$.ajax({
					type: "GET",
					url: "api/comment/rejectReport",
					data: "commentReport=" + repId,
					dataType: 'json',
					success: function(data){
						showReportedComments(groupHandle);
					}
				});
				return false;
			});
			

			$root.find('a[href*=#invites]').click( function () {
				var groupHandle = $(this).attr('href').split('_')[1];
				$root.find(".pagePart").hide();
				
				invitesHtml = '<h1>'+$.i18n.prop('group.profile.invites')+'</h1>';
				
				$.ajax({
					type: "GET",
					url: "api/sparkbox/listInvites",
					data: "sparkbox="+groupHandle,
					dataType: 'json',
 					success: function(data) {
						//console.log(data);
						$('html, body').animate({scrollTop:0}, 'fast');
						if (data.response.list) {
							$.each(data.response.list, function(i) {
								email = data.response.list[i].email;
								approved = data.response.list[i].approved;
								invitesHtml += '<div class="inviteRow ';
								if (approved == true) {
									invitesHtml += 'approved';								
								} else {
									invitesHtml += 'notapproved';																	
								}
								invitesHtml += '">';
								invitesHtml += '<b></b>';
								invitesHtml += email;
								invitesHtml += '</div>';
							});
						} else {
						}
						$root.find(".pagePart.invites").html(invitesHtml).show();
					}
				});
				
				
				
				return false;
			});
			$root.find('a[href*=#emailMembers]').click( function () {
				var groupHandle = location.href.split('_')[1];
				emailMembers($root, groupHandle);
				return false;
			});			
			
			/***************************/
			/* show pending user info  */
			/***************************/
			$root.find('a[href*=#userP]').live('click', function(){
				$('html, body').animate({scrollTop:0}, 'fast');
				var uid = $(this).attr('href').split('_')[1];
				var gid = document.location.href.split('_')[1];
				$root.find('.content .pagePart, .content .addspark').hide();
				nocache = Math.random();
				var dataString = "profile="+uid+"&pendingSparkbox="+gid+"&nocache="+nocache;
				$.ajax({
					type: "POST",
					url: "api/profile/profile",
					data: dataString,
					dataType: "json",
					success: function(data){
						//console.log(data);
						var useri = data.response.list[0];
						var name = useri.name;
						var nick = useri.nickname;
						var about = useri.description;
						if (about != undefined && about != "") {
							about = about.replace(/\n/g, '<br/>');
						}
						var city = useri.location;
						var country = useri.country;
						var why = useri.application;
						if (why != undefined && why != "") {
							why = why.replace(/\n/g, '<br/>');
						}
						$('.pendingMemberProfile .pNickname').html(nick);
						$('.pendingMemberProfile .pName').html(name);
						if (city != undefined && city != "") {
							$('.pendingMemberProfile .pCity').html(city);
						} else {
							$('.pendingMemberProfile .pCity').html('-');
						}
						if (country != undefined && country != "") {
							$('.pendingMemberProfile .pCountry').html(country);
						} else {
							$('.pendingMemberProfile .pCountry').html('-');
						}
						if (about != undefined && about != "") {
							$('.pendingMemberProfile .pAbout').html(about);
						} else {
							$('.pendingMemberProfile .pAbout').html('-');
						}
						if (why != undefined && why != "") {
							$('.pendingMemberProfile .pWhy').html(why);
						} else {
							$('.pendingMemberProfile .pWhy').html('-');
						}
						$('.pendingMemberProfile .pImage').attr('src', useri.avatar.fullUrl + '?wh=150x150').attr('alt', nick).css('float', 'right');
						$('.pendingMemberProfile .membershipActions').attr('id', 'membershipActions_'+useri.id);
					}
				});
				
				
				$root.find('.pendingMemberProfile').slideDown();
				return false;
			});

			/****************************************************/
			/* show user profile and list user's public sparks  */
			/****************************************************/
			$root.find('a[href*=#users_]').live('click', function(){
				// hide support info
				$(".support").hide();
				$root.find('.tourNaviContainer').html('');
				var param = $(this).attr('href').split('#')[1].split('_');
				var userHandle = param[1].split("/")[0];

				$root.find('#usersGroups a.selected').removeClass("selected");
				$root.find('.content .pagePart, .content .addspark').hide();
				$root.find('#groupProfile').slideUp();
				
				var dataString = "profile="+userHandle;
				$.ajax({
					type: "POST",
					url: "api/profile/profile",
					data: dataString,
					dataType: "json",
					success: function(data){
						//console.log(data);
						var useri = data.response.list[0];
						var nick = useri.nickname;
						var about = useri.description;
						var city = useri.location;
						var country = useri.country;
						$('#userProfile .info h2').html(nick);
						if (about != undefined && about != "") {
							$('#userProfile .about.box').html(about);
						}
						else {
							$('#userProfile .about.box').hide();
						}
						if (city != undefined && city != "") {
							$('#userProfile h4.city').html(city);
						}
						else {
							$('#userProfile h4.city').hide();
						}
						if (country != undefined && country != "") {
							$('#userProfile h4.country').html(country).show();
						}
						else {
							$('#userProfile h4.country').hide();
						}
						if (useri.avatar.fullUrl == "") {
							$('#userProfile .info img').attr('src', 'http://'+document.location.href.split("/")[2]+'/static/css/img/empty-profile-150x150.png');
							
						} else {
							$('#userProfile .info img').attr('src', useri.avatar.fullUrl + '?wh=150x150');
							
						}
					}
				});
				
				// get users groups
				$('#userProfile .groups.box ul').html("");
				var groupsdata = "profile="+userHandle;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/list",
					data: groupsdata,
					dataType: "json",
					success: function(data) {
						//console.log(data);
						var html = "";
						var groupcount = data.response.count;
						$('b.myGroupCount').html(groupcount);
						if (groupcount > 0) {
							for (var i=0; i<groupcount; i++) {
								var groupId = data.response.list[i].id;
								var groupName = data.response.list[i].name;
								html += '<li class="group"><a href="#listGroup_' + groupId + '" title="'+groupName+'">';
								html += '<img src="' + data.response.list[i].avatar.fullUrl + '?wh=30x30x0" alt="'+groupName+'"/>';
								html += '<span>' + groupName + '</span></a></li>';
							}
						}
						$('#userProfile .groups.box ul').html(html);		
					}
				});
				
				$root.find('#userProfile').slideDown();
				$root.find('.content .pagePart.sparks').html("");
				listMedias("user", userHandle);
				$root.find('.content .pagePart.sparks').show();
				$('html, body').animate({scrollTop:0}, 'fast');			
				//$root.find('.pagePart.sparks').html('userin sparkit..');
				

			});

			/************************/
			/* show sparks in group */
			/************************/
			$root.find('a[href*=#listGroup]').live('click', function() {
				// hide support info
				$(".support").hide();
				$root.find('.pagePart').hide();
				$root.find('.addspark div.create').hide();
				$root.find('.addspark div.activate').show();
				$root.find('.navi.left a').removeClass('selected');
				var groupId = parseInt($(this).attr('href').split('_')[1]);				
				var userId = options.user.id;
				var isAdmin = options.user.isAdmin;
				listMedias("group", groupId);				
				$(this).addClass("selected");
				$root.find('.pagePart.addspark').show();				
				// show group info
				showGroupProfile(groupId);
				//return false;
			});

			/****************************/
			/* delete group (my domain) */
			/****************************/
			$root.find('a[href*=#delGroup]').live('click', function() {
				var groupId = parseInt($(this).attr('href').split('_')[1]);	
				var dataString = "sparkbox="+groupId;
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('sparkbox.message.group.deletegroup')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/sparkbox/delete",
								data: dataString,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										contentPage($root, "domain");
										// refresh group list
										refreshMyGroups(options.user.id);		
									} else if (data.response.errors) {
										alert($.i18n.prop('message.group.cannotdelete'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
				return false;
			});
			/****************************/
			/* delete contact request (my domain) */
			/****************************/
			$root.find('a.reqDelete').live('click', function() {
				rid = $(this).attr('href').split('_')[1];
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.mydomain.deleterequest')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/site/deleteContact",
								data: "contact="+rid,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										//contentPage($root, "domain");
										var co = $("#contactRequests h3 span").html() - 1;
										$("#contactRequests h3 span").html(co);
										$("#contactRequests .req_"+rid).slideUp().remove();
									} else if (data.response.errors) {
										alert($.i18n.prop('message.mydomain.cannotdeleterequest'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
				return false;
			});
			/****************************/
			/* delete domain (my domain) */
			/****************************/
			$root.find('a#deleteDomain').live('click', function() {
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.mydomain.deletedomain')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/site/delete",
								data: "",
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										contentPage($root, "domain");
										// refresh group list
										refreshMyGroups(options.user.id);		
									} else if (data.response.errors) {
										alert($.i18n.prop('message.mydomain.cannotdelete'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
				return false;
			});

			$root.find('.sparkEdit').live('click', function() {
				var sparkId = $(this).attr('id').split('_')[1];
				editSpark($root, sparkId);
				return false;
			});
			$root.find('.sparkRemove').live('click', function() {
				var sparkId = $(this).attr('id').split('_')[1];
				var userId = options.user.id;
				var isAdmin = options.user.isAdmin;
				deleteSpark($root, sparkId, userId, isAdmin);
				return false;
			});
			$root.find('.linkRemove').live('click', function() {
				$(this).parent('li').slideUp().remove();
				return false;
			});
			$root.find('.sparkShare').live('click', function() {
				var sparkId = $(this).attr('id').split('_')[1];
				shareSpark($root, sparkId);
				return false;
			});
			// like spark
			$root.find('.sparkLike').live('click', function() {
				// TODO: like only once per session!
				var sparkId = $(this).attr('href').split('_')[1];

				var likeCookie = [];
				if ($.cookie('CLICKED')) var likeCookie = $.cookie('CLICKED').split(',');
				if ($.inArray (sparkId, likeCookie) == -1) {
					likeCookie.push(sparkId);
					$.cookie('CLICKED', likeCookie);
					
					$.ajax({
						type: "POST",
						url: "api/media/like",
						data: "media="+sparkId,
						dataType: 'json',
						success: function(data) {
							//console.log(data);
							if (data.response["@result"] == "success") {
								var count = parseInt($('#spark_'+sparkId+' .likeCount').html());
								$('#spark_'+sparkId+' .likeCount').html(count+1);
							} else if (data.response.errors) {
								alert($.i18n.prop('message.spark.likeerror'));
							}
						}
					});
					
				}
			
				return false;
			});
			// spark comments
			$root.find('.sparkComments').live('click',function() {
				var sparkId = $(this).attr('href').split('_')[1];
				$.ajax({
					type: "POST",
					url: "api/comment/list",
					data: "media="+sparkId,
					dataType: 'json',
					success: function(data) {
						var count = data.response.count;
						var comments = data.response.list;
						html = "";
						$.each(comments, function(i) {
							html += printComment(data.response.list[i]);
						});
						$('#spark_'+sparkId+' .commentForm').show();
						$('#spark_'+sparkId+' .commentList').html(html);
					}
				});
				return false;
			});
			// activate comment field
			$root.find('.commentForm textarea.inactive').live('click',function() {
				$(this).addClass('activated').val('');
				$(this).removeClass('inactive');
			});
			// delete comment
			$root.find('.delComment').live('click', function() {
				var cid = $(this).attr('href').split('_')[1];
				$('html, body').animate({scrollTop:0}, 'fast');
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('sparks.comment.confirmremove')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/comment/delete",
								data: "comment="+cid,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										// remove deleted comment from page
										$root.find('#sparkComment_'+cid).slideUp().remove();
									} else if (data.response.errors) {
										alert($.i18n.prop('sparks.comment.cannotdelete'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
				return false;
			});
			// add a comment
			$root.find('input[name=addComment]').live('click', function() {
				var sparkId = $(this).parent().parent().parent('.spark').attr('id').split('_')[1];
				var comment = $(this).parent().find('textarea').val().replace(/</g, '&lt;')
                    .replace(/>/g, '&gt;')
                    .replace(/&/g, '&amp;')
                    .replace(/\n/g, '<br/>');
				comment = encodeURIComponent(comment);

				if (comment != "" && $(this).parent().find('textarea').hasClass("activated")) {
					$.ajax({
						type: "POST",
						url: "api/comment/create",
						data: "media=" + sparkId + '&content=' + comment,
						dataType: 'json',
						success: function(data){
							if (data.response["@result"] == "success") {
								$.ajax({
									type: "POST",
									url: "api/comment/list",
									data: "media=" + sparkId,
									dataType: 'json',
									success: function(data){
										var count = data.response.count;
										var comments = data.response.list;
										html = "";
										$.each(comments, function(i){
											html += printComment(data.response.list[i]);
										});
										// update comment count and show comments
										$('#spark_' + sparkId + ' .commentCount').html(count);
										$('#spark_' + sparkId + ' .commentList').html(html);
										// reset commenting field
										$('#spark_' + sparkId + ' .commentForm textarea').removeClass("activated").addClass('inactive');
										$('#spark_' + sparkId + ' .commentForm textarea').val($('#spark_' + sparkId + ' .commentForm textarea').attr("title"));
									}
								});
							} else {
								alert($.i18n.prop('sparks.comment.errorcommenting'));
							}
						}
					});
					
				}
				return false;
			});
			
			$root.find('a[href*=#openSpark]').live('click', function () {
				var sparkId = $(this).attr('href').split('_')[1];
				var isAdmin = options.user.isAdmin;
				$('html, body').animate({scrollTop:0}, 'fast');
				$root.find('#groupProfile').slideUp();
				$root.find('#userProfile').slideUp();
				$root.find('.pagePart.addspark').slideUp();
				$root.find('.navi.left #usersGroups a.selected').removeClass('selected');
				openSpark(sparkId);
				return false;
			});
			
			/*****************/
			/* Join to group */
			/*****************/
			$root.find('a[href*=#joinGroup]').live('click', function() {
				var groupId = $(this).attr('href').split('_')[1];
				dataString = "sparkbox="+groupId;
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('sparkbox.message.group.joingroup')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/sparkbox/join",
								data: dataString,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										$root.find('.addspark div.create').hide();
										$root.find('.addspark div.activate').show();
										$root.find('.addspark').show();
										showGroupProfile(groupId);					
										// refresh group list
										refreshMyGroups(options.user.id);		
									} else if (data.response.errors) {
										alert($.i18n.prop('sparkbox.message.group.joinerror'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
				return false;
			});

			/***************/
			/* Leave group */
			/***************/
			$root.find('a[href*=#leaveGroup]').live('click', function() {
				var groupId = $(this).attr('href').split('_')[1];
				dataString = "sparkbox="+groupId;
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('sparkbox.message.group.leavegroup')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							$.ajax({
								type: "POST",
								url: "api/sparkbox/leave",
								data: dataString,
								dataType: 'json',
								success: function(data) {
									//console.log(data);
									if (data.response["@result"] == "success") {
										contentPage($root, "home");
										$('#userProfile, #groupProfile').slideUp();
										// refresh group list
										refreshMyGroups(options.user.id);		
									} else if (data.response.errors) {
										alert($.i18n.prop('sparkbox.message.group.leaveerror'));
									}
								}
							});
						}
					}, {
						text: ''+$.i18n.prop('message.buttoncancel')+''
					}]
				});
				return false;
			});
			
			/*****************/
			/* Settings tabs */
			/*****************/
			$root.find('.content .settings.user').tabs({
				select: function (event, ui) { 
					/*
					if ( $(ui.tab).attr('href') == '#home' )
						return false;
					*/
				}
			});
			// user settings (own)
			$root.find('a[href*=#settings]').click(function(){
				$("#usersGroups a").removeClass("selected");
				$(".navi.right .profile").hide();
				$root.find('.content').busy(true, { message : ''+$.i18n.prop('message.group.loading')+''});
				contentPage($root, 'settings')
			});
			// user settings
			$root.find('a[href*=#edituser]').live('click',function(){
				$("#usersGroups a").removeClass("selected");
				$(".navi.right .profile").hide();
				var editUserID = $(this).attr('href').split('_')[1];
				$root.find('.content').busy(true, { message : ''+$.i18n.prop('message.group.loading')+''});
				contentPage($root, 'settings', editUserID);
				return false;
			});
			
			/*******************/
			/* TOUR NAVIGATION */
			/*******************/
			$root.find('.tourNaviContainer a, .tourPage .nextStep a').live('click', function() {				
				var tourPage = $(this).attr('href').split('_')[1];
				var tourNaviClass = $root.find('.tourNaviContainer ul').attr('class');
				var tourType = tourNaviClass.split('tourNavi')[1];
				
				var th = $(this).attr('href');
				var tc = $(this).attr('class');
				var linkInMenu = $root.find('.tourNaviContainer a[href='+th+']');
	
				if (linkInMenu.parent().hasClass('inactive')) {
					alert($.i18n.prop('tour.patience'));
				} else {
					// keep tournavi on correct selection
					linkInMenu.parent().parent().find('a.selected').removeClass('selected');
					if (linkInMenu.parent().hasClass('title')) {
						linkInMenu.parent().parent().find('li:eq(1) a').addClass('selected');
					} else {
						linkInMenu.addClass('selected');
					}
					// hide tourparts
					$root.find('.content .pagePart.tourPage.'+tourType+'tour .tourcontent > div').hide();
					
					// hide create group and user settings form and set create group button visible
					$root.find('.content .pagePart.groups.createNew').hide();
					$root.find('.content .pagePart.settings.user').hide();
					$root.find('.content .pagePart.tourPage.'+tourType+'tour .tourcontent .hr a').show();
					
					/****************************/
					/* TOUR: ADD SPARK TO GROUP */
					/****************************/
					if (tc == "sparkingLink") {
						$root.find('.addspark div.create').hide();
						$root.find('.addspark div.activate').show();
						$root.find('.addspark').show();
					} else { $root.find('.addspark').hide(); }

					/***********************/
					/* TOUR: CREATE WIDGET */
					/***********************/
					if (tc == "createwidgetLink") {
						//$('.pagePart').hide();
						$root.find('#widgetTool > div').hide();
						$root.find('#widgetTool h3.preview').hide();
						$root.find('#widgetTool #w_start').show();
						
						var grId = $.cookie('groupCreated'); //$(this).attr('href').split('_')[1];
						var grName = "widget name";//$root.find('#groupProfile .info > h2').text();
		
						var opts = {
							groupId:	grId,
							groupName:	grName,
							site:		options.user.site+'.flockler.com',
							siteType:	'sb',
							widget: 	false,
							stylesheet: 'static/css/widget2.css'
						};
						
						if ($.fn.sparkboxWidgetTool2) {
							$root.sparkboxWidgetTool2(opts);					
						} else {
							//not loaded, load and retry
							$root.busy(true,{message:''+$.i18n.prop('widgeteditor.loading')+''});
							$('head').loadStylesheet('http://flockler.com/static/css/colorpicker.css','colorpicker');
							$.getScript('static/js/colorpicker.js', function() {
								$.getScript('static/js/jquery.sparkboxWidgetTool2.js?'+Math.random(), function(){
									$root.sparkboxWidgetTool2(opts);
									$root.busy(false);
								});
							});
						}
												
					} else { $root.find('#widgetTool').hide(); }
					
					/*********************/
					/* TOUR: WIDGET CODE */
					/*********************/
					if (tc == "widgetcodeLink") {
						$root.find('.content .pagePart.tourPage.'+tourType+'tour .tourcontent .tourwidgetcode').text($.cookie('widgetcodeCreated'));
						$root.find('#widgetTool').hide();
					}
					
					// show clicked part
					$root.find('.content .pagePart.tourPage.'+tourType+'tour .tourcontent div.tourPart_'+tourPage).show();	
					$root.find('.content .pagePart.tourPage.'+tourType+'tour').show();					
				}
				$('body, html').animate({scrollTop:0}, 'fast');

				return false;
			});
			/******************************/
			/* TOUR: INVITE DOMAIN ADMINS */
			/******************************/
			// superadmin only
			$root.find('.SuperAdmintour input.emailInviteAdmins').focus(function() {
				if ($(this).hasClass('unused')) {
					$(this).removeClass('unused').val('');				
				} else {
					// nothing to do here
				}
			});
			$root.find('.SuperAdmintour input.doInviteAdmins').live('click', function() {
				var emails = $root.find('.SuperAdmintour input.emailInviteAdmins').val();
				if ($root.find('.SuperAdmintour input.emailInviteAdmins').hasClass('unused') || emails == "") {
					// no email addresses inputted
					$root.busy(true, {
						message: '<p>'+$.i18n.prop('login.email.empty')+'</p>',
						buttons: [{
							text: 'Ok',
							click: function () { $root.find('.SuperAdmintour input.emailInviteAdmins').focus() }
						}]
					});
				} else {
					// check if email addresses are ok
					emailst = emails.replace(/ /g, '');
					emailAr = emailst.split(',');
					emailString = "";
					$.each(emailAr, function(i) {
						if (validateEmail(emailAr[i])) {
							emailString += "&email="+emailAr[i];
						} else if (!validateEmail(emailAr[i])) {
							// failed address
						}
					});
				}
				$.ajax({
					type: "POST",
					url: "api/site/inviteAdmin",
					data: emailString,
					dataType: 'json',
					success: function(data) {
						//console.log(data);
						$root.busy(true, {
							message: '<p>'+$.i18n.prop('mydomain.inviteadmin.sent')+'</p>',
							buttons: [{
								text: 'Ok',
								click: function () {
									$(".navi.left").find("a[href=#t_3]").click();
								}
							}]
						});
					}
				});																		
			});
			/**********************/
			/* TOUR: CREATE GROUP */
			/**********************/
			// superadmin and domain admin
			$root.find('.tourPage a[href=#activateCreateSparkbox]').live('click', function() {
				$(this).slideUp();
				var $p = $root.find('.content .groups.createNew');
				$p.find('h1').hide();//text('Create a new Sparkbox');
				$p.find('input[type=text], input[type=file], textarea').val('');
				$p.find('input[name=memberApproval]:eq(1)').attr("checked", "checked");
				$p.find('input[name=publicMedia]:eq(1)').attr("checked", "checked");
				$p.find('button.deleteGroup,button.saveGroup').hide();
				$p.find('button.createGroup').show();
				createGroup = $root.find('.pagePart.groups.createNew');
				createGroup.show();
				return false;
			});
			/************************/
			/* TOUR: INVITE MEMBERS */
			/************************/
			// superadmin and domain admin
			$root.find('a.inviteFromTour').live('click', function () {
				var groupHandle = $.cookie('groupCreated');
				var mode = "group";
				inviteUser(groupHandle, mode);
				return false;
			});
			/**********************/
			/* TOUR: EDIT PROFILE */
			/**********************/
			// basic user
			$root.find('.tourPage a[href=#activateEditProfile]').live('click', function() {
				$(this).slideUp();
				var $p = $root.find('.content .settings.user');
				// IE needs halp
				nocache = Math.random();
				$.ajax({
					type: "POST",
					url: "api/profile/user",
					data: "nocache="+nocache,
					dataType: 'json',
					success: function(data) {
						if (data.response.list[0]) {
							// populate user settings form
							var $f = $root.find('#userSettingsForm');
							// profile settings
							$f.find('input[name=name]').val(data.response.list[0].name);
							$f.find('input[name=nickname]').val(data.response.list[0].nickname);
							$f.find('input[name=location]').val(data.response.list[0].location);
							$f.find('select[name=country]').val(data.response.list[0].country);
							if (data.response.list[0].description != undefined) {
								$f.find('textarea[name=description]').html(data.response.list[0].description.replace(/<br\/>/g, '\n'));
							} else {
								$f.find('textarea[name=description]').html('');
							}
							$f.find('.picture img').attr('src', data.response.list[0].avatar.fullUrl+'?wh=150x150');
							// account settings
							$f.find('input[name=email]').val(data.response.list[0].email);
							$f.find('select[name=language]').val(data.response.list[0].language);
							// empty avatar and password inputs and error messages
							$f.find('input[name=avatar]').val('').hide();
						$f.find('input[name*=password]').val('');
						$root.find('.passwordError').html('').hide();
					}
					
				}
			});
				$p.show();

				return false;
			});
			
			/*****************/
			/* Avatar upload */
			/*****************/
			$root.find('a[href*=#uploadAvatar]').click(function(){
				var $t = $(this);
				var $fileInput = $t.parent().find('input[name=avatar]');
				$fileInput.show();
				return false;
			});
			
			// home link
			$root.find('a[href=#home]').click(function(){
				$("#usersGroups a").removeClass("selected");
				$(".navi.right .profile").hide();
				contentPage($root, 'home');
			});
			/* faq */
			$root.find('a[href*=#faq]').click(function(){
				contentPage($root, 'faq');
			});
			/* tour */
			$root.find('a[href*=#tour]').click(function(){
				contentPage($root, 'tour');
			});
			$root.find('dl#faqList dt a').toggle(function() {
				$(this).parent('dt').next('dd').show();
				
			}, function() {
				$(this).parent('dt').next('dd').hide();
				
			});
			/*************/
			/* My Domain */
			/*************/
			$root.find('a[href=#myDomain]').click(function() {
				$root.find('.domainPage').busy(true, { message: '<p>'+$.i18n.prop('message.group.loading')+'</p>' });
				$("#usersGroups a").removeClass("selected");
				$(".navi.right .profile").hide();
				contentPage($root, 'domain');				
			});
			/** **************** */
			/* Stats -page */
			/** **************** */		
			$root.find('a[href*=#stats]').click(function(){
				contentPage($root, 'stats');
				return false;
			});
			$root.find('a[href*=#promoteUser]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				promoteUser($root, userId);
				return false;
			});
			$root.find('a[href*=#demoteUser]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				demoteUser($root, userId);
				return false;
			});
			$root.find('a[href*=#removeUser]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				removeUser($root, userId);
				return false;
			});			
			
			$root.find('a[href*=#inviteToDomain]').click( function () {
				var groupHandle = location.href.split('_')[1];
				var mode = "domainAdmin";
				inviteUser(groupHandle, mode);
			});

			/*************************/
			/* User actions in group */
			/*************************/
			// approve member to group from userlist on right
			$root.find('a[href*=#approveUser]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				var groupId = location.href.split('_')[1];
				//alert(userId+" "+groupId);
				var dataString = "sparkbox="+groupId+"&profile="+userId;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/approveMember",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// update group profile
						showGroupProfile(groupId);					
					}
				});
				
				return false;
			});
			// approve membership to group from membership approval page
			$root.find('input.acceptMember').live('click', function () {
				var userId = $(this).parent().attr('id').split('_')[1];
				var groupId = location.href.split('_')[1];
				var dataString = "sparkbox="+groupId+"&profile="+userId;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/approveMember",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// update group profile
						$('body, html').animate({scrollTop:0}, 'fast');
						showGroupProfile(groupId);					
						listMedias("group", groupId);
						$root.find('.addspark div.activate').show();
						$root.find('.pagePart.addspark').show();
					}
				});
				
				return false;
			});
			// deny membership/remove user from group
			$root.find('a[href*=#rejectUser], a[href*=#kickUserFromSparkbox]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				var groupId = location.href.split('_')[1];
				var dataString = "sparkbox="+groupId+"&profile="+userId;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/removeMember",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// update group profile
						showGroupProfile(groupId);					
					}
				});
				
				return false;
			});
			// deny membership to group from membership approval page
			$root.find('input.rejectMember').live('click', function () {
				var userId = $(this).parent().attr('id').split('_')[1];
				var groupId = location.href.split('_')[1];
				var dataString = "sparkbox="+groupId+"&profile="+userId;
				$.ajax({
					type: "POST",
					url: "api/sparkbox/removeMember",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// update group profile
						$('body, html').animate({scrollTop:0}, 'fast');
						showGroupProfile(groupId);					
						listMedias("group", groupId);
						$root.find('.addspark div.activate').show();
						$root.find('.pagePart.addspark').show();
					}
				});
				
				return false;
			});
			// promote user to group admin
			$root.find('a[href*=#promoteGroupAdmin]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				var groupId = location.href.split('_')[1];
				var dataString = "profile="+userId+"&sparkbox="+groupId+'&admin=true';
				$.ajax({
					type: "POST",
					url: "api/sparkbox/changeAdmin",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// update group profile
						showGroupProfile(groupId);					
					}
				});
				return false;
			});
			// demote group admin
			$root.find('a[href*=#demoteGroupAdmin]').live('click', function () {
				var userId = $(this).attr('href').split('_')[1];
				var groupId = location.href.split('_')[1];
				var dataString = "profile="+userId+"&sparkbox="+groupId+'&admin=false';
				$.ajax({
					type: "POST",
					url: "api/sparkbox/changeAdmin",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// update group profile
						showGroupProfile(groupId);					
					}
				});
				return false;
			});

			/************************************/
			/* show groups (adboxes/sparkboxes) */
			/************************************/
			$root.find('a[href*=#refreshGroups]').live('click', function() {
				refreshMyGroups(options.user.id);
				return false;
			});
			
			$root.find('div.addspark div.activate').click(function(){
				$('#groupProfile .groupmembers.box .groupMemberActions').html('');
				$('#groupProfile .groupmembers.box .groupMemberActions').hide();
				$(this).slideUp();
				if ($(this).parent().find('#fileInputContainer').html() == undefined || $(this).parent().find('#fileInputContainer').html() == "") {
					$(this).parent().find('.uploader').prepend('<span id="fileInputContainer"><input type="file" name="file" id="file" /></span>');
				}
				$root.find('div.addspark div.create').slideDown(function(){
					//$(this).find('.sparkTitleCharCount').html('characters left: 100/100');
					$(this).find('.sparkTitleCharCount').html($.i18n.prop('spark.create.charactersleft')+' 50/50');
					$(this).find('.sparkContentCharCount').html($.i18n.prop('spark.create.characters')+' 0');
					// empty inputs
					$(this).find('input').val('');
					$(this).find('textarea').val('');
					$(this).find('textarea').addClass('idle');
					$(this).find('ul.linkList').html('');
					$(this).find('.uploader').hide();
					$(this).find('#newLink').val($.i18n.prop('spark.create.attachment'));
					$(this).find('#newLink').addClass('idle');
					$(this).find('.types button').removeClass("selected");
					$root.busy(false);
					// COUNT CHARACTERS FOR SPARK TITLE 
					$(this).find('.toolbar.titlebar input').keydown(function() {
						//var maxlimit = 100;
						var maxlimit = 50;
						if ($(this).val().length > maxlimit) {
							$root.find('.toolbar.titlebar input').val($root.find('.toolbar.titlebar input').val().substring(0, maxlimit));
						}
						else {
							var charsLeft = maxlimit - $(this).val().length;
							$root.find('.sparkTitleCharCount').html($.i18n.prop('spark.create.charactersleft')+' '+charsLeft+'/50');
						}
					});
					$(this).find('.toolbar.titlebar input').keyup(function() {
						//var maxlimit = 100;
						var maxlimit = 50;
						if ($(this).val().length > maxlimit) {
							$root.find('.toolbar.titlebar input').val($root.find('.toolbar.titlebar input').val().substring(0, maxlimit));
						}
						else {
							var charsLeft = maxlimit - $(this).val().length;
							$root.find('.sparkTitleCharCount').html($.i18n.prop('spark.create.charactersleft')+' '+charsLeft+'/50');
						}
					});

					var messageChars = "";
					$(this).find('.toolbar.messageContent textarea[name=content]').keydown(function() {
						messageChars = $(this).val().length;
						$root.find('.sparkContentCharCount').html('characters: '+messageChars);
					});
					$(this).find('.toolbar.messageContent textarea[name=content]').keyup(function() {
						messageChars = $(this).val().length;
						$root.find('.sparkContentCharCount').html('characters: '+messageChars);
					});
				});
				return false;
			});			

			/********************/
			/* Show memberslist */
			/********************/
			$root.find('a[href*=#groupMembers]').click(function() {
				// hide other pageParts, show only .pagePart.members
				$root.find('.pagePart.sparks, .pagePart.addspark').hide();
				contentPage($root, 'members');
				return false;
			});
			
			/**********************/
			/* Save user settings */
			/**********************/
			$root.find('button.saveSettings').click(function(){
				var $t = $(this);
				var $form = $t.parent().parent('form');

				var userSet = new Array();
				userSet["id"] = $form.find('#euid').val();
				
				$('html, body').animate({scrollTop:0}, 'fast');
				
				// profile settings
				userSet["name"] = $form.find('input[name=name]').val();
				userSet["nick"] = $form.find('input[name=nickname]').val();
				userSet["location"] = $form.find('input[name=location]').val();
				userSet["country"] = $form.find('select[name=country]').val();
				userSet["desc"] = $form.find('textarea[name=description]').val().replace(/</g, '&lt;')
                                    .replace(/>/g, '&gt;')
                                    .replace(/&/g, '&amp;')
                                    .replace(/\n$/, '<br/>&nbsp;')
                                    .replace(/\n/g, '<br/>');
				// account settings
				userSet["email"] = $form.find('input[name=email]').val();
				userSet["lang"] = $form.find('select[name=language]').val();
				userSet["password"] = $form.find('input[name=password]').val();
				userSet["passwordconfirm"] = $form.find('input[name=passwordconfirm]').val();
				
				var dataString = "name="+userSet["name"]+"&email="+userSet["email"]+"&nickname="+userSet["nick"]+"&location="+userSet["location"]+"&country="+userSet["country"]+"&description="+userSet["desc"]+"&language="+userSet["lang"];
				if (options.user.isAdmin == "true" && userSet['id'] != options.user.id) {
					dataString += '&profile='+userSet['id'];
				}

				// password checks
				if ((userSet["password"] == userSet["passwordconfirm"]) && (userSet["password"] != "" && userSet["passwordconfirm"] != "")) {
					dataString += "&password="+userSet["password"];
				} else if ((userSet["password"] != userSet["passwordconfirm"]) && (userSet["password"] != "" || userSet["passwordconfirm"] != "")) {
					$form.find('.passwordError').html(create.password.nomatch).show();
					$root.busy(true, {
						message: '<p>'+$.i18n.prop('message.user.nomatch')+'</p>',
						buttons: [{
							text: 'Ok',
							click: function () {
								// focus to password field
								$root.find("a[href=#accountSettings]").click();
								$form.find("input[name=password]").focus();
							}
						}]
					});
					return;
				}
				
				$.ajax({
					type: "POST",
					url: "api/profile/edit",
					data: dataString,
					dataType: "json",
					success: function(data) {
						// error handling should be here
						//console.log(data.response);
					}
				});
				// upload new avatar
				var $fileInput = $form.find('input[name=avatar]');
				if ($fileInput.is(':visible') && $fileInput.val() != '') {
					// CHECK IF ADMIN EDITS ANOTHER USERS PROFILE; ADD THE PROFILES ID TO PARAMETERS
					if (options.user.isAdmin == "true" && options.user.id != userSet["id"]) {
						ajaxFileUpload('avatar','api/profile/edit?profile='+userSet["id"]);
						setTimeout(function(){contentPage($root, 'settings', userSet["id"]);},1500);
					}
					else {
						ajaxFileUpload('avatar', 'api/profile/edit');							
						setTimeout(function(){contentPage($root, 'settings',options.user.id);},1500);
					}						
				}
				$root.busy(true, {
					message: '<p>'+$.i18n.prop('message.user.saved')+'</p>',
					buttons: [{
						text: 'Ok',
						click: function () {
							// update user image and nick
							updateUserRow();
							if ($.cookie('tourType') == "Usertour" && document.location.href.split('#')[1] == "tour") {
								// go to next page
								$root.find('.tourNaviContainer a.selected').parent().next('li').find('a').click();								
							} else {							
								contentPage($root, "home");
							}
						}
					}]
				});
			});

			//add link or embed to spark
			$root.find('div.addspark button.icon.sparkAdd').live('click',function() {	
				addLink($root, 'div.addspark ul.linkList', $(this).parent().find('input#newLink').val());
				$(this).parent().find('input#newLink').val('');					
			});

			//make link list items deleteable
			$('.gspark .addspark .sparkAttachment a[href=#remove]').live('click', function(){
				$(this).parent().fadeOut('slow', function(){ $(this).remove() });
				return false;
			});

			// send and preview spark
			$root.find('.addspark button.submit').click(function(){
				sendSpark($root, "send");
			});
			$root.find('.addspark button.preview').click(function(){
				sendSpark($root, "preview");
			});
			
			
			// upload and attach file to new spark
			$root.find('.addspark button.uploadFile').click(function() {
				var $fileInput = $(this).parent().find('input[name=file]');
				if ($fileInput.is(':visible') && $fileInput.val() != '') {
					//$root.find('.content').busy(true, { message : ''+$.i18n.prop('message.spark.uploading')+''});
					//$root.busy(true, { message : ''+$.i18n.prop('message.spark.uploading')+''});
					$('body').busy(true, { message : ''+$.i18n.prop('message.spark.uploading')+''});
					ajaxFileUpload('file', 'api/profile/uploadFile');
				}
			});
			$root.find('.addspark .types button').click(function() {
				$root.find('.addspark button.icon.selected').removeClass('selected');
				$(this).addClass('selected');
				$root.find('.addspark .link').slideDown();
				$root.find('.addspark .uploader').slideDown();				
				$root.find('.addspark #newLink').val(''+$.i18n.prop('spark.create.attachment')+'');
			});
			// upload and attach file to old spark (editing)
			$root.find('button.uploadFiledit').live('click', function() {
				var $efileInput = $(this).parent().find('input[name=file]');
				if ($efileInput.is(':visible') && $efileInput.val() != '') {
					//$root.find('.content').busy(true, { message : ''+$.i18n.prop('message.spark.uploading')+''});
					//$root.busy(true, { message : ''+$.i18n.prop('message.spark.uploading')+''});
					$('body').busy(true, { message : ''+$.i18n.prop('message.spark.uploading')+''});
					ajaxFileUpload('file', 'api/profile/uploadFile', 'edit');
				}
			});
						
			// login action
			$root.find('.loginBox form').submit(function() {
				$(".error_login_email, .error_login_password").html('');
				
				// does the user want the system to remember his/hers login-info?
				var rememberUser = false;
				if ($('.pagePart.loginBox #login_login').find('input[name=rememberme]').is(':checked')) {
					rememberUser = true;
				}
				var $form = $(this).parent();				
				var email = $form.find('input[name=email]').val();
				var pass = $form.find('input[name=password]').val();
				var site = "";
				$.ajax({
					type: "POST",
					url: "api/site/get",
					data: "",
					dataType: 'json',
					success: function(data) {
						site = data.response.list[0]["@id"];
						// IF USER IS INVITED TO A GROUP: ADD ID & PIN FROM PARAMETERS TO DATASTRING
						var urli = document.location.href.split("confirmSparkboxProfile?")[1];
						if (urli != undefined && urli != '') {
							var confirmId = urli.split('id=')[1].split('&')[0];
							var confirmPin = urli.split('pin=')[1];
							dataString = 'email='+email+'&password='+pass+'&id='+confirmId+'&pin='+confirmPin;
						}
						else {
							dataString = 'email='+email+'&password='+pass;	
						}
						
						// if the user has chosen the option, store login-info in a cookie
						if (rememberUser == true) {
							$.cookie('remembermeCookie_'+site,email+'_'+pass,remembermecookieoptions);
						}
						else {
							$.cookie('remembermeCookie_'+site,null,remembermecookieoptions);
							$root.find('.content .pagePart.loginBox  #login_login input[name=rememberme]').attr('checked','');
						}		
				
						$.ajax({
							type: "POST",
							url: "api/profile/login",
							data: dataString,
							dataType: 'json',
		 					success: function(data) {
								//console.log(data);
								if (data.response["@result"] == "success") {
									/* no errors, lets get in */
									document.location.href = "sparkbox";
								} else {
									/* errors */
									$.each(data.response.errors, function(i){
										if (data.response.errors[i]["@field"] == "email") {
											$(".error_login_email").html(data.response.errors[i]["@message"]);
										}
										if (data.response.errors[i]["@field"] == "password") {
											$(".error_login_password").html(data.response.errors[i]["@message"]);
										}
									});
									
								}						
							}
						});
					}
				});
				return false;
			});

			$root.find('.loginBox form .send').click(function() {
				$(this).parent().parent("form").submit();
				return false;
			});
			$root.find('.loginBox form input').keyup(function(event) {
				if (event.keyCode == '13') {
					event.preventDefault();
					$(this).parent().parent().parent("form").submit();
				}
			});
			
			// forgot password
			$root.find('#forgotPwdLink').click(function() {
				$root.find("#login_login").slideUp();
				$root.find("#login_forgot input[name=emailfor]").val('');
				$root.find("#login_forgot").slideDown();
				return false;
			});
			$root.find('#requestPass').click(function() {
				var email = $(this).parent().find('input[name=emailfor]').val();
				var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
				var dataString = "email=" + email;
				if (pattern.test(email)) {
					$.ajax({
						type: "POST",
						url: "api/profile/forgotPassword",
						data: dataString,
						dataType: 'json',
	 					success: function(data) {
							$root.busy(true, {
								message: '<p>'+$.i18n.prop('message.login.forgotemail.sent')+'</p>',
								buttons: [{
									text: 'Ok',
									click: function () {
										document.location.href = "login_sparkbox";
									}
								}]
							});
						}
					});
				} else {
					$root.busy(true, {
						message: '<p>'+$.i18n.prop('message.login.forgotemail.invalid')+'</p>',
						buttons: [{
							text: 'Ok',
							click: function () {
								$root.find('input[name=emailfor]').focus();
							}
						}]
					});
				}
			});
			// reset password
			$root.find('#pwdResetForm').submit(function() {
				var params = location.href.split('=');
				var resetId = params[1].split("&")[0];
				var resetPin = params[2];
				var newPass = $('#pwdResetForm').find('input[name=password]').val();
				var newPas2 = $('#pwdResetForm').find('input[name=passwordconfirm]').val();
				if ((newPass == newPas2) && newPass != "") {
					var dataString = "id="+resetId+"&pin="+resetPin+"&password="+newPass;
					$.ajax({
						type: "POST",
						url: "api/util/confirm",
						data: dataString,
						dataType: 'json',
	 					success: function(data) {
							//console.log(data);
							if (data.response["@result"] == "success") {
								$root.busy(true, {
									message: '<p>'+$.i18n.prop('message.user.resetpassword.resetsuccess')+'</p>',
									buttons: [{
										text: 'Ok',
										click: function () {
											$root.find('input[name=emailfor]').focus();
										}
									}]
								});
								document.location.href = "login_sparkbox";
							} else {
								// errors
							}						
						}
					});	
				} else if (newPass == "" && newPas2 == "") {
					$('#pwdResetForm').find('.error_login_password').html(create.password.empty).show();
				} else {
					$('#pwdResetForm').find('.error_login_password').html(create.password.nomatch).show();
					$('#pwdResetForm').find('input[name=password]').focus();
				}
				return false;
			});
			
			// logout action
			$root.find('a[href*=logout]').click(function() {
				$.ajax({
					type: "POST",
					url: "api/profile/logout",
					data: '',
					success: function() {
						document.location.href = "login";
					}
				});
				
				return false;
			});
			
			/************************/
			/* LAUNCH BANNER EDITOR */
			/************************/
			$root.find('a[href*=#createBanner]').live('click', function() {
				$('.pagePart').hide();
				$root.find('#bannerTool').show();
				
				var grId = $(this).attr('href').split('_')[1];
				var grName = $root.find('#groupProfile .info > h2').text();

				var opts = {
					groupId:	grId,
					groupName:	grName,
					site:		options.user.site+'.flockler.com',
					siteType:	'sb',
					banner: 	false,
					stylesheet: 'static/css/banner.css'
				};
				
				if ($.fn.sparkboxBannerTool) {
					$root.sparkboxBannerTool(opts);					
				} else {
					//not loaded, load and retry
					$root.busy(true,{message:''+$.i18n.prop('bannereditor.loading')+''});
					$('head').loadStylesheet('http://flockler.com/static/css/colorpicker.css','colorpicker');
					$.getScript('static/js/colorpicker.js', function() {
						$.getScript('static/js/jquery.sparkboxBannerTool.js?'+Math.random(), function(){
							$root.sparkboxBannerTool(opts);
							$root.busy(false);
						});
					});
				}
				
				return false;
			});
			$('select[name=groupBanners]').live('change', function() {
				$('.pagePart').hide();
				$root.find('#bannerTool').show();
				$root.find('#banner_steps > div').hide();
				$root.find('#banner_stepper a[href=#step_1]').addClass("active");
				$root.find('#banner_steps #bannerStep_1').show();
				
				var grId = document.location.href.split('_')[1];
				var grName = $root.find('#groupProfile .info > h2').text();

				var opts = {
					groupId:	grId,
					groupName:	grName,
					site:		options.user.site+'.flockler.com',
					siteType:	'sb',
					banner: 	$(this).val(),
					stylesheet: 'static/css/banner.css'
				};
				
				if ($.fn.sparkboxBannerTool) {
					$root.sparkboxBannerTool(opts);
					
				} else {
					//not loaded, load and retry
					$root.busy(true,{message:''+$.i18n.prop('bannereditor.loading')+''});
					$('head').loadStylesheet('http://flockler.com/static/css/colorpicker.css','colorpicker');
					$.getScript('static/js/colorpicker.js', function() {
						$.getScript('static/js/jquery.sparkboxBannerTool.js?'+Math.random(), function(){
							$root.sparkboxBannerTool(opts);
							$root.busy(false);
						});
					});
				}
				
				return false;
			});

			/************************/
			/* LAUNCH WIDGET EDITOR */
			/************************/
			$root.find('a[href*=#createWidget]').live('click', function() {
				$('.pagePart').hide();
				$root.find('#widgetTool > div').hide();
				$root.find('#widgetTool h3.preview').hide();
				$root.find('#widgetTool #w_start').show();
				
				var grId = $(this).attr('href').split('_')[1];
				var grName = $root.find('#groupProfile .info > h2').text();

				var opts = {
					groupId:	grId,
					groupName:	grName,
					site:		options.user.site+'.flockler.com',
					siteType:	'sb',
					widget: 	false,
					stylesheet: 'static/css/widget2.css'
				};
				
				if ($.fn.sparkboxWidgetTool2) {
					$root.sparkboxWidgetTool2(opts);					
				} else {
					//not loaded, load and retry
					$root.busy(true,{message:''+$.i18n.prop('widgeteditor.loading')+''});
					$('head').loadStylesheet('http://flockler.com/static/css/colorpicker.css','colorpicker');
					$.getScript('static/js/colorpicker.js', function() {
						$.getScript('static/js/jquery.sparkboxWidgetTool2.js?'+Math.random(), function(){
							$root.sparkboxWidgetTool2(opts);
							$root.busy(false);
						});
					});
				}
				
				return false;
			});
			// EDIT WIDGET
			$root.find('select[name=groupWidgets]').live('change', function() {
				$('.pagePart').hide();
				$root.find('#w_start, #w_basic').hide();
				$root.find('#w_pro #pro_steps > div').hide();
				$root.find('#w_pro').show();
				$root.find('h3.preview').show();
				$root.find('#w_pro #pro_stepper a[href=#step_1]').addClass("active");
				$root.find('#w_pro #pro_steps #proStep_1').show();
				
				var grId = document.location.href.split('_')[1];
				var grName = $root.find('#groupProfile .info > h2').text();

				var opts = {
					groupId:	grId,
					groupName:	grName,
					site:		options.user.site+'.flockler.com',
					siteType:	'sb',
					widget: 	$(this).val(),
					stylesheet: 'static/css/widget2.css'
				};
				
				if ($.fn.sparkboxWidgetTool2) {
					$root.sparkboxWidgetTool2(opts);					
				} else {
					//not loaded, load and retry
					$root.busy(true,{message:''+$.i18n.prop('widgeteditor.loading')+''});
					$('head').loadStylesheet('http://flockler.com/static/css/colorpicker.css','colorpicker');
					$.getScript('static/js/colorpicker.js', function() {
						$.getScript('static/js/jquery.sparkboxWidgetTool2.js?'+Math.random(), function(){
							$root.sparkboxWidgetTool2(opts);
							$root.busy(false);
						});
					});
				}
				
				return false;
			});
			
			/* register admin account */
			$root.find('#register_admin_form input[type=submit]').click(function() {
				var $f = $(this).parent('form');
				var r_name = $f.find('input[name=name]').val();
				var r_company = $f.find('input[name=company]').val();
				var r_country = "";
				var r_nick = $f.find('input[name=nickname]').val();
				var r_email = $f.find('input[name=email]').val();
				var r_pass = $f.find('input[name=password]').val();
				var r_pass2 = $f.find('input[name=passwordconfirm]').val();
				var r_site = $f.find('input[name=site]').val();
				var dataString = "name="+r_name+"&company="+r_company+"&country="+r_country+"&nickname="+r_nick+"&email="+r_email+"&site="+r_site+"&password="+r_pass+"&password2="+r_pass2;

				/* remove error messages */
				$(".error").html("");
				if (r_pass != "" && r_pass != r_pass2) {
					//$(".error_passwordconfirm").html(create.password.nomatch);
					$(".error_passwordconfirm").html(''+$.i18n.prop('create.password.nomatch')+'');
				}
				
				$.ajax({
					type: "POST",
					url: "api/site/create",
					data: dataString,
					dataType: 'json',
 					success: function(data) {
						//console.log(data);
						var passs = this.data.split("password=")[1];
						var pass1 = passs.split("&")[0];
						var pass2 = passs.split("=")[1];
						var site = this.data.split("site=")[1].split("&")[0];
						/* remove error messages */
						$(".error").html("");
						if (data.response["@result"] == "success") {
							/* no errors, lets go to the newly created site */
							/* TODO: landing page */
							document.location.href = "http://" + site + ".flockler.com/login_sparkbox?msg=newAdmin";
						} else {
							/* show errors */
							$.each(data.response.errors, function(i){
								if (data.response.errors[i]["@message"] == "create.site.empty") {
									//$(".error_site").html(create.site.empty);
									$(".error_site").html('Site cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.site.exists") {
									//$(".error_site").html(create.site.exists);
									$(".error_site").html('Site already exists');
								}
								if (data.response.errors[i]["@message"] == "create.nickname.empty") {
									//$(".error_nick").html(create.nickname.empty);
									$(".error_nick").html('Nickname cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.email.empty") {
									//$(".error_email").html(create.email.empty);
									$(".error_email").html('Email cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.password.empty") {
									//$(".error_password").html(create.password.empty);
									$(".error_password").html('Password cannot be empty');
								}
								if (pass1 != pass2) {
									//$(".error_passwordconfirm").html(create.password.nomatch);									
									$(".error_passwordconfirm").html('Passwords do not match');
								}
								if (data.response.errors[i]["@message"] == "create.company.empty") {
									//$(".error_company").html(create.company.empty);
									$(".error_company").html('Company cannot be empty');
								}
							});
							
						}						
					}
				});				
				return false;
			});

			// <register domain admin -account>
			//$root.find('#register_admin_form input[type=submit]').click(function() {
			$root.find('#register_siteadmin_form span.send').click(function() {
				var $f = $(this).parent('form');
				var r_name = $f.find('input[name=name]').val();
				var r_company = $f.find('input[name=company]').val();
				var r_country = "";
				var r_nick = $f.find('input[name=nickname]').val();
				var r_lang = $f.find('select[name=language] option:selected').val();
				var r_email = $f.find('input[name=email]').val();
				var r_pass = $f.find('input[name=password]').val();
				var r_pass2 = $f.find('input[name=passwordconfirm]').val();
				// IF DOMAIN ADMIN -INVITATION HAS BEEN SENT: ADD ID & PIN FROM PARAMETERS TO DATASTRING
				var dataString = "";
				var urli = document.location.href.split("confirmAdmin?")[1];
				if (urli != undefined && urli != '') {
					var confirmId = urli.split('id=')[1].split('&')[0];
					var confirmPin = urli.split('pin=')[1];
					dataString = 'name='+r_name+'&company='+r_company+'&nickname='+r_nick+'&language='+r_lang+'&email='+r_email+'&password='+r_pass+'&password2='+r_pass2+'&id='+confirmId+'&pin='+confirmPin;
				}
				else {
					dataString = 'name='+r_name+'&company='+r_company+'&nickname='+r_nick+'&language='+r_lang+'&email='+r_email+'&password='+r_pass+'&password2='+r_pass2;	
				}				

				/* remove error messages */
				$(".error").html("");
				if (r_pass != "" && r_pass != r_pass2) {
					//$(".error_passwordconfirm").html(create.password.nomatch);
					$(".error_passwordconfirm").html(''+$.i18n.prop('create.password.nomatch')+'');
				}
				
				var userLang = '';
				var inviteLang = document.location.href.split('lang=')[1];
				if (inviteLang == r_lang) {
					userLang = inviteLang;
				}
				else {
					userLang = r_lang;
				}
				
				$.ajax({
					type: "POST",
					url: "api/profile/create",
					data: dataString,
					dataType: 'json',
 					success: function(data) {
						// console.log(data);
						var passs = this.data.split("password=")[1];
						var pass1 = passs.split("&")[0];
						var pass2 = passs.split("=")[1];
						//var site = this.data.split("site=")[1].split("&")[0];
						/* remove error messages */
						$(".error").html("");
						if (data.response["@result"] == "success") {
							/* no errors, lets go to the newly created site */
							var u = document.location.href;
							if (u.indexOf('http://localhost:8080') == 0) {
								document.location.href = "http://localhost:8080/SparkBox/login_sparkbox?lang="+userLang;
							} else {
								document.location.href = u.split('.')[0] + ".flockler.com/login_sparkbox?lang="+userLang;
							}
						} else {
							/* show errors */
							$.each(data.response.errors, function(i){
								if (data.response.errors[i]["@message"] == "create.name.empty") {
									//$(".error_name").html(create.name.empty);
									$(".error_name").html('Name cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.nickname.empty") {
									//$(".error_nick").html(create.nickname.empty);
									$(".error_nick").html('Nickname cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.email.empty") {
									//$(".error_email").html(create.email.empty);
									$(".error_email").html('Email cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.password.empty") {
									//$(".error_password").html(create.password.empty);
									$(".error_password").html('Password cannot be empty');
								}
								if (pass1 != pass2) {
									//$(".error_passwordconfirm").html(create.password.nomatch);									
									$(".error_passwordconfirm").html('Passwords do not match');
								}
								if (data.response.errors[i]["@message"] == "create.company.empty") {
									//$(".error_company").html(create.company.empty);
									$(".error_company").html('Company cannot be empty');
								}
							});
							
						}						
					}
				});				
				return false;
			});
			// </register domain admin -account>			
			
			// <register user-account>
			// FUNCTION TO DISPLAY SUCCESSFULL ACCOUNT CREATION
			function createUserSuccess(userId, userEmail, status, uLang) {
				$root.find('#register_user').fadeOut('fast');
				document.location.href = './register_user_success?status='+status+'&lang='+uLang;
				//$root.find('#userRegisterSuccess').fadeIn('fast');
				//$('html, body').animate({scrollTop:0}, 'fast');
			}			
			// CREATING A NEW USER-PROFILE
			//$root.find('#register_user_form').submit(function() {
			$root.find('#register_user_form span.send').click(function() {
				/* remove error messages */
				$(".error").html("");
				var $f = $(this).parent('form');
				//var $f = $(this);
				var r_name = $f.find('input[name=name]').val();
				var r_lang = $f.find('select[name=language] option:selected').val();
				var r_nick = $f.find('input[name=nickname]').val();
				var r_email = $f.find('input[name=email]').val();
				var r_pass = $f.find('input[name=password]').val();
				var r_pass2 = $f.find('input[name=passwordconfirm]').val();
				if ($f.find('fieldset.agree input:checked').val() == undefined) {
					//$('.error_agree').html(create.agree.empty);
					$('.error_agree').html('You must agree to the terms and conditions');
					return false;
				}
				// IF GROUP-INVITATION HAS BEEN SENT: ADD ID & PIN FROM PARAMETERS TO CREATESTRING
				var createString = "";
				var urli = document.location.href.split("confirmSparkboxProfile?")[1];
				if (urli != undefined && urli != '') {
					var confirmId = urli.split('id=')[1].split('&')[0];
					var confirmPin = urli.split('pin=')[1].split('&')[0];
					createString = 'name='+r_name+'&language='+r_lang+'&nickname='+r_nick+'&id='+confirmId+'&pin='+confirmPin+'&password='+r_pass+'&password2='+r_pass2;
				}
				else {
					createString = 'name='+r_name+'&language='+r_lang+'&nickname='+r_nick+'&password='+r_pass+'&password2='+r_pass2;	
				}
				
				if (r_pass != "" && r_pass != r_pass2) {
					//$(".error_passwordconfirm").html(create.password.nomatch);
					$(".error_passwordconfirm").html(''+$.i18n.prop('create.password.nomatch')+'');
					return false;
				}
				
				var userLang = '';
				var inviteLang = document.location.href.split('lang=')[1];
				if (inviteLang == r_lang) {
					userLang = inviteLang;
				}
				else {
					userLang = r_lang;
				}
				
				$.ajax({
					type: "POST",
					url: "api/profile/create",
					data: createString,
					dataType: 'json',
 					success: function(data) {
						//console.log(data);					
						var passs = this.data.split("password=")[1];
						var pass1 = passs.split("&")[0];
						var pass2 = passs.split("=")[1];
						if (data.response["@result"] == "success") {							
							// TODO OR NOT TODO: if the given email is ok, the system should automatically send an email..
							//alert("success! here be redirect (btw, the new account ID is: "+data.response.id+")");
							//createUserSuccess();
							createUserSuccess(data.response.id, r_email, 'success', userLang);
												
						} else {
							/* show errors */
							$.each(data.response.errors, function(i){
								if (data.response.errors[i]["@message"] == "create.nickname.empty") {
									//$(".error_nick").html(create.nickname.empty);
									$(".error_nick").html('Nickname cannot be empty');
								}								
								if (data.response.errors[i]["@message"] == "create.email.empty") {
									//$(".error_email").html(create.email.empty);
									$(".error_email").html('Email cannot be empty');
								}
								if (data.response.errors[i]["@message"] == "create.email.exists") {
									//$(".error_email").html(create.email.exists);
									$(".error_email").html('Email already exists');
								}								
								if (data.response.errors[i]["@message"] == "create.password.empty") {
									//$(".error_password").html(create.password.empty);
									$(".error_password").html('Password cannot be empty');
								}
								if (pass1 != pass2) {
									//$(".error_passwordconfirm").html(create.password.nomatch);									
									$(".error_passwordconfirm").html('Passwords do not match');
								}
							});
						}						
					}
				});
				//return false;
			});
			// SHOW TERMS AND CONDITIONS
			$('a.agreeTerms').live('click', function() {
				var termsConditions = $root.find('.termsConditions').html();
				$('.gspark .termsDialog').html(termsConditions);
				$('.gspark .termsDialog').dialog({
					modal:true,
					resizable:true,
					draggable:true,
					width:475,
 					height:455,					
					title:$.i18n.prop('user.register.termsconditionstitle'),					
					dialogClass:'gspark',
					buttons: {					
						'Ok': function () {						
							$(this).dialog('close');
						}
					}
				});
				$('.ui-dialog-buttonpane :button').each(function() {
					if ($(this).text() == 'Ok') {
						$(this).text($.i18n.prop('message.buttonok'));
					}
				});
				return false;
			});
			// SHOW ACTIVATION E-MAIL RESEND
			$root.find('#userRegisterSuccess .lostActivation').live('click', function() {
				$root.find('#userRegisterSuccess').fadeOut('fast');
				$root.find('#userLostActivation').fadeIn('fast');				
			});		
			// </register user-account>
		}
		
 		this.each(function () {
 			var $root = $(this);
			//$root.busy(true, { message:"<p>Starting Sparkbox application...</p>"});
			
			init($root);
 			var anchor = document.location.href.split("#")[1];
			if (!anchor) {
				//contentPage($root, 'start');
				if (options.user != undefined) {
					if (options.user.isAdmin == "false") {
						$root.find('.content .pagePart.homePage').hide();
						$.ajax({
							type: "POST",
							url: "api/sparkbox/list",
							// data: profileString,
							data: "",
							dataType: 'json',
		 					success: function(data) {
								if (data.response.count > 0) {
									var groupId = data.response.list[0].id;
									//if ($.cookie('showUserTour_'+options.user.id) != undefined) {
											// tour has been shown to user
											$root.find('.pagePart').hide();
											$root.find('.addspark div.create').hide();
											$root.find('.addspark div.activate').show();
											$root.find('.addspark').show();							
											listMedias("group", groupId);
											showGroupProfile(groupId);
											document.location.href = "./sparkbox#listGroup_"+groupId;											
									/*}
									else {
										$.cookie('showUserTour_'+options.user.id, 'tourDisplayed=true', showusertourcookieoptions);
										// TODO: show tour to first-time user...
										$root.find('a[href=#tour]').click();
										document.location.href = '#tour';
									}*/
									$root.busy(false);
								}
								else {
									$.ajax({
										type: "POST",
										url: "api/profile/logout",
										data: '',
										success: function() {
											$root.busy(true, {
												message: '<p>'+$.i18n.prop('message.group.notmember')+'</p>',
												buttons: [{
													text: ''+$.i18n.prop('message.buttonok')+'',
													click: function () {
														// document.location.href
														// = "sparkbox";
														document.location.href = "./sparkbox";
														$root.busy(false);
													}
												}]
											});																			
										}
									});								
									//return false;
								}
							}
						});
						//return false;
						// }
					}
				}				
			} else {				
				setTimeout(function () { 
					if (anchor.indexOf('listGroup') == 0) {
						
						var param = anchor.split('_');
						var groupId = param[1];
						
						
						
						$root.find('#usersGroups a[href=#listGroup_'+groupId+']').addClass("selected");
						$root.find('.pagePart').hide();
						$root.find('.addspark div.create').hide();
						$root.find('.addspark div.activate').show();
						$root.find('.addspark').show();
						listMedias("group", groupId);
						showGroupProfile(groupId);
						$root.busy(false);
					}
					else if (anchor.indexOf('users') == 0) {
						// foo
					}
					else {
						var $a = $root.busy(false).find('a[href=#' + anchor + ']');
						if ($a.size()) {
							$a.click();
						} else {
							//$root.find('a[href=#listSparks_stream]').click();
						} 
					}
				}, 1500);
			}
			

 		});
 		
 		return this;
	}

	/***************************/
	/* Busy mask and messaging */
	/***************************/
	$.fn.busy = function (on, options) {
		var defaults = {
			root : '#gspark',
			onShow : false,
			onHide : false,
			buttons : [],
			message : false
		};
		
		options = $.extend(defaults, options);
	
		function setPosition () {
			var $p = $(this).data('parent');

			var offs = $p.offset();
			
			//disappear if parent gone

			if (!$p || $p.width() == 0 && $p.height() == 0) {
				$(this).remove();
				return;
			}
						
			$(this).css({
				zIndex: 100000,
				width: $p.innerWidth(),
				height: $p.innerHeight(),
				top: offs.top,
				left: offs.left,
				opacity: 0.8
			});
		}
				
		this.each(function () {
			var $t = $(this);
			var $b = $t.data('busy');
			
			if (!$b) {
				$b = $('<div class="busy"/>').appendTo(options.root);
				$t.data('busy',$b);
				$b.data('parent',$t);
			}
			
			//refresh all .busy layers
			$('.busy').each( setPosition );			
			$b.show().html('');

			if (options.message) {
				var $message = $('<div class="message">'+options.message+'</div>');
				//$message.css({ marginTop : $(document.body).scrollTop()+20+'px'});
				$message.css({ marginTop : $('#gspark').scrollTop()+20+'px'});
				$message.appendTo($b).fadeIn();
				
				if (options.buttons.length) {
					$(options.buttons).each( function() {
						var $button = $('<button> ' + this.text + ' </button>');
						if (this.click) $button.click(this.click);
						$button.click(function(){$b.fadeOut('slow');});
						$button.appendTo($message);
					});
				}
			}
			
			if (on)
				$b.fadeIn(options.onShow);
			else
				if (!options.button) $b.hide().fadeOut(options.onHide);
		});
		return this;
	};

}
)(jQuery);

