$(document).ready(function() {
	$("#uploadprogressbar").progressBar();
	$("#convertprogressbar").progressBar();
	$("#slider .inner").html('<label for="rtype"><br /><b>Convert to: </b></label><select name="rtype" id="rtype" class="required"><option value="">Choose a Format</option><option value="flv">FLV</option><option value="avi">AVI</option><option value="mp3">MP3</option><option value="wmv">WMV</option><option value="mov">MOV</option><option value="mp4">MP4</option></select><br /><span class="notice">After selecting, press the GO button again</span>');

	$("input#button").click(function() {
		this.blur();
		var action = $(this).attr('rel'); 
		if(action == 'slide')
		{
			slider('out');
			$(this).attr('rel','in'); 
			return false;
		}

		if(action == 'in')
		{
			//slider('in');
			formstart();
			$(this).attr('rel','null'); 
		}

	});
	
	/*
	$("#mainbox").html('<span class="progressbar" id="uploadprogressbar">0%</span>');
	$("#mainbox").append('<div class="info"></div>');
	
	$("#slider .inner").html('<br /><label><b>Status: </b></label>Downloading video to server...');
	$("#uploadprogressbar").progressBar(99);
	$("#mainbox .info").html('109/2200 KB');
	$('#button').trigger('click');
	*/
	
});

var slider = function(action, sliderHeight)
{
	if(!sliderHeight){ var sliderHeight = 79; }
	if(action == 'out')
	{
		$("#slider").animate({height: sliderHeight+"px"}, 250);
		$("#contentWrapTop").animate({marginTop: 1+sliderHeight+"px"}, 250);
	}
	else
	{
		sliderHeight = 0;
		$("#slider").animate({height: sliderHeight+"px"}, 250);
		$("#contentWrapTop").animate({marginTop: "0px"}, 250);
	}						  
}

function beginRemoteUpload(taskid) {
	$("#step2").attr('class','');
	slider('out');
	$("#mainbox").html('<span class="progressbar" id="uploadprogressbar">0%</span>');
	$("#mainbox").append('<div class="info"></div>');
	
	var errorcheck=taskid.split("|"); 
	if(errorcheck[0] == "Status")
	{
		$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">' + errorcheck[1] + '  (Code: AjaxDD-e)</span>');
		//$("#forminputs").fadeIn();
		return;
	}

	var i = setInterval(function() { 
		$.get("call.php?action=downloadstatus&id=" + taskid, function(data) {
			if (data == null) {
				clearInterval(i);
				//location.reload(true);
				return;
			}
			var data=data.split("|"); 
			if(data[0] == "Status")
			{
				clearInterval(i);
				$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">' + data[1] + '</span>');
				//$("#forminputs").fadeIn();
			}
			else if(data[0] == "downloaded")
			{
				clearInterval(i);
				$.get("call.php?action=status&id=" + taskid, function(status) 
				{
					//incase of failing
					if (status == null || status != 'downloaded') {
						clearInterval(i);
						$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">Internal Error: Please try again later  (Code: AjaxDD1)</span>');
						//$("#forminputs").fadeIn();
						return;
					}
					else
					{
						bridgeProgress(taskid);
					}
				});
			}
			else
			{
				var size=0;
				var total_size=1;
				
				size=Math.ceil(data[0]/1024);
				total_size=Math.ceil(data[1]/1024);

				var percentage = size*100 / total_size;
				
				$("#slider .inner").html('<br /><label><b>Status: </b></label>Downloading video to server...');
				$("#uploadprogressbar").progressBar(percentage);
				$("#mainbox .info").html(size + ' / ' + total_size + ' KB');
				//alert(taskid);
			}
		});
	}, 2000);

	return true;
}

function bridgeProgress(taskid) {
	//$("#progressarea").fadeOut();
	$.get("call.php?action=startconvert&id=" + taskid, function(response) {
		var responsecheck=response.split("|"); 
		if (response == null || responsecheck[0] == 'error') {
			//$("#progressarea").fadeIn();
			$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">Internal Error: Please try again later (Code: AjaxDC1) ' + responsecheck[1] + '</span>');
			//$("#forminputs").fadeIn();
			return;
		}
		else
		{
			if (response == 'started') {
				beginConvertProgress(taskid);
			}
			if (response == 'ready') {
				finished(taskid);
			}
		}

	});
}

