////////////////**********************************************/////////////
/* multi language module
*/
////////////////**********************************************/////////////


function CLangMsg(){
	var userLang;
		
	userLang = navigator.userLanguage || navigator.language;
	this.mBrowserLang = userLang.toLowerCase();
	this.mCurrLang	= this.mBrowserLang;
	this.mSelectedLang = "";
	this.mXml		= null;	
	this.mDefaultLang = "";
	this.mCallback	= "";
	this.mLangChangedCallback = "";
	this.mMsgIdArray= new Array();
	this.mMsgArray	= new Array();
}

CLangMsg.prototype.clear = function()
{
	this.mMsgIdArray= new Array();
	this.mMsgArray	= new Array();
}

CLangMsg.prototype.addMsg = function(sId, sValue)
{
	if(!this.hasMsg()){
		this.mMsgIdArray[this.mMsgIdArray.length] = sId;
		this.mMsgArray[this.mMsgArray.length] = sValue;
	}
}

CLangMsg.prototype.getMsg = function(sId)
{
	var sRet = "";
	if(this.mXml){
		sRet = "msg("+sId+")";
		for(var i=0;i<this.mMsgIdArray.length;i++){
			if(sId==this.mMsgIdArray[i]){
				sRet = this.mMsgArray[i];
				break;
			}
		}
	} else {
		sRet = "msg not init:" + sId;
	}
	return sRet;
}

CLangMsg.prototype.hasMsg = function(sId)
{
	var bRet = false;
	for(var i=0;i<this.mMsgIdArray.length;i++){
		if(sId==this.mMsgIdArray[i]){
			bRet = true;
			break;
		}
	}
	return bRet;
}

CLangMsg.prototype.getOptionHtml = function()
{
	var sRet = "";	
	var objXML = _gLangMsg.mXml;
	if(!objXML) return sRet;
	var nodeLang, nodeLangList;
	var sTemp, sValue;
	var sSelectLang = AcuGetCurrentLang();
	nodeLangList = objXML.selectNodes("/AcuLang/Languages/Language");
	
	sRet = "<select id=selectLang name=selectLang id=selectLang onchange='AcuOnSelectLangChange()'>"
	for(var i=0;i<nodeLangList.length;i++){
		nodeLang = nodeLangList[i];
		sTemp = nodeLang.getAttribute("id");
		sValue= nodeLang.getAttribute("value");
		if(sSelectLang == sTemp){
			sRet += "<option value='" + sTemp +  "' selected>" + sValue + "</option>";
		} else {
			sRet += "<option value='" + sTemp +  "'>" + sValue + "</option>";
		}
	}
	sRet += "</select>"
	return sRet;
}

CLangMsg.prototype.setCurrentLang = function(sLang)
{
	var objXML = this.mXml;
	if(!objXML) return;
	
	var nodeLang, nodeMsg;
	var nodeLangList, nodeMsgList;
	var selectLang = "";
	var sTemp;
	
	
	nodeLang = objXML.selectSingleNode("/AcuLang/Languages/Language[@id=\"" + sLang + "\"]");
	if(nodeLang){
		nodeLang = objXML.selectSingleNode("/AcuLang/LangMsg[@Id=\"" + sLang + "\"]");
		if(nodeLang){
			selectLang = sLang;
		}
	}
	
	if(selectLang.length<=0){
		selectLang = this.mDefaultLang;
	}
	
	//alert(sLang + " selected:" + selectLang);
	this.mCurrLang	= selectLang;
	nodeLang = objXML.selectSingleNode("/AcuLang/LangMsg[@Id=\"" + selectLang + "\"]");
	if(nodeLang){
		nodeMsgList = nodeLang.selectNodes("Msg");
		_gLangMsg.clear();
		for(var i=0;i<nodeMsgList.length;i++){
			nodeMsg = nodeMsgList[i];
			_gLangMsg.addMsg(nodeMsg.getAttribute("Id"), nodeMsg.nodeTypedValue);
		}
	}
}
	
