var mtimer;
var mnAJAX = null;
var searching = "<img src='/img/loading.gif' height='32' width='32'> S&ouml;ker...";
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
var lookuplang = "";
var lookupword = "";

function ajaxInit()
{
	if (mnAJAX == null)
	{
		try
		{    
			// Firefox, Opera 8.0+, Safari    
			mnAJAX = new XMLHttpRequest();    
		}
		catch (e)
		{    
			// Internet Explorer    
			try
			{      
				mnAJAX = new ActiveXObject("Msxml2.XMLHTTP");      
			}
			catch (e)
			{      
				try
				{        
					mnAJAX = new ActiveXObject("Microsoft.XMLHTTP");        
				}
				catch (e)
				{        
					return null;        
				}	      
			}    
		}
	}
	else if (mnAJAX.readyState != 0)
	{
		mnAJAX.abort();
	}
	return mnAJAX;
}
function ajaxObject(url, obj, cb) 
{
	var that=this;      
	this.updating = false;
	this.update = function(passData,postMethod) 
	{ 
		if (that.updating==true) 
		{ 
			return false; 
		}
		that.updating=true;                       
		var AJAX = ajaxInit();                    
		if (AJAX == null) 
		{                             
			return false;                               
		} 
		else 
		{
			AJAX.onreadystatechange = function() 
			{  
				if (AJAX.readyState==4) 
				{             
					that.updating=false;
					if (that.object != null)
					{
						that.object.innerHTML = AJAX.responseText;
					}                
					else
					{
						that.callback(AJAX.responseText,AJAX.status,AJAX.responseXML);
					}        
					delete AJAX;                                         
				}                                                      
			}  
			
			var timestamp = new Date();                              
			if (postMethod=='POST') 
			{
				var uri=urlCall;
				AJAX.open("POST", uri, true);
				AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
				AJAX.setRequestHeader("Content-length", passData.length);
				AJAX.setRequestHeader("Connection", "close");
				AJAX.send(passData);
			} 
			else 
			{
				var uri=urlCall+'?'+passData;
				AJAX.open("GET", uri, true);                             
				AJAX.send(null);                                         
			}              
			return true;                                             
		}                                                                           
	}
	var urlCall = url;
	this.object = obj; 
	this.callback = cb || function () { };
} 

function ajaxPostMe(url,form,target,cb)
{
	var params = ajaxGetParams(form);
	var f = new ajaxObject(url,target,cb);
	f.update(params,'POST');
}
function ajaxGetMe(url,params,target,cb)
{
	var f = new ajaxObject(url,target,cb);
	f.update(params,'GET');
}

function doTranslate()
{
	if(mtimer) clearTimeout(mtimer);
	mtimer = setTimeout("doIt()",250);
}

function doIt()
{
  obj = $("translate");
  text = obj.what.value;
  flang = obj.flang.value;
  tlang = obj.tlang.value;
  ttlang = obj.ttlang.value;
  
  createCookie("tlang",tlang,30);
  createCookie("ttlang",ttlang,30);
  
  $("history").style.display = 'none';
  $("result").style.display = 'block';
  $("result2").style.display = 'block';
  
  if (text == "")
  {
    $("detect").innerHTML = "";
    $("result").innerHTML = "";
    $("result2").innerHTML = "";
    return;
  }
  
  if (flang != "")
  {
    $("detect").innerHTML = "";
  }
  else
  {
    google.language.detect(text, function(result) 
    {
    if (!result.error) 
    {
      var language = 'unknown';
      for (l in google.language.Languages) 
      {
        if (google.language.Languages[l] == result.language) 
        {
          language = l;
          flang = result.language;
          break;
        }
      }
      
      if (language != 'unknown')
      {  
        language = language.toLowerCase();
        google.language.translate(language, "en", "sv", function(result) 
        {
          if (!result.error) 
          {
            $("detect").innerHTML = "[ " + result.translation + " ]";
          }
        });
      }
      else
      {
          $("detect").innerHTML = "<span style='color: #900'>Kan ej identifiera spr&aring;k...</span>";
      }
    }
    });
  }
     
  google.language.translate(text, flang, tlang, function(result) 
  {
    if (!result.error) 
    {
      var res = result.translation.split(" ");
      var x = res.shift();
      var out = "";
      while(x)
      {
        out = out + '<a href="javascript:lookup(\'' + x + '\',\'' + tlang + '\',1)">' + x + '</a> ';
        x = res.shift();
      }
      $("result").innerHTML = out + "";
    }
    else
    {
      $("result").innerHTML = '<span style="color: #900">Kan ej &ouml;vers&auml;tta text...</span>';
    }
  });
  
  google.language.translate(text, flang, ttlang, function(result) 
  {
    if (!result.error) 
    {
      var res = result.translation.split(" ");
      var x = res.shift();
      var out = "";
      while(x)
      {
        out = out + '<a href="javascript:lookup(\'' + x + '\',\'' + ttlang + '\',2)">' + x + '</a> ';
        x = res.shift();
      }
      $("result2").innerHTML = out + "";
    }
    else
    {
      $("result2").innerHTML = '<span style="color: #900">Kan ej &ouml;vers&auml;tta text...</span>';
    }
  });
    
}

