function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}
function langCookie(lang) {
    setCookie('lang', lang, new Date(2038, 1, 1) , '/', 'rapidmore.com');
}
function dropdown(obj,state) {
    // only show in newer browsers
//    if (window.XMLHttpRequest) {
//      obj.className = state;
//    }
}

function fixexternallinks() { 
	 if (!document.getElementsByTagName)return; 
	 var anchors = document.getElementsByTagName("a");
	 for (var i=0; i<anchors.length; i++) { 
	   var anchor = anchors[i];
		var ref = anchor.getAttribute("rel");
		if(!ref)continue;
	   if (anchor.getAttribute("href") && 
	       ref.indexOf("external")!=-1){
	     	anchor.target = "_blank";
		}
	 } 
}

var sfw = new Array();
String.prototype.decode = function()
{
	return decodeURI(this);
};
String.prototype.encode = function()
{
	var result = "";
	if(this == "") return this;

	if(typeof encodeURIComponent == "function")
	{
		result = encodeURIComponent(this);
	}
	else
	{
		var alpha  = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
		var string = this.toUTF8();
		result = "";
		for(var i = 0; i < string.length; i++)
		{
			if(alpha.indexOf(string.charAt(i)) == -1)
				result += "%" + string.charCodeAt(i).toHex();
			else
				result += string.charAt(i);
		}
	}
	return result;
};

String.prototype.toHex = function()
{
	var hex = "0123456789ABCDEF";
	return hex.charAt(this.value >> 4) + hex.charAt(this.value & 0xF);
};

String.prototype.toUTF8 = function()
{
	var a, b, i = 0;
	var result  = "";

	while(i < this.length)
	{
		a = this.charCodeAt(i++);
		if(a >= 0xDC00 && a < 0xE000) continue;
		if(a >= 0xD800 && a < 0xDC00)
		{
			if(i >= this.length) continue;
			b = this.charCodeAt(i++);
			if(s < 0xDC00 || a >= 0xDE00) continue;
			a = ((a - 0xD800) << 10) + (b - 0xDC00) + 0x10000;
		}

		if(a < 0x80)  
			result += String.fromCharCode(a); 
		else if(a < 0x800) 
			result += String.fromCharCode(0xC0 + (a >> 6), 0x80 + (a & 0x3F));
		else if(a < 0x10000)
			result += String.fromCharCode(0xE0 + (a >> 12), 0x80 + (a >> 6 & 0x3F), 0x80 + (a & 0x3F));
		else
			result += String.fromCharCode(0xF0 + (a >> 18), 0x80 + (a >> 12 & 0x3F), 0x80 + (a >> 6 & 0x3F), 0x80 + (a & 0x3F)); 
	}
	return result;
};

String.prototype.trim = function()
{
	return this.replace(/^[\s]+|[\s]+$/, "");
};

function isLowIe(){
	var isIE = (document.all && window.ActiveXObject && !window.opera) ? true : false;
	if(isIE){
		var V = navigator.appVersion;
		var X=parseFloat(V.substring(V.indexOf("MSIE")+5,V.lastIndexOf("Windows")));
		if(X < 8.0)
			return true;
	}
	return false;
}

function showPopDiv(popobj, refobj) {

    var left = 0;
    var top  = 0;
    var el = refobj;
    if(isLowIe() && refobj.id!="ng"){
		do
		{
			left += refobj.offsetLeft;
			top += refobj.offsetTop;
			refobj = refobj.offsetParent;
		}while(refobj && refobj.id != "mainbody");
    }else{
         left += refobj.offsetLeft;
         top  += refobj.offsetTop;    
    }
    	top += el.offsetHeight;
        popobj.style.pixelLeft = left;
        popobj.style.pixelTop = top;  
        popobj.style.left = left+"px";
        popobj.style.top = top+"px";  
        popobj.style.display = "block";
}

