var _INFOinvest_RELOAD_TIME = 60;

function $(id) {
	return document.getElementById(id);
}

function createXMLHttpRequest() {
	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
	try { return new XMLHttpRequest(); } catch(e) {}
	alert("XMLHttpRequest not supported");
	return null;
}

function loadContent(src, runObj, mode, requestHeaders) {
	var xmlReq = createXMLHttpRequest();
	if (!xmlReq) return;

	if (runObj) runObj.runBefore();

	var link = src;
	var bodyContent;

	xmlReq.onreadystatechange = function() {
		if (xmlReq.readyState == 4) {
			if (xmlReq.status == 200) {
				if (runObj) runObj.run(xmlReq);
				if (runObj) runObj.runAfter();
			}
		}
	}

	if ((!mode) || ((mode != "GET") && (mode != "POST")))
		mode = "GET";

	var headers = "";

	if (requestHeaders) {
		for (var i = 0; i < requestHeaders.length; i += 2) {
			headers += requestHeaders[i] + "=" + encodeHtml(requestHeaders[i + 1]) + "&";
		}
	}

	if (mode == "GET") {
		link = (headers == "") ? src : src + "?" + headers;
		bodyContent = null;
	} else {
		link = src;
		bodyContent = headers;
	}

	xmlReq.open(mode, link, true);
	if (mode == "POST") {
		xmlReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	}
	xmlReq.setRequestHeader('encoding', 'ISO-8859-1');
	xmlReq.send(bodyContent);
}