function lookup(s,lang,n)
{
  if (n==1)
  {
    lookuplang = $("translate").tlang.options[$("translate").tlang.selectedIndex].text;
  }
  else if (n==2)
  {
    lookuplang = $("translate").ttlang.options[$("translate").ttlang.selectedIndex].text;
  }
  lookupword = s;
  alookup(s,lang);
}

function doLookup()
{
  $("history").style.display = 'none';
  lookuplang = $("lookup").lang.options[$("lookup").lang.selectedIndex].text;
  createCookie("llang",$("lookup").lang.value,30);
  lookupword = $("lookup").what.value;
  alookup($("lookup").what.value,$("lookup").lang.value);
}

function encode_utf8( s )
{  
  if (browser == "Microsoft Internet Explorer")
    return unescape( encodeURIComponent( s ) );
  else
    return s;
}
function decode_utf8( s ){  return decodeURIComponent( escape( s ) );}

function alookup(s,lang)
{
  $("result3").style.display = 'block';
  if(mtimer) clearTimeout(mtimer);
  if(!lang) lang = "sv";
  $("result3").innerHTML = "<p class='divider'><p>" + searching + "";
  var q = encode_utf8(s);
  var param = 'lang='+lang+'&q='+q;
	ajaxGetMe('http://www.tolka.se/ajax.php',param,null,doneLu);
}

function history()
{
  $("result").style.display = 'none';
  $("result2").style.display = 'none';
  $("history").style.display = 'block';
}

function doneLu(text,status,xml)
{
  if (text == "*")
  {
    $("result3").innerHTML = "<p class='divider'></p><p class='m3'>Hittade inte " + lookupword + " p&aring; " + lookuplang + "</p>";
  }
  else
  {
    $("result3").innerHTML = text + "";
  }
}

function setPrefs(myselect,opt)
{
  for (var i=0; i<myselect.options.length; i++)
  {
    if (myselect.options[i].value == opt)
    {
      myselect.options[i].selected = true;
      myselect.focus();
      break;
    }
  }
}

function clear()
{
  $("detect").innerHTML = "";
  $("result").innerHTML = "";
  $("result2").innerHTML = "";
  $("result3").innerHTML = "";
  $("translate").what.value = "";
  setPrefs($("translate").tlang,readCookie("tlang"));
  setPrefs($("translate").ttlang,readCookie("ttlang"));
  setPrefs($("lookup").lang,readCookie("llang"));
  $("lookup").what.value = "";
  $("translate").what.focus();
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

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 null;
}

function clearCookies()
{
  eraseCookie("tlang");
  eraseCookie("ttlang");
  eraseCookie("llang");
  alert("Alla cookies raderades!");
  window.location.href=window.location.href;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function $(s)
{
	return document.getElementById(s);
} 