CLangMsg.prototype.setCurrentLangFF = function(sLang)
{
	var XMLDoc = this.mXMLDoc;
	if(!XMLDoc) return;	

	var rootNode = XMLDoc.getElementsByTagName("AcuLang")[0];
	var selectLang = "";
	
	var langsNode = rootNode.getElementsByTagName("Languages")[0];
	var langNode = langsNode.getElementsByTagName("Language");
	for (var i = 0; i < langNode.length; i++)
	{
		if (langNode[i].getAttribute("id") == sLang)
		{
			var langmsgNode = rootNode.getElementsByTagName("LangMsg");
			for (var j = 0; j < langmsgNode.length; j++)
			{
				if (langmsgNode[j].getAttribute("Id") == sLang)
				{
					selectLang = sLang;
					
					//if found then quit the inner loop
					break;
				}
			}
			
			//if found then quit the outer loop
			break;
		}
	}
	
	if(selectLang.length<=0){
		selectLang = this.mDefaultLang;
	}
	
	this.clear();
	this.mCurrLang	= selectLang;
	var langmsgNode = rootNode.getElementsByTagName("LangMsg");

	for (var i = 0; i < langmsgNode.length; i++)
	{
		//searh the message nodes for the selected language
		if (langmsgNode[i].getAttribute("Id") == selectLang)
		{
			//add message to message array using a loop
			var msgNode = langmsgNode[i].getElementsByTagName("Msg");

			for (var j = 0; j < msgNode.length; j++)
			{
				if (msgNode[j].firstChild) {
					var sMsg = msgNode[j].firstChild.nodeValue;
					if (sMsg.length > 0) {
						_gLangMsg.addMsg(msgNode[j].getAttribute("Id"), sMsg);	
					}
				}
			}
			
			//if found then quit the outer loop
			break;
		}
	}

}

var _gLangMsg;

function AcuSetLangChangedCallback(s1)
{
	_gLangMsg.mLangChangedCallback = s1;
}

function AcuGetSelectLang()
{
	return mSelectedLang;
}

function AcuLangChangeUI(doc)
{
	//replace span tag
	var tagArray = new Array("span","td","div","p","input","img","option");
	var tagName;
	var list, item;
	for(var i=0;i<tagArray.length;i++){
		tagName = tagArray[i];
		list = doc.getElementsByTagName(tagName);
		if(list && list.length){
			for(var j=0;j<list.length;j++){
				item = list[j];				
				if(item.getAttribute("autoLang")=="1"){					
					if(item.getAttribute("langId") && item.getAttribute("langId")!="undefined"){
						if(item.type + "".toLowerCase() == "button" || item.type + "".toLowerCase() == "submit") {
							item.value = AcuGetMsg(item.getAttribute("langId"));
						} else {
							item.innerHTML = AcuGetMsg(item.getAttribute("langId"));
						}						
					}
					if(item.getAttribute("titleId") && item.getAttribute("titleId")!="undefined"){
						item.title = AcuGetMsg(item.getAttribute("titleId"));
					}
				}
			}
		}
	}
}

function AcuSetDefaultLang()
{
	var objXML = _gLangMsg.mXml;
	if(!objXML) return;	
	
	var nodeLang;
	var selectLang = "";
	
	nodeLang = objXML.selectSingleNode("/AcuLang/Languages");
	_gLangMsg.mDefaultLang = nodeLang.getAttribute("Default");
	
	nodeLang = objXML.selectSingleNode("/AcuLang/Locations/L[@Id=\"" + _gLangMsg.mBrowserLang + "\"]");
	if(nodeLang){
		selectLang = nodeLang.getAttribute("LId");
	}
		
	if(selectLang.length<=0){
		selectLang = _gLangMsg.mDefaultLang;
	}
	_gLangMsg.mCurrLang	= selectLang;	
	_gLangMsg.mSelectedLang = selectLang;
		
	return AcuSetCurrentLang(selectLang);
}

