
// Updated 24 feb 2010 00:56

var strDomain = "visual-utopia.com";




var strSessionName = "vuid"
var strHost = window.location.hostname;

var strAddr = document.location.href;
var strSession = getSessionFromAddress(strAddr, strSessionName);

var nobreakout = false;
var serverClientOffset = 0;



if(ingame) {

}
else {
	var ingame = false;
	
	
}


	// Break out of the translation frame after form submit, etc

	if(self.location.href.indexOf('translate.google.com') > -1) {
		try {
			window.status = parent.location.href;
		}

		catch(e) {
			//Break out of frame
			//alert('Breaking out of frame...');
			
			if(confirm('Do you want to break out of the frame?')) {

				try{
					//alert(self.location.href);
					parent.location = self.location.href;
				}
				catch(err) {
					alert('Break out of frame failed!\n' + err.message);
					nobreakout = true;
				}
			}
		}
	}







// Disable caching... Just hope the time is synchronized =)


if(!getCookie('serverClientOffset')) {
	serverClientOffset = getServerClientOffset();
	var now = new Date();
	fixDate(now);
	now.setTime(now.getTime() + 1 * 24 * 60 * 60 * 1000);
	setCookie('serverClientOffset', serverClientOffset, now);
}
else {
	serverClientOffset = getCookie('serverClientOffset');
	//alert('serverClientOffset: ' + serverClientOffset);
}

if(self.location.href.indexOf('translate.google.com') > -1) {


	if(serverTimeStamp) {
		
		var localTimeStamp = new Date();
		
		// Use lastModified instead if we can get it
		if(document.lastModified) localTimeStamp = new Date(document.lastModified);
		

		localTimeStamp = localTimeStamp.getTime() / 1000 - localTimeStamp.getTimezoneOffset() * 60;

		var diff = serverTimeStamp - localTimeStamp - serverClientOffset;

		//alert('Server time-stamp: ' + serverTimeStamp + '\nLocal time-stamp: ' + localTimeStamp + '\nserverClientOffset: ' + serverClientOffset + '\nDiff:' + diff);

		if(diff < -4 || diff > 4) {

			if(confirm(document.location.href + '\n\nThis page is ' + diff + ' seconds old.\nDo you want to refresh?'))
			window.location.reload();
			
			// \n\nServer time-stamp: ' + serverTimeStamp + '\nLocal time-stamp: ' + localTimeStamp + '\nserverClientOffset: ' + serverClientOffset + '\nDiff:' + diff

		}
		else {
			//alert('The page is ' + diff + ' seconsd old!');
		}
	}
	else {
		alert('Could not retrive server time. The page might be cached:\n' + document.location.href + '');
	}
}


// Add translation to alert, confirm and prompt

if(strAddr.indexOf('translate.google.com') > -1) {

	//alert('This page will be translated!');
	
	google.load("language", "1");
	
	var currentLanguage = queryStr('tl');

	if(1==1) {
	window.alert = function(n) {
		return function(str) {
			google.language.translate(str, "en", currentLanguage, function(result) {
				if (!result.error) {
					n(result.translation);
				}
			});
		}
	}(window.alert);
	}
	
	window.confirm = function(n) {
		return function(str) {
			google.language.translate(str, "en", currentLanguage, function(result) {
				if (!result.error) {
					n(result.translation);
				}
			});
		}
	}(window.confirm);

	window.prompt = function(n) {
		return function(str) {
			google.language.translate(str, "en", currentLanguage, function(result) {
				if (!result.error) {
					n(result.translation);
				}
			});
		}
	}(window.prompt);
	
	

}


function t(lang) {

	var url = document.location.href;

	if(url.indexOf('translate.google.com') > 0) {
		url = queryStr('u');
		
		url = fixQstring(url)

	}

	top.location='http://translate.google.com/translate?ie=UTF-8&u=' + escape(url) + '&sl=en&tl=' + lang + '&hl=' + lang;
}



var strDebug = 'Links:\n';


