/*
 * vr_ modatut rutiinit
 */
var gsparkCb = {};


(function($) {
	
	/* create element sized busy-plex */
	
	$.fn.busy = function (on,message,cb,wait) {
		this.each(function () {
			var $t = $(this);
			var $b = $t.data('busy');
			
			if (!$b) {
				$b = $('<div class="sparkBusy"/>').appendTo(document.body);
				$t.data('busy',$b);
			}
			
			$b.children().fadeOut(function () { $(this).remove() } );
			
			var offs = $t.offset();
						
			$b.css({
				zIndex: 100000,
				width: $t.innerWidth(),
				height: $t.innerHeight(),
				top: offs.top,
				left: offs.left,
				opacity: 0.7
			});
			
			if (message) {
				var $message = $('<div>'+message+'</div>');
				$message.appendTo($b).fadeIn();
				
				if (wait) {
					$('<button> OK </button>').click( function() { $b.fadeOut('slow',cb) } ).appendTo($message);
				}
				
				$message.css({ paddingTop : ( $b.height()-$message.height() ) / 2 });
			}
			
			if (on)
				$b.fadeIn('slow', cb);
			else
				if (!wait) $b.fadeOut('slow', cb);
		});
		return this;
	};

	$.fn.sparkRegister = function () {
			
		function handleRegister(data) {
				switch (data.status) {
					case "fail":
						var html = "<p>"+data.statusText+':</p>';
						$(data.error).each(
							function (i) {
								if (this != "") html += "<p>"+this+"</p>";
							}
						);
						//$('#sparkRegister').busy(false, html, function() {} ,true);
						$('.vr_register_errors').html(html);
						$('#registerNewUser form').show();
						$('#sparkRegister').busy(false);
						break;
					case "notMember":
						var html = "<p>"+data.statusText+'</p>';
						//$('#sparkRegister').busy(false, html, function() {} ,true);
						$('.vr_register_errors').html(html);
						//$('#registerNewUser form').slideUp();
						$('#sparkRegister').busy(false);
						break;
					default:
						//$('#sparkRegister').busy(false, '<p>'+data.statusText+'</p>:', function() { document.location.reload(); } ,true);
						var html = "<p>"+data.statusText+':</p>';
						$(data.error).each(
							function (i) {
								if (this != "") html += "<p>"+this+"</p>";
							}
						);
						$('.vr_register_errors').html(html);
						$('#registerNewUser form').show();
						$('#sparkRegister').busy(false);
				}
		};
			
		function initRegister(){
			$('#sparkRegister').busy(false);
			
			var $textarea = $('#sparkRegister textarea');
			$textarea
				.val($textarea.attr('title'))
				.css({'color':'#aaa'})
				.bind('click focus', function () {
					$(this).val('').css({'color':''}).unbind('click focus');
				});
			
			
			$('#registerNewUser form').submit(function(){
				//$('#sparkRegister').busy(true, '<p>Ladataan..</p>');
				$(this).parent().prepend('Ladataan..');
				$(this).hide();
				gsparkCb.register = handleRegister;
				var cb = "gsparkCb.register"
				var params = "?cb=" + cb + "&" + $(this).formSerialize();
				
				
				$.getScript($(this).attr('action') + params);
				return false;
			});
		};

		this.each(function () {
			$(this).click(function() {
				if ($('#sparkRegister').size() == 0) {
					$('<div id="sparkRegister"/>').appendTo(document.body).dialog({
						position: ['left','top'],
						modal: true,
						resizable: false,
						width: 450,
						height: 530,
						title: $(this).attr('title'),
						close: function(){ $('#sparkRegister').busy(false) }
					});
				} else {
					$('#sparkRegister').dialog('open').html('');
				}
				$('#sparkRegister').busy(true, $(this).attr('title')).load($(this).attr('href'), initRegister);
				return false;
			});
		});

			return false;
	};

	$.fn.sparkLogin = function ()
	{		
		function initLogin() {
						
			/* open registration dialog */
			$('#sparkLogin a.register').sparkRegister();
			
			$('#password').bind('click focus',function () {
				$(this).replaceWith('<input type="password" id="password" name="password"/>');
				$('#password').focus();
			});
			
			$('#emailAddress').bind('click focus',function () {
				$(this).removeClass('new').val('');
			});
		
			function handleLogin( data ) {
				switch(data.status) {
					case "fail":
						$('#loginNote, #loginPending').hide();
						$('#loginError').show();
						$('#sparkLogin').busy(false);
						break;
					case "notMember":
						$('#loginNote, #loginPending').hide();
						$('#loginError').show();
						$('#sparkLogin').busy(false, data.statusText, function () {$('#sparkLogin a.register').click(); });
						break;
					case "pending":
						$('#loginNote ,#loginError').hide();
						$('#loginPending').show();
						$('#sparkLogin').busy(false);
						break;
					case "loginOk":
						$('#sparkLogin').busy(false, data.statusText, function () { document.location.reload(); });
						break;
				}
			};
			
			$('#loginbox').submit(function() {
				$('#sparkLogin').busy(true,$(this).attr('title'));
				gsparkCb.login = handleLogin;
				var cb = "gsparkCb.login"
				var params = "?cb="+cb+"&"+$(this).formSerialize();
				$.getScript( $('#loginbox').attr('action') + params );
				return false;
			});

			 $('#sparkLogin').busy(false);
		};
		
		this.each(function () {
			$(this).click(function() {
				var $t = $(this);
				if ($('#sparkLogin').size()==0)
				{
					var dialogOptions = { position: ['left','top'], modal : true, resizable : false,width: 450, height: 180,title:$t.attr('title'),close:function(){$('#sparkLogin').busy(false)}};
					$('<div id="sparkLogin"/>').appendTo(document.body).dialog(dialogOptions);
				} else {
					$('#sparkLogin').height(180).dialog('option', 'height', 180).dialog('open').html();	
				}
				$('#sparkLogin').busy(true,$t.attr('title')).load($t.attr('href'),initLogin);
				return false;
			});
		});
		return this;
		
	};
	
	$.fn.sparkCreate = function ( options )
	{
		var defaults = {};
		options = $.extend(defaults,options);
		
		function init($p) {
			var $linkTab = $p.find('.link').hide();
			var $linkList = $p.find('ul');
			var $form = $p.find('form');
			var $embedField = $form.find('[name=message]').val('');
			var $messageField = $form.find('[name=description]');
			var $uploaderTab = $p.find('.uploader').hide();
			var $uploadField = $p.find('.uploader input[type=file]');
			
			$p.find('.new')
				.each(function(){ $(this).val($(this).attr('title')) } )
				.click( function() { $(this).val("").removeClass('new').unbind() });
			
			$p.find('.link textarea').val('').bind('change keyup',function(event) {
				if (event.keyCode && event.keyCode != 13 ) return;
				
				/* examine user input */
				var input = $(this).val();
				
				if ( input.indexOf('http://') == 0 ) {
				
					var link = input.split('http://')[1];
					if (link.indexOf(' ') != -1 ) link = link.split(' ')[0];
					if (link.indexOf('"') != -1 ) link = link.split('"')[0];
					link = "http://"+link;					
	
					/* strip extra params from youtube link*/
					if ( link.indexOf('youtube')!= -1 )
					{
							link = link.split('&')[0];					
					}
	
					var linkName = link;
	
				
					$('<li>'+linkName+'</li>')
						.click(function() { $(this).remove(); } )
						.data('url',link)
						.appendTo($linkList);
				
					$(this).val('');
					
					$linkTab.slideUp();
					$uploaderTab.slideUp();
				} else {
					//is something more than a link...
					var objectHTML = input.split('</object>')[0]+'</object>';
			
					$('<li>EMBED video</li>')
						.click(function() { $(this).remove(); } )
						.data('url', objectHTML)
						.appendTo($linkList);
						
					$(this).val('');
					
					$linkTab.slideUp();
					$uploaderTab.slideUp();
				}
			});
			
			$p.find('.tools button').click(function() {
				
				//warn html embed content
				if (  $messageField.val().indexOf('object') != -1) {
					alert('Syötä embed-koodit video-liite kenttään!');
					 $messageField.val('');
				}
				
				$('.tools button').removeClass('selected');

				$('#create_spark .link textarea')
					.val($(this).attr('title'))
					.addClass('new')
					.click(function() { $(this).val('').removeClass('new').unbind('click') } );

				switch ( $(this).attr('class') ) {
					case "addImage":
						$linkTab.show();
						$uploaderTab.show();
						break;
					case "showPreview":
						$uploaderTab.hide();
						$form.find('input[name=a]').val('binary');
						/* add linkList to formdata */
						var embeds ="";
						$linkList.find('li').each(function () {
							embeds += $(this).data("url") +"\n";
						} );
						$embedField.val(embeds);
						if ($uploadField.val() != "")
							$form.find('input[name=type]').val("wfm/image");
							
						$('#_preview')
							.unbind('load')
							.load(function () {
							 	$('#previewSpark').hide().load($form.attr('action')+'?'+Math.random(), function (data) {
									$('#previewSpark a').attr('onclick','').click(function () { return false; });
									$('#previewSpark a.delete').hide();
									$('#previewSpark').show();
									$('#editSpark').hide();
								});
								$form.find('input[name=a]').val('accept'); 
							 });
						$form.submit();
						break;
					default:
						$linkTab.show();
						$uploaderTab.hide();
				}
				
				$(this).addClass('selected');
			});
			
			$('#previewSpark').click( function () { 
				$('#editSpark').slideDown();
				$(this).slideUp()
			});
			
			function send () {
				//warn html embed content
				if (  $messageField.val().indexOf('object') != -1) {
					alert('Syötä embed-koodit video-liite kenttään!')
					 $messageField.val('')
				}
				
				
				/* hide error messages */
				$form.find('.emptyFields').fadeOut();
				/* add linkList to formdata */
				var embeds ="";
				$linkList.find('li').each(function () {
					embeds += $(this).data("url") +"\n";
				} );
				
				if ($messageField.val() !="" || embeds !="") {
					$p.busy(true,$p.attr('title'));
					$embedField.val(embeds);
					if ($uploadField.val() != "")
						$form.find('input[name=type]').val("wfm/image");
					/* use iframe to detect when ready */
					$('#_preview')
						.unbind('load')
						.load(function() {
							$p.busy(false, 'ok');
							$messageField.val('');
							$embedField.val('');
							$linkList.html('');
							$uploadField.val('');
							document.location.href=document.location.href+'?send';
						});
					$form.submit();
					return false;
				} else {
					$form.find('.emptyFields').fadeIn();
					return false;
				}
			}
			$form.find('button.send_spark').click(send);
		};
		
		this.each(function () {
			init($(this));
		});
		return this;
	};
	
	$.fn.sparkIgnite = function ( options )
	{
		var defaults = {};
		options = $.extend(defaults,options);
		
		function init() {
			var $t = $(this);
			$t.find('.new').click( function() { $(this).val("").removeClass('new') });
			$t.find('.error').hide();
			
			var $link = $t.find('a.link').hide();

			//create bitly
			gsparkCb.bitly = function(data){
				var result;
				for (var r in data.results) {
					result = data.results[r];
					result['longUrl'] = r;
					break;
				}
				$link.attr('href',result['shortUrl']).text(result['shortUrl']);
				var title = $('#sparkIgnite').dialog('option', 'title').split(':')[0];
				$('#sparkIgnite form input[name=url]').val(result['shortUrl']);
				$('#sparkIgnite').dialog('option', 'title', title + ' : ' + result['shortUrl']);
				
				
			};
			BitlyClient.shorten($link.attr('href'), 'gsparkCb.bitly');
			
			
			$('#recipient').change( function () {
				var $f=$(this);
				
				var emails = $f.val().split(',');
				
				$t.find('.error').hide();
				
				$(emails).each( function () {
					var email = this;
					
					//validate email
					var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
					if (!filter.test(email)) {
						$t.find('.error').show();
						$f.focus();
					} else {
						$('<li>'+email+'</li>')
							.click(function(){$(this).remove()})
							.appendTo('#sparkIgnite ul');
						$f.val("");
					}
				});
			});
			

			$t.find('.twitter').click(function () {
				var status = $('#sparkIgnite a.link').attr('href');
				window.open('http://twitter.com/home?status='+status, "Twitter");
			});
			
			$t.find('.facebook').click(function () {
				var status = $('#sparkIgnite a.link').attr('href');
				window.open('http://www.facebook.com/share.php?u='+status, "Facebook");	
			});
								
			function handleReSpark(data) { 
				$('#sparkIgnite').busy(false, data.statusText, function() { $('#sparkIgnite').dialog('close') } );
			};
				
			$t.find('.send').click(function () {
				
				gsparkCb.respark = handleReSpark;
				var cb = "gsparkCb.respark";
				
				var params = "?cb="+cb+"&"+$('#sparkIgnite form').formSerialize();;
				
				//convert email list
				$('#sparkIgnite ul li').each(function () {
					
					params += "&toEmail="+$(this).text();
				});
			
				$('#sparkIgnite').busy(true, $('#sparkIgnite form').attr('title'));
						
				$.getScript( $('#sparkIgnite form').attr('action') + params );
			});
		};
		
		
		this.each(function () {
			
			$(this).click(function() {
				var $t = $(this);
				if ($('#sparkIgnite').size()==0)
				{					
					$('<div id="sparkIgnite"/>')
						.appendTo(document.body)
						.dialog({
							position: ['left','top'],
							modal : true,
							resizable : false,
							width: 450,
							height: 400,
							title: $t.attr('title') +" : ",
							close: function() { $('#sparkIgnite').busy(false) }
						})
						.load($t.attr('href'), init);

				} else {
					$('#sparkIgnite')
						.dialog('open')
						.load($t.attr('href'), init);
				}
				return false;
			});
		});
		
		return this;
	};

	/* start handlers*/
	
	$(function () {		 
		
		//get bitly
		$.getScript("http://bit.ly/javascript-api.js?version=latest&login=gspark&apiKey=R_76f937154b4dc245c6d1dc29a3c94d7b");
		
			$('#start_create_spark').click( function () {
				
				if ($.browser.msie) {
					$(this).hide();
					$('#create_spark').show();
					return;
				} 
				
				$(this).slideUp();
				$('#create_spark').slideDown(); 
			} ); 
			
			$('#create_spark').sparkCreate();
			
			$('.spark .reignite').sparkIgnite();
			
			$('#updateAvatar')
				.dialog({
					position:['left','top'],
					title: $('#updateAvatar').attr('title'),
					autoOpen: false,
					modal: true,
					resizable: false,
					close: function() {
						$('#updateAvatar').busy(false)
					}
				})
				.find('form').
					submit(function(){
						$('#_nil').load(function() {
							$('#updateAvatar').busy(false, 'ok');
							document.location.reload();	
						});
						$('#updateAvatar').busy(true,'...');
					});
			
			$('a[href=#updateAvatar]').click(function() {
				
				$('#updateAvatar').dialog("open")
			});
			
			$('.openLogin').sparkLogin();
			
			$('.openRegistration').sparkRegister();
						
			/* i like */
			$('a.ilike').click(function () {
				var $t = $(this);
				var sparkId = $t.closest('.spark').attr('id').split('_')[1];
				var list = [];
				
				if ($.cookie('CLICKED')) var list = $.cookie('CLICKED').split(',');
				
				if ($.inArray( sparkId, list ) == -1 ) 
				{
					list.push(sparkId);
					$.cookie('CLICKED', list);
					$.get($t.attr('href'));
					var $cs = $t.find('span'); $cs.text( (parseInt($cs.text()) )+1 );
					$t.addClass('disabled');
				}
				return false;
				
			}).each(function() {
				var $t = $(this);
				var sparkId = $t.closest('.spark').attr('id').split('_')[1];
				var list = [];
				if ($.cookie('CLICKED')) var list = $.cookie('CLICKED').split(',');
				if ($.inArray( sparkId, list) != -1) {
					$t.addClass('disabled');
				} 
			});
		}		
	);
	
})(jQuery);