function AcuSetDefaultLangFF()
{	
	var XMLDoc = _gLangMsg.mXMLDoc;
	if(!XMLDoc) {
		return;
	}
	
	var rootNode = XMLDoc.getElementsByTagName("AcuLang")[0];
	var langNode = rootNode.getElementsByTagName("Languages")[0];
	var selectLang = "";
	_gLangMsg.mDefaultLang = langNode.getAttribute("Default");
	var locationNode = rootNode.getElementsByTagName("Locations")[0];
	var LNode = locationNode.getElementsByTagName("L");
	for (var i = 0; i < LNode.length; i++)
	{
		if (LNode[i].getAttribute("Id") == _gLangMsg.mBrowserLang)
		{
			selectLang = LNode[i].getAttribute("LId");	
		}
	}
		
	if(selectLang.length<=0){
		selectLang = _gLangMsg.mDefaultLang;
	}
	_gLangMsg.mCurrLang	= selectLang;	
	_gLangMsg.mSelectedLang = selectLang;	
		
	AcuSetCurrentLangFF(selectLang);	
}
function AcuGetDefaultLang()
{
	return _gLangMsg.mDefaultLang;
}

function AcuSetCurrentLang(sLang)
{
	return _gLangMsg.setCurrentLang(sLang);
}
function AcuSetCurrentLangFF(sLang)
{
	return _gLangMsg.setCurrentLangFF(sLang);
}
function AcuGetCurrentLang()
{
	return _gLangMsg.mCurrLang;
}

function AcuGetMsg(sId)
{
	return _gLangMsg.getMsg(sId);
}

function AcuLoadLangMsg(sUrl,sCallback)
{
	_gLangMsg = new CLangMsg();
	var objXML;
	
	if (window.XMLHttpRequest && !IsIE()){
		objXML = new XMLHttpRequest();
		_gLangMsg.mXml = objXML;		
   	_gLangMsg.mCallback = sCallback;
		objXML.onreadystatechange = AcuOnLangMsgLoadStatusChangeFF;
		objXML.open("GET",sUrl, true);		
		objXML.send(null);
			
	} else if (window.ActiveXObject){		
		objXML = new ActiveXObject("Microsoft.XMLDOM");
		objXML.resolveExternals = false;
	  _gLangMsg.mXml = objXML; 
	  _gLangMsg.mCallback = sCallback;
		objXML.onreadystatechange = AcuOnLangMsgLoadStatusChange
		objXML.async = true;
		objXML.load(sUrl);		
	}
	
}

function AcuOnLangMsgLoadStatusChange()
{
	var objXML = _gLangMsg.mXml;
	if (objXML.readyState == 4) {
		var sCallback = _gLangMsg.mCallback;		
		if (objXML.parseError.errorCode != 0){
			sCallback = sCallback + "(false)";
		} else {
			sCallback = sCallback + "(true)";			
		}
		// exe callback function
		eval(sCallback);
	}
}
function AcuOnLangMsgLoadStatusChangeFF()
{
	var objXML = _gLangMsg.mXml; 	

	if (objXML.readyState == 4) {
		var sCallback = _gLangMsg.mCallback;
		if (objXML.status == 200 || objXML.status == 0){
			_gLangMsg.mXMLDoc = objXML.responseXML;
			sCallback = sCallback + "(true)";
		} else {
			sCallback = sCallback + "(false)";
		}
		eval(sCallback);
	}
}
function AcuCreatOptionList()
{
	var panelSelect = document.getElementById("selectLangPanel");
	if(panelSelect){
		panelSelect.innerHTML = _gLangMsg.getOptionHtml();
	}
}

function AcuOnSelectLangChange()
{	
	_gLangMsg.mSelectedLang = selectLang.value;
	AcuSetCurrentLang(_gLangMsg.mSelectedLang);
	AcuLangChangeUI(document);
	var sCallback = _gLangMsg.mLangChangedCallback;	
	if(sCallback.length>0){
		sCallback = sCallback + "(' " + _gLangMsg.mSelectedLang + " ')";
	}	
}