window.addEvent('domready', function(){
	
	if($('langFrom')) $('langFrom').addEvents({'change': loadTranslations});
	if($('langTo')) $('langTo').addEvents({'change': loadCharacters});
	if($('search')) $('search').addEvents({'click': rewriteFormAction});

	AttachSpecialCharsEvents();
	AttachTipsEvents();
    AttachSearchFunctionsEvents();
});

function AttachTipsEvents()
{
    var links = $$("a.tip");
    for (i = 0; i < links.length; i++)
    {
        AttachEvent(links[i], "click", showTip);
        links[i].href="javascript:void(0);";
    }
}
function AttachSpecialCharsEvents()
{
    if($('specialCharacters'))
    {
        var links = $$('#specialCharacters a');
        for (i = 0; i < links.length; i++)
        {
            links[i].href="javascript:void(0);";
            AttachEvent(links[i], "click", t);
        }
    }
}
function AttachSearchFunctionsEvents()
{
    if($("bidirectional"))
    {
        AttachEvent($("bidirectional"), "click", saveSearchOptions);
        AttachEvent($("bidirectional"), "click", loadCharacters);
    }
    if($("universal"))
    {
        AttachEvent($("universal"), "click", saveSearchOptions);
    }
}
function saveSearchOptions(e)
{
    var option=srcElement(e);
    var h_option = $("h_"+option.id);
    if(h_option && option.checked) h_option.value=1;
    else if(h_option) h_option.value=0;
}
function t(e)
{
    var a=srcElement(e);
    if($("q"))
        insertChar("q", a.firstChild.nodeValue, "", "");
    else
        insertChar("ctl00_MainContentHolder_newword", a.firstChild.nodeValue, "", "");
}

function insertChar(id, tagOpen, tagClose, sampleText) {
    var txtarea = $(id);
    var selText, isSample = false;

    if (document.selection && document.selection.createRange) { // IE/Opera
        //save window scroll position
        if (document.documentElement && document.documentElement.scrollTop)
            var winScroll = document.documentElement.scrollTop
        else if (document.body)
            var winScroll = document.body.scrollTop;
        //get current selection
        txtarea.focus();
        var range = document.selection.createRange();
        selText = range.text;
        //insert tags
        checkSelectedText();
        range.text = tagOpen + selText + tagClose;
        //mark sample text as selected
        if (isSample && range.moveStart) {
            if (window.opera)
                tagClose = tagClose.replace(/\n/g,'');
            range.moveStart('character', - tagClose.length - selText.length);
            range.moveEnd('character', - tagClose.length);
        }
        range.select();
        //restore window scroll position
        if (document.documentElement && document.documentElement.scrollTop)
            document.documentElement.scrollTop = winScroll
        else if (document.body)
            document.body.scrollTop = winScroll;
    }
    else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
        //save textarea scroll position
        var textScroll = txtarea.scrollTop;
        //get current selection
        txtarea.focus();
        var startPos = txtarea.selectionStart;
        var endPos = txtarea.selectionEnd;
        selText = txtarea.value.substring(startPos, endPos);
        //insert tags
        checkSelectedText();
        txtarea.value = txtarea.value.substring(0, startPos)
                                + tagOpen + selText + tagClose
                                + txtarea.value.substring(endPos, txtarea.value.length);
        //set new selection
        if (isSample) {
            txtarea.selectionStart = startPos + tagOpen.length;
            txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
        } else {
            txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
            txtarea.selectionEnd = txtarea.selectionStart;
        }
        //restore textarea scroll position
        txtarea.scrollTop = textScroll;
    }
    
    function checkSelectedText(){
    if (!selText) {
        selText = sampleText;
        isSample = true;
    } else if (selText.charAt(selText.length - 1) == ' ') { //exclude ending space char
        selText = selText.substring(0, selText.length - 1);
        tagClose += ' '
    }
   }
}

