/*
 *
 * ajaxProgress.js
 *
 * Copyright 2007 Mediaspectrum, Inc. All Rights Reserved.
 *
 * This software is the proprietary information of Mediaspectrum, Inc.
 *
 */

var progressForbidden = false;

/**
 * Current request object.
 */
var request = null;

/**
 * Current request url. It must be set before creating a request.
 */
var requestUrl = null;

/**
 * Determines if the upload in progress.
 * Must be false to stop refreshing (request sending).
 */
var isInProgress = false;

/**
 * Timeout between requests.
 */
var requestTimeout = 200;

var agt=navigator.userAgent.toLowerCase();
var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;


/**
 * Process the response, than "recursive" creates and sends
 * a new one with appropriet timeout.
 */
function processResponse() {
	if (request.readyState == 4) {
		var stat = request.status;
		if (stat == 200) {
			if(isInProgress) {
				updatePage(request.responseText, true);
				setTimeout("makeRequest()", requestTimeout);
			}
		} else if ((is_safari) && (typeof(stat) == 'undefined')) {
			if (isInProgress) {
				updatePage(request.responseText, true);
				setTimeout("makeRequest()", requestTimeout);
			}
		} else {
			alert(getJSMessage(PROCESSING_REQUEST_ERROR) + " " + stat);
		}
	}
}

/**
 * Creates and sends request to the server.
 */
function makeRequest() {
	if (progressForbidden)
		return;
	if(isInProgress) {
		request = createRequest();
		if(request == null) {
			alert(getJSMessage(CREATING_REQUEST_ERROR));
			return;
		}
		request.open("GET", preventCache(requestUrl), true);
		request.onreadystatechange = processResponse;
		request.send(null);
	}
}

/**
 * Starts the upload spy.
 */
function start() {
	progressForbidden = false;
	setRequestUrl(replaceParamValue(getRequestUrl(), "finished", ""));
	setIsInProrgess(true);
	makeRequest();
}

/**
 * Sets request url.
 */
function setRequestUrl(url) {
	requestUrl = url;
}

/**
 * Gets current request url.
 */
function getRequestUrl() {
	return requestUrl;
}

/**
 * If argument is false - stops upload tracking.
 */
function setIsInProrgess(bool) {
	isInProgress = bool;
}

/**
 * Gets current ststus of upload tracking.
 */
function getIsInProrgess(bool) {
	return isInProgress;
}

/**
 * Updates a page and do some internal moves.
 */
function updatePage(percents, isUpdatePage) {
	if(percents >= 95) {
		setRequestUrl(
			replaceParamValue(
				getRequestUrl(),"finished", "true"));
	}
	if(percents >= 100) {
		setIsInProrgess(false);
	}
	if(isUpdatePage) {
		updatePercents(percents);
	}
}

function replaceParamValue(url, paramName, value)
{
//	alert("function replaceParamValue paramName = " + paramName + " value = " + value);
	var idx = url.indexOf("?");
	var idx0 = url.indexOf("&" + paramName + "=");
	var idx1 = url.indexOf("?" + paramName + "=");
	idx1 = idx1 < 0 ? idx0 : idx1;

	if (idx1 < 0)
	{
		var parameq = paramName + "=" + escape(value);
		var parampref = (idx < 0) ? "?" : "&";
		url += parampref + parameq;
	}
	else
	{
		idx2 = url.indexOf("&", idx1 + 1);
		idx2 = (idx2 > 0) ? idx2 : url.length;
		url = url.substring(0, idx1 + 1) + paramName + "=" + escape(value) +
		url.substring(idx2, url.length);
	}
	return url;
}

function preventCache(url) {
	var fdate = (new Date()).getTime();
	url = replaceParamValue(url, "foo", "" + fdate);
	url = url + "&checkrefresh=" + (new Date()).getTime();
	return url;
}

var loadingString = 'Loading... ';
var processingString = 'Processing...';

function updatePercents(percents) {
	var uploadInfo;

	uploadInfo = infoFrame.document.getElementById("progressIndicator");

	if (!uploadInfo)
		return;

	var percentsInt = parseInt(percents);
	if (percentsInt < 0 || isNaN(percentsInt)) {
		uploadInfo.innerHTML = loadingString + " 0%";
	} else if (percentsInt < 100){
		uploadInfo.innerHTML = loadingString + " " + percentsInt + "%";
	} else {
		uploadInfo.innerHTML = loadingString + " " + percentsInt + "%";
		setTimeout("changeInfo()", 500);
	}
}



function changeInfo() {
//	if (pageId == "PAGE_COMPONENT")
		try {	// the infoFrame may be reloaded already
			infoFrame.document.getElementById("progressIndicator").innerHTML = processingString;
		}
		catch (err) {}
//	else
//		document.getElementById("progressIndicator").innerHTML = processingString;
}