function sfwCreate(instance)
{
	if(sfw[instance].name && sfw[instance].action)
	{
		sfw[instance].inputContainer = document.getElementById(sfw[instance].name);
		sfw[instance].inputContainer.autocomplete = "off";
		sfw[instance].inputContainer.onblur       = function() { sfwHideOutput(instance); };
	//	sfw[instance].inputContainer.onclick      = function() { sfwShowOutput(instance); };
	//	sfw[instance].inputContainer.onfocus      = function() { sfwShowOutput(instance); };
	//	sfw[instance].inputContainer.onkeypress   = function(event) { if(sfwGetKey(event) == 13) return false; };
		sfw[instance].inputContainer.onkeydown    = function(event) { sfwProcessKeys(instance, event); };

		sfw[instance].outputContainer = document.createElement("div");
		sfw[instance].outputContainer.id             = sfw[instance].name + "_list";
		sfw[instance].outputContainer.className      = "SuggestFramework_List";
		sfw[instance].outputContainer.style.position = "absolute";
		sfw[instance].outputContainer.style.zIndex   = "99";
		sfw[instance].outputContainer.style.width    = sfw[instance].inputContainer.clientWidth + "px";
//		sfw[instance].outputContainer.style.wordWrap = "break-word";
		sfw[instance].outputContainer.style.cursor   = "default";
		showPopDiv(sfw[instance].outputContainer, sfw[instance].inputContainer);
		
		sfw[instance].inputContainer.parentNode.insertBefore(sfw[instance].outputContainer, sfw[instance].inputContainer.nextSibling);
//		sfw[instance].inputContainer.parentNode.insertBefore(document.createElement("br"), sfw[instance].outputContainer);

		

		if(sfw[instance].columns > 1 && sfw[instance].capture > 1)
		{
			sfw[instance].hiddenInput = document.createElement("input");
			sfw[instance].hiddenInput.id   = "_" + sfw[instance].name;
			sfw[instance].hiddenInput.name = "_" + sfw[instance].name;
			sfw[instance].hiddenInput.type = "hidden";
			sfw[instance].inputContainer.parentNode.insertBefore(sfw[instance].hiddenInput, sfw[instance].inputContainer.nextSibling);
		}

		if(!sfwCreateConnection())
		{
			sfw[instance].proxy = document.createElement("iframe");
			sfw[instance].proxy.id = "proxy";
			sfw[instance].proxy.style.width   = "0";
			sfw[instance].proxy.style.height  = "0";
			sfw[instance].proxy.style.display = "none";
			document.body.appendChild(sfw[instance].proxy);

			if(window.frames && window.frames["proxy"])
				sfw[instance].proxy = window.frames["proxy"];
			else if(document.getElementById("proxy").contentWindow)
				sfw[instance].proxy = document.getElementById("proxy").contentWindow;
			else
				sfw[instance].proxy = document.getElementById("proxy");
		}

		sfwHideOutput(instance);
		//sfwThrottle(instance);
	}
	else
	{
		throw 'Suggest Framework Error: Instance "' + sfw[instance].name + '" not initialized';
	}
};

