﻿function sca_SelectListByValue(list,value)
{
	for(var i=0;i<list.length;i++)
		if(list.options[i].value==value)
		{
			list.selectedIndex = i;
			return;
		}
	list.selectedIndex = 0;
}
function sca_SelectListByText(list,text)
{
	for(var i=0;i<list.length;i++)
		if(list.options[i].text==text)
		{
			list.selectedIndex = i;
			return;
		}
	list.selectedIndex = 0;
}
function sca_Confirm(msg)
{
	if(msg==null)
		msg = 'Bạn đã chắc chắn ?';
	return confirm(msg);
}
function sca_ParseInt(text)
{
	if(text==null)
		return '';
	while(text.indexOf(',')>=0)
		text = text.replace(',','');
	return parseInt(text);
}
function sca_ParseFloat(text)
{
	if(text==null)
		return '';
	while(text.indexOf(',')>=0)
		text = text.replace(',','');
	return parseFloat(text);
}
function sca_FormatPercent(num)
{
	return sca_FormatNumber(num,2,true,true,true);
}
function sca_FormatCurrency(num)
{
	return sca_FormatNumber(num,0,true,true,true);
}
function sca_FormatNumber(num,decimalNum,bolCommas,bolLeadingZero,bolParens)
{ 
        if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1;		// Get sign of number
	
	// Adjust number so only the specified number of numbers after
	// the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign;					// Readjust for sign
	
	
	// Create a string object to do our formatting on
	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num < 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
		
	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}		
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

	return tmpNumStr;		// Return our formatted string!
}

