JAME.Package('JAME.ASYNC');

if(!window.console) {
window.console={log :function(){}};
}

function getScrollXY() {
    var x = 0, y = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        // Netscape
        x = window.pageXOffset;
        y = window.pageYOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        // DOM
        x = document.body.scrollLeft;
        y = document.body.scrollTop;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        // IE6 standards compliant mode
        x = document.documentElement.scrollLeft;
        y = document.documentElement.scrollTop;
    }
    return [x, y];
}

JAME.ASYNC = {
	_previousPage     :['','',''],
	_resetScrollBar   :true,
	expanded          : '580px',
	collapsed         : '580px',
	swfId             : 'website-flash',
	htmlId            : 'website',
    domain            : 'atomicsnow.jp',
    baseURI           : '/ski/',
    appendQueryString : 'output=raw',
	displayHTMLEffect : {
		duration:800,
		easing:JAME.FX.Transition.Sine.Out
	},
	caching           : false,
	Exts        : {'html':1},


	_activeXHR        : undefined,
    _DOMAINREGEX      : function () {
		var reg = new RegExp(JAME.ASYNC.domain);
		JAME.ASYNC._DOMAINREGEX=reg;
	},
	_timer            : undefined,
    _loaded           : {},
	_counter          : 0,


	_handleOnClick : function(e) {

		e = JAME.Events.Normalize(e);
		var url = e.target.href;
 
		if(e.target.nodeName.toLowerCase()=='img') {
			url = e.target.parentNode.href;
		}

		if (! url) return;                          //it s not a link, return soon

		if(!(new RegExp(JAME.ASYNC.baseURI).test(url))) return;

		for(var ext in JAME.ASYNC.Exts) {
			if(!new RegExp('\.'+ext).test(url)) return;
		}

		if(url.match('#')){
			url = url.replace('#','');
		}

		if(JAME.ASYNC._DOMAINREGEX.test(url)) {       //if this is a same-domain link

			e.preventDefault();                     //do not jump to the page
			var URLElements = getValue(url);        //get the anchor part

			if(!/send/.test(e.target.id))  {          
           		SWFAddress.setValue(URLElements[1]);  //and then set the anchor
			}
			else { //links containing an id with '****send****' are considered to be submit button
		   		var form = JAME.ASYNC.Util.getParentForm(e.target);
		   		if(!form) {
					form=null;
					throw new Error('Expecting the link to be within a form but could not find it');
					return false;
				}
		   		var queryString = JAME.Form.serialize(form);
		   		var url         = form.action+'?'+queryString;
		   		var URLElements = getValue(url);
				queryString = null;
		   		SWFAddress.setValue(URLElements[1]);
			}  
			URLElements = null;
			url         = null;
		}
	},

	_init     : function() {

		if(JAME.ASC && JAME.ASC.Settings) {
			for(var setting in JAME.ASC.Settings) JAME.ASYNC[setting]=JAME.ASC.Settings[setting];
		};
		JAME.ASYNC._DOMAINREGEX();
		if(window.attachEvent) JAME.ASYNC.caching=false;

		JAME.ASYNC.swf        = JAME.$(JAME.ASYNC.swfId);
		JAME.ASYNC.html       = JAME.$(JAME.ASYNC.htmlId);

 		document.onclick  = JAME.ASYNC._handleOnClick;

	},

    _controller : function() {

		if(JAME.ASYNC.abort) {
			//JAME.ASYNC.abort=undefined;
			return;
		}
		var address = SWFAddress.getValue();

		JAME.ASYNC._previousPage.push(address);


		window.uri = address;
		if(/\.x(ht)*ml/.test(address)) return;
		if(/\/$/.test(address) && JAME.ASYNC._counter==0) {
			JAME.ASYNC.Events.dispatch('onPreLoadHTML');
			JAME.ASYNC.Events.dispatch('onPreInsertLoadHTML');

			JAME.ASYNC.LOADING=false;
			JAME.ASYNC.closePreLoader();
			JAME.ASYNC._counter++;
			return;
		}
		if (/\.html/.test(address) || (/\/$/.test(address) && JAME.ASYNC._counter>0) ) {
			JAME.ASYNC.loadContents(address);
			address = null;
			return;
		}


		address = null;
		JAME.ASYNC._counter++;

		JAME.ASYNC.showSWF();
		JAME.ASYNC.hideHTML();

		if(JAME.ASYNC._counter==1) return;

		JAME.ASYNC.Events.dispatch('onLoadSWF');
		JAME.ASYNC.Events.dispatch('onLoad','swf');

	},

	_cleanOutXHR : function() {

		if(JAME.ASYNC._activeXHR || JAME.ASYNC._timer)  {
			JAME.ASYNC.abortXHR();
			clearTimeout(JAME.ASYNC._timer);
		}
	},

    loadContents : function (targeturl) {

		JAME.ASYNC._cleanOutXHR();

		targeturl = targeturl.replace('/','');
	
		JAME.ASYNC.Events.dispatch('onPreLoadHTML');

		var sep = (/\?/.test(targeturl)) ? '&amp;' : '?';

		JAME.ASYNC._timer = setTimeout(function() {


	    	JAME.ASYNC._activeXHR =  new JAME.Ajax({
				timeout:18000,
				url : JAME.ASYNC.baseURI+targeturl+sep+JAME.ASYNC.appendQueryString,
				onSuccess : function(resp) {

					JAME.ASYNC.hideSWF();

					JAME.ASYNC.Events.dispatch('onPreInsertLoadHTML',resp);
					resp = JAME.ASYNC.preInsert || resp;
					JAME.ASYNC.preInsert = undefined;
					JAME.ASYNC.html.innerHTML=resp;

					JAME.ASYNC.Events.dispatch('onPostInsertLoadHTML');

					if(JAME.ASYNC.caching)
					      JAME.ASYNC._loaded[targeturl]= JAME.ASYNC.html.cloneNode(true); 

					clearTimeout(JAME.ASYNC._timer);
					JAME.ASYNC._activeXHR = null;
					JAME.ASYNC.LOADING=false;
			    	JAME.ASYNC.showHTML();

					JAME.ASYNC.Events.dispatch('onLoadHTML');
					JAME.ASYNC.Events.dispatch('onLoad');
					var light = new lightwindow({classNames:{standard:'lightwindow-inner'},rebuildContainers:false});
JAME.ASYNC.Events.addListener('onFullLoad',function() {

					if(JAME.$('lightwindow_overlay')){
						light._getPageDimensions();
						JAME.$('lightwindow_overlay').style.height=light.pageDimensions.height+'px';
					}
});


				}
	    	})

		},100);

    },
	abortXHR : function() {
		if(JAME.ASYNC._activeXHR) JAME.ASYNC._activeXHR.abortXHR();
	},

	showHTML : function() {
		new JAME.FX({duration:100}).Tween(JAME.ASYNC.html,{opacity:[1],display:['block']});
	},
	hideHTML : function() {
		JAME.ASYNC.html.style.display='none';
	},
	showSWF : function() {
		JAME.$(JAME.ASYNC.swfId).style.display = 'block';
		JAME.$(JAME.ASYNC.swfId).style.height  = JAME.ASYNC.expanded;
	},
	hideSWF : function() {
		//JAME.$(JAME.ASYNC.swfId).style.display = 'none';
		JAME.$(JAME.ASYNC.swfId).style.height  = '0px';
	},
    moveHeight : function(action,from,to) {

		return true;
    }


};
JAME.ASYNC.Events = new JAME.Events.EventDispatcher();
JAME.Package('JAME.ASYNC.Util');

