var enTable = new Array('A','B','V','G','D','E','YO','ZH','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','TS','TCH','SH','CSH','','YI','','YE','YU','YA','a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','ts','tch','sh','csh','','yi','','ye','yu','ya');

var ruTable = new Array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ы','ъ','э','ю','я');

var selection = null;
    var selectionStart = -1;
    var selectionEnd = -1;

    function storeSelection(noRecurse)
    {
      // Иногда document.selection устанавливается правильно лишь
      // спустя некоторое время, приходится это учитывать
      if (!noRecurse)
        setTimeout(function() {storeSelection(1)}, 500);

      if (element.document.selection.type != "None" && element.document.selection.type != "Text")
        return;

      var range = element.document.selection.createRange();
      if (range.parentElement() != element)
        return;

      selection = range.duplicate();
    }

    function getSelectionStart()
    {
      updateVars()
      return selectionStart;
    }
    function getSelectionEnd()
    {
      updateVars();
      return selectionEnd;
    }
    function updateVars()
    {
      if (!selection)
        return;

      selectionStart = selectionEnd = -1;

      // Поправка на странный глюк при определении позиции в конце однострочного текста
      if (element.value.indexOf("\r") < 0)
      {
        var wholeRange = element.document.body.createTextRange();
        wholeRange.moveToElementText(element);
        if (!selection.compareEndPoints("startToEnd", wholeRange))
          selectionStart++;
        if (!selection.compareEndPoints("endToEnd", wholeRange))
          selectionEnd++;
      }

      selectionStart -= selection.moveStart("character", -element.value.length);
      selectionEnd -= selection.moveEnd("character", -element.value.length);
      selection = null;

      // Вводим поправку на то, что знак \r не учитывается
      var pos = -1;
      do
      {
        pos = element.value.indexOf("\r", pos + 1);
        if (pos >= 0 && selectionStart > pos)
          selectionStart++;
        if (pos >= 0 && selectionEnd > pos)
          selectionEnd++;
      } while (pos >= 0 && pos < selectionEnd);
    }

    function setSelectionRange(startPos, endPos)
    {
      if (startPos > endPos)
        startPos = endPos;

      // Вводим поправку на то, что знак \r не учитывается
      var startCorrection = element.value.substr(0, startPos).match(/\r/g);
      startCorrection = startCorrection ? startCorrection.length : 0;
      var endCorrection = element.value.substr(0, endPos).match(/\r/g);
      endCorrection = endCorrection ? endCorrection.length : 0;

      selection = element.createTextRange();
      selection.collapse(true);
      selection.moveEnd("character", endPos - endCorrection);
      selection.moveStart("character", startPos - startCorrection);
  
      selection.select();

      // Это нужно для случая, когда startPos == endPos
      storeSelection();
    }


function translit_string(srcString,mode)
{
	var dstString = new String('');
	for (i = 0; i < srcString.length; i++)
	{
		for (j = 0; j < ruTable.length; j++)
		{
			if (srcString.charAt(i) == ruTable[j])
			{
				dstString += enTable[j];
			}
		}
	}
	if (dstString == '')
		dstString = srcString;
	newstr = dstString.replace(/\s/gi,"_");
	
	if (mode == 'lo')
		return newstr.toLowerCase();
	if (mode == 'up')
		return newstr.toUpperCase();
	if (mode == 'nat')
		return newstr;
}


function translitRT(theForm,srcField,dstField,bTranslit)
{
	var src = theForm.elements[srcField];
	var dst = theForm.elements[dstField];
if (!src)
	src = document.getElementById(srcField);
if (!dst)
	dst = document.getElementById(dstField);
	if (bTranslit)
		dst.value=translit_string(src.value,'nat');
}

function translitRTLo(theForm,srcField,dstField,bTranslit)
{
	var src = theForm.elements[srcField];
	var dst = theForm.elements[dstField];
if (!src)
	src = document.getElementById(srcField);
if (!dst)
	dst = document.getElementById(dstField);
	if (bTranslit)
		dst.value=translit_string(src.value,'lo');
}

function translitRTUp(theForm,srcField,dstField,bTranslit)
{
	var src = theForm.elements[srcField];
	var dst = theForm.elements[dstField];
if (!src)
	src = document.getElementById(srcField);
if (!dst)
	dst = document.getElementById(dstField);
	if (bTranslit)
		dst.value=translit_string(src.value,'up');
}