function addSessionToForms() {
	//alert('hej');

	var strQueryString = new String();
	
	if(strSession) {

		// Add the session string to all forms
		var formTags = document.getElementsByTagName("form");
		for (var i = 0; i < formTags.length ; i++) {
			if(formTags[i].method=="get") {
				
				
				formTags[i].onsubmit = function() {
					
					var varsAdded = 0;

					strQueryString = this.action + '?';

					// Find all fields
					for (var j = 0; j < this.elements.length ; j++) {
						// Only add checkboxes if they are checked, do not add buttons
						if((this.elements[j].type != 'checkbox' || this.elements[j].checked) && this.elements[j].type != 'button' && this.elements[j].type != 'submit') {
						
							varsAdded++;
							
							// Build queryString
							if(varsAdded>1) strQueryString += '&';

							//alert(j + ' * ' + this.elements[j].name + '=' + this.elements[j].value);

							 strQueryString += escape(this.elements[j].name) + '=' + escape(this.elements[j].value);

						}
					}

					// Add the session
					strQueryString += '&vuid=' + strSession;			
				
					if(ingame) go(strQueryString)
					else go(strQueryString, top);
					
				
					//alert('Form submitted: ' + strQueryString);

					return false;
				}
					
			}
			else if(formTags[i].method=="post") {
				//alert(formTags[i].name);
				
				// The post requests are not sent via the translation proxy, add the session anyway
				if(formTags[i].action.indexOf(strSessionName) == -1) formTags[i].action = addSessionToAddress(formTags[i].action, strSessionName + '=' + strSession);
				
				var redirLink = document.getElementById('redirlink');
				
				if(redirLink) {
					
					//alert('Fixing ' + formTags[i].name + '...\nRedirlink: ' + redirLink.href + 'Page: ' + document.location.href);
								
					formTags[i].onsubmit = function() {
									
						//Build a field to post the address to the redir page
						var redirField = document.createElement("input");
						
						redirField.name = 'redirpage';
						redirField.value = redirLink.href;
						redirField.type = "hidden";
						
						this.appendChild(redirField);
						
						//alert('Submitting ' + this.name + ' has ' + redirField.value);
						
						return true;
					
					}
							
				}
			
			}
		
		}

	}
}



function addQueryString(sUrl, sName, sValue) {
	if(sUrl.indexOf('?') > -1) return sUrl + '&' + sName + '=' + sValue
	else return sUrl + '?' + sName + '=' + sValue;
}



function go(sUrl, obj, nosession) {

	//alert('strSession go= ' + strSession);

	
	if(sUrl.indexOf('http://') == -1) sUrl = "http://" + strDomain + "/" + sUrl;
	
	
	if(!nosession && sUrl.indexOf(strSessionName) == -1) {
		//alert('adding session...');
		sUrl = addSessionToAddress(sUrl, strSessionName + '=' + strSession);
	}
	
	if(strAddr.indexOf('translate.google.com') > 0 && sUrl.indexOf('translate.google.com') == -1) {
	
		//alert('name: ' + strSessionName + '\nSession: ' +  strSession);
	

		
		if(document.getElementById('redirlink')) {
			//alert('redirlink found...');
			sUrl = addQueryString(sUrl, 'redirpage',  document.getElementById('redirlink').href);
		}
				
		sUrl = "http://" + window.location.hostname + "/translate_c?sl=en&tl=" + getLanguage() + "&u=" + escape(sUrl);

	}
	
	//alert('Going to... \n' + sUrl);

	if(obj) {
		obj.location = sUrl;	
	}
	else {
		
		if(ingame) self.location=sUrl
		else parent.location=sUrl;
	}
}



function toEnglish(obj, property) {

	//alert('te text=' + obj[property] + ' \n\ncurrentLanguage=' + currentLanguage);

	google.language.translate(obj[property], currentLanguage, "en", function(result) {
		if (!result.error) {
			obj[property] = result.translation;;
		}
		else alert('Error when translating to English')
	});
}


function translate(obj, property) {

	//alert('te text=' + obj[property] + ' \n\ncurrentLanguage=' + currentLanguage);

	if(google.language && currentLanguage) {

		google.language.translate(obj[property], "en", currentLanguage, function(result) {
			if (!result.error) {
				obj[property] = result.translation;;
			}
			else obj[property] = obj[property] + '\n(No translation available)'
		});
	}
}	


