//
//  This script was created
//  by Mircho Mirev
//  mo /mo@momche.net/
//
//	:: feel free to use it for non-commercial use BUT
//	:: if you want to use this code PLEASE send me a note
//	:: and please keep this disclaimer intact
//

//translation routines

//just the same as EN but added as a feature requested by Slavej
var cOffLang =
{
	sName : 'OFF',
	sDName : 'OFF2', //display name
	sMap : '',
	sRData : ''
}

var cEngLang =
{
	sName : 'Bulgarian Cyrillic Phonetic',
	sDName : 'PHO', //display name
	sMap : 'aAbBwWgGdDeEvVzZiIjJkKlLmMnNoOpPrRsStTuUfFhHcC`~[{]}yYxX\\|qQ',
	sRData : 'àÀáÁâÂãÃäÄåÅæÆçÇèÈéÉêÊëËìÌíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖ÷×øØùÙúÚüÜþÞÿß'

}

var cDefaultLang =
{
	sName : 'English',
	sDName : 'OFF', //display name
	sMap : '',
	sRData : ''
}


var cCyrBds =
{
	sName : 'Bulgarian Cyrillc',
	sDName : 'BDS', //display name
	sMap : 'dD/?lLhHoOeEgGpPrRxXuU.>;:kKfFmM,<iIjJwWbBnN[{\'"tTyYcCaAzZsSvVqQ]}',
	sRData : 'àÀáÁâÂãÃäÄåÅæÆçÇèÈéÉêÊëËìÌíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖ÷×øØùÙúÚüÜþÞÿßýÝûÛ;§'
}


var cTranslator = 
{
	sGlobalLangID : cDefaultLang.sDName,
	bHelp : true,
	hCurrentLang : '',
	hCurrentInput : null,
	aLanguages : [],
	onSwitchLang : null
}

cTranslator.registerLang = function( hLang )
{
	this.aLanguages[ hLang.sDName ] = hLang
}

cTranslator.registerLang( cOffLang )
cTranslator.registerLang( cDefaultLang )
cTranslator.registerLang( cCyrBds )
cTranslator.registerLang( cEngLang )

cTranslator.switchLang = function( sLang )
{
	if( typeof ( this.aLanguages[ sLang ] ) != 'undefined' )
	{
		this.hCurrentLang = this.aLanguages[ sLang ]
	}
	if( this.onSwitchLang != null )
	{
		this.onSwitchLang( sLang )
	}
	if( typeof CookieManager != 'undefined' )
	{
		CookieManager.setCookie( 'molang', sLang, 365 )
	}
}

cTranslator.getNextLang = function( sCL )
{
	var bFound = false
	for( sKey in this.aLanguages  )
	{
		if( bFound )
		{
			return sKey
		}
		if( sCL == sKey )
		{
			bFound = true
		}
	}
	if( bFound )
	{
		return cDefaultLang.sDName
	}
}

cTranslator.toggleLang = function( hElement )
{
	var sNewLangID = ''
	if( typeof hElement == 'undefined' || hElement == null )
	{
		sNewLangID = this.getNextLang( this.sGlobalLangID )
		this.sGlobalLangID = sNewLangID
	}
	else
	{
		/*var sLangAtt = hElement.getAttribute( 'MOLANG' )
		if( sLangAtt != 'DEFAULT' )
		{
			sNewLangID = this.getNextLang( sLangAtt )
			hElement.setAttribute( 'MOLANG', sNewLangID )
		}
		else
		{*/
			sNewLangID = this.getNextLang( this.sGlobalLangID )
			this.sGlobalLangID = sNewLangID
		//}
		hElement.focus()
	}
	this.switchLang( sNewLangID )
}

