function randomInt(ceiling) {
	return Math.round(Math.random()*ceiling);
}

function createRandomDate() {
	var year = randomInt(3)+2004;
	var month = randomInt(12);
	var day = randomInt(27)+1;
	var date = new Date();
	date.setFullYear(year,month,day);
	return date;
}
var endDate = new Date();

//	These functions create a random fluctuating price or vol array with proper deviation
//	for test purpose only
function createRandomPriceArray(size) {
	var curPrice = randomInt(2000)+10;
	var prices = new Array();
	for (var i=0; i<size; i++) {
		var devRange = randomInt(curPrice/10);
		var dev = Math.random()*devRange*2 - devRange;
		var price = curPrice + dev;
		curPrice = price;
		prices.push(price);
	}
	return prices;
}
function createRandomVolArray(size) {
	var curVol = randomInt(3000)+10;
	var vols = new Array();
	for (var i=0; i<size; i++) {
		var devRange = randomInt(curVol/10);
		var dev = Math.random()*devRange*2 - devRange;
		var vol = curVol + dev;
		curVol = vol;
		vols.push(vol);
	}
	return vols;
}


function getFlagById(id) {
	for (var i=0; i<dataObjs[0].flagArray.length; i++) {
		if (dataObjs[0].flagArray[i].id == Math.round(id))
			return dataObjs[0].flagArray[i];
	}
	return null;
}

function createRandomFlagArray() {
	var flags = new Array();
	var date = new Date(endDate.getTime());
	var id=0, totalFlags;
	for (var i=0; i<800; i++) {
		var weekday = date.getDay();
		if (weekday!=0 && weekday!=6 && randomInt(5)==1) {
			var numFlags = randomInt(40);
			if (numFlags > 35)
				numFlags -= 35;
			else
				numFlags = 1;
			for (var j=0; j<numFlags; j++)
				flags.push(new Flag(0,id,date,(id++)%26));
		}
		date.setDate(date.getDate()-1);
	}
	return flags;
}

function renderNewsList() {
	var html = '';
	for (var i=0; i<dataObjs[0].flagArray.length; i++) {
		var flag = dataObjs[0].flagArray[i];
		var flagChar = String.fromCharCode(flag.ord+65);
		html += '<li id="news' + flag.id + '"><a name="news-' + flag.id + '" />' + 
			'<a class="flag" href="javascript:gotoFlag('+flag.id+')" >' + flagChar + '</a> ' + "News id=" + flag.id + '</li>';
	}
	var ul = document.getElementById('newslist');
	ul.innerHTML = html;
}

function Company(type,symbol,name,id) {
	this.type = type;		// type = 0: company, 1: industry, 2: market
	this.symbol = symbol;
	this.name = name;
	this.id = id;
}
function Flag(type,id,dateFlag,ord) {
	this.type = type;
	this.id = id;
	this.date = new Date(dateFlag.getTime());
	this.ord = ord; // 0 = 'A', 1 = 'B', etc. 
}
function DataObj(id,endDateDataObj ,priceArray,volArray,flagArray) {
	this.id = id;
	this.endDate = new Date(endDateDataObj.getTime());
	this.priceArray = priceArray;
	this.volArray = volArray;
	this.flagArray = flagArray;
}
function SettingObject(name, value) {
	this[name] = value;
}

function onCheck(checkbox) {
	flashProxy.call('loadCommand', checkbox.id, checkbox.checked ? 1 : 0);
}

var showChart = [false,false,false,false,false,false,false,false,false];
function onCheckTicker(checkbox) {
	var i = parseInt(checkbox.getAttribute('value'));
	if (checkbox.checked)
		addChart(i);
	else {
		flashProxy.call('removeCompany', companies[i].id);
		showChart[i] = false;
	}
}

function addChart(i) {
	
	//	Create data object for company
	//alert(i);
	/*if (priceArray == null) {
	var size = randomInt(400) + 400;
	var priceArray = createRandomPriceArray(size);
	var volArray = createRandomVolArray(size);
	var flagArray = createRandomFlagArray();
	if (i==0) {
		dataObjs[0].flagArray = flagArray;
		renderNewsList();
		}
	}*/
	/*alert(companies[i].id);
	alert(companies[i].startDate);
	alert(companies[i].priceArray.length);
	alert(companies[i].volArray.length);
	alert(companies[i].type);
	alert(companies[i].symbol);
	alert(companies[i].name);*/
	//var dataObj = new DataObj(companies[i].id,companies[i].startDate,companies[i].priceArray,companies[i].volArray);	

	//	Send data object to Flash
	flashProxy.call('loadData', companies[i], dataObjs[i]);
	showChart[i] = true;
}

var showingSettings = false;
var showingCompare = false;