function sfwCreateConnection()
{
	var asynchronousConnection;

	try
	{
		asynchronousConnection = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch(e)
	{
		if(typeof XMLHttpRequest != "undefined")
			asynchronousConnection = new XMLHttpRequest();
	}

	return asynchronousConnection;
};

function sfwGetKey(e)
{
	return ((window.event) ? window.event.keyCode : e.which);
};

function sfwHideOutput(instance)
{
	sfw[instance].outputContainer.style.display = "none";
};

function sfwHighlight(instance, index)
{
	sfw[instance].suggestionsIndex = index;

	for(var i in sfw[instance].suggestions)
	{
		var suggestionColumns = document.getElementById(sfw[instance].name + "_suggestions[" + i + "]").getElementsByTagName("td");
		for(var j in suggestionColumns)
			suggestionColumns[j].className = "SuggestFramework_Normal";
	}

	var suggestionColumns = document.getElementById(sfw[instance].name + "_suggestions[" + sfw[instance].suggestionsIndex + "]").getElementsByTagName("td");
	for(var i in suggestionColumns)
		suggestionColumns[i].className = "SuggestFramework_Highlighted";
};

function sfwIsHidden(instance)
{
	return ((sfw[instance].outputContainer.style.display == "none") ? true : false);
};

function sfwProcessKeys(instance, e)
{
	var keyDown   = 40;
	var keyUp     = 38;
	var keyTab    = 9;
	var keyEnter  = 13;
	var keyEscape = 27;

	if(!sfw[instance].started){
		sfw[instance].started = true;
		sfwThrottle(instance);
	}
	if(!sfwIsHidden(instance))
	{
		switch(sfwGetKey(e))
		{
			case keyDown:   sfwSelectNext(instance);     return;
			case keyUp:     sfwSelectPrevious(instance); return;
			case keyEnter:  sfwSelectThis(instance);     return;
			case keyTab:    sfwSelectThis(instance);     return;
			case keyEscape: sfwHideOutput(instance);     return;
			default: return;
		}
	}
};

function sfwProcessProxyRequest(instance)
{
	var result = ((sfw[instance].proxy.document) ? sfw[instance].proxy.document : sfw[instance].proxy.contentDocument);
	result = result.body.innerHTML.replace(/\r|\n/g, " ").trim();

	if(typeof eval(result) == "object")
		sfwSuggest(instance, eval(result));
	else
		setTimeout("sfwProcessProxyRequest(" + instance + ")", 100);
};

function sfwProcessRequest(instance)
{
	if(sfw[instance].connection.readyState == 4)
	{
		if(sfw[instance].connection.status == 200)
			sfwSuggest(instance, eval(sfw[instance].connection.responseText));
	}
};

function sfwQuery(instance)
{
	sfwThrottle(instance);
	var phrase = sfw[instance].inputContainer.value;
	if(phrase == ""){
		sfw[instance].previous = "";
		sfwHideOutput(instance);
	}
	phrase = phrase.toLowerCase();
	if(phrase == "" || phrase == sfw[instance].previous) return;
	sfw[instance].previous = phrase;
	var url = sfw[instance].action + "?type=" + sfw[instance].name + "&q=" + phrase.trim().encode();

	sfwRequest(instance, url);
};

function sfwRequest(instance, url)
{
	if(sfw[instance].connection = sfwCreateConnection())
	{
		sfw[instance].connection.onreadystatechange = function() { sfwProcessRequest(instance) };
		sfw[instance].connection.open("GET", url, true);
		sfw[instance].connection.send(null);
	}
	else
	{
		sfw[instance].proxy.location.replace(url);
		sfwProcessProxyRequest(instance);
	}
};

function sfwSelectThis(instance, index)
{
	if(sfw[instance].columns > 1 && sfw[instance].capture > 1)
		sfw[instance].hiddenInput.value = sfw[instance].suggestions[sfw[instance].suggestionsIndex][sfw[instance].capture - 1];

	if(!isNaN(index)) { sfw[instance].suggestionsIndex = index; }

	var selection = sfw[instance].suggestions[sfw[instance].suggestionsIndex];
	if(sfw[instance].columns > 1) { selection = selection[0]; }
	sfw[instance].inputContainer.value = selection;
	sfw[instance].previous = selection;
	sfwHideOutput(instance);
	if(sfw[instance].inputContainer.form){
		sfw[instance].inputContainer.form.submit();
	}
};

function moveEnd(input) {
    if (input.createTextRange) {
      input.focus(); // Opera
      var range = input.createTextRange();
      range.move('character', input.value.length);
      range.select();
    } else if (input.setSelectionRange) {
      input.setSelectionRange(input.value.length, input.value.length);
    }
}
function sfwSelectNext(instance)
{
	sfwSetTextSelectionRange(instance);
	if(typeof sfw[instance].suggestions[(sfw[instance].suggestionsIndex + 1)] != "undefined")
	{
		if(typeof sfw[instance].suggestions[sfw[instance].suggestionsIndex] != "undefined")
			document.getElementById(sfw[instance].name + "_suggestions[" + sfw[instance].suggestionsIndex + "]").className = "SuggestFramework_Normal";
		sfw[instance].suggestionsIndex++;
	}else{
		sfw[instance].suggestionsIndex = 0;
	}
		sfwHighlight(instance, sfw[instance].suggestionsIndex);
		var selection = sfw[instance].suggestions[sfw[instance].suggestionsIndex];
		if(sfw[instance].columns > 1) { selection = selection[0]; }
		sfw[instance].inputContainer.value = selection;
		sfw[instance].previous = selection;
		moveEnd(sfw[instance].inputContainer);
};

function sfwSelectPrevious(instance)
{
	sfwSetTextSelectionRange(instance);
	if(typeof sfw[instance].suggestions[(sfw[instance].suggestionsIndex - 1)] != "undefined")
	{
		if(typeof sfw[instance].suggestions[sfw[instance].suggestionsIndex] != "undefined")
			document.getElementById(sfw[instance].name + "_suggestions[" + sfw[instance].suggestionsIndex + "]").className = "SuggestFramework_Normal";
		sfw[instance].suggestionsIndex--;
	}else{
		sfw[instance].suggestionsIndex = sfw[instance].suggestions.length-1;
	}
		sfwHighlight(instance, sfw[instance].suggestionsIndex);
		var selection = sfw[instance].suggestions[sfw[instance].suggestionsIndex];
		if(sfw[instance].columns > 1) { selection = selection[0]; }
		sfw[instance].inputContainer.value = selection;
		sfw[instance].previous = selection;
		
		moveEnd(sfw[instance].inputContainer);
};

function sfwSetTextSelectionRange(instance, start, end)
{
	if(!start) var start = sfw[instance].inputContainer.value.length;
	if(!end)   var end   = sfw[instance].inputContainer.value.length;

	if(sfw[instance].inputContainer.setSelectionRange)
	{
		sfw[instance].inputContainer.setSelectionRange(start, end);
	}
	else if(sfw[instance].inputContainer.createTextRange)
	{
		var selection = sfw[instance].inputContainer.createTextRange();
		selection.moveStart("character", start);
		selection.moveEnd("character", end);
		selection.select();
	}
};

function sfwShowOutput(instance)
{
	var phrase = sfw[instance].inputContainer.value;
	if(phrase == ""){
		sfwHideOutput(instance);
		return;
	}
	if(typeof sfw[instance].suggestions != "undefined" && sfw[instance].suggestions.length)
		sfw[instance].outputContainer.style.display = "block";
};

function sfwSuggest(instance, list)
{
	try{
	if(list.length < 1){
		sfwHideOutput(instance);
		return;
	}
	
	sfw[instance].suggestions               = list;
	sfw[instance].suggestionsIndex          = -1;
	sfw[instance].outputContainer.innerHTML = "";

	var table = '<table style="width: 100%; margin: 0; padding: 0" cellspacing="0" cellpadding="0">';
	if(sfw[instance].heading && sfw[instance].suggestions.length)
	{
		var heading = sfw[instance].suggestions.shift();
		var thead   = '<thead>';
		var headingContainer = '<tr>';
		for(var i = 0; i < sfw[instance].columns; i++)
		{
			var value  = (String) ((sfw[instance].columns > 1) ? heading[i] : heading);
			var column = '<td class="SuggestFramework_Heading"';
			if(sfw[instance].columns > 1 && i == sfw[instance].columns - 1)
				column += ' style="text-align: right"';
			column += '>' + value.decode().trim() + '</td>';
			headingContainer += column;
		}
		headingContainer += '</tr>';
		thead  += headingContainer;
		thead  += '</thead>';
		table  += thead;
	}
	var tbody = '<tbody>';
	var curWord = sfw[instance].inputContainer.value;
	for(var i in sfw[instance].suggestions)
	{
		var suggestionContainer = '<tr id="' + sfw[instance].name + '_suggestions[' + i + ']">';
		for(var j = 0; j < sfw[instance].columns; j++)
		{
			var value  = (String) ((sfw[instance].columns > 1) ? sfw[instance].suggestions[i][j] : sfw[instance].suggestions[i]);
			var column = '<td class="SuggestFramework_Normal"';
			if(sfw[instance].columns > 1 && j == 0)
				column += ' style="text-align: left"';
			
			if(sfw[instance].columns > 1 && j == sfw[instance].columns - 1)
				column += ' style="text-align: right"';
			value =value.decode().trim(); 
			if(j == 0){
 				var rege=eval("/^"+curWord+"/i")
				value = value.replace(rege, "<strong>$&</strong>");
			}
			column += '>' + value + '</td>';
			suggestionContainer += column;
		}
		suggestionContainer += '</tr>';
		table += suggestionContainer;
	}
	tbody += '</tbody>';
	table += tbody;
	table += '</table>';
	sfw[instance].outputContainer.innerHTML = table;
	for(var i in sfw[instance].suggestions)
	{
		var row = document.getElementById(sfw[instance].name + '_suggestions[' + i + ']');
		row.onmouseover = new Function("sfwHighlight(" + instance + ", " + i + ")");
		row.onmousedown = new Function("sfwSelectThis(" + instance + ", " + i + ")");
	}

	sfwShowOutput(instance);
	}
	catch(e) {}
};

function sfwThrottle(instance)
{
	setTimeout("sfwQuery(" + instance + ")", sfw[instance].delay);
};

function initializeSuggestFramework()
{
	function getAttributeByName(node, attributeName)
	{
		if(typeof NamedNodeMap != "undefined")
		{
			if(node.attributes.getNamedItem(attributeName))
				return node.attributes.getNamedItem(attributeName).value;
		}
		else
		{
			return node.getAttribute(attributeName);
		}
	}

	var inputElements = document.getElementsByTagName("input");

	try
	{
		for(var instance = 0; instance < inputElements.length; instance++)
		{
			if(getAttributeByName(inputElements[instance], "name") &&
			   getAttributeByName(inputElements[instance], "type") == "text" && 
			   getAttributeByName(inputElements[instance], "action"))
			{
				sfw[instance] = new Object();
				sfw[instance].action  = getAttributeByName(inputElements[instance], "action");
				sfw[instance].capture = 1;
				sfw[instance].columns = 1;
				sfw[instance].delay   = 1000;
				sfw[instance].heading = false;
				sfw[instance].name    = getAttributeByName(inputElements[instance], "id");
				sfw[instance].started = false;

				if(getAttributeByName(inputElements[instance], "capture"))
					sfw[instance].capture = getAttributeByName(inputElements[instance], "capture");
				if(getAttributeByName(inputElements[instance], "columns"))
					sfw[instance].columns = getAttributeByName(inputElements[instance], "columns");
				if(getAttributeByName(inputElements[instance], "delay"))
					sfw[instance].delay = getAttributeByName(inputElements[instance], "delay");
				if(getAttributeByName(inputElements[instance], "heading"))
					sfw[instance].heading = getAttributeByName(inputElements[instance], "heading");

				sfwCreate(instance);
			}
		}
	}
	catch(e) {}
};

function request(id, url) {
    oScript = document.getElementById(id);
    var head = document.getElementsByTagName("head").item(0);
    if (oScript) {
        head.removeChild(oScript);
    }
    oScript = document.createElement("script");
    oScript.setAttribute("src", url);
    oScript.setAttribute("id", id);
    oScript.setAttribute("type", "text/javascript");
    oScript.setAttribute("language", "javascript");
    head.appendChild(oScript);
    return oScript;
}
var _tform =null;
var _ttextobj=null;
var _timerobj=null;
function timecallback(ret){	
		_tform.submit();
}
function retcallback(ret){
		if (typeof(ret['responseData']['translatedText'])!='undefined' && ret['responseData']['translatedText'].length!=0)
			_ttextobj.value = ret['responseData']['translatedText'];
		if(typeof(_timerobj)!='undefined')
			clearTimeout(_timerobj);
		_tform.submit();
}
function gettrantxt(text){
	var url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=|en&callback=retcallback&q="+escape(text);
	var login = request("gettranScript", url);
	_timerobj = setTimeout(timecallback, 5000);
}
function onsbm(form, textobj) {
	_tform = form;
	_ttextobj = textobj;
    var text = _ttextobj.value;
	if(!text)return;
	var eng = true;
    for(var i=0; i < text.length;i++){
		if(text.charCodeAt(i) > 127){
			eng = false;
			break;
		}
	 }
	if(eng){
		form.submit();
		return;
	}
	text = gettrantxt(text);
}