function encodeHtml(code) {
	 var encodedHtml = escape(code);
	 encodedHtml = encodedHtml.replace(/\//g,"%2F");
	 encodedHtml = encodedHtml.replace(/\?/g,"%3F");
	 encodedHtml = encodedHtml.replace(/=/g,"%3D");
	 encodedHtml = encodedHtml.replace(/&/g,"%26");
	 encodedHtml = encodedHtml.replace(/@/g,"%40");
	 return encodedHtml;
}

function reloadQuotesAfter(seconds) {
	//Atualiza o contador
	if (seconds > 0) {
		var div = $('reload_info');
		if (div) {
			div.innerHTML = seconds;
		}
		setTimeout("reloadQuotesAfter(" + (seconds - 1) + ");", 1000);
	} else {
		reloadQuotes();
	}
}

function reloadQuotes() {
	//FIXME: Pegar as cotações no idioma correto.
	loadContent('mini_cotacoes_handler.asp', new handlerQuotes(), 'POST', new Array("quotes", quotes));
}

function handlerQuotes() {
	this.runBefore = function() {
	}

	this.run = function (xmlReq) {
		try {
			var JSOnObject = xmlReq.responseText.parseJSON();

			//Limpa todos os objetos
			fadeArray["impar_up"].clear();
			fadeArray["impar_down"].clear();
			fadeArray["par_up"].clear();
			fadeArray["par_down"].clear();

			for (var i = 0; i < JSOnObject.length; i++) {
				var currentQuote = JSOnObject[i];
				var currentId = currentQuote.stock_id.toUpperCase();

				var value_tr = $(currentId + "_value");
				var variation_tr = $(currentId + "_variation");
				var image_tr = $(currentId + "_image");
				var volume_tr = $(currentId + "_volume");

				//Remove as casas decimais se estiverem vazias e o valor tiver pelo menos 4 digitos.
				var reg = new RegExp("[0-9].?[0-9]{3}[,|.]00$");
				var value = (reg.test(currentQuote.value)) ? currentQuote.value.substring(0, currentQuote.value.length - 3) : currentQuote.value;

				/* IMPRIME O VALOR */
				if (value_tr) {
					if (value_tr.oldValue != value) {
						value_tr.innerHTML = '&nbsp;' + value;
						value_tr.oldValue = value;
					} else if (image_tr) {
						image_tr.innerHTML = '&nbsp;';
					}
				}

				/* SETINHA DE TENDENCIA */
				/*
				if (value_tr) {
					if (value_tr.oldValue != value) {
						value_tr.innerHTML = '&nbsp;' + value;

						if (value_tr.oldValue) {
							var direction = (compare(value, value_tr.oldValue, currentQuote.decimal_separator) > 0) ? "_up" : "_down";

							if (value_tr.parentNode.className == "QUOT_TextoTabela") {
								fadeArray["impar" + direction].objects[currentId + "_value"] = value_tr;
								fadeArray["impar" + direction].objects[currentId + "_image"] = image_tr;
							} else {
								fadeArray["par" + direction].objects[currentId + "_value"] = value_tr;
								fadeArray["par" + direction].objects[currentId + "_image"] = image_tr;
							}

							if (image_tr) {
								image_tr.innerHTML = '<img src="/images/tendency' + direction + '.gif" border="0">';
							}
						}

						value_tr.oldValue = value;
					} else if (image_tr) {
						image_tr.innerHTML = '&nbsp;';
					}
				}
				*/
				/* IMPRIME VARIACAO */
				if (variation_tr) {
					var variation = (currentQuote.variation.charAt(0) == '(') ? "-" + currentQuote.variation.substring(1, currentQuote.variation.length - 1) : "+" + currentQuote.variation;
					variation = variation + '%';
					if (variation_tr.oldValue != variation) {
						variation_tr.innerHTML = '&nbsp;' + variation;
						variation_tr.oldValue = variation;
					}
				}

				/* SETINHA DE VARIACAO */
				if (variation_tr) {
					var direction = (currentQuote.variation.charAt(0) == '(') ? "_down" : "_up";
					if (value_tr.parentNode.className == "QUOT_TextoTabela") {
						fadeArray["impar" + direction].objects[currentId + "_value"] = value_tr;
						fadeArray["impar" + direction].objects[currentId + "_image"] = image_tr;
					} else {
						fadeArray["par" + direction].objects[currentId + "_value"] = value_tr;
						fadeArray["par" + direction].objects[currentId + "_image"] = image_tr;
					}

					if (image_tr) {
						image_tr.innerHTML = '<img src="/images/tendency' + direction + '.gif" border="0">';
					}
				}

				/* IMPRIME VOLUME */
				if (volume_tr) {
					var volume = (currentQuote.volume.charAt(0) == '(') ? "-" + currentQuote.volume.substring(1, currentQuote.volume.length - 1) : currentQuote.volume;

					if (volume_tr.oldValue != volume && volume_tr.id != 'US.DOLARC_volume') {
						volume_tr.innerHTML = '&nbsp;' + volume;
						volume_tr.oldValue = volume;
					}
				}
			}


			fadeArray["impar_up"].startFade();
			fadeArray["impar_down"].startFade();
			fadeArray["par_up"].startFade();
			fadeArray["par_down"].startFade();

		} catch (e) {
		}
	}

	this.runAfter = function() {
		reloadQuotesAfter(_INFOinvest_RELOAD_TIME);
	}
}

function compare(value1, value2, separator) {
	 //Vamos descobrir o caracter separador decimal do usuário
	var computerDecimalChar = (new String(parseFloat(1/2))).substr(1,1);

	if (separator == ",") {
		//Se o separador decimal enviado pelo ajax for ',' vamos remover tudo o que não
		//for número e vírgula e vamos colocar o separador decimal do usuario para
		//o parseFloat funcionar.
		value1 = value1.replace(/[^0-9|^,]/g, "").replace(/[,]/g, computerDecimalChar);
		value2 = value2.replace(/[^0-9|^,]/g, "").replace(/[,]/g, computerDecimalChar);
	} else {
		value1 = value1.replace(/[^0-9|^.]/g, "").replace(/[.]/g, computerDecimalChar);
		value2 = value2.replace(/[^0-9|^.]/g, "").replace(/[.]/g, computerDecimalChar);
	}

	return parseFloat(value1) - parseFloat(value2);
}