function showSettings() {
	if (showingSettings) return;
	hideCompare();
	var divSettings = document.getElementById('fcsettings');
	divSettings.className='shown';
	var aCmdSettings = document.getElementById('cmdSettings');
	aCmdSettings.setAttribute('href','javascript:hideSettings();');
	aCmdSettings.blur();
	var li = aCmdSettings.parentNode;
	li.className = 'current';
	showingSettings = true;
}
function hideSettings() {
	if (!showingSettings) return;
	var divSettings = document.getElementById('fcsettings');
	divSettings.className='';
	var aCmdSettings = document.getElementById('cmdSettings');
	aCmdSettings.setAttribute('href','javascript:showSettings();');
	aCmdSettings.blur();
	var li = aCmdSettings.parentNode;
	li.className = '';
	showingSettings = false;
}
function showCompare() {
	if (showingCompare) return;
	hideSettings();
	var divCompare = document.getElementById('fccompare');
	divCompare.className='shown';
	var aCmdCompare = document.getElementById('cmdCompare');
	aCmdCompare.setAttribute('href','javascript:hideCompare();');
	aCmdCompare.blur();
	var li = aCmdCompare.parentNode;
	li.className = 'current';
	showingCompare = true;
}
function hideCompare() {
	if (!showingCompare) return;
	var divCompare = document.getElementById('fccompare');
	divCompare.className='';
	var aCmdCompare = document.getElementById('cmdCompare');
	aCmdCompare.setAttribute('href','javascript:showCompare();');
	aCmdCompare.blur();
	var li = aCmdCompare.parentNode;
	li.className = '';
	showingCompare = false;
}

function renderCompareTable() {
	var cellsPerRow = Math.floor((companies.length-2)/2)+1;
	var html = '<table border="0" cellspacing="0" cellpadding="0">';
	for (var i=1; i<companies.length; i++) {
		if (i%cellsPerRow == 1)
			html += '<tr>';
		html += '<td><input id="ticker_' + i + '" type="checkbox" value="' + i + '" onClick="onCheckTicker(this)"';
		if (showChart[i]) 
			html += 'checked="true"';
		html += ' /> <label for="ticker_' + i + '">' + companies[i].symbol + '</label></td>';
		if (i%cellsPerRow == 0)
			html += '</tr>';
	}
	if (companies.length == 1){
		html += '<tr height="25"><td></td> <td></td> </tr></table>\n';
	} else {
		html += '</table>\n';
	}
	var divPicker = document.getElementById('tickerPicker');
	divPicker.innerHTML = html;
}

function onTickerInputFocus(input) {
	input.value = '';
	input.className = 'focused';
}
function onTickerInputBlur(input) {
	input.className = '';
}
function onTickerAdded() {	
	var i = companies.length;
	if (i==9) return alert("For this demo you can't compare more than 9 tickers.");
	var tickerInput = document.getElementById('companyCode');
	var ticker = tickerInput.value;
	if (ticker == '') return;
	tickerInput.blur();
	//ticker = ticker.substr(0,5);
	ticker = ticker.toUpperCase();
	for (var j = 0; j < companies.length; j++) {
	    if(ticker == companies[j].symbol.toUpperCase()) {
	        return;
	    }
	}
	//var i = companies.length;
	var url = "";
	if (ticker == "HOSE" || ticker == "HASTC") {
	    url = "getDataChatForMarket.do?marketCode=" + ticker;
	    var request1 = getXMLHTTPRequest();
	    var response1 = getServerDataForMarket(url, request1);
	}
	
	if(url == ""){
		for (var k = 0; k < listSectorToCheck.length; k++) {
			if(ticker == listSectorToCheck[k].toUpperCase()) {
				url = "getDataChatForSector.do?sectorID=" + ticker;
				//alert(url);
				var request1 = getXMLHTTPRequest();
				var response1 = getServerDataForSector(url, request1);
				break;
			}
		}
	}
	
	if(url == ""){
	    for (var k = 0; k < listIndustryToCheck.length; k++) {
		    if(ticker == listIndustryToCheck[k].toUpperCase()) {
		        url = "getDataChatForIndustry.do?industryCode=" + ticker;
		        var request1 = getXMLHTTPRequest();
	            var response1 = getServerDataForIndustry(url, request1);
	            break;
		    }
	    }
	}
	
	if (url == "") {
	    url = "getDataChatForCompany.do?symbol=" + ticker;
	    var request1 = getXMLHTTPRequest();
	    var response1 = getServerDataForCompany(url, request1);
	}
	
	//var company = new Company(0,ticker,'',200+i);
	//companies.push(company);
	//addChart(i);
	//renderCompareTable();
	//tickerInput.value = 'Enter symbol';
}