function beginConvertProgress(taskid) {
	$("#step3").attr('class','');
	$("#mainbox .info").fadeOut();
	$.get("call.php?action=convertstatus&get=totaltime&id=" + taskid, function(totaltime) {
		if (totaltime == null) {
			clearInterval(i);
			//$("#progressarea").fadeIn();
			$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">Internal Error: Please try again later (Code: AjaxDC1)</span>');
			//$("#forminputs").fadeIn();
			return;
		}
		//$("#progressarea").fadeIn();
		//$("#downloadarea").fadeOut();
		$("#mainbox").html('<span class="progressbar" id="convertprogressbar">0%</span>');
		$("#slider .inner").html('<br /><label><b>Status: </b></label>Converting video...');
		//alert(totaltime + '-h');
		//interval
		var i = setInterval(function() { 
			$.get("call.php?action=convertstatus&get=currenttime&id=" + taskid, function(currenttime) {
				if (currenttime == null) {
					clearInterval(i);
					alert('Error J1 - Convertion failed');
					//$("#forminputs").fadeIn();
					return;
				}
		
				if(currenttime == "error")
				{
					clearInterval(i);
					$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">Internal Error: Please try again later  (Code: AjaxDC2)</span>');
					//$("#forminputs").fadeIn();
				}
				else if(currenttime == "ready")
				{
					clearInterval(i);
					$.get("call.php?action=status&id=" + taskid, function(status) 
					{
						//incase of failing
						if (status == null || status != 'ready') {
							clearInterval(i);
							$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">Internal Error: Please try again later (Code: AjaxDC3)</span>');
							//$("#forminputs").fadeIn();
							return;
						}
						else
						{
							slider('in');
							finished(taskid);
						}
					});
				}
				else if(currenttime == "skip")
				{

				}
				else
				{
					var percentage = currenttime*100 / totaltime;
					//alert(currenttime + '-c' + totaltime + '-c');
					$("#convertprogressbar").progressBar(percentage);
					//alert(taskid);
				}
			});
		}, 3000);
		//interval end
	});

	return true;
}

function finished(taskid) {
	$("#step3").attr('class','');
	$.get("call.php?action=finished&id=" + taskid, function(response) {
		var responsecheck=response.split("|"); 
		if (response == null || responsecheck[0] == 'error') {
			//$("#progressarea").fadeIn();
			$("#slider .inner").html('<br /><span style="color:red;font-weight:bold;">Internal Error: Please try again later (Code: AjaxDC4) ' + responsecheck[1] + '</span>');
			//$("#forminputs").fadeIn();
			return;
		}
		else
		{
			//$("#progressarea").fadeIn();
			$("#convertprogressbar").progressBar(100);
			$("#slider .inner").html(response);
			$("#mainbox").html('<input type="text" id="url" name="url" class="required url" value="YOUTUBE VIDEO URL HERE" onblur="if(this.value==\'\') this.value=\'YOUTUBE VIDEO URL HERE\';" onfocus="if(this.value==\'YOUTUBE VIDEO URL HERE\') this.value=\'\';" /><input type="submit" rel="slide" id="button" name="button" value="" />');
			//alert('Video Download and convert completed');
			//$("#forminputs").fadeIn();
		}
		slider('out');

	});
}

var formstart = function()
{
	// show a simple loading indicator
	jQuery().ajaxStart(function() {

	}).ajaxStop(function() {
		
	}).ajaxError(function(a, b, e) {
		throw e;
	});

	var v = jQuery("#urlform").validate({
		// the errorPlacement has to take the table layout into account
		errorPlacement: function(error, element) {
			error.appendTo( element.parent() );
		},
		messages: {
			url: "Please enter a valid Youtube URL e.g: http://www.youtube.com/watch?v=LBTXNPZPfbE",
			rtype: "Please choose a format"
		},
		submitHandler: function(form) {
			jQuery(form).ajaxSubmit({
				beforeSubmit: function() {
					slider('in');
					$("#slider .inner").html('<br /><label><b>Status: </b></label>Verifying...');
					slider('out');
				},
				success: showResponse
			});
		}
	});
	
	function showResponse(responseText, statusText)  
	{ 
	 	if(statusText == "success" & responseText != "")
		{
			$("#slider .inner").html('<br /><label><b>Status: </b></label>Preparing...');
			
			var taskid = responseText;
			var responsecheck=taskid.split("|"); 
			if(responsecheck[0] == 'Status')
			{
				alert(responsecheck[1]);
				$("#slider .inner").html('<br /><label for="rtype"><b>Convert to: </b></label><select name="rtype" id="rtype" class="required"><option value="">Choose a Format</option><option value="flv">FLV</option><option value="avi">AVI</option><option value="mp3">MP3</option><option value="wmv">WMV</option><option value="mov">MOV</option><option value="mp4">MP4</option></select><br /><span class="notice">After selecting, press the GO button again</span>');
			}
			else
			{
				slider('in');
				beginRemoteUpload(taskid);
			}
		}
	}
}