// For PayPal paycode
// Assumes included createRequest javascript function 
// e.g. in Apache/js/Utils/createRequest_no.js
// Uses serverOpen.js functions to check if the server is open
// Assumes included getURLParameter from e.g. /js/utils/serverOpen.js
var request;

function speakNewSentence() {
// assume speech text length is checked before
	vvoice = getVoiceName(document.getElementById('voicelist').value);
	vspeechText = document.getElementById('tSpeechText').value;
	vspeechText = AddPeriod(vspeechText);
		
	//XX alert("Ready to speak text: " + speechText);
		
	document.applets['FacePlayer'].speakText(vvoice, vspeechText);
	// Remember text so that we can do replay:
	document.getElementById('oldspeechtext').value = vspeechText;
	document.getElementById('oldvoice').value = vvoice;
}

// will add one to free sentences, param must be int! (use parseInt(String)
// handle both cookie and applet values
function checkMoreFreeSentences(maxFree) {
	var freeUsed = -1;
	var cookieFree = readCookie("iitt");
	if (cookieFree == null) {
		var appFree = document.applets['FacePlayer'].nFreeSentences();
		if (appFree == -1) {
			freeUsed = 0;
		} else {
			if (appFree > maxFree) {
				freeUsed = maxFree;
			} else {
				freeUsed = appFree;
			}
		}
	} else {
		if (cookieFree > maxFree)
			freeUsed = maxFree;
		else
			freeUsed = parseInt(cookieFree);
	}
	// update cookie and app
	usedNow = freeUsed+1;
	document.applets['FacePlayer'].setFreeSentences(usedNow);
	setCookie("iitt", ""+usedNow, 1);
	//alert("speak_db_no.js: Now used: "+usedNow+" sentences");
	return maxFree-freeUsed;
}

// Callback from PHP script
function updatePageSpeak() {
  //alert("more script finished!");     
  if (request.readyState == 4) {
    if (request.status == 200) {
      //alert("From more script : *" + request.responseText+"*");
      var resArray = request.responseText.split("|");
      var errCode = resArray[0];
      var spaceFilter = /^(\n|\r)+/;
      var counter = 0;
      while (spaceFilter.test(errCode)) {// && (counter < 4)) {
      	//counter++;
      	//alert("Removing white space char "+counter+" errCode: *" + errCode + "*");
      	errCode = errCode.substring(1, errCode.length);
      }
      //alert("errCode =*" + errCode +"*"); 
			var filter  = /^\d{1,10}$/;
			if (!filter.test(errCode)) {
				alert("SYSTEM ERROR.\r\n Return from script: *" + request.responseText+"*");
      	return;
			}
      if (errCode == 0) { 
	      // OK so do speak
				speakNewSentence();
			} else if (errCode == 8) {
				// UPGRADE
				alert("The service is being upgraded.\r\n"+resArray[1]+"\r\nPlesse com back later.");
			} else if (errCode == 9) {
				// ERROR
				alert("Sorry. The service failed. Notification send to operator.\r\nPlease try again or come back later.");
			} else if (errCode == 1) {
				// No more sentences
				pay = alert("You must pay to make more sentences today.");
			} else {
				alert("Server returned:"+request.responseText);
				alert("Sorry. The service failed. Notification send to operator.\r\nPlease try again or come back later.");
			}
    } else {
      alert("Sorry!\r\nNo connection to the service.\r\nPlease try again later.\r\nError status from network: " + request.status);
    }
  }
}

// parameters defined in connection with button for speak text
function Speak()
{	
	if (!serverSpeechOpen()) {
		if (!checkIfURLParameter("iitest")) {
			alert("The service is being upgraded. Please come back later.");
			return;
		}
	}
	
	vspeechText = document.getElementById('tSpeechText').value;
	voldSpeechText = document.getElementById('oldspeechtext').value;
	vvoice = getVoiceName(document.getElementById('voicelist').value);
	voldvoice = document.getElementById('oldvoice').value;
		
	if ((vspeechText == voldSpeechText) && (vvoice == voldvoice)) {
		document.applets['FacePlayer'].replayAnimation();
		return;
	}
	
	vmaxlength = document.getElementById('maxlength').value;
	
	ok = validateSpeechText(vspeechText, vmaxlength, 'en');
	if (ok == 0) return;
	vmaxfree = parseInt(document.getElementById('maxfree').value); 
	moreFree = checkMoreFreeSentences(vmaxfree);
	if (moreFree > 0) {
		speakNewSentence();
	} else { // check payment for sentence
		//alert("No more free sentences");
		vpaycode = trimAll(document.getElementById('paycode').value);
		vtheme = document.getElementById('theme').value;
		vpartner = document.getElementById('partner').value;
		vpartner = document.getElementById('partner').value;
		vproductid = document.getElementById('productid').value;
		vlanguage = document.getElementById('language').value; 
	
		if ((vpaycode == null) || (vpaycode == "")) {
			alert("You need to pay to make more sentences today.");
			return;
		}
	  request = createRequest();
	  if (!request)
	    alert("Error initializing XMLHttpRequest!"); 
	  else {
	  	//alert("Contacting server to check PayPal code");
		  var url = "/PayPal/inophp/callbacks/checkPayPalCodeAndInc_handler.php?paycode="+vpaycode
		  //+"&theme="+vtheme+"&partner="+vpartner
		  +"&language="+vlanguage+"&productid="+vproductid;
		  request.open("GET", url, true);
		  request.onreadystatechange = updatePageSpeak;
		  request.send(null);
		} 
	}
}

