// Stage
var Stage = {
	mouseX:0, mouseY:0, isIPad: false, isIPhone: false, isDesktop: false, iPadWidth:1024+320, iPadHeight:768, iPhoneWidth:960, iPhoneHeight:540,
	init: function() { 
		Stage.isIPad = navigator.userAgent.match(/iPad/i) != null;
		Stage.isIPhone = navigator.userAgent.match(/iPhone/i) != null;
		Stage.isDesktop = (this.isIPad==false && this.isIPhone == false);

		if (Stage.supportsAudio()) {
			var $a = new Audio();
			var canPlayMp3 = !!$a.canPlayType && "" != $a.canPlayType('audio/mpeg');
			var canPlayOgg = !!$a.canPlayType && "" != $a.canPlayType('audio/ogg; codecs="vorbis"');
		}
		if (canPlayMp3) Config.SND_TYPE = ".mp3"; else if (canPlayOgg) Config.SND_TYPE = ".ogg"; else Config.SND_TYPE = "";

		Stage.bind(document,"mousemove",Stage.onMouseMove);
	},
	stageWidth: function() { 
		if (Stage.isIPad) return Stage.iPadWidth;
		else if (Stage.isIPhone) return Stage.iPhoneWidth;
		else return Math.max(Config.MIN_WIDTH,window.innerWidth ? window.innerWidth : document.documentElement ? document.documentElement.clientWidth : document.body.clientWidth); 
	},
	stageHeight: function() { 
		if (Stage.isIPad) return Stage.iPadHeight;
		else if (Stage.isIPhone) return Stage.iPhoneHeight;
		else return Math.max(Config.MIN_HEIGHT,window.innerHeight ? window.innerHeight : document.documentElement ? document.documentElement.clientHeight : document.body.clientHeight); 
	},
	scrollX: function() { return window.pageXOffset ? window.pageXOffset : document.documentElement ? document.documentElement.scrollLeft : document.body.scrollLeft; },
	scrollY: function() { return window.pageYOffset ? window.pageYOffset : document.documentElement ? document.documentElement.scrollTop : document.body.scrollTop; },
	onMouseMove: function($e) { Stage.mouseX = $e.clientX; Stage.mouseY = $e.clientY; },
	supportsAudio:function() { var a = document.createElement("audio"); return !!a.canPlayType; },
	supportsVideo:function() { var v = document.createElement("video"); return !!v.canPlayType; },
	browserInfo: (function() {
		var b = ["firefox", "msie", "opera", "chrome", "safari"];
		var a = (navigator.userAgent || "").toLowerCase();
		for (var i = 0; i < b.length; i++) {
			var m = a.match(b[i] + "[/ ]+([0-9]+(?:.[0-9]+)?)");
			if (m && m.length > 0) {
				var o = {};
				o["browser"] = b[i];
				o["version"] = parseFloat(m[1]);
				o[b[i]] = o["version"];
				return o;
			}
		}
		return {};
	})(),
	bind:function($o,$s,$f) {
		if ($o.addEventListener) $o.addEventListener($s, $f, false);
		else if ($o.attachEvent) $o.attachEvent("on"+$s, $f);
	},
	
	track:function($id) { _gaq.push(["_trackPageview", $id]);  } //alert("track:"+$id+":"+_gaq+":"+_gaq._createAsyncTracker); 
	
};



// Sprite
function Sprite($elm,$id,$cls,$par) { 
		this.elm = document.createElement($elm); this.elm.setAttribute('id',$id); this.elm.setAttribute('class',$cls);
		this.par = $par;
		this.append();
}
Sprite.prototype.write = function($v) { this.elm.innerHTML = $v; }
Sprite.prototype.setTo = function($p) { for (var i in $p) this.elm.style[i] = $p[i]; }
Sprite.prototype.append = function() { this.par.appendChild(this.elm); }
Sprite.prototype.remove = function() { this.par.removeChild(this.elm); }


// Images
var Images = {
	_images:{},
	_toLoad:0,
	load: function() { for(var i=0; i<arguments.length;i++) { var _i = new Image(), _a = arguments[i]; Images._toLoad++; _i.onload = Images.onload; _i.src = Config.IMG_PATH+_a; Images._images[_a] = _i; } },	
	onload: function() { if (!--Images._toLoad) shell.imagesLoaded(); },
	get: function($s) { return Images._images[$s]},
	reset: function() { Images._toLoad = 0; }
};

// SoundSounds
var Sounds = {
	_sounds:{}, _toLoad:0, _current:"",
	load: function() { for(var i=0; i<arguments.length;i++) { var _a = arguments[i], _s = new Audio(Config.SND_PATH+_a+Config.SND_TYPE); Sounds._length++; _s.onload = Sounds.onload; Sounds._sounds[_a] = _s; } },	
	onload: function() { if (!--Sounds._toLoad) shell.soundsLoaded(); }, // BUG: don't work
	play: function($v) { Sounds._sounds[$v].play(0); },
	playSound: function($v) { if (Sounds._current != $v) { Sounds.stopSound(); Sounds._current = $v; Sounds.load($v); Sounds.play($v); } else Sounds.stopSound();  },
	stopSound: function() { 
		if (Sounds._current) {
			Sounds._sounds[Sounds._current].pause(); 
			Sounds._current = "";
			return true;
		} else return false;
	}
};