JAME.ASYNC.Util={
	getParentForm : function(elm) {
		do {
			if(elm.nodeName.toLowerCase()=='form') return elm;
			elm=elm.parentNode;
		} while(elm);
		return;
	}
};

window.getValue = function(url) {
	return url.split(JAME.ASYNC.baseURI);
}
SWFAddress.addEventListener(SWFAddressEvent.CHANGE,JAME.ASYNC._controller);

/*--------------------*/
/*PRELOADER----------*/
/*------------------*/


JAME.ASYNC.LOADED     = 0;
JAME.ASYNC.IMG_NUMBER = 0;
JAME.ASYNC.STEP       = 0;
JAME.ASYNC.LOADING    = true;
JAME.ASYNC.IMG_LENGTH = 0;

JAME.ASYNC.IMGloader = function(url) {
			if(!url) {
				JAME.ASYNC.LOADED++;
				 JAME.ASYNC.flush();
				 return;
			}

			var img = new Image();

			img.onload=function() {
				JAME.ASYNC.LOADED++;
				setTimeout(function() { JAME.ASYNC.flush(); },80); //ie hangs if too much images too load
				JAME.ASYNC.Events.dispatch('onLoadProgress');
			};

			img.onerror = img.onabort= function() {
				JAME.ASYNC.LOADED++;
				JAME.ASYNC.flush();
				JAME.ASYNC.Events.dispatch('onLoadProgress');
			};
			img.src=url;
};

