/* enable strict mode */
"use strict";

// global variables
var progress,			// progress element reference
	progress_text,		// progress element no2
	//progress_file,	// progress file name
	request,			// request object
	intervalID = false;	// interval ID

// define reference to the progress bar and create XMLHttp request object
window.onload = function () {
	progress = document.getElementById('progress');
	progress_text = document.getElementById('progress_text');
	request = initXMLHttpClient();
}

// create XMLHttp request object in a cross-browser manner
function initXMLHttpClient() {
	var XMLHTTP_IDS,
		xmlhttp,
		success = false,
		i;
	// Mozilla/Chrome/Safari/IE7/IE8 (normal browsers)
	try {
		xmlhttp = new XMLHttpRequest();
	}
	// IE(?!)
	catch (e1) {
		XMLHTTP_IDS = [ 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
						'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP' ];
		for (i = 0; i < XMLHTTP_IDS.length && !success; i++) {
			try {
				success = true;
				xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
			}
			catch (e2) {}
		}
		if (!success) {
			throw new Error('Unable to create XMLHttpRequest!');
		}
	}
	return xmlhttp;
}

// send request to the server
function send_request(progress_file) {
	try {request.open('GET', progress_file, true);}	// open asynchronus request
	catch (error) {}
	request.onreadystatechange = request_handler;	// set request handler	
	request.send(null);								// send request
	//progress_text.innerHTML = 'Requete envoyée au serveur';
	//alert("send_request(" + progress_file + ")");
}

// request handler (defined in send_request)
function request_handler() {
	var level;
	var item;
	var total;
	if (request.readyState === 4) { // if state = 4 (operation is completed)
		if (request.status === 200) { // and the HTTP status is OK
			// get progress from the XML node and set progress bar width and innerHTML
			level = request.responseXML.getElementsByTagName('PROGRESS')[0].firstChild;
			progress.style.width = level.nodeValue + '%';
			progress.innerHTML = level.nodeValue + '%';
			
			item = request.responseXML.getElementsByTagName('ITEM')[0].firstChild;
			total = request.responseXML.getElementsByTagName('TOTAL')[0].firstChild;
			progress_text.innerHTML = item.nodeValue + ' éléments envoyés sur ' + total.nodeValue;
			
			// if progress bar value reaches threshold 98 then stop
			if (parseInt(level.nodeValue) >= 99) {
			  progress.style.width = '100%';
			  progress.innerHTML = '100%';
			  polling_stop();
			}
		}
		else { // if request status isn't OK
			//progress.style.width = '100%';
			progress.innerHTML = 'Error: [' + request.status + '] ' + request.statusText;
			//polling_stop();
		}        
	}
	//progress_text.innerHTML = 'Requete renvoyée au client';
}

// actions (start / stop)
function polling_start(progress_file) {
	if (!intervalID) {
		intervalID = window.setInterval("send_request('" + progress_file + "')", 2000);
		//alert("polling_start(" + progress_file + ")");
	}
}

function polling_stop() {
	window.clearInterval(intervalID);
	intervalID = false;
}