function queryStr(ji) {
	hu = window.location.search.substring(1);
	gy = hu.split("&");
	for (i=0;i<gy.length;i++) {
		ft = gy[i].split("=");
		if (ft[0] == ji) {
			return ft[1];
		}
	}
}


function breakOut() {
	if(strAddr.indexOf('translate.google.com') > -1) {
	
		var adr = queryStr('u');
		
		adr = fixQstring(adr);
		
		//alert(adr);
		top.location.href=adr;
	}
}

function fixQstring(adr) {

	adr = adr.replace('%3F', '?');
	adr = adr.replace(/%3D/g, '=');
	adr = adr.replace(/%26/g, '&');
	adr = adr.replace(/%2520/g, '+');
	
	return adr;
}

function getLanguage() {
	
	var intPos = strAddr.indexOf('tl=');

	if(intPos > 0) {

		intPos += 3;
		
		var strRight = strAddr.substring(intPos, strAddr.length);

		return strAddr.substring(intPos, intPos + strRight.indexOf('&'));
	
	}
	
	else {
		return '';
	}
}


function addSessionToDOs() {
	//alert('hej');

	if(strSession) {

		// Add the session string to all links on the page

		var anchorTags = document.getElementsByTagName("a");
		for (var i = 0; i < anchorTags.length ; i++)
		{
			if(anchorTags[i].href.indexOf(strSessionName) == -1 && ( anchorTags[i].href.indexOf('http://') == -1 || anchorTags[i].href.indexOf(strDomain) > -1  )) {
				anchorTags[i].href = addSessionToAddress(anchorTags[i].href, strSessionName + '=' + strSession);

				if(!ingame && !nobreakout) {
					anchorTags[i].target = "_top";
					//alert('Target _top');
				}
			}
			
			strDebug += anchorTags[i].href + '\n';
		}

		//alert(strDebug);
	}
}


function addSessionToAddress(strAddr, strAddedSession) {

	//alert('Adding session...\nSession: ' + strAddedSession + '\nAddress: ' + strAddr);

	if(strAddr.indexOf('translate.google.com') > 0) {

		strAddedSession = escape(strAddedSession);

		var intPos = strAddr.indexOf(strDomain);

		var strRight = strAddr.substring(intPos, strAddr.length);


		strOldPage = strAddr.substring(intPos, intPos + strRight.indexOf('&'));

		strNewPage = (strOldPage.indexOf('%3F') > 0) ? strOldPage + '%26' + strAddedSession : strOldPage + '%3F' + strAddedSession;

		//alert('Old page: ' + strOldPage + '\n' + 'New page:' + strNewPage);

		return strAddr.replace(strOldPage,strNewPage)

	}
	else {
		return (strAddr.indexOf('?') > 0) ? strAddr + '&' + strAddedSession : strAddr + '?' + strAddedSession;
	}
}


function getSessionFromAddress(strAddr, strName) { 

	var intPos = strAddr.indexOf(strName);

	if(intPos > 0) {

		intPos += strName.length + 1;
		
		if(strAddr.indexOf('translate.google.com') > 0) intPos+=2;

		var strRight = strAddr.substring(intPos, strAddr.length);

		if(strRight.indexOf('&') > -1) return strAddr.substring(intPos, intPos + strRight.indexOf('&'))
		else if(strRight.indexOf('%3D') > -1) return strAddr.substring(intPos, intPos + strRight.indexOf('&'))
		else return strRight;
	}

	else {
		return false;
	}
}


function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

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 fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}


function getServerClientOffset() {
	var request = new createRequest;
	var obj = request.therequest;
	
	
	obj.open("HEAD", 'http://' + strHost + '/', false);
	obj.send(null);

	var serverDate = new Date(obj.getResponseHeader("Date"))
	var clientDate = new Date();
	
	//alert(strHost + ': ' + serverDate + '\nClient: ' + clientDate);
	
	return (serverDate - clientDate) / 1000;
	
	
}

function createRequest() {
	
	var xmlhttp = false;

	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	 try {
	  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
	  try {
	   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
	   xmlhttp = false;
	  }
	 }
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}
	if (!xmlhttp && window.createRequest) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}
	
	this.therequest = xmlhttp;
}