var form;
var timer, timer_use;
var httpObject, httpObjectUse;
var progparam=0;
var msg_c=1;
var isUsing=1;
var isUploadComplete=0;
var isConvertComplete=0;
var isPrintedUsing=0;


function progbarProcess() 
{
	var progbar = document.getElementById("progress_back");
	progbar.innerHTML='<div id="progress" style="position:relative; width:5%; left:'+progparam+'%;"></div>';
	progparam++;
	if (progparam>94) progparam=0;
}

//--------------------------------------
function strstr (haystack, needle, bool) {
 var pos = 0;
 haystack += '';
 pos = haystack.indexOf( needle );
 if (pos == -1) {
 return false;
 } else{
 if (bool){
 return haystack.substr( 0, pos );
 } else{
 return haystack.slice( pos );
 }
 }
}

//-------------------------------------
function getHTTPObject() {
	var xmlhttp;
	/*@cc_on
	@if (@_jscript_version >= 5)
	try {
		xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP.3.0");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	@else xmlhttp = false;
	@end @*/
 
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
	try {
		xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	return xmlhttp;
}

//-------------------------------------
function msg(text)
{
	var res=document.getElementById("resultDiv");
	res.innerHTML=res.innerHTML+msg_c+" "+text+"<br>";
	msg_c++;
}

//-------------------------------------
function createIFrame() {
	var id = 'f' + Math.floor(Math.random() * 99999);
	var div = document.createElement('div');
	div.innerHTML = '<iframe style="display:none" src="about:blank" id="'+id+'" name="'+id+'" onload="sendComplete(\''+id+'\')"></iframe>';
	document.body.appendChild(div);
	return document.getElementById(id);
}

//--- init
function init(){
	isUsing=1
	progparam=0;
	msg_c=1;
	isUploadComplete=0;
	isConvertComplete=0;
	isPrintedUsing=0;
	
	var res=document.getElementById("resultDiv");
	res.innerHTML="";
}

//-------------------------------------
function begin(form_to)
{
	form = form_to;
	init();
	httpObjectUse = getHTTPObject();

	httpObjectUse.open("GET", "upload/upload.php?step=isUsing", false);
	httpObjectUse.send(null);
	if (!strstr(httpObjectUse.responseText, "ok")){
	    msg("Service in use. Try later.");
	}
	else isUsing=0;
}

//-------------------------------------
function sendForm(url, func, arg) {
 
  if (!document.createElement) return; // not supported
  if (typeof(form)=="string") form=document.getElementById(form);
  
  httpObject = getHTTPObject();
  msg("Uploading to Server the file...");
  timer = setInterval("checkDownloadByTimer()", 50);

  var frame=createIFrame();  
  frame.onSendComplete = function() { func(arg, getIFrameXML(frame)); };
  form.setAttribute('target', frame.id);
  form.setAttribute('action', url);
  form.submit();
}

//-------------------------------------
function setOutputForUpload(){
	if(httpObject.readyState==4)
		msg(httpObject.responseText);
}

//-------------------------------------
function sendComplete(id) {
  var iframe=document.getElementById(id);
  if (iframe.onSendComplete && typeof(iframe.onSendComplete) == 'function') iframe.onSendComplete();
}

//-------------------------------------
function getIFrameXML(iframe) {
  var doc=iframe.contentDocument;
  if (!doc && iframe.contentWindow) doc=iframe.contentWindow.document;
  if (!doc) doc=window.frames[iframe.id].document;
  if (!doc) return null;
  if (doc.location=="about:blank") return null;
  if (doc.XMLDocument) doc=doc.XMLDocument;
  return doc;
}

//-------------------------------------
function uploadComplete(element, doc) {
  if (!doc) return;
  if (typeof(element)=="string") element=document.getElementById(element);
  isUploadComplete=1;
  msg("Upload complete.");
  msg("Converting to wav...");
}

//-------------------------------------
function checkDownloadByTimer()
{
	progbarProcess();
	
	if (isUploadComplete==1 && isUsing==0) {
		clearInterval(timer);
		timer = setInterval("checkConvertByTimer()", 50);		
	}
}

//-------------------------------------
function checkConvertByTimer()
{
	if (progparam%4==0) {
		httpObject.open("GET", "upload/upload.php?step=convert", false);
		httpObject.send(null);
		var text = httpObject.responseText;
		if (strstr(text,"Processing")) { }
		else if (strstr(text,"Convert error"))
			{
				clearInterval(timer);
				isConvertComplete = -1;
				msg(text);
			} else 
			{
				clearInterval(timer);
				msg(text);
				msg("Begin processing... it can be about 5 or 10 minutes...");
				timer = setInterval("checkProcessByTimer()", 100);
			}
	}
	
	progbarProcess();
}


//-------------------------------------
function queueByTimer()
{
	if (progparam%4==0) {
		httpObjectUse.open("GET", "upload/upload.php?step=isUsing", false);
		httpObjectUse.send(null);
		if (strstr(httpObjectUse.responseText,"ok")) 
			{ isUsing = 0; clearInterval(timer_use); msg("Service is free. You can try now!"); }
	}
	
	if (isPrintedUsing==0)
	{
		isPrintedUsing = 1;
		msg("Looking for a queue...Server is busy.");
	}
}

//-------------------------------------
function checkProcessByTimer()
{
	if (progparam%4==0) {
		httpObject.open("GET", "upload/upload.php?step=process", false);
		httpObject.send(null);
		var text = httpObject.responseText;
		if (strstr(text,"complete"))
		{
			msg(text);
			var progbar = document.getElementById("progress_back");
			progbar.innerHTML='<div id="progress" style="position:relative; width:100%; left:0%;"></div>';
			clearInterval(timer);
			return;
		} 
		if (strstr(text,"error"))
		{
			msg(text);
			clearInterval(timer);
		} 
	}

	progbarProcess();
}
