(function(){
dojo.require("dojox.fx");

var     _TMWAPPID="_tmwappifr",	_TMWAPPNAME="_tmwappifr",
	_TMWAPPURL="http://tracemyworld.com/beta/t945/tmw.html",
/*
	_TMWEXTLOGO={
		src: "http://www.google.it/logos/galileo09.gif",
		w: 90,
		r: 80,
		t: 10
	},
*/
        //_TMWAPPURL=_TMW_PATH+"/tmw.html"+"?lang="+_TMWLANG,
	//_TMWAPPURL="http://tracemyworld.com",
	_bdiv, _tmwextlogo, _tmwappActive=false, _tmwAppScrollEvent, 
	_overflowOriginal=[], _tmwapp, _tmwappwin, _tmwappProxy
;

dojo.addOnLoad(function() {
	// registering public symbols
	window._tmwswitchApp=_tmwswitchApp;

	var BDIV_RIGHT=420;
	var BUTTON_W=110;
	_bdiv=document.createElement("div");

	dojo.attr(_bdiv,"id", "_tmwbdiv");
	dojo.style(_bdiv,"position","absolute");
	dojo.style(_bdiv,"top","0px");
	dojo.style(_bdiv,"right",BDIV_RIGHT+"px");
	dojo.style(_bdiv,"zIndex","10");
	dojo.style(_bdiv,"visibility","hidden");

	var _bbut=document.createElement('button');
	_bbut.innerHTML = "Back to main site";
	_bdiv.appendChild(_bbut);
	dojo.connect(_bbut,"onclick","_tmwswitchApp");
	dojo.body().appendChild(_bdiv);

	dojo.style(_bbut,"position","relative");
	dojo.style(_bbut,"top","6px");

	if (window._TMWEXTLOGO){
		_tmwextlogo=document.createElement("img");
		_tmwextlogo.src=_TMWEXTLOGO.src;
		dojo.style(_tmwextlogo,"height","auto");
		dojo.style(_tmwextlogo,"width",_TMWEXTLOGO.w+"px");
		dojo.body().appendChild(_tmwextlogo);
		dojo.style(_tmwextlogo,"position","absolute");
		dojo.style(_tmwextlogo,"top",_TMWEXTLOGO.t+"px");
		//dojo.style(_tmwextlogo,"right",(BDIV_RIGHT+_TMWEXTLOGO.w+_TMWEXTLOGO.r)+"px");
		dojo.style(_tmwextlogo,"right",(BDIV_RIGHT+BUTTON_W+_TMWEXTLOGO.r)+"px");
		dojo.style(_tmwextlogo,"zIndex","10");
		dojo.style(_tmwextlogo,"visibility","hidden");
	}
});

function _tmwgetViewport(){
        var viewportwidth;
        var viewportheight;

        if (typeof window.innerWidth != 'undefined') {
                // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
                viewportwidth = window.innerWidth,
                viewportheight = window.innerHeight
        } else if (typeof document.documentElement != 'undefined'
                && typeof document.documentElement.clientWidth !=
                'undefined' && document.documentElement.clientWidth != 0) {
                // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
                viewportwidth = document.documentElement.clientWidth,
                viewportheight = document.documentElement.clientHeight

        } else {
                // older versions of IE
                viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
                viewportheight = document.getElementsByTagName('body')[0].clientHeight
        }

        return {
                //w: Math.max(document.body.offsetWidth,window.innerWidth),
                //h: Math.min(document.body.offsetHeight,window.innerHeight)
                w: viewportwidth,
                h: viewportheight
        };
}

function _tmwswitchApp(url){	// if url === false, don't load anything
        var dim=_tmwgetViewport(), domain=this, w;

	_tmwapp=document.getElementById(_TMWAPPID);
	try { if (top) top.scroll(0,0); }
	catch(err){}
	if (!url) url=_TMWAPPURL+(window._TMWID?"?forceId="+_TMWID:"");
        if (!_tmwapp){
		if (navigator.userAgent.indexOf("chromeframe")!=-1 || dojo.isSafari || dojo.isIE){
			if (url===false) return;
			if (dojo.isSafari){
				window.location.href=url;
			} else {
				try {
					if (_tmwappwin && _tmwappwin.postMessage){
						_tmwappwin.postMessage(
							dojo.toJson({"url":url}),
							"http://www.tracemyworld.com"
						);
						try {_tmwappwin.focus();}catch(err){}
						return;
					}
				}catch(err){}
				_tmwappwin=window.open(url,
					"_blank", "resizable=1,channelmode=no,toolbar=no,location=no,menubar=no,status=no,height="+dim.h+",width="+dim.w
				);
			}
			return;
		}
		try { // for IE
	                _tmwapp=document.createElement("<iframe name='"+_TMWAPPNAME+"'>");
		} catch(err){
	                _tmwapp=document.createElement("iframe");
			_tmwapp.setAttribute("name",_TMWAPPNAME);
		}
                _tmwapp.setAttribute("id",_TMWAPPID);
		dojo.style(_tmwapp,"zIndex","9");
                _tmwapp.style.position="absolute";
                _tmwapp.style.top="0px";
                _tmwapp.style.left=dim.w+"px";
                _tmwapp.style.width="100%";//(dim.w-2)+"px";
                _tmwapp.style.height="100%";//(dim.h-2)+"px";
                _tmwapp.style.backgroundColor="#888888";
                //document.body.style.overflow="hidden";
                //document.body.appendChild(dojo.byId("p1rtLoadWaiting"));
                document.body.appendChild(_tmwapp);
		_overflowOriginal[0]=dojo.getComputedStyle(dojo.body()).overflow;
		_overflowOriginal[1]=dojo.getComputedStyle(dojo.body().parentNode).overflow;
		dojo.style(dojo.body(),"overflow","hidden");
		dojo.style(dojo.body().parentNode,"overflow","hidden");
        }

        w=parseInt(_tmwapp.style.left);

	if (domain._tmwswitchApp.isloaded){
		try{
			if (dojo.style(_tmwapp,"display")=="none"){
				_tmwappActive=true;
				dojo.style(_tmwapp,"display","block");
				_tmwAppActiveActions();
				try { tmwPostMessage(url); }catch(err){}
			} else {
				_tmwappActive=false;
				dojo.style(_tmwapp,"display","none");
				_tmwAppInactiveActions();
			}
		}catch(err){}
		return;
	}
        var a=dojox.fx.slideBy({node:_tmwapp, top:0,  left:(w>1?-w:dim.w),  duration:600 }).play();

	if (url===false) return;
	var tmpevt=dojo.connect(a, "onEnd", null, function(){
		setTimeout(function(){ dojo.disconnect(tmpevt); },1000);
		_tmwapp.src=url;
		domain._tmwswitchApp.isloaded=true;
		_tmwappActive=true;
		//dojo.query(".preLoader", _tmwapp.domNode).orphan();
		setTimeout(function(){
			_tmwAppActiveActions();
		},2000);
        });
}

function _tmwAppActiveActions(){
	if (_tmwAppScrollEvent) dojo.disconnect(_tmwAppScrollEvent);
	_tmwAppScrollEvent=dojo.connect(window,"onscroll",_tmwParentScrolled);
	dojo.style(_bdiv,"visibility","visible");
	if (_tmwextlogo) dojo.style(_tmwextlogo,"visibility","visible");
	//setTimeout(function(){
	dojo.style(dojo.body(),"overflow","hidden");
	dojo.style(dojo.body().parentNode,"overflow","hidden");
	//},2000);
}

function _tmwAppInactiveActions(){
	if (_tmwAppScrollEvent) dojo.disconnect(_tmwAppScrollEvent);
	_tmwAppScrollEvent=null;
	dojo.style(_bdiv,"visibility","hidden");
	if (_tmwextlogo) dojo.style(_tmwextlogo,"visibility","hidden");
	dojo.style(dojo.body(),"overflow",_overflowOriginal[0]);
	dojo.style(dojo.body().parentNode,"overflow",_overflowOriginal[1]);
}

function _tmwParentScrolled(){
	if (!_tmwParentScrolled.timeout)
		_tmwParentScrolled.timeout=setTimeout(_scrolled,1000);
}

function _scrolled(){
	_tmwParentScrolled.timeout=null;
	try { if (top) top.scroll(0,0); }
	catch(err){}
}

function tmwPostMessage(url){
	if (_tmwapp.contentWindow.postMessage){
		_tmwapp.contentWindow.postMessage(dojo.toJson({"url":url}),"*");
		return;
	}
	if (!_tmwappProxy){
		_tmwappProxy=document.createElement("iframe");
		dojo.style(_tmwappProxy,"position","absolute");
		dojo.style(_tmwappProxy,"top","-2000px");
		dojo.style(_tmwappProxy,"left","-2000px");
		dojo.style(_tmwappProxy,"width","10px");
		dojo.style(_tmwappProxy,"height","1px");
		dojo.body().appendChild(_tmwappProxy);
	}
	_tmwappProxy.contentWindow.location=
		"http://www.tracemyworld.com/beta/xdomainProxy.html#"+dojo.toJson({"url":url});
	_tmwappProxy.width=_tmwappProxy.width>1?1:10;
}
})();
