﻿function FormTranslate() {
	var this_formTranslate = this;

	var srctext = document.getElementById('srctext');
	var dsttext = document.getElementById('dsttext');
	var srclang = document.getElementById('srclang');
	var dstlang = document.getElementById('dstlang');
	
	var srclang_last;
	var dstlang_last;

	var langs = {
		'en': 'english',
		'ro': 'română',
        'fr': 'français',
		'ru': 'русский',
		'uk': 'українська',
		'de': 'deutsch',
		'it': 'italiano',
		'es': 'español',
		'pt': 'português',
		'bg': 'български',
		'pl': 'polski',
		'ar': 'العربية',
		'zh-CN': '中文 (简体)',
		'zh-TW': '中文 (繁體)',
		'hr': 'hrvatski',
		'cs': 'česky',
		'da': 'dansk',
		'nl': 'nederlands',
		'fi': 'suomi',
		'el': 'eλληνικά',
		'ja': '日本語',
		'sv': 'svenska'
	};
	
	
	this.initialize = function() {
		srctext.disabled = false;
		dsttext.disabled = false;
		// srctext.value = 'Welcome !';
		srctext.focus();
		srctext.value = '';
		// this.translate();
	}

	this.translate = function() {
		var dot = '.';
		var text = srctext.value;
		if (text.indexOf('。') > -1)
			dot = '。';
		var part = text.split(dot);
		for (var i = 0, l = part.length; i < l; i++) {
			(function(i) {
				Microsoft.Translator.translate(part[i], srclang.value, dstlang.value, function(result) {
					part[i] = (typeof result == 'string') ? result.replace('&#39;', "'") : part[i];
					dsttext.value = part.join(dot+' ');
					this_formTranslate.checkRows();
				});
			})(i);
		}
	};
	
	this.detect = function() {
		var text = srctext.value;
		if( text.length > 2 ){
			if( text.length > 128 ){
				text = text.substring(0, 128);
			}
			//srcbuttons
			Microsoft.Translator.detect(text, function(result) {
				if (result != ''){
					for (var i = 0, l = srclang.options.length; i < l; i++){
						if (result == srclang.options[i].value){
							srclang.options[i].selected = true;
						}
					}
				}
				this_formTranslate.srclangchange();
			});
		}
		//this_formTranslate.translate();
	};
	
	this.focus = function() {
		/*if( srctext.value == 'Welcome !' ){
			srctext.value = '';
		}*/
	};	
	
	this.blur = function() {
		/*if( srctext.value == '' ){
			srctext.value = 'Welcome !';
		}*/
	};	
	
	this.click = function() {
		/*if( srctext.value == 'Welcome !' ){
			srctext.value = '';
		}*/
	};
	
	this.changesrctodst = function() {
		var dst = srclang.value;
		srclang.value = dstlang.value;
		dstlang.value = dst;
		return false;
	};

	this.srclangchange = function() {
		var lis = document.getElementById("srcbuttons").lastChild.childNodes;
		for (var i = 0, l = lis.length; i < l; i++) {
			lis[i].firstChild.className = srclang.value == lis[i].firstChild.lang ? "selected" : "";
		}
		//this.translate();
	}

	this.dstlangchange = function() {
		var lis = document.getElementById("dstbuttons").lastChild.childNodes;
		for (var i = 0, l = lis.length; i < l; i++) {
			lis[i].firstChild.className = dstlang.value == lis[i].firstChild.lang ? "selected" : "";
		}
		//this.translate();
	}

	function setOptions(ob) {
		for (var i in langs) {
			var opt = document.createElement('OPTION');
			opt.value = i;
			opt.lang = i;
			opt.text = langs[i];
			ob.options.add(opt);
		}
	};

	this.checkRows = function() {
		if (navigator.appName.indexOf("Microsoft Internet Explorer") == 0) {
			srctext.style.overflow = 'visible';
			dsttext.style.overflow = 'visible';
			srctext.style.height = '200px';
			dsttext.style.height = '200px';
		} else {
			while (srctext.rows > 10 && srctext.scrollHeight < srctext.offsetHeight) {
				srctext.rows--;
				dsttext.rows = srctext.rows;
			}
			while (srctext.scrollHeight > srctext.offsetHeight || dsttext.scrollHeight > dsttext.offsetHeight) {
				srctext.rows++;
				dsttext.rows = srctext.rows;
			}
		}
	};

	this.setButtons = function(arr, wh, n) {
		var ul = document.createElement('UL');
		ul.setAttribute('id', 'ullist_'+n);
		for (var i = 0, l = arr.length; i < l; i++) {
			var li = document.createElement('LI');
			var button = document.createElement('INPUT');
			button.type = 'button';
			button.value = langs[arr[i]];
			button.lang = arr[i];
			// if (wh.value == arr[i])
			if (i == 0){
				button.className = "selected";
				wh.value =  arr[i];
			}
			button.onclick = function() {
				wh.value = this.lang;
				for (var i = 0; i < l; i++) {
					ul.childNodes[i].firstChild.className = "";
				}
				this.className = "selected";
				//this_formTranslate.translate();
			}
			li.appendChild(button);
			ul.appendChild(li);
		}
		document.getElementById(n).appendChild(ul);
	}

	this.setSrcButtons = function(arr) {
		this.setButtons(arr, srclang, 'srcbuttons');
	}

	this.setDstButtons = function(arr) {
		this.setButtons(arr, dstlang, 'dstbuttons');
	}

	setOptions(srclang);
	setOptions(dstlang);
	// srclang.selectedIndex = 0;
	// dstlang.selectedIndex = 3;
}