var liFlagSelected = null;
function hiliteFlag(id) {
	if (liFlagSelected != null)
		liFlagSelected.className = ''; 
	liFlagSelected = document.getElementById('news'+id);
	liFlagSelected.className = 'selected';
}
//	This function is called by Flash when a flag is clicked
function selectFlag(flagObj) {
	//alert("selectFlag");
	var flag = getFlagById(flagObj[1]);
	//hiliteFlag(flag.id);
	window.location = '#news-' + flag.id;
	//Calling viewNew , companyProfilesId is companies[0].id
	
	//duclh
	selectFlagEnhance(flag.id);		
}
//To Do: need fix
function selectFlagEnhance(id) {
	//duclh
	//alert(id);
	if(locked) return;
	//nofnews = listNews.length
	for(var i = 0; i < listNews.length; i++){
		if (listNews[i].id == id){
			movedsteps = 0;// we begin from top, jumb to its position
			move(i);
			return;
		}
	}
	//no news id matched, we must retrieve more from server
	//currentPos = listNews.length;
	var url = "ajaxscrollnews.do?start="+nofnews+"&symbol="+symbol+"&type="+type+"&numOfNoPin="+numOfNoPin;
	new Ajax.Request(url,{ method: 'get'
		, onSuccess: function(transport) {		
			parseNewsXML(transport.responseXML);
			if(listNews.length > nofnews){
				//there are some news to do
				appendScrollNewsLayer(nofnews,"ajaxnews");
				//do this task again to find out the correct news
				nofnews = listNews.length;
				selectFlagEnhance(id);
			}else{
				//we got all, no need to retrieve again
				stop_retrieve = true;
			}
		}
	});	
	return;
	
}

function gotoFlag(id) {	
	alert('gotoFlag');
	//--LenTran: This line of code causes of the javaScript error 
	//hiliteFlag(id);
	//flashProxy.call('selectFlag', id);
	
}

//duclh
function getMartketDataForChart(url){
	new Ajax.Request(url,{ method: 'get'
				, onSuccess: function(transport) {		
				
			var xmlDomForMarket = null;
            var priceArrayMarket = new Array();
            var volArrayMarket = new Array();
            var endDateMarket = new Date();
            var market = null;
            var flags = new Array();
			xmlDomForMarket = transport.responseXML;
            //alert(request.responseText);
			if(xmlDomForMarket == null) {
			    return;
			}
			
			var listVolNodeForMarket = selectNodeList(xmlDomForMarket, "/market/volume/vol-node");
			for (var i = 0; i < listVolNodeForMarket.length; i++) {
				if (listVolNodeForMarket[i].firstChild != null) {
                 	if(volArrayMarket.length < 500){
                 	volArrayMarket.push(listVolNodeForMarket[i].firstChild.nodeValue);
                 	}
                 } else {
                 	volArrayMarket.push(null);
                 }
                 //alert(listVolNodeForMarket[i].firstChild.nodeValue);
            }           

            var listPriceNodeForMarket = selectNodeList(xmlDomForMarket, "/market/price/price-node");
			for (var i = 0; i < listPriceNodeForMarket.length; i++) {
				if (listPriceNodeForMarket[i].firstChild) {
                 	if(priceArrayMarket.length < 500){
                 	priceArrayMarket.push(listPriceNodeForMarket[i].firstChild.nodeValue);
                 	}
                 } else {
                 	priceArrayMarket.push(null);
                 }
                 //alert(listPriceNodeForMarket[i].firstChild.nodeValue);
            }
            
			if (priceArrayMarket.length <=0) {
			    return;
            }
            var infoNodeForMarket = selectNodeList(xmlDomForMarket, "/market/info");
            var marketId = infoNodeForMarket[0].getAttribute("id");
            var marketName = infoNodeForMarket[0].getAttribute("name");
            var marketSymbol = infoNodeForMarket[0].getAttribute("symbol");
            var year = infoNodeForMarket[0].getAttribute("year");
            var month = infoNodeForMarket[0].getAttribute("month");
            var day = infoNodeForMarket[0].getAttribute("day");
            //alert(marketId + " " + marketName + " " + marketSymbol);
            //alert(year + " " + month + " " + day);
            market = new Company(2, marketSymbol, marketName, marketId);
            endDateMarket.setFullYear(year, month - 1, day);
              // tickets
            var listNodeForTicket = selectNodeList(xmlDomForMarket, "/market/tickets/ticket");
			for (var i = 0; i < listNodeForTicket.length; i++) {
                 var id = listNodeForTicket[i].getAttribute("id");
                 var createdDate = listNodeForTicket[i].getAttribute("createdDate");
                 var date = new Date();
                 var year = createdDate.substring(0,4);
                 var month = createdDate.substring(5,7);
                 var day =createdDate.substring(8,10);
                 //date.setFullYear(year, month - 1, day);
                 date.setFullYear(year, month - 1, day);
                 var flagObject = new Flag(0, id , date, i%26);
                 flags.push(flagObject);
            }
            var dataObj = new DataObj(market.id, endDateMarket, priceArrayMarket, volArrayMarket, flags);
            companies.push(market);
            dataObjs.push(dataObj);
			addChart(companies.length -1);
    		renderCompareTable();
			}
		});
}