var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version = 7;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.9");
		version = axo.GetVariable("$version");
	} catch (e) {
	}
	try {
		
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.8");
		version = axo.GetVariable("$version");
	} catch (e) {
	}
	try {
		
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;			
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split("r");
			} else {
				tempArrayMinor = descArray[4].split("r");
			}
			var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function bCheckFlashPlayer()
{
	// Major version of Flash required
var requiredMajorVersion = 8;
// Minor version of Flash required
var requiredMinorVersion = 0;
// Minor version of Flash required
var requiredRevision = 0;
var hasReqestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

if (hasReqestedVersion) {
	// if we've detected an acceptable version
	// embed the Flash Content SWF when all tests are passed
	/*
	AC_FL_RunContent(
				"src", "example",
				"width", "550",
				"height", "200",
				"align", "middle",
				"id", "detectionExample",
				"quality", "high",
				"bgcolor", "#FFFFFF",
				"name", "detectionExample",
				"allowScriptAccess","sameDomain",
				"type", "application/x-shockwave-flash",
				'codebase', 'http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab',
				"pluginspage", "http://www.adobe.com/go/getflashplayer"
	);
	*/
} else {  // flash is too old or we can't detect the plugin
	/*
	var alternateContent = 'Alternate HTML content should be placed here.<BR>'
	+ 'This content requires the Adobe Flash Player. '
	+ '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
	document.write(alternateContent);  // insert non-flash content
	*/
	var cfres = confirm("FLASH not installed. Go to macromedia flash plugin homepage now?");
	        if (cfres == true)
	        	document.location = 'http://www.macromedia.com/go/getflashplayer';
}
/*
	var plugin;
	var version = 8;
	var flash = false;

	if (nPluginVersion != "")
		version = nPluginVersion;
	if (navigator.plugins) {
	    if (navigator.plugins["Shockwave Flash"]) {
	        plugin = navigator.plugins["Shockwave Flash"].description;
	        
	        flash = parseInt(plugin.charAt(plugin.indexOf('.') - 1)) >= version;
	    }

	    else
	    {
	    	if ((navigator.userAgent.indexOf('MSIE') != -1)&& (navigator.userAgent.indexOf('Win') != -1))
	        {

	            var vb = '<script language="vbscript">\n'
	            +'if ScriptEngineMajorVersion >= 2 then\n'
	            +'on error resume next\n'
	            +'flash = IsObject(CreateObject('
	            +'"ShockwaveFlash.ShockwaveFlash.'
	            +version + '"))\n'
	            +'end if\n'
	            +'<' + '/script>';

	            document.write(vb);
	        }
	    }
	}

	    if (flash == false)
	    {
			var cfres = confirm("FLASH not installed. Go to macromedia flash plugin homepage now?");
	        if (cfres == true)
	        	document.location = 'http://www.macromedia.com/go/getflashplayer';
	    }
	    return flash;
	    */
}

function updateform(prefix)
{
	var CurVote = prefix + 'nums';
	var CurList = prefix + 'list';
	var elm = document.getElementById(CurList);
    var eln = document.getElementById(CurVote);

	 var nCount = eln.value;
	if (nCount > 15)
	{
		alert('too much!!!!');

	}else
	{
		  elm.innerHTML = '';
		  for (i = 0; i < nCount; i++)
		  {
		  	elm.innerHTML += '<tr><td>'+'<label For="'+prefix+'[]">N<u>o</u>&nbsp;'+(i+1)+'&nbsp;</label></td><td><Input Type="file" Name="'+prefix+'[]" class="texter"></td></tr>';
		  }
	}
}

function checkList(prefix)
{
	var elem = document.getElementById(prefix + 'nums');
	var nCount = elem.value;
  elem.innerHTML = '$voteas'+idx;

}

function set_parent(id,catname)
{
	document.getElementById('parent').value = id;
	if (id != 0)
	{
		document.getElementById('parent_null').value = catname;
	}
	else
	{
		document.getElementById('parent_null').value = '';
	}
}