var geolocation = "http://api.ipinfodb.com/v2/ip_query_country.php";

function geolocate(timezone, cityPrecision) {
	var key = '681289876af8d20911c629cabb0c467ddc730183283dbfbcc1c24a39abda88ae';
	var api = "ip_query_country.php";
	var domain = 'api.ipinfodb.com';
	var version = 'v2';
	var url = "http://" + domain + "/" + version + "/" + api + "?key=" + key + "&output=json" + "&timezone=false" + "&callback=?";
	var geodata;
	var JSON = JSON || {};

	// implement JSON.stringify serialization
	JSON.stringify = JSON.stringify || function (obj) {
		var t = typeof (obj);
		if (t != "object" || obj === null) {
			// simple data type
			if (t == "string") obj = '"'+obj+'"';
			return String(obj);
		} else {
			// recurse array or object
			var n, v, json = [], arr = (obj && obj.constructor == Array);
			for (n in obj) {
				v = obj[n]; t = typeof(v);
				if (t == "string") v = '"'+v+'"';
				else if (t == "object" && v !== null) v = JSON.stringify(v);
				json.push((arr ? "" : '"' + n + '":') + String(v));
			}
			return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
		}
	};

	// implement JSON.parse de-serialization
	JSON.parse = JSON.parse || function (str) {
		if (str === "") str = '""';
		eval("var p=" + str + ";");
		return p;
	};

	//Check if cookie already exist. If not, query IPInfoDB
	this.checkcookie = function(callback) {
		geolocationCookie = getCookie('geolocation');
		if (!geolocationCookie) {
			getGeolocation(callback);
		} else {
			geodata = JSON.parse(geolocationCookie);
			callback();
		}
	}

	//Return a geolocation field
	this.getField = function(field) {
		try {
			return geodata[field];
		} catch(err) {}
	}

	//Request to IPInfoDB
	function getGeolocation(callback) {
		try {
		$.getJSON(url, function(data){
			if (data['Status'] == 'OK') {
				geodata = data;
				JSONString = JSON.stringify(geodata);
				setCookie('geolocation', JSONString, 365);
				callback();
			}
		});
		} catch(err) {}
	}

	//Set the cookie
	function setCookie(c_name, value, expire) {
		var exdate=new Date();
		exdate.setDate(exdate.getDate()+expire);
		document.cookie = c_name+ "=" +escape(value) + ((expire==null) ? "" : ";expires="+exdate.toGMTString());
	}

//Get the cookie content
	function getCookie(c_name) {
		if (document.cookie.length > 0 ) {
			c_start=document.cookie.indexOf(c_name + "=");
			if (c_start != -1){
				c_start=c_start + c_name.length+1;
				c_end=document.cookie.indexOf(";",c_start);
				if (c_end == -1) {
					c_end=document.cookie.length;
				}
				return unescape(document.cookie.substring(c_start,c_end));
			}
		}
		return '';
	}
}

var formTranslate = new FormTranslate();
function init() {
	formTranslate.initialize();
	
	var visitorGeolocation = new geolocate(false, true);
	var callback = function(){
		switch(visitorGeolocation.getField('CountryCode')){
			case 'MD':
				formTranslate.setSrcButtons(["en", "fr", "es", "it", "ro", "ru"]);
				formTranslate.setDstButtons(["ro", "ru", "it", "es", "fr", "en"]);
				break;
			case 'RU':
				formTranslate.setSrcButtons(["ru", "fr", "en", "it", "es", "zh-CN"]);
				formTranslate.setDstButtons(["ru", "fr", "es", "it", "en", "zh-CN"]);
				break;
                        case 'CN':
				formTranslate.setSrcButtons(["zh-CN", "ja", "en", "zh-TW", "es", "fr"]);
				formTranslate.setDstButtons(["ja", "zh-CN", "en", "it", "es", "fr"]);
				break;
                        case 'IT':
				formTranslate.setSrcButtons(["it", "de", "fr", "ro", "ru", "en"]);
				formTranslate.setDstButtons(["en", "de", "fr", "ro", "ru", "it"]);
				break;
                        case 'ES':
				formTranslate.setSrcButtons(["es", "en", "fr", "ro", "ru", "pt"]);
				formTranslate.setDstButtons(["en", "es", "fr", "ro", "ru", "pt"]);
				break;
                        case 'US':
				formTranslate.setSrcButtons(["en", "en", "fr", "zh-CN", "ja", "ru"]);
				formTranslate.setDstButtons(["es", "fr", "zh-CN", "ru", "ja", "en"]);
				break;
                        case 'JP':
				formTranslate.setSrcButtons(["ja", "en", "fr", "zh-CN", "de", "ru"]);
				formTranslate.setDstButtons(["en", "ja", "zh-CN", "ru", "fr", "de"]);
				break;
			default:
				formTranslate.setSrcButtons(["en", "fr", "es", "it", "de", "ru"]);
				formTranslate.setDstButtons(["fr", "en", "es", "it", "de", "ru"]);
				break;
		}
		//formTranslate.translate();
	};
	visitorGeolocation.checkcookie(callback);
}
init();