///////////////////////////////////////////////////////////////////
//	Start of Stock Tooltip
///////////////////////////////////////////////////////////////////
function sca_IsStockCode(text)
{
	if(text==null || text.length==0)
		return false;
	for(var i=0;i<text.length;i++)
	{
		var ch = text.charAt(i);
		if((i==0 && ch<'A') || ch<'0' || (ch>'9' && ch<'A') || (ch>'Z' && ch<'a') || ch>'z')
			return false;
	}
	return true;
}
function sca_GetStockType(code)
{
	var re = new RegExp("^" + code + "_");
	for(var i=0;i<sca_StockDictionary.length;i++)
		if(re.test(sca_StockDictionary[i]))
			return sca_StockDictionary[i].substr(code.length+1,1);
	return '';
}
function sca_GetCompanyName(code)
{
	var re = new RegExp("^" + code + "_");
	for(var i=0;i<sca_StockDictionary.length;i++)
		if(re.test(sca_StockDictionary[i]))
			return sca_StockDictionary[i].substr(code.length+3);
	return '';
}
///////////////////////////////////////////////////////////////////
//	End of Stock Tooltip
///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
//	Start of Vietnamese Number
///////////////////////////////////////////////////////////////////
var sca_CurrentSrcTip = null;
function sca_ShowTip(evt)
{
	evt = (evt) ? evt : (window.event) ? window.event : null;
	var src = (evt.target) ? evt.target : evt.srcElement;
	if(src==null || src==sca_CurrentSrcTip
	 || (sca_CurrentSrcTip!=null && sca_CurrentSrcTip.contains!=null && sca_CurrentSrcTip.contains(src)) )
		return;
	if(src.hasTooltip)
		return;
	if(src.title!=null && src.title!='')
		return;
	var innerText = src.innerText;
	if(innerText==null)
		innerText = src.innerHTML;
	if(innerText.length>20)
		return;
	if(innerText.length<10 && sca_IsStockCode(innerText))
	{
		var tooltip = sca_GetCompanyName(innerText);
		src.title = tooltip;
		sca_CurrentSrcTip = src;
	}
	else
	{
		while(innerText.indexOf(',')>=0)
			innerText = innerText.replace(',','');
		innerText = parseFloat(innerText);
		if(!isNaN(innerText) && innerText>=1000000)
		{
			var tooltip = FloatToTextInVN(innerText.toString());
			if(tooltip!=null && tooltip!='')
			{
				src.title = tooltip;
				sca_CurrentSrcTip = src;
			}
		}
	}
	src.hasTooltip = true;
}
var sca_CurrentInputTip = null;
function sca_TriggerInputTip(evt)
{
	evt = (evt) ? evt : (window.event) ? window.event : null;
	var src = (evt.target) ? evt.target : evt.srcElement;
	if(src==null || src.tagName.toUpperCase()!='INPUT' || src.type!='text')
		return;
	var value = src.value;
	if(value==null || value=='')
		return;
	var tooltip = '';
	if(sca_IsStockCode(value))
	{
		value = value.toUpperCase();
		tooltip = sca_GetCompanyName(value);
		var label = (src.label) ? src.label : src.getAttribute('label');
		if(label!=null)
		{
			label = document.getElementById(label);
			if(label!=null)
				label.innerHTML = tooltip;
		}
		if(tooltip!='')
		{
			var stockType = (src.stockType) ? src.stockType : src.getAttribute('stockType');
			if(stockType!=null)
			{
				stockType = document.getElementById(stockType);
				if(stockType!=null)
				{
					var st = sca_GetStockType(value);
					switch(stockType.tagName)
					{
						case 'SELECT':
							sca_SelectListByValue(stockType,st);
							break;
						case 'INPUT':
							stockType.value = st;
							break;
						default:
							stockType.innerHTML = '1'==st ? 'HASTC' : ('2'==st ? 'HOSE' : 'OTC');
							break;
					}
				}
			}
		}
	}
	else
	{
		while(value.indexOf(',')>=0)
			value = value.replace(',','');
		value = parseFloat(value);
		if(!isNaN(value) && value>=1000)
			tooltip = FloatToTextInVN(value.toString());
	}
	if(tooltip=='')
	{
		sca_HideInputTip();
		return;
	}
	if(sca_CurrentInputTip==null)
	{
		var tmpDiv = document.createElement('DIV');
		tmpDiv.style.position = 'absolute';
		tmpDiv.innerHTML = '&nbsp;';
		tmpDiv.style.padding = '3px';
		tmpDiv.style.border = 'solid 1px gray';
		tmpDiv.style.backgroundColor = 'yellow';
		tmpDiv.style.fontSize = '20px';
		tmpDiv.style.fontWeight = 'bold';
		tmpDiv.style.left = 0;
		tmpDiv.style.top = 0;
		document.body.appendChild(tmpDiv);
		sca_CurrentInputTip = tmpDiv;
	}
	var tmp = sca_CurrentInputTip;
	tmp.innerHTML = tooltip;
	if(window.event)
	{
		tmp.style.left = evt.clientX + document.body.scrollLeft - evt.offsetX;
		tmp.style.top = evt.clientY + document.body.scrollTop - evt.offsetY + src.offsetHeight;
	}
	else
	{
		tmp.style.left = sca_pageX(src);
		tmp.style.top = sca_pageY(src) + src.offsetHeight + 2;
	}
	tmp.style.display = '';
	if(!src.registerBlur)
	{
		src.autoComplete = 'off';
		if(window.attachEvent)
			src.attachEvent('onblur',sca_HideInputTip);
		else if(document.body.addEventListener)
			src.addEventListener('blur',sca_HideInputTip,false);
		src.registerBlur = true;
	}
}
function sca_HideInputTip()
{
	if(sca_CurrentInputTip!=null)
		sca_CurrentInputTip.style.display = 'none';
}
function sca_InitTip()
{
	if(window.attachEvent)
	{
		document.body.attachEvent('onmouseover',sca_ShowTip);
		document.body.attachEvent('onkeyup',sca_TriggerInputTip);
	}
	else if(document.body.addEventListener)
	{
		document.body.addEventListener('mouseover',sca_ShowTip,false);
		document.body.addEventListener('keyup',sca_TriggerInputTip,false);
	}
}
sca_InitTip();
function NumberToTextInVN1(ch,preChar,nextCh,pos1,pos2)
{
	switch(ch)
	{
		case 0:	return (pos2==2) ? (nextCh==0 ? '' : 'lẻ ') : ((pos2==1) ? '' : 'không ');
		case 1:	return (pos2==2) ? 'mười ' : ((pos2==1 && preChar>1) ? 'mốt ' : 'một ');
		case 2:	return 'hai ';
		case 3:	return 'ba ';
		case 4:	return 'bốn ';
		case 5:	return (pos1%3!=1 || preChar==0) ? 'năm ' : 'lăm ';
		case 6:	return 'sáu ';
		case 7:	return 'bảy ';
		case 8:	return 'tám ';
		case 9:	return 'chín ';
	}
	return '';
}
function NumberToTextInVN2(ch,pos2,pos1)
{
	switch(pos2)
	{
		case 0:	return 'trăm ';
		case 2:	return (pos1%3==2) ? ((ch==0 || ch==1) ? '' : 'mươi ') : '';
		case 1:
		{
			if(pos1==1)	return '';
			pos1 = (pos1%3!=1) ? pos1 : pos1%9;
			switch(pos1)
			{
				case 4:	return 'nghìn ';
				case 7: return 'triệu ';
				case 1:	return 'tỉ ';
			}
			break;
		}
	}
	return '';
}
function NumberToTextInVN3(number)
{
	if(number==null || number=='')
		return '';

	var chChars = number;
	var intChars = new Array(chChars.length);
	for(var i=0;i<chChars.length;i++)
		intChars[i] = chChars.charAt(i)-'0';
	
	//	Su dung lastPost de giai quyet truong hop co nhieu so 0 o cuoi so.
	var lastPos = intChars.length-1;
	while(lastPos>0 && intChars[lastPos]==0)	lastPos--;
	lastPos = lastPos + (intChars.length-1-lastPos)%3;

	var pos1 = 0;
	var pos2 = 0;
	var rs = '';
	for(var i=0;i<=lastPos;i++)
	{
		pos1 = intChars.length-i;	//	Vi tri toan hoc cua so
		pos2 = pos1%3;				//	Vi tri cua so trong phan phan nhom con 3 ki tu.
		if(pos2==0 && i>0 && i<=lastPos-2 && intChars[i]==0 && intChars[i+1]==0 && intChars[i+2]==0)
		{
			i += 2;
			continue;
		}
		rs += (NumberToTextInVN1(intChars[i],i>0 ? intChars[i-1] : 0,pos1>1 ? intChars[i+1] : 0,pos1,pos2));
		rs += (NumberToTextInVN2(intChars[i],pos2,pos1));
	}
	return rs;
}