JAME.ASYNC.Queue = new JAME.Util.Queue();

JAME.ASYNC.getImages = function(elms) {

	for(var i=0,ln=elms.length;i<ln;i++){

			if(elms[i].nodeName.toLowerCase()==='img' && /jpe*g|gif|png/.test(elms[i].src)) {
				(function(n) {
					if(elms[n]) {
						if(elms[n].src) {
							var src = elms[n].src;
							JAME.ASYNC.Queue.queue(function() { 
								JAME.ASYNC.IMGloader(src);
							});

						}
					}
				})(i);
			}
			else if(JAME.CSS.getStyle(elms[i],'backgroundImage')!='none') {
				var url = JAME.CSS.getStyle(elms[i],'backgroundImage').substring(4,JAME.CSS.getStyle(elms[i],'backgroundImage').length-1);
				url = url.replace('"','').replace('"','');
				if(url) { 
					JAME.ASYNC.Queue.queue(function() { 
						JAME.ASYNC.IMGloader(url); 
					});
				}
			}
	};
};

JAME.ASYNC.closePreLoader = function() {

	if(JAME.ASYNC.LOADED>=JAME.ASYNC.IMG_NUMBER && !JAME.ASYNC.LOADING) {

		if(JAME.$('jame-loader') && (JAME.CSS.getStyle(JAME.$('jame-loader'),'z-index')>0 || JAME.CSS.getStyle(JAME.$('jame-loader'),'z-index')==='auto'))  {       
			new JAME.FX().Tween(JAME.$('jame-loader'),{opacity:[1,0],zIndex:[10,-1],display:['block','none']});
			if(JAME.$('jame-loader-container')) new JAME.FX({duration:800}).Tween(JAME.$('jame-loader-container'),{opacity:[1,0],zIndex:[10,-1],display:['block','none']});
		}
		JAME.ASYNC.Events.dispatch('onFullLoad');
		clearInterval(JAME.ASYNC.preInter);
	}

};

JAME.ASYNC.flush = function() {
		JAME.ASYNC.Queue.next();
};

JAME.ASYNC.PreLoadImages  = function(elms,width) {

	clearInterval(JAME.ASYNC.preInter);
	JAME.ASYNC.Queue = new JAME.Util.Queue();
	JAME.ASYNC.getImages(elms);
	JAME.ASYNC.LOADED=0;
	JAME.ASYNC.IMG_NUMBER = JAME.ASYNC.Queue.q.length;

	JAME.ASYNC.STEP = (width || getWindowWidth()/2.5)/JAME.ASYNC.IMG_NUMBER;

	JAME.ASYNC.flush();

	JAME.ASYNC.preInter =setInterval(function() {
			JAME.ASYNC.closePreLoader();
	},500);

};






/*--------------------*/
/*GARBAGE COLLECTOR--*/
/*------------------*/
JAME.ASYNC.stack=[];
function purge(d) {
	if(typeof d!=='object') return;
    var a = d.attributes, i, l, n;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') d[n] = null;
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) purge(d.childNodes[i]);
    }
}

JAME.ASYNC.garbageCollect = function() {
		for(var i=0,ln=JAME.ASYNC.stack.length;i<ln;i++) {  (function() { var n=i; purge(JAME.ASYNC.stack[n]); delete JAME.ASYNC.stack[n];})();}
		JAME.ASYNC.stack=null;
		JAME.ASYNC.stack=[];
};

function abortJAMELoading(val) {
	JAME.ASYNC.abort=val;
}

JAME.DOM.Ready(function() {


	JAME.ASYNC._init();

	//pre-loader
	var loader = JAME.DOM.createNode('div');
	loader.id='jame-loader';
	var loaderContainer = JAME.DOM.createNode('div');
	loaderContainer.id='jame-loader-container';
	JAME.CSS.setStyles(loaderContainer,{
		position:'absolute',
		top:'0px',
		left:'0px',
		backgroundColor:'#000',
		width:'100%',
		height:getWindowHeight(),
		color:'white',
		zIndex:500000
	});

	document.body.appendChild(loaderContainer);
	document.body.appendChild(loader);

	JAME.ASYNC.PreLoadImages(parse("*"));

});

JAME.ASYNC.Events.addListener('onLoadSWF',function() {

		if(JAME.ASYNC.abort) {
			JAME.ASYNC.hideHTML();
			JAME.ASYNC.abort=undefined;
			return;
		}

		JAME.ASYNC.showSWF();
		JAME.ASYNC.hideHTML();

});

