ytdj.helper = {

	minSetNameLength : 4,
	
	feedback : function(name, from, msg, callback)
	{
		if( (name == null || name =="") && (from == null || from == "") && (msg == null || msg =="") )
		{
			callback( "0", "validation" );
			return;
		}

		var mailer = {};
		mailer.name = name;
		mailer.from = from;
		mailer.msg = msg;
		
		// Fake it if on dev/staging/test
		if( document.domain.indexOf( ytdj.baseUrl ) == -1 && ! ytdj.useLocal) 
		{
			callback( "1", "success" );
			return;
		}

		$.post("turntubelist/send_feedback", 
				mailer,
				function( data, status )
				{
					callback( data, status );
				},
				"text");
	},
		
	simpleClean : function( str, blnRemoveSpace )
	{
		if( blnRemoveSpace )
			str = str.replace(/\s/g, '_'); //remove spaces for url
			
		return str.replace(/[^\w-_\s]+/g, "").toLowerCase();
	},
	
	viewClean : function( str )
	{
		return str.replace(/[^\w-_\'\",.\?!;:\s]+/g, "");
	},
	
	saveSet : function( setName, blnUseAuth, callback_saving, callback_saved )
	{
		callback_saving( setName );

		setName = ytdj.helper.viewClean( setName );
		urlName = ytdj.helper.simpleClean( setName, true );
		var playlistName = blnUseAuth ? setName : urlName;
		
		if( playlistName.length < ytdj.helper.minSetNameLength )
		{
			callback_saved( playlistName, "format_error" );
			return;
		}
		
		if( pageTracker )
		{
			pageTracker._trackEvent( blnUseAuth ? "PublicSet" : "PrivateSet", "Save", setName );
		}
		
		var url = blnUseAuth ? 'playlists/add' : 'simple_playlists/add';
		$.ajax({
			type: "POST",
			url: url,
			data: { title : setName, channel_one: PlaylistController.toString( ytdj.LEFT ), channel_two: PlaylistController.toString( ytdj.RIGHT ) },
	
			success: function( msg )
			{
				callback_saved( playlistName, msg );
			},
			error:function( msg, e )
			{
				callback_saved( playlistName, "error" );
			}
		});
	},
	
	deleteSet : function( setName, callback_saving, callback_saved )
	{
		if(callback_saving)
			callback_saving( setName );

		setName = ytdj.helper.simpleClean( setName, false );
		
		if( setName.length < ytdj.helper.minSetNameLength )
		{
			if(callback_saved)
				callback_saved( setName, "format_error" );
			return;
		}
		
		var url = 'playlists/delete';
		$.ajax({
			type: "POST",
			url: url,
			data: { title : setName },
	
			success: function( msg )
			{
				if(callback_saved)
					callback_saved( setName, msg );
			},
			error:function( msg, e )
			{
				if(callback_saved)
					callback_saved( setName, "error" );
			}
		});
	},
	
	loadSet : function( setName, blnUseAuth, callback_loading, callback_loaded )
	{
		setName = ytdj.helper.simpleClean( setName, !blnUseAuth );
		
		callback_loading( setName );
		
		if( setName.length < ytdj.helper.minSetNameLength )
		{
			callback_loaded( setName, "format_error" );
			return;
		}
		
		$("#SetName").val(setName);
		
		if( pageTracker )
		{
			pageTracker._trackEvent( blnUseAuth ? "PublicSet" : "PrivateSet", "Load", setName );
		}
		
		var url = blnUseAuth ? 'playlists/view/' : 'simple_playlists/view/';
		$.ajax({
			type: "GET",
			url: url + setName,
			success: function( msg ){
				if(msg != "not_found")
				{
					var playlists = eval( msg );
					if( typeof playlists != "object" || playlists.length != 2)
					{
						return;
					}
					
					// Clear current playlists
					PlaylistController.emptyPlaylist( ytdj.LEFT );
					PlaylistController.emptyPlaylist( ytdj.RIGHT );
					
					// Load from results
					PlaylistController.loadFromString( ytdj.LEFT, playlists[0] );
					PlaylistController.loadFromString( ytdj.RIGHT, playlists[1] );
					
					// Display the tracks
					PlaylistController.display( ytdj.LEFT );
					PlaylistController.display( ytdj.RIGHT );
					
					callback_loaded( setName, "success" );
				}
				else
				{
					callback_loaded( setName, msg );
					return;
				}
			},
			error:function(msg,e)
			{
				callback_loaded( setName, "error" );
			}
		});
		
	},
	
	register : function(nick, email, msg, callback)
	{
		if(email == null || email == "")
		{
			callback( "0", "noemail" );	
			return;
		}

		if( nick.length < 4 || nick.length > 20 )
		{
			callback( "0", "badnick" );
			return;
		}
		
		// Fake it if on dev/staging/test
		if( document.domain.indexOf(ytdj.baseUrl) == -1 && ! ytdj.useLocal ) 
		{
			callback( "0", "success" );
			return;
		}
				
		$.ajax({
			type: "POST",
			url: 'users/ajax_register',
			data: { username : nick, comment : msg, email : email },
			success: function( msg )
			{
				callback( "0", msg.substring( 0, msg.indexOf( "{|}" ) ) );
			},
			error:function( msg, e )
			{
				callback( "0", "error" );
			}
		});
		
	},
	
	commarise : function( bignumber )
	{
		bignumber = (bignumber + "").split("").reverse().join("").
		replace(/(\d{3})/g,"$1,").
		replace(/,$/,"").
		split("").reverse().join("");
		return bignumber;
	},
	
	log : function(vars)
	{
		if( document.domain.indexOf(ytdj.baseUrl) == -1 && ! ytdj.useLocal ) 
		{
			return;
		}

		$.post("turntubelist/log_track",
			{ uid : ytdj.uid, url : vars[0] },
			null,
			"text");
	}
};