function edit_item(id,pid,name)
{
	document.getElementById('mode').value = 'edit';
	document.getElementById('name').value = name;
	document.getElementById('selfer').value = id;
	document.getElementById('parent').value = pid;
	document.getElementById('subfrm').value = 'Edit';
}

function delitem(prefix,itemID,confirmText)
{
	if (confirm(confirmText))
	{
		var el = document.getElementById(prefix + '_' + itemID);
		el.value = '';
	//	el.name = 'null';
		var lnk = document.getElementById(prefix + 'link_' + itemID);
		lnk.style.display = 'none';
		var lnk = document.getElementById(prefix + 'linkp_' + itemID);
		lnk.style.display = 'none';
	}
}

function void_0(idle)
{ 
	return idle;
}
function CleanField(field_id)
{
 var el = document.getElementById(field_id);
 el.value= '';
}

function recalc()
{

	lent = recalc.arguments;
	var tvl = 0;
	
	for (j = 0; j < lent.length; j++)
	{
		document.getElementById('cost['+lent[j]+']').value = parseFloat(document.getElementById('price['+ lent[j]+']').value) *parseFloat( document.getElementById('quant['+lent[j]+']').value);
		tvl +=  parseFloat(document.getElementById('cost['+lent[j]+']').value);
	}
	document.getElementById('totl').value = tvl;
}

function swapImage(newImage,imgID)
{
	document.getElementById(imgID).src=newImage;
}
function emoticon(areaID,text)
{
        var txtarea = document.getElementById(areaID);
        text = ' ' + text + ' ';
        if (txtarea.createTextRange && txtarea.caretPos) {
                var caretPos = txtarea.caretPos;
                caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
                txtarea.focus();
        } else {
                txtarea.value  += text;
                txtarea.focus();
        }
}
function getTextSelection(){ 
   if      (window.getSelection)   selected = window.getSelection().toString();      
   else if (document.getSelection) selected = document.getSelection();                
   else if (document.selection)   selected = document.selection.createRange().text;  
return selected;
}

function getTextSelectionRange(){ 
   if      (window.getSelection)   selected = window.getSelection();      
   else if (document.getSelection) selected = document.getSelection();                
   else if (document.selection)   selected = document.selection.createRange();  
return selected;
}

function bbcode(areaID,text)
{
	 var txtarea = document.getElementById(areaID);
	 var tx = '';
	 
	if(text == '[url]')
	{
		var pt = window.prompt('Enter URL');
		if(pt == null || pt == 'undefined')
			return;
		tx =  text.substr(0,text.length-1) + ' target='+ pt +']'+ getTextSelection() + text.replace(text,"[/"+text.substr(1,text.length));
			
	}
	else if(text == '[img]')
	{
		var pt = window.prompt('Enter Image URL');
		if(pt == null || pt == 'undefined')
			return;
		tx =  text + pt + text.replace(text,"[/"+text.substr(1,text.length));
	}
	else
	{
	        tx = text + getTextSelection() + text.replace(text,"[/"+text.substr(1,text.length));
	}
	
        if (txtarea.createTextRange && txtarea.caretPos) {
        	var caretPos = txtarea.caretPos;
        	if(getTextSelection().length > 0)
        	{
	                
	               var cps = getTextSelectionRange();
	               cps = tx;
        	}
        	else
        	{
        		caretPos.text += tx;
        	}
        } else {
        	if(getTextSelection().length > 0)
        	{
	        	var sel = getTextSelectionRange();
	        	sel.text = tx;
        	}
        	else
        	{
        		txtarea.value += tx;
        	}
        }
        txtarea.focus();
}

function HideElement(hideId,hidemode)
{
	var t = document.getElementById(hideId);
	if (hidemode == true)
	{
		t.style.display = 'none';
	}
	else
	{
		t.style.display = '';
	}
	
	return false;
}
function SwapHideMode(hideId)
{
	var t = document.getElementById(hideId);
	var timg = document.getElementById(hideId + '_img');
	
	if (t.style.display == '')
	{
		t.style.display = 'none';
		timg.src = '/'+ LIB_ROOT +'/images/nolines_plus.gif';
	}
	else
	{
		t.style.display = '';
		timg.src = '/'+ LIB_ROOT +'/images/nolines_minus.gif';
	}
	return false;
}