cTranslator.initLanguage = function( hEvent )
{
 	if( hEvent == null ) hEvent = window.event
	hElement = ( hEvent.srcElement ) ? hEvent.srcElement : hEvent.originalTarget 
	cTranslator.hCurrentInput = hElement
	/*var sLangAtt = hElement.getAttribute( 'MOLANG' )
	if( sLangAtt != 'DEFAULT' )
	{
		cTranslator.switchLang( hElement.getAttribute( 'MOLANG' ) )
	}
	else
	{*/
		cTranslator.switchLang( cTranslator.sGlobalLangID )
	//}
	return true
}

cTranslator.processKey = function( hEvent )
{
	if( hEvent == null ) hEvent = window.event
	hElement = ( hEvent.srcElement ) ? hEvent.srcElement : hEvent.originalTarget 
	var nCode = hEvent.keyCode ? hEvent.keyCode : hEvent.charCode ? hEvent.charCode : hEvent.which ? hEvent.which : void 0;
	if( ( hEvent.charCode != null ) && ( hEvent.charCode != nCode ) )
	{
		return
	}
	var sCode = String.fromCharCode( nCode )
	var nPos = cTranslator.hCurrentLang.sMap.indexOf( sCode )
	if( nPos >= 0 && !hEvent.ctrlKey && !hEvent.altKey )
	{
		sRep = cTranslator.hCurrentLang.sRData.charAt( nPos )
		if( window.event && !bw.op7 ) //we have IE and not Opera
		{
			window.event.keyCode = sRep.charCodeAt()
		}
		else //no we have some kind of moz
		{
			var nScrollTop = hElement.scrollTop
			var nScrollLeft = hElement.scrollLeft
			var nScrollWidth = hElement.scrollWidth
			cTranslator.replaceSelection( hElement, sRep )
			var nW = hElement.scrollWidth - nScrollWidth
			if( hElement.scrollTop == 0 )
			{
				hElement.scrollTop = nScrollTop
			}
			if( hElement.scrollLeft == 0 )
			{
				hElement.scrollLeft =  nScrollLeft + nW
			}
		}
		if( hEvent.preventDefault )
		{
			hEvent.preventDefault()
		}
	}
	//hEvent.returnValue=true
	return true
}

cTranslator.install = function( hElement )
{
	if( document.attachEvent ) 
	{
		hElement.attachEvent( 'onfocus', cTranslator.initLanguage )
		hElement.attachEvent( 'onkeypress', cTranslator.processKey )
	}
	else if( document.addEventListener )
	{
		hElement.addEventListener( 'focus', cTranslator.initLanguage, false )
		hElement.addEventListener( 'keypress', cTranslator.processKey, false )
	}
}

cTranslator.init = function()
{
	var nI = 0
	var aInputs = document.getElementsByTagName( 'INPUT' )
	for( var nI = 0; nI < aInputs.length; nI ++ )
	{
		if( aInputs[ nI ].type.toLowerCase() == 'text' )
		{
		/* 	var sLangAtt = aInputs[ nI ].getAttribute( 'MOLANG' )
			if( sLangAtt )
			{*/
				cTranslator.install( aInputs[ nI ] )
		//	}
		}
	}
	var aTextAreas = document.getElementsByTagName( 'TEXTAREA' )
	for( var nI = 0; nI < aTextAreas.length; nI ++ )
	{
	/* 	var sLangAtt = aTextAreas[ nI ].getAttribute( 'MOLANG' )
		if( sLangAtt )
		{*/
			cTranslator.install( aTextAreas[ nI ] )
	//	}
	}
	
	if( typeof CookieManager != 'undefined' )
	{
		var sLang = CookieManager.getCookie( 'molang' )
	}
	if( sLang != null )
	{
		this.sGlobalLangID = sLang
		//this.switchLang( sLang )
	}
	this.switchLang( this.sGlobalLangID )
}


//replace incoming characters

//the functions used to translate
cTranslator.setSelectionRange = function( input, selectionStart, selectionEnd ) 
{
	if ( input.setSelectionRange )
	{
		input.focus()
		input.setSelectionRange(selectionStart, selectionEnd)
	}
	else if ( input.createTextRange )
	{
		var range = input.createTextRange()
		range.collapse(true)
		range.moveEnd('character', selectionEnd)
		range.moveStart('character', selectionStart)
		range.select()
	}
}

