//
// getData() -> dataFillOut() -> populateData()
//                            -> marketCapitalization()
// getData() interval
//



// Name: toFixedNumber()
// Description: in case we need to change it later ( e.g. to set toFixed(2) )
// simultaneously in different parts of the script
function toFixedNumber(num) { return num.toFixed(0) }



// Name: populateData()
// Description: takes the class of a pane & the class of the cell and paste the data
//              it also takes the 'notdynamic' boolean and toggle 'up' and 'dn' classes
function populateData(paneClass, cellClass, fieldValue, notdynamic, upOrDown) { var notdynamic = notdynamic; $(paneClass).find(cellClass).text(fieldValue); notdynamic == false ? $(paneClass).find(cellClass).removeClass('up dn').addClass(upOrDown) : '' }



// Name: marketCapitalization()
// Description: calculates RBC's market capitalization
function marketCapitalization(fieldValue) { var capitalizationValue = fieldValue*318890625/1000000000; return capitalizationValue.toFixed(1) }

function getFormatedValue(val)
{
	var str = '';
	str = (val < 10 ? '0' : '') + val.toString();
	
	return str;
}

function _parseInt( str )
{
	return str / 1;
}

// Name: dataFillOut()
// Description: takes the xml data and equity type,
// parses the xml and fires populateData()
function dataFillOut(data, type) {
	var equityType = type,
		paneClass = '.' + equityType + '_tab_pane',
		fields = $(data).find('field');


	fields.each(function() {
		var fieldName = $(this).find('name').text(),
			cellClass = '.' + fieldName + 'Cell',
			fieldValue = $(this).find('value').text();


		if ( fieldName == 'realdate' ) {
			var tradedateYear = _parseInt(fieldValue.toString().slice(0, 4)),
				tradedateMonth = _parseInt(fieldValue.toString().slice(5, 7)) - 1,
				tradedateDay = _parseInt(fieldValue.toString().slice(8, 10)),

				getTimeRegex = /((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\\s?(?:am|AM|pm|PM))?)/ig,
				tradedateTime = fieldValue.match(getTimeRegex).toString().slice(0, 5);
				tradedateTime = tradedateTime.split(':');
				
				tradedateDate = new Date(tradedateYear, tradedateMonth, tradedateDay, _parseInt(tradedateTime[0]) + 4, _parseInt(tradedateTime[1]) );
				
				tradedateYear = tradedateDate.getFullYear();
				tradedateMonth = getFormatedValue( tradedateDate.getMonth() + 1 );
				tradedateDay = getFormatedValue( tradedateDate.getDate() );
				tradedateHours = getFormatedValue( tradedateDate.getHours() );
				tradedateMinutes = getFormatedValue( tradedateDate.getMinutes() );
				
				tradedateTimeString = tradedateHours + ':' + tradedateMinutes;
				tradedateDateString = tradedateDay + '.' +tradedateMonth + '.' + tradedateYear;
				
			populateData(paneClass, cellClass, tradedateDateString);
			populateData(paneClass, '.tradedateTimeCell', tradedateTimeString);
		}
		// we find the dynamic here and pass it to the function
		// e.g. if the value > 0 the cell 'valuenameCell' will get 'up' class
		else if ( fieldName == 'last_change_percent' ) { var upOrDown = ''; fieldValue = fieldValue/1; fieldValue = fieldValue.toFixed(2); fieldValue >= 0 ? upOrDown = 'up' : upOrDown = 'dn'; populateData(paneClass, cellClass, fieldValue+'%', false, upOrDown) }
		else if ( fieldName == 'currency' ) { equityType == 'MICEXINDEXCF' ? populateData(paneClass, cellClass, 'RUB') : populateData(paneClass, cellClass, 'USD'); /*populateData(paneClass, cellClass, fieldValue)*/ }
		else if ( fieldName == 'last' ) {
			fieldValue = fieldValue / 1;
			// populate the lastCell - the last price
			populateData(paneClass, cellClass, fieldValue.toFixed(2));
			// populate marketCapitalizationCell
			populateData(paneClass, '.marketCapitalizationCell', marketCapitalization(fieldValue) +' billion');
		}
	})
	
	
}


// Links:
// ллба - http://indices.finance.rbc.ru/indices/tickers/5173
// пря - http://indices.finance.rbc.ru/indices/tickers/5172
function getData(tickerId, type) { $.get( './indices/tickers/' + tickerId + '.xml', function(data) { dataFillOut(data, type) }) }

$('document').ready(function(){
	// fire on page load
	getData(5173, 'MICEXINDEXCF');
	getData(5172, 'RTSI');
});

// update data every 15 min 30 sec
var getDataInterval_MICEXINDEXCF = setInterval( 'getData(5173, "MICEXINDEXCF")', 930000 );
var getDataInterval_RTSI = setInterval( 'getData(5172, "RTSI")', 930000 );