function srcElement(e)
{
    if(!e) var e = window.event;
    return e.target ? e.target : e.srcElement;
}
function getSelectedValue(selectElement)
{
    if(selectElement)
    {
        var len = selectElement.length;
        var selected = "0";
        for (var i = 0; i < len; i++)
        {
            if (selectElement[i].selected)
            {
                selected = selectElement[i].value;
                break;
            }
        }
        return selected;
    }
}
var req = null;
function getXmlRequest()
{
    var xmlRequest = null;
    if (typeof XMLHttpRequest != 'undefined') {
        xmlRequest = new XMLHttpRequest();
    }
    if (!xmlRequest) {
    //IE 6 and older
    try {
        xmlRequest  = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        try {
            xmlRequest  = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
            xmlRequest  = null;
        }
    }
    }
    return xmlRequest;
}
function loadTranslations(e)
{
    var select = srcElement(e);
    req = getXmlRequest();
    var ml = getUILanguage();
    var url = "ajax/ajaxhandler.ashx?a=t&t="+getSelectedValue(select);
    if(ml.length>0)
        url+="&l="+ml;
    req.open("GET", url, /*async*/true);
    req.onreadystatechange = setTranslations;
    req.send(/*no params*/null);
}
function setTranslations() {
   if (req.readyState == 4 /*complete*/) {
       var doc = req.responseXML; // Assign the XML file to a var
       var options = req.responseXML.getElementsByTagName("option");
       var langTo = document.getElementById("langTo");
       removeChildren(langTo);
       for (i=0;i<options.length;i++)
       {
            var option = document.createElement("option");
            option.setAttribute("value", options[i].attributes[0].firstChild.nodeValue);
            var text = document.createTextNode(options[i].firstChild.nodeValue);
            option.appendChild(text);
            langTo.appendChild(option);
       }
       loadCharacters(null);
   }
}
function loadCharacters(e)
{
    var source = null;
    if(e!=null) source = srcElement(e);
    
    var from="langFrom";
    var to="langTo";
    if(source!=null && source.tagName=="select"){from="langTo";to="langFrom";}
    var select = document.getElementById(from);
    var url = "ajax/ajaxhandler.ashx?a=c&t="+getSelectedValue(select);
    if(isBidirectional())
        url += "&t1=" + getSelectedValue(document.getElementById(to));
    req = getXmlRequest();
    req.open("GET", url, /*async*/true);
    req.onreadystatechange = setCharacters;
    req.send(/*no params*/null);
    rewriteFormAction();
}
function isBidirectional()
{
    return document.getElementById("bidirectional") && document.getElementById("bidirectional").checked;
}
function rewriteFormAction()
{
    document.forms[0].action = document.getElementById("base").value 
                               + "translate/" 
                               + getSelectedValue(document.getElementById("langFrom")) 
                               + "-" 
                               + getSelectedValue(document.getElementById("langTo")) 
                               + "/" 
                               + document.getElementById("q").value.replace(/\./g,"")
                               + ".aspx";
    return true;
}
function setCharacters() {
    if (req.readyState == 4 /*complete*/) {
        var doc = req.responseXML; // Assign the XML file to a var
        var characters = req.responseXML.getElementsByTagName("character");
        var charactersHolder = document.getElementById("specialCharacters");
        removeChildren(charactersHolder);
        var ul = document.createElement("ul");
        for (i=0;i<characters.length;i++)
        {
            //alert(characters[i].attributes[0].firstChild.nodeValue);
            var li = document.createElement("li");
            var a = document.createElement("a");
            a.setAttribute("href", "javascript:void(0);");
            var text = document.createTextNode(characters[i].attributes[0].firstChild.nodeValue);
            a.appendChild(text);
            AttachEvent(a, "click", t);
            li.appendChild(a);
            ul.appendChild(li);
        }
        charactersHolder.appendChild(ul);
    }
}
function removeChildren(node)
{
 if(node == undefined || node == null) return;
 var len = node.childNodes.length;
 while (node.hasChildNodes())
 {
  node.removeChild(node.firstChild);
 }
}
function getUILanguage()
{
    var query = window.location.search.substring(1); 
    if(query.length==0)
        return query;
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++)
    {
        var pair = vars[i].split("=");
        if (pair[0] == "l") return pair[1];
    }
    return getCookie("uiInfo");
}
function getCookie(name) {
    var cookie = readCookie(name);
    if(cookie.split("=").length>1)
        return cookie.split("=")[1];
    return "";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return "";
}
function getTip(gid)
{
    req = getXmlRequest();
    var ml = getUILanguage();
    var url = "ajax/ajaxhandler.ashx?a=g&t="+gid;
    if(ml.length>0)
        url+="&l="+ml;
    req.open("GET", url, /*async*/true);
    req.onreadystatechange = setTip;
    req.send(/*no params*/null);
}
function setTip(){
   if (req.readyState == 4 /*complete*/) {
       var doc = req.responseXML; // Assign the XML file to a var
       var tipContent;
       if(doc.firstChild && doc.firstChild.firstChild)
        tipContent = doc.firstChild.firstChild.nodeValue;
       else
        tipContent = "TODO...";
       var lines = tipContent.split("[[BR]]");
       var p = document.createElement("p");
       for (var i=0;i<lines.length;i++)
       {
           var text = document.createTextNode(lines[i]);
           p.appendChild(text);
           p.appendChild(document.createElement("br"));
       }
       var tip=document.getElementById("tip");
       tip.appendChild(p);
   }
}
function closeTip(e)
{
    showTip(e,false);
}
function showTip(e,show)
{
    var tip=document.getElementById("tip");
    if(!tip) return;
    if(show==null || show) tip.style.display="block";
    else { tip.style.display="none"; return; }
    var link = srcElement(e);
    var pos = findPos(link);
    tip.style.left = pos[0] + "px";
    tip.style.top = pos[1] + "px";
    tip.style.position = "absolute";
    removeChildren(tip);
    var close = document.createElement("a");
    close.setAttribute("href", "javascript:void(0);");
    close.setAttribute("title", "Close");
    var closeTxt = document.createTextNode("x");
    close.appendChild(closeTxt);
    //AttachEvent(close, "click", closeTip);
    tip.appendChild(close);
    AttachEvent(tip, "click", closeTip);
    getTip(link.getAttribute("gid"));
}
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

//*** This code is copyright 2003 by Gavin Kistner, gavin@refinery.com
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
//*** Reuse or modification is free provided you abide by the terms of that license.
//*** (Including the first two lines above in your source code satisfies the conditions.)


//***Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
//***e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis,false);

function AttachEvent(obj,evt,fnc,useCapture){
	if (!useCapture) useCapture=false;
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,useCapture);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
	else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
	}
} 
//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}