//mozilla only
cTranslator.replaceSelection = function( input, replaceString ) 
{
	if ( input.setSelectionRange )
	{
		var selectionStart = input.selectionStart
		var selectionEnd = input.selectionEnd
		input.value = 	input.value.substring(0, selectionStart)
						+ replaceString
						+ input.value.substring(selectionEnd)
		cTranslator.setSelectionRange(input, selectionStart + replaceString.length+1, selectionStart + replaceString.length+1)
	} 
}

//attach to onload event
cTranslator.onKeySwitch = function( hEvent )
{
   if( hEvent == null ) hEvent = window.event
   var nCode = hEvent.keyCode ? hEvent.keyCode : hEvent.charCode ? hEvent.charCode : hEvent.which ? hEvent.which : void 0;
   if( hEvent.altKey && hEvent.ctrlKey && ( nCode == 16 || nCode == 17 ) )
   {
	   cTranslator.hKeySwitchTimeout = setTimeout( "cTranslator.doKeySwitch()", 500 )
   }
   else
   {
   		clearTimeout( cTranslator.hKeySwitchTimeout )
   }
}

cTranslator.onKeyUp = function( hEvent )
{
	if( hEvent == null ) hEvent = window.event
	var nCode = hEvent.keyCode ? hEvent.keyCode : hEvent.charCode ? hEvent.charCode : hEvent.which ? hEvent.which : void 0;
	if( nCode == 0 )
	{
		clearTimeout( cTranslator.hKeySwitchTimeout )
	}
}

cTranslator.doKeySwitch = function()
{
      cTranslator.toggleLang( cTranslator.hCurrentInput )
}


cTranslator.onLoad = function()
{
	cTranslator.onSwitchLang = cTranslator.displayLanguage
	
	if( bw )
	{
		if( bw.ie5 || bw.ie6 || bw.ie7 || ( bw.ns5 && bw.mozVersion > 1.3 ) || bw.op7 )
		{
		  	cTranslator.init()

			var hLinks = document.getElementsByClassName( 'langLink' )
	
			for( var nI = 0; nI < hLinks.length; nI ++ )
			{
				if( hLinks[ nI ] != null )
				{
					hLinks[ nI ].onclick = new Function( "cTranslator.toggleLang( cTranslator.hCurrentInput ); return false" )
				
					var hHelpLink = document.getElementById( 'langHelpLink' )
					if( hHelpLink != null )
					{
						hHelpLink.href = "http://momche.net/redir.php?page=inputlocalehelp"
					}
				}

			}

		
			if( document.attachEvent )
			{
			   //document.attachEvent( 'onkeydown', cTranslator.onKeySwitch )
			   document.attachEvent( 'onkeyup', cTranslator.onKeyUp )
			}
			else if( document.addEventListener )
			{
			   //document.addEventListener( 'keydown', cTranslator.onKeySwitch, false )
			   document.addEventListener( 'keyup', cTranslator.onKeyUp, false )
			}

		}
	}
}

cTranslator.displayLanguage = function( sLang )
{
	var hLinks = document.getElementsByClassName( 'langLink' )
	
	for( var nI = 0; nI < hLinks.length; nI ++ )
		{
			if( hLinks[ nI ] != null )
			{
				hLinks[ nI ].innerHTML = sLang
			}
		}
}

if( window.attachEvent )
{
	window.attachEvent( 'onload', cTranslator.onLoad )
}
else if( window.addEventListener )
{
	window.addEventListener( 'load', cTranslator.onLoad, false )
}

document.getElementsByClassName = function (c) {
    var ret = new Array();
    var j = 0;
    var objs = document.all ? 
        document.all : document.getElementsByTagName("*");
    for(i = 0;i<objs.length;i++){
        if(objs[i].className == c){
            ret[j] = objs[i];
            j++;
        } // if
    } // for
    return ret;
} // getElementsByClassName