(function(){
// BEGIN SERVER DATA
var smartling_menu_data = {
	doRedirect:true,
	defaultStyles:false,
	sites: {	
		"en" : {code: "en", name: "English", host: "members.webs.com", word: "Language", def: true},
		"es-es" : {code: "es-es", name: "Espa&ntilde;ol (Spain)", host: "es.members.webs.com", word: "Idioma", def:false}  
	}
};
// END SERVER DATA
	var smdd = {
		makeMenu: function (langs, cookieDomain) {
			// get browser address
			var address = (typeof smdebugurl != 'undefined') ? smdebugurl : window.location.host.toString();
			var script = lib.get(settings.scriptId);
			var root = lib.create("ul");
			root.style.display = 'none';
			lib.addClass(root, settings.rootClass);

			// make trigger button (user clicks to see menu)
			var topLi = lib.create("li");
			lib.addClass(topLi, settings.triggerClass);
			// anchor for clicks
			var directions = lib.create("a");
			lib.addClass(directions, settings.triggerLink);
			//directions.href = "#nojs";

			// make the span for the word "language"
			var langLabel = lib.create("span");
			lib.addClass(langLabel, settings.wordClass);

			// make span for name of language
			var currentLangSpan = lib.create("span");
			lib.addClass(currentLangSpan, settings.currentLangClass);

			// now populate the two spans with items corresponding to 
			// the current language as determined from location 
			var lang = lib.getLocFromAddress(address, langs);

			// if the language appears in our list
			var languageName, languageword,currentLang; 
			if (lang in langs) {
				languageName = langs[lang].name;
				languageWord = langs[lang].word;
				currentLang = lang;
			}
			else {
				// use the first (default) language in the list
				var def = lib.getDefaultLang(langs);
				languageName = def.name;
				languageWord = def.word;
				currentLang = def.code;
			}

			// set the text contents of the two nodes in trigger button
			currentLangSpan.innerHTML = languageName;
			langLabel.innerHTML = languageWord;

			// now lets append all this to the dom
			directions.appendChild(langLabel);
			directions.appendChild(currentLangSpan);
			topLi.appendChild(directions);
			root.appendChild(topLi);

			// now create a list containing menu items
			var ul = lib.create("ul");
			topLi.appendChild(ul);
			for (var l in langs) {
				//if (l != currentLang) {
					var a = lib.create("a");
					var li = lib.create("li");
					lib.addClass(li, settings.itemClass);
					lib.addClass(a, settings.linkClass);
					var pre = (lib.debug) ? "#" : "";
					var pathname = window.location.pathname;
					if(pathname.indexOf("?") == -1){
						a.href = pre + window.location.protocol + "//" + langs[l].host + pathname + "?resetSession=1";
					}else{
						a.href = pre + window.location.protocol + "//" + langs[l].host + pathname + "&resetSession=1";
					}
					a.innerHTML = langs[l].name;
					a.style.display = 'block';
					li.appendChild(a);
					ul.appendChild(li);
					a.onclick = (function (ul, code) {
						// if user clicks default site in menu
						// we do NOT want a redirect, so set cookie to noredirect
						var isDefault = langs[code].def;
						var lang = (isDefault) ? "noredirect" : code;
						return function () {
							lib.setCookie(settings.cookieName, lang, 360, '/', cookieDomain);
							//ul.style.display = 'none';
						};
					})(ul, langs[l].code);
				//}
			}

			var timeout = null;
			var sfEls = root.getElementsByTagName("LI");
			for (var i = 0; i < sfEls.length; i++) {
				sfEls[i].onmouseover = function () {
					this.className += " sfhover";
				};
				sfEls[i].onmouseout = function () {
					this.className = this.className.replace(new RegExp(" sfhover\\b"), "");
				};
				sfEls[i].onmouseover = function () {
					this.className += " sfhover";
					clearTimeout(timeout);
				};
			}

			// assign click handler to the trigger button
			// to show menu
			lib.addEvent(directions, "click", function () {
				ul.style.display = 'block';
			});

			// handle mouseout 
			lib.addEvent(root, "mouseout", function (e) {
				// set timeout to be killed by any show events of adjacent menu elements
				// this will only actually fire if user moves mouse off menu
				timeout = setTimeout(function () {
					ul.style.display = 'none';
				}, 50);
			});
			var loadCount = 0;
			var styleLoadInt = 
			setInterval( function() {
				//console.log( lib.getStyle(root,"width") );
				var styleLoaded = (lib.getStyle(root,"width") != "auto");
				loadCount++;
				if (loadCount > 50 || styleLoaded) {
					root.style.display = "block";
					clearInterval(styleLoadInt);
				}
			},100);			
		}
	};

	var lib = {
		debug: false,
		debugBrowserPref: true,
		log: function (str, title) {
			if (lib.debug && console) {
				if (title) {
					console.log(title, str);
				}
				else {
					console.log(str);
				}
			}
		},
		create: function (s) {
			return document.createElement(s);
		},
		get: function (s) {
			return document.getElementById(s);
		},
		addEvent: function (elm, evType, fn, useCapture) {
			if (elm.addEventListener) {
				elm.addEventListener(evType, fn, useCapture);
				return true;
			}
			else if (elm.attachEvent) {
				var r = elm.attachEvent('on' + evType, fn);
				return r;
			}
			else {
				elm['on' + evType] = fn;
				return true;
			}
		},
		getLocFromAddress: function (host, langs) {
			var ret = null;
			for (var l in langs) {
				var obj = langs[l];
				if (obj.host == host) {
					ret = l;
				}
			}
			return ret;
		},
		addClass: function (elem, value) {
			if (value && typeof value === "string") {
				var classNames = (value || "").split(" ");

				if (elem.nodeType === 1) {
					if (!elem.className) {
						elem.className = value;
					}
					else {
						var className = " " + elem.className + " ",
							setClass = elem.className;
						for (var c = 0, cl = classNames.length; c < cl; c++) {
							if (className.indexOf(" " + classNames[c] + " ") < 0) {
								setClass += " " + classNames[c];
							}
						}
						elem.className = setClass;
					}
				}

			}
		},
		addOnReadyEvent: function (fnc) {
			if (document.addEventListener) {
				document.addEventListener("DOMContentLoaded", fnc, false);
			} else if (window.attachEvent){
				// Use IE event model
				window.attachEvent("onload", fnc);
			} else {
				if(!window.onload) window.onload = fnc;
			}
		},
		addOnloadEvent: function (fnc) {
			if (typeof window.addEventListener != "undefined") window.addEventListener("load", fnc, false);
			else if (typeof window.attachEvent != "undefined") {
				window.attachEvent("onload", fnc);
			}
			else {
				if (window.onload != null) {
					var oldOnload = window.onload;
					window.onload = function (e) {
						oldOnload(e);
						window[fnc]();
					};
				}
				else window.onload = fnc;
			}
		},
		getDefaultLang: function (langs) {
			// cloodge: just get first one
			for (lang in langs) {
				return langs[lang];
			}
		},
		setCookie: function (name, value, expiresDays, path, domain, secure) {
			if (expiresDays) {
				var today = new Date();
				var expires = new Date(today.getTime() + (expiresDays * 1000 * 3600 * 24));
			}
			var curCookie = name + "=" + escape(value) + ((expiresDays) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
			document.cookie = curCookie;
		},
		getCookie: function (name) {
			var prefix = name + "=";
			var cookieStartIndex = document.cookie.indexOf(prefix);
			if (cookieStartIndex == -1) {
				return null;
			}
			var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
			if (cookieEndIndex == -1) {
				cookieEndIndex = document.cookie.length;
			}
			return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
		},
		isRedirectNeeded: function (domain, url) {
			// we only need to redirect if we're at original domain
			var currentHost = window.location.host.split(':')[0];
			return ((domain == currentHost) && (url.indexOf('://' + currentHost) == -1));
		},
		getDefaultDomain: function (sites) {
			var ret = null;
			for (var l in sites) {
				if (sites[l].def) {
					ret = sites[l].host;
				}
			}
			return ret;
		},
		getCookieDomain: function (domain) {
			var dom = domain.split(".").reverse();
			dom = "." + dom[1] + "." + dom[0];
			//var dom = domain.split(".").reverse().slice(0,1).reverse().join(".");
			return dom;
		},
		getUrlWithCurrentPath: function (url) {
			var path = window.location.pathname;
			if (url.lastIndexOf('/') == url.length - 1) {
				path = path.substring(1, path.length);
			}
			var search = window.location.search;
			var protocol = window.location.protocol + "//";
			return protocol + url + path + search;
		},
	 	getStyle: function(el,styleProp)
		{
			if (el.currentStyle)
				var y = el.currentStyle[styleProp];
			else if (window.getComputedStyle)
				var y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
			return y;
		}
	};

	var redirect = function (originalDomain, cookieDomain, sites) {		
		var getCurrentLocale = function () {
			return (navigator.userLanguage) ? (navigator.userLanguage) : (window.navigator.language);
		};

		var getCurrentLanguage = function () {
			return getCurrentLocale().split('-')[0];
		};

		var doRedirect = function (site) {
			lib.setCookie(settings.cookieName, site.code, 360, '/', cookieDomain, '');
			// if we are on the default site
			// we should do a redirect
			window.location = lib.getUrlWithCurrentPath(site.host);
		};

		var isCookieSet = function () {
			return (document.cookie.indexOf(settings.cookieName + '=') == -1) ? false : true;
		};

		var isCookiesEnabled = function () {
			lib.setCookie("test", 1, 360, '/', cookieDomain, '');
			return (document.cookie.indexOf("test" + '=') == -1) ? false : true;
		};

		var doRedirectByBrowserPreferences = function () {
			if (isCookiesEnabled()) {
				var locale = getCurrentLocale();
				if (sites[locale]) {
					doRedirect(sites[locale]);
				}
				else {
					var language = getCurrentLanguage();
					var def = lib.getDefaultLang(sites);
					if (language != def.code) {
						if (sites[language]) {
							doRedirect(sites[language]);
						}
					}
				}
			}
		};
		var getSiteByLastVisited = function () {
			if (isCookiesEnabled()) {
				var l = getLastVisitedByCookie();
				if (sites[l]) {
					return sites[l];
				}
				else {
					//TO DO get language
					//var language = getCurrentLanguage();
					//if (sites[language]) {
					//    doRedirect(sites[language]);
					//}
				}
				return null; // if nothing is found
			}
		};

		var getLastVisitedByCookie = function () {
			return lib.getCookie(settings.cookieName);
		};

		var getValidLastVisitedHost = function () {
			var url = lib.getCookie(settings.cookieName);
			for (var language in sites) {
				if (url == sites[language]) {
					return url;
				}
			}
			return null;
		};

		var _initialize = function () {
			//debugger;
			if (!isCookieSet()) {
				doRedirectByBrowserPreferences();
			}
			else {
				var site = getSiteByLastVisited();
				if (site && site.host != window.location.host) {
					doRedirect(site);
				}
				else { // fall back to browser pref if cookie redirect fails
					doRedirectByBrowserPreferences();
				}
			}
		};

		_initialize();
	}; // end of redirect
	var settings = {
		scriptId: "smt-script",
		rootClass: "smt-menu",
		itemClass: "smt-item",
		linkClass: "smt-link",
		wordClass: "smt-word",
		currentLangClass: "smt-lang",
		triggerClass: "smt-trigger",
		triggerLink: "smt-trigger-link",
		stylePath: window.location.protocol + "//www.smartling.com/static/css/languageSelector.css",
		cookieName: "_smtLastVisitedHost",
		defaultStyles: true
	};
	lib.addOnReadyEvent(function () {
		var originalDomain = lib.getDefaultDomain(smartling_menu_data.sites);
		var cookieDomain = lib.getCookieDomain(originalDomain);
		smdd.makeMenu(smartling_menu_data.sites, cookieDomain);

		// we only do redirect on original domain
		// never on a translated site
		var cookieNoRedirect = (lib.getCookie(settings.cookieName) == "noredirect");
		
		var isOpera = (/Opera/.test (navigator.userAgent));
		
		if (smartling_menu_data.doRedirect && window.location.host == originalDomain && !cookieNoRedirect && !isOpera) {
			new redirect(originalDomain, cookieDomain, smartling_menu_data.sites);
		}
		
	});

	// TO DO force the css to respect user's prootocl
	// insert css styles	
	if (smartling_menu_data.defaultStyles) {
		document.write("<link rel='stylesheet' href='" + settings.stylePath + "'></link>");
	}
}());
