var Application = Thunder.Component.extend({			
	init: function(initRootElement, initDebug) {
		this._super(initRootElement);
			
		//Initialize properties
		this.debug = initDebug;
		this.navObj = null;
		this.caseNavObj = null;
		this.currentPage = null;
		this.vScrollObj = null;
				
		//Initialize assets
		this.assetManager.addAsset("bg","img","/image/bg.png","BG_IMAGE",0,0,921,600);
		this.assetManager.addAsset("gui","nav",null,"NAV",36,127);
		this.assetManager.addAsset("gui","btn",null,"BTNCLIENTACCESS",805,73,132,28);
		this.assetManager.addAsset("gui","btn",null,"BTNEMAIL",457,85,107,24);
		this.assetManager.addAsset("gui","cnav",null,"CASENAV",164,467,400,18);
		this.assetManager.addAsset("gui","vScrollbar",null,"VSCROLLBAR",869,152,8,276);
		this.assetManager.addAsset("dialog","getstarted",null,"DIALOG_GETSTARTED",0,0,700,500);
		
		this.assetManager.addAsset("HOME_CENTER","video","HOME","VIDEO_HOME",164,127,400,340); 
		this.assetManager.addAsset("HOME","html","/content/home.html","HTML_HOME",584,152,266,276);
		this.assetManager.addAsset("HOME","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("HOME","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("CLIENTS_CENTER","video","CLIENTS","VIDEO_CLIENTS",164,127,400,340);
		this.assetManager.addAsset("CLIENTS","html","/content/clients.html","HTML_CLIENTS",584,152,286,276);
		this.assetManager.addAsset("CLIENTS","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("CLIENTS","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("TARGETING_CENTER","video","TARGETING","VIDEO_TARGETING",164,127,400,340);
		this.assetManager.addAsset("TARGETING","html","/content/targeting.html","HTML_TARGETING",584,152,266,276);
		this.assetManager.addAsset("TARGETING","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("TARGETING","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("TRACKING_CENTER","video","TRACKING","VIDEO_TRACKING",164,127,400,340);
		this.assetManager.addAsset("TRACKING","html","/content/tracking.html","HTML_TRACKING",584,152,266,276);
		this.assetManager.addAsset("TRACKING","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("TRACKING","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("APPINSTALLS_CENTER","video","APPINSTALLS","VIDEO_APPINSTALLS",164,127,400,340);
		this.assetManager.addAsset("APPINSTALLS","html","/content/appinstalls.html","HTML_APPINSTALLS",584,152,266,276);
		this.assetManager.addAsset("APPINSTALLS","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("APPINSTALLS","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("ABOUT_CENTER","video","ABOUT","VIDEO_ABOUT",164,127,400,340);
		this.assetManager.addAsset("ABOUT","html","/content/about.html","HTML_ABOUT",584,152,266,276);
		this.assetManager.addAsset("ABOUT","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("ABOUT","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("PRICING_CENTER","video","PRICING","VIDEO_PRICING",164,127,400,340);
		this.assetManager.addAsset("PRICING","html","/content/pricing.html","HTML_PRICING",584,152,266,276);
		this.assetManager.addAsset("PRICING","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("PRICING","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("GUARANTEEDSUCCESS_CENTER","video","GUARANTEEDSUCCESS","VIDEO_GUARANTEEDSUCCESS",164,127,400,340);
		this.assetManager.addAsset("GUARANTEEDSUCCESS","html","/content/guaranteedsuccess.html","HTML_GUARANTEEDSUCCESS",584,152,266,276);
		this.assetManager.addAsset("GUARANTEEDSUCCESS","btn",null,"BTNGETSTARTED",579,442,138,30);
		this.assetManager.addAsset("GUARANTEEDSUCCESS","btn",null,"BTNCONTACTUS",717,442,138,30);
		
		this.assetManager.addAsset("CONTACTUS_CENTER","video","CONTACTUS","VIDEO_CONTACTUS",164,127,400,340);
		this.assetManager.addAsset("CONTACTUS","html","/content/contactus.html","HTML_CONTACTUS",584,152,266,276);
		this.assetManager.addAsset("CONTACTUS","btn",null,"BTNGETSTARTED",579,442,138,30);
		
		for(var i = 0; i < totalCaseStudies; i++) {
			this.assetManager.addAsset("CASESTUDY","video","CASE_STUDY_" + i,"VIDEO_CS" + i,164,127,400,340);
		}
		
		//Initialize layers
		this.layerManager.defineSet("BG");
		this.layerManager.defineSet("PAGE");
		this.layerManager.defineSet("CENTER");
		this.layerManager.defineSet("GUI");
		this.layerManager.defineSet("DIALOG");
		
		//start
		this.draw();
	},
	
	handleEvents: function(events) {
		for(var i = 0; i < events.length; i++) {
			if(this.debug) this.trace("APPLICATION: " + events[i].name);
			
			switch(events[i].name) {
				case "NAV_READY":
					this.drawDefaultPage();
					break;
				case "NAV_SELECTION":
					this.drawPage(events[i].owner.getSelection());
					break;
				case "ASSET_LOADED":
					var asset = this.assetManager.getAsset(events[i].owner.attr("id"));
					asset.container.append(events[i].owner);
					break;
				case "BTN_CLICK":
					switch(events[i].owner.getName()) {
						case "BTNCONTACTUS":
							this.drawPage("CONTACTUS");
							break;
						case "BTNCLIENTACCESS":
							window.open(clientAccessURL,clientAccessURLTarget);
							break;
						case "BTNEMAIL":
							document.location="mailto:info@jungroup.com";
							break;
						case "BTNGETSTARTED":
							this.drawDialog("getstarted");
							break;
					}
					break;
				case "DIALOG_CLOSE":
					this.layerManager.clearSet("DIALOG");
					if(gIsMobile) {
						//show the video
						var layerObj = this.layerManager.getLayerObject("CENTER",0);
						layerObj.setVisible(true);
					}		
					break;
				case "SCROLL_UPDATE":
					var y = events[i].owner.getValue() * -1;
					var asset = this.assetManager.getAsset("HTML_" + this.currentPage);
					
					if(asset != null) {
						asset.getContainer().children(".loader").css("top",y);
					}
					break;
				case "CASE_NAV_SELECTION":
					this.drawCaseStudyVideo(events[i].owner.getSelection());
					break;
				case "PAGE_FADE_IN":
					this.handlePageFadeIn();
					break;
			}
		}
	},
	
	handleCustomization: function(assetList) {
		var t = this;
		
		for(var i = 0, ii = assetList.length; i < ii; i++) {
			var asset = assetList[i];	
		
			switch (asset.type) {	
				case "img":	
					asset.container.append("<img width='" + asset.width + "' height='" + asset.height + "' src='" + asset.src + "' id='" + asset.tag + "'/>");
					break;
				case "btn":	
					asset.param = new Button(asset.container,asset.tag,asset.width,asset.height,this.debug);
					asset.param.addListener(this.eventQueue);
					break;
				case "nav":		
					this.navObj = new Navigation(asset.container,this.debug);
					this.navObj.addListener(this.eventQueue);
					this.navObj.draw();
					break;
				case "cnav":		
					this.caseNavObj = new CaseNavigation(asset.container,this.debug);
					this.caseNavObj.addListener(this.eventQueue);
					this.caseNavObj.draw();
					break;
				case "html":
					asset.container.html("<div class='loader' style='position:absolute;width:100%'></div>")
					asset.container.children(".loader").load(asset.src + "?" + (new Date()).getTime(), function() { t.refresh(); });
					asset.setMask(0,asset.width,asset.height,0);
					break;
				case "video":
					asset.container.html("<div class='loader' style='position:absolute;width:100%'></div>")
					var h = "";
					
					if(gIsMobile) {
						if(gIsAndroid) {
							h = $("#mobile_video_template").html().replace(/#FILE_NAME#/g,asset.src).replace(/poster/,"no-poster");
						} else {
							h = $("#mobile_video_template").html().replace(/#FILE_NAME#/g,asset.src);
						}
					} else {
						h = $("#video_template").html().replace(/#FILE_NAME#/g,asset.src);
					}
					
					asset.container.children(".loader").html(h);
					break;
				case "getstarted":
					if(asset.param == null) {
						asset.param = new GetStartedForm(asset.container,this.debug);
						asset.param.addListener(this.eventQueue);
					} else {
						asset.param.setContainer(asset.container);
						asset.param.draw();	
					}
					break;
				case "vScrollbar":
					asset.setVisible(false);
					asset.param = new Thunder.Scrollbar(asset.container,asset.tag,this.getScrollbarAssetManager(),asset.width,asset.height);
					asset.param.setIncrement(10);
					asset.param.addListener(this.eventQueue);
					break;
			}
		}
	},
	
	draw: function() {
		this.layerManager.layOut(this.assetManager.getAssets("bg","img"),"BG",0);
		this.layerManager.layOut(this.assetManager.getAssets("gui"),"GUI",0);		
	},
	
	drawDefaultPage: function() {
		var pageName = "HOME";
		var requestedPageName = String(document.location.hash).replace("#","").toUpperCase();
			
		//confirm that we have the requested page
		var assets = this.assetManager.getAssets(requestedPageName); 
		
		if(assets.length > 0) {
			pageName = requestedPageName;	
		}
		
		this.drawPage(pageName);
	},
	
	drawPage: function(pageName) {
		if(this.currentPage != pageName) {
			this.currentPage = pageName;
			
			if(jQuery.support.opacity) {
				var layerObj = this.layerManager.getLayerObject("PAGE",0);
				layerObj.getContainer().css("opacity",0.0);
			}
			
			this.layerManager.layOut(this.assetManager.getAssets(pageName),"PAGE",0);
			this.layerManager.layOut(this.assetManager.getAssets(pageName + "_CENTER"),"CENTER",0);
			this.navObj.setSelection(pageName);
			this.eventQueue.addEvent("PAGE_FADE_IN",0);
			this.track("/page/" + pageName);
		}
	},
	
	handlePageFadeIn: function() {
		if(jQuery.support.opacity) {
			var layerObj = this.layerManager.getLayerObject("PAGE",0);
			var opacity = parseFloat(layerObj.getContainer().css("opacity"));
			
			if(opacity < 1) {
				opacity += 0.05;
				layerObj.getContainer().css("opacity",opacity);
				this.eventQueue.addEvent("PAGE_FADE_IN",100);
			}
		}	
	},
	
	drawDialog: function(dialogName) {
		this.layerManager.layOut(this.assetManager.getAssets("dialog",dialogName),"DIALOG",0);
		this.track("/dialog/" + dialogName);
		
		if(gIsMobile) {
			//hide the video
			var layerObj = this.layerManager.getLayerObject("CENTER",0);
			layerObj.setVisible(false);
		}
	},
	
	getScrollbarAssetManager: function() {
		var am = new Thunder.AssetManager();				
		am.addAsset("gui","btn","/image/scrollbar/scroll_rect.jpg","RECT");
		am.addAsset("gui","btn","/image/scrollbar/scroll_tab.jpg","TAB",0,0,8,32);
		am.addAsset("gui","btn","/image/scrollbar/scroll_up.jpg","UP",0,0,8,16);
		am.addAsset("gui","btn","/image/scrollbar/scroll_down.jpg","DOWN",0,0,8,16);			
		return am;
	},
	
	refresh: function() {
		var vScrollbarAsset = this.assetManager.getAsset("VSCROLLBAR");
		this.vScrollObj = vScrollbarAsset.param;				
		this.vScrollObj.setValue(0);
		this.update();
	},
	
	update: function() {
		var asset = this.assetManager.getAsset("HTML_" + this.currentPage);
		
		if(asset != null) {
			this.content = asset.getContainer().children(".loader");		
			var vScrollbarAsset = this.assetManager.getAsset("VSCROLLBAR");
			
			if(this.content.height() > asset.height) {			
				this.vScrollObj = vScrollbarAsset.param;
				this.vScrollObj.setMax(this.content.height() - asset.height);
				vScrollbarAsset.setVisible(true);
			} else {
				vScrollbarAsset.setVisible(false);
			}
		}
	},
	
	drawCaseStudyVideo: function(index) {
		var assets = this.assetManager.getAssets("CASESTUDY");
		this.layerManager.layOut([assets[index]],"CENTER",0);
		this.track("/casestudy/" + index);
	},
	
	track: function(str) {
		pageTracker._trackPageview("/app" + str);	
		if(this.debug) this.trace("track: " + "/app" + str);
	}
});