function FloatToTextInVN(number)
{
	if(number==null || number=='')
		return '';
	number = number.replace(',','');
	var dotPos = number.indexOf('.');
	var intPart = dotPos<0 ? number : number.substr(0,dotPos);
	var decimalPart = dotPos<0 ? '' : number.substr(dotPos+1);

	intPart = NumberToTextInVN3(intPart);
	decimalPart = NumberToTextInVN3(decimalPart);

	return (decimalPart==null || decimalPart=='') ? intPart : (intPart + ' phẩy ' + decimalPart);
}
///////////////////////////////////////////////////////////////////
//	End of Vietnamese Number
///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
//	Start of Tab
///////////////////////////////////////////////////////////////////
function sca_Tab(tab)
{
	if(tab!=null && tab.id==null)
		tab = document.getElementById(tab);
	if(tab!=null)
	{
		var page = tab.getAttribute('page');
		var curPage = sca_GetCurrentPage();
		if(page!=null && page.toUpperCase()==curPage)
		{
			tab.className = 'tabOvr';
		}
		else
		{
			var subPages = tab.getAttribute('subPages');
			if(subPages!=null && subPages.toUpperCase().indexOf(curPage)>=0)
				tab.className = 'tabOvr';
			else
			{
				tab.className = 'tab';
				tab.onmouseover = sca_TabOver;
				tab.onmouseout = sca_TabOut;
			}
			tab.onclick = sca_TabClick;
		}
			
	}
}
function sca_TabOver(evt)
{
	evt = (evt) ? evt : (window.event) ? window.event : null;
	var src = (evt.target) ? evt.target : evt.srcElement;
	if(src!=null)	src.className = 'tabOvr';
}
function sca_TabOut(evt)
{
	evt = (evt) ? evt : (window.event) ? window.event : null;
	var src = (evt.target) ? evt.target : evt.srcElement;
	if(src!=null)	src.className = 'tab';
}
function sca_TabClick(evt)
{
	evt = (evt) ? evt : (window.event) ? window.event : null;
	var src = (evt.target) ? evt.target : evt.srcElement;
	if(src!=null)	document.location = src.getAttribute('page');
}
///////////////////////////////////////////////////////////////////
//	End of Tab
///////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
//	Start of Utility
///////////////////////////////////////////////////////////////////
// Calculates the absolute page x coordinate of a relatively positioned element
function sca_pageX(element)
{
  var x = 0;
  do 
    x += element.offsetLeft;
  while ((element = element.offsetParent));
  return x; 
}

// Calculates the absolute page x coordinate of a relatively positioned element
function sca_pageY(element)
{
  var y = 0;
  do 
    y += element.offsetTop
  while ((element = element.offsetParent));
  return y; 
}
function sca_GetCurrentPage()
{
	var page = document.location.href.toUpperCase();
	var pos1 = page.indexOf('.ASPX');
	page = page.substr(0,pos1+5);
	var pos2 = (pos1<0) ? pos1 : page.lastIndexOf('/');
	if(pos1<=pos2)
		return '';
	return (pos2<0) ? page : page.substr(pos2+1);
}
///////////////////////////////////////////////////////////////////
//	End of Utility
///////////////////////////////////////////////////////////////////
