mypackage_wrt/preview/script/nokia.js
changeset 42 20be4dd42b12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mypackage_wrt/preview/script/nokia.js	Fri Apr 30 15:01:03 2010 +0100
@@ -0,0 +1,1495 @@
+/*
+	@chinnapp
+*/
+
+if(typeof NOKIA == "undefined" || !NOKIA) 
+{
+	var NOKIA = {
+		version : 'WRT 1.1',
+		currentDevice : '240x320',
+		mode : 'portrait',
+		resolution : ['240x320', '320x240', '360x640', '800x352'],
+		scriptsLoaded : {
+			loader : false,
+			widget : false,
+			systeminfo : false,
+			menu   : false,
+			menuItem : false,
+			console : false
+		}
+	};
+	NOKIA.namespace = function(name)
+	{
+		var parts = name.split('.');
+		var current = NOKIA;
+		for(var key in parts){
+			if(!current[parts[key]]){
+				current[parts[key]] = {};
+			}
+			current = current[parts[key]];
+		}  
+	};
+	
+	NOKIA.init = function()
+	{
+		// Not-Supported Browser check
+		NOKIA.emulator.is_browserReady = (/MSIE/i.test(navigator.userAgent));
+		if(NOKIA.emulator.is_browserReady)
+		{
+			var notSupportedBrowser = NOKIA.helper.readCookie('NOKIA_NOT_SUPPORTED_BROWSER');
+			if (notSupportedBrowser != 1) {
+				$("#NotificationDiv")[0].className = 'show';
+				$("#NotificationDiv").dialog({
+					width: 550,
+					minWidth: 550,
+					minHeight: 350,
+					height: 150,
+					autoOpen: true,
+					position: top,
+					title: 'Notification window',
+					buttons: {
+						Cancel: function(){
+							$("#NotificationDiv").dialog('close');
+						},
+						Continue: function(){
+							$("#NotificationDiv").dialog('close');
+							NOKIA.helper.createCookie('NOKIA_NOT_SUPPORTED_BROWSER', 1);
+							NOKIA.init();
+						}
+					}
+				});
+				return false;
+			}else{
+				$("#BrowserNotificationBar").css({display:'block'});
+				$("#BrowserNotificationBar > p > a").click(function(){ $("#BrowserNotificationBar").hide(); });
+			}
+		}
+	
+		$('iframe')[0].src = "wrt_preview_main.html";
+
+		NOKIA.data.load(deviceResolutionList);
+		
+		var url = window.location.toString();			
+		url = url.split('/');
+		
+		var pointer = 3;
+		if(url[0] == 'http:')
+			pointer = 2;
+
+		var t = ''; 
+		for(var i=pointer; i<url.length-1; i++){ 	t = t + url[i] + '/'; 	}
+		if(url[0] == 'file:')
+			NOKIA.emulator.url = 'file:///' + t;
+		else
+			NOKIA.emulator.url = 'http://' + t;
+
+		//	Common Error/Notification Dialog
+		NOKIA.helper.errorDailog = $("#Dialog").dialog({
+			bgiframe: true, minHeight: 150, width: 450, modal: true, autoOpen: false,
+			buttons: {	
+					Cancel: function(){ $(this).dialog('close');	},			
+					Reload: function(){ 
+						$(this).dialog('close');
+						$("#loaderDiv").html("Widget is reloading. Please wait...");
+						$("#loaderDiv")[0].className = 'green';
+						$("#loaderDiv").show();
+						window.setTimeout(function(){
+							document.location = document.location;
+						}, 3000);
+					}			
+				}
+		});
+
+		//	validating Info.plist
+		this.helper.getInfo('Info.plist', NOKIA.helper.getInfoCallback);	
+
+		//	For getting Icon.png
+		this.helper.getInfo('Icon.png', NOKIA.helper.getIconCallback);	
+	};
+
+	/*
+	 * NOKIA.data
+	 */
+	NOKIA.namespace('data.load');
+
+	NOKIA.data.load = function(data){
+		NOKIA.deviceList = data;
+	}
+
+
+
+	/*
+	 * NOKIA.emulator
+	 */
+	NOKIA.namespace('menu');
+	NOKIA.menu = {
+		is_menu_visible : false,		// true/false
+		is_softkeys_visible : false,	// true : only when MenuItem's are displayed
+		softkeys_visibility : true,		// true/false : for hide/show SFK's
+		is_dimmed : false,
+		is_rsk_overridden : false,
+		log_counter : 1,
+		enable_log : false,
+		rsk_label : '',
+		rsk_event : false,
+		highlighted_item : null,
+		
+		hide : function()
+		{
+			$("#MenuItemsArea").fadeIn("slow");
+
+			//	Hide the SFK's If user hidden them from his code
+			if(NOKIA.menu.softkeys_visibility)
+				$("#SoftKeysArea").fadeIn("slow");
+			
+			NOKIA.menu.is_softkeys_visible = false;
+		},
+
+		log : function(str)
+		{
+			if(!this.enable_log)
+				return false;
+			NOKIA.layout.log("log", NOKIA.menu.log_counter + ' ' +str);
+			NOKIA.layout.log("log", 'is_rsk_overridden: '+NOKIA.menu.is_rsk_overridden);
+			NOKIA.layout.log("log", 'rsk_label: '+NOKIA.menu.rsk_label);
+			NOKIA.layout.log("log", 'rsk_event: '+NOKIA.menu.rsk_event);
+			
+			NOKIA.menu.log_counter++;
+		},
+
+		show : function()
+		{
+			if(NOKIA.menu.is_dimmed)
+				return false;
+				
+			NOKIA.menu.showSoftKeys();
+			
+			NOKIA.menu.is_menu_visible = true;
+			$("#MenuItemsArea").show();
+			
+			NOKIA.menu.highlighted_item = $("#MenuItemsArea > ul > li")[0];
+			NOKIA.menu.highlighted_item.className = 'active';
+
+
+			$("#MenuItemsArea > ul > li").mouseover(function(){
+				if(NOKIA.menu.highlighted_item != null)
+				{
+					NOKIA.menu.highlighted_item.className = '';
+					NOKIA.menu.highlighted_item = null;
+				}
+
+				NOKIA.menu.highlighted_item = this;
+				NOKIA.menu.highlighted_item.className = 'active';
+			});
+
+			$("#SoftKeysArea").mouseout(function(){
+				if (!NOKIA.menu.is_menu_visible) {
+					return false;
+				}
+				
+				if (NOKIA.helper.intervalId) {
+					clearInterval(NOKIA.helper.intervalId);
+				}
+				NOKIA.helper.intervalId = setTimeout(function(){
+					NOKIA.menu.cancel()
+				}, 500);
+			});
+
+
+			//	Change the label "Options" to "Select" to LSK
+			$("#LskLabel > a")[0].innerHTML = "Select";
+			NOKIA.menu.setLsk(NOKIA.menu.selectMenu);
+			
+			//	Change the label "Exit" to "Cancel" to RSK
+			$("#RskLabel > a")[0].innerHTML = 'Cancel';
+			NOKIA.menu.setRsk(NOKIA.menu.cancel);
+			
+
+			NOKIA.emulator.setMenuItemsStyle();
+			
+		},
+		
+		selectMenu : function(){
+			try {
+				if(typeof NOKIA.menu.highlighted_item.onclick != 'undefined'){
+					eval(NOKIA.menu.highlighted_item.onclick)();
+				}
+			} catch (e) {
+				
+			}
+//			NOKIA.menu.cancel();
+		},
+
+		
+		cancel : function()
+		{
+			if(NOKIA.menu.is_dimmed)
+				return false;
+				
+			NOKIA.menu.hideSoftKeys();
+
+			NOKIA.menu.is_menu_visible = false;
+			$("#MenuItemsArea").hide();
+
+			//	Reset the "OPTION" label to LSK
+			$("#LskLabel > a")[0].innerHTML = 'Options';
+			NOKIA.menu.setLsk(NOKIA.emulator.child.menu.show);
+
+			//	Change the label "CANCEL" to "EXIT" to RSK
+			if(!NOKIA.menu.is_rsk_overridden)
+			{
+				$("#RskLabel > a")[0].innerHTML = 'Exit';
+				NOKIA.menu.setRsk(NOKIA.menu.exit);	
+			}
+			else
+			{
+				$("#RskLabel > a")[0].innerHTML = NOKIA.menu.rsk_label;
+				NOKIA.menu.setRsk(NOKIA.menu.rsk_event);	
+			}
+			
+		},
+
+		exit : function()
+		{
+			if(NOKIA.menu.is_dimmed)
+				return false;
+				
+			if(NOKIA.helper.setHomeScreen())
+				return false;
+
+			//	clear the Menu Settings
+			NOKIA.menu.cancel();
+			NOKIA.emulator.child.menu.setRightSoftkeyLabel('', null);
+			NOKIA.emulator.child.menu.items = [];
+			NOKIA.menu.softkeys_visibility = false;
+			
+			// Hide Widget DIV
+			NOKIA.menu.hideSoftKeys();
+			NOKIA.menu.setLsk(function(){});
+			NOKIA.menu.setRsk(function(){});
+			
+			$("#WidgetArea").hide();
+
+			//	Show Icon
+			var style = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode]['style'];
+			$('#IconArea').css({
+				'width' 	:	'100%',
+				'height'	:	style['widget']['height']+'px',
+				'float' 	:	style['widget']['float']
+			});
+			
+			$('#IconArea')[0].className = NOKIA.mode+NOKIA.currentDevice;
+			
+			var img = document.createElement('img');
+			img.src = NOKIA.emulator.iconFile;
+			img.border = 0;
+			
+			var div = document.createElement('div');
+			var p = document.createElement('p');
+			
+			if(NOKIA.emulator.plist.DisplayName.length <= 12)
+				p.innerHTML = NOKIA.emulator.plist.DisplayName; 
+			else
+				p.innerHTML = NOKIA.emulator.plist.DisplayName.substr(0, 11) + '...' 
+
+			div.className = 'IconFile';
+			div.style.marginTop = parseInt(parseInt(style['widget']['height']/2)-80) + 'px';
+			div.appendChild(img);
+			img.onclick = function(){
+				
+				//	close the console DIV
+				NOKIA.layout._console_enabled = false;
+				NOKIA.layout.render();
+				
+				$("#loaderDiv").html("Widget is loading. Please wait...");
+				$("#loaderDiv")[0].className = 'green';
+				$("#loaderDiv").show();
+				window.setTimeout(function(){
+					document.location = document.location;
+				}, 3000);
+				
+			};
+			
+			div.appendChild(p);
+
+			$("#loaderDiv").html("Click on Icon to Launch Widget");
+			$("#loaderDiv").show();
+			$("#loaderDiv")[0].className = 'yellow';
+
+			$('#IconArea').append(div);
+			$('#IconArea').show();
+
+			NOKIA.menu.is_dimmed = true;
+			
+			$("#PreferencesBtn").hide();
+			$("#PreferencesTab").dialog('close');
+			
+		},
+		
+		setLsk : function(func)
+		{
+			//	for RSK
+			$('#LskArea')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+		
+			$('#LskLabel > a')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+
+			return true;
+		},
+		
+		setRsk : function(func)
+		{
+			//	for RSK
+			$('#RskArea')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+			
+			$('#RskLabel > a')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+			
+			return true;
+		},
+
+
+		triggerLsk : function(event)
+		{
+			var callback;
+			if(NOKIA.mode == 'portrait')
+				callback = NOKIA.menu.lsk_event;
+			else if( (NOKIA.mode == 'landscape') && (event.id =='LskLabel') )
+				callback = NOKIA.menu.lsk_event;
+			else
+				callback = NOKIA.menu.rsk_event;
+			
+			if(typeof callback == 'function' && !NOKIA.menu.is_dimmed)
+			{
+				callback();
+			}
+		},
+
+		triggerRsk : function(event)
+		{
+			var callback;
+			if(NOKIA.mode == 'portrait')
+				callback = NOKIA.menu.rsk_event;
+			else if( (NOKIA.mode == 'landscape') && (event.id =='RskLabel') )
+				callback = NOKIA.menu.rsk_event;
+			else
+				callback = NOKIA.menu.lsk_event;
+			
+			if(typeof callback == 'function')
+			{
+				if(!NOKIA.menu.is_dimmed)
+				{
+					callback();
+					NOKIA.menu.cancel();
+				}
+			}
+		},
+		
+		render : function()
+		{
+			if(!NOKIA.menu.softkeys_visibility)
+				NOKIA.menu.hideSoftKeys();
+			else
+				NOKIA.menu.showSoftKeys();
+			
+			NOKIA.emulator.setWidgetStyle();
+		},
+		
+
+		init : function()
+		{
+			NOKIA.menu.render();
+		},
+		
+		createSFKArea : function()
+		{
+			var a = $('#SoftKeys > a');
+			a.html('');
+			
+			var preferences = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode];
+			
+			var lsk = document.createElement('img');
+			lsk.border="0";
+			lsk.id = "LskArea";
+			lsk.name ="LskArea";
+			lsk.src = "preview/images/TransperantImage.png";
+			lsk.style.width = preferences.style.softkeysImg.width; 
+			lsk.style.height = preferences.style.softkeysImg.height;
+			
+			var rsk = document.createElement('img');
+			rsk.border = 0;
+			rsk.id = "RskArea";
+			rsk.name = "RskArea";
+			rsk.src = "preview/images/TransperantImage.png";
+			rsk.style.width = preferences.style.softkeysImg.width; 
+			rsk.style.height = preferences.style.softkeysImg.height;
+
+			if(NOKIA.mode == 'portrait')
+			{	
+				lsk.onclick = function(){
+					$("#LskLabel > a").trigger('click');
+				}
+				a[0].appendChild(lsk);
+
+				rsk.onclick = function(){
+					$("#RskLabel > a").trigger('click');
+				}
+				a[1].appendChild(rsk);
+
+			}else{
+
+				rsk.onclick = function(){
+					$("#RskLabel > a").trigger('click');
+				}
+				a[0].appendChild(rsk);
+
+				lsk.onclick = function(){
+					$("#LskLabel > a").trigger('click');
+				}
+				a[1].appendChild(lsk);
+			}
+			
+			
+		},
+
+		showSoftKeys : function()
+		{
+			NOKIA.menu.is_softkeys_visible = true;
+
+			NOKIA.emulator.setWidgetStyle();
+			$("#SoftKeysArea").show();
+		},
+		
+		hideSoftKeys : function()
+		{
+			//	Hide the SFK's If user hidden them from his code
+			if(!NOKIA.menu.softkeys_visibility)
+				$("#SoftKeysArea").hide();
+			
+			NOKIA.menu.is_softkeys_visible = false;
+
+			NOKIA.emulator.setWidgetStyle();
+		}
+	};
+
+
+
+	/*
+	 * NOKIA.emulator
+	 */
+	NOKIA.namespace('emulator');
+	NOKIA.emulator = {
+		child : false,
+		iconFile : 'preview/images/default-Icon.png',
+		loaded : false,
+		plist : {
+			DisplayName	:	'',
+			Identifier	:	'',
+			MainHTML	:	'',
+			AllowNetworkAccess	:	"false",
+			Version		:	'',
+			MiniViewEnabled		:	"false",
+			is_browserReady : false
+		},
+		
+		load : function()
+		{
+			if(this.loaded)
+				return false;
+				
+			//	load the saved device Info
+			var device = NOKIA.helper.readCookie('NOKIA_EMULATOR_DEVICE');
+			NOKIA.currentDevice = device || NOKIA.currentDevice;
+
+
+			//	load the saved device mode
+			var mode = NOKIA.helper.readCookie('NOKIA_EMULATOR_DEVICE_MODE');
+			if(mode != null)
+				NOKIA.mode = mode;
+
+			//	SAVE the device DATA
+			NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE', NOKIA.currentDevice);
+			NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE_MODE', NOKIA.mode);
+			
+			this.loaded = true;
+			
+		},
+	
+		render : function()
+		{
+			this.load();
+			
+			if(!NOKIA.emulator.orientationSupports())
+				NOKIA.mode = NOKIA.deviceList[NOKIA.currentDevice]['default'];
+			
+			if(typeof NOKIA.deviceList == 'undefined' || typeof NOKIA.deviceList[NOKIA.currentDevice] == 'undefined' || typeof NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode] == 'undefined')
+			{
+				alert('Deive resolution: '+NOKIA.currentDevice+' or the mode: '+NOKIA.mode+' not found');
+				return false;
+			}
+			
+			this.setStyle();
+		},
+		
+		setMode : function(mode)
+		{
+			NOKIA.mode = mode;
+
+			//	SAVE the device DATA
+			NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE_MODE', NOKIA.mode);
+
+			NOKIA.emulator.render();
+		},
+		
+		orientationSupports : function()
+		{
+			return NOKIA.deviceList[NOKIA.currentDevice]['orientation'];
+		},
+		
+		setStyle:function()
+		{
+			if(!NOKIA.helper.checkDependencies())
+			{
+				setTimeout(NOKIA.emulator.setStyle, 1000);
+			}
+			
+			var deviceProperties = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode];
+			var style = deviceProperties['style'];
+
+			//	Apply Style and propertis to Device layers
+			$("#DeviceDisplayLayout").css(style['layout']);
+			$('#DisplayArea').css(style['display']);
+			
+			NOKIA.emulator.setWidgetStyle();
+			
+			$('#SoftKeysArea').css({
+				'width'	:	style['menu']['width']+'px',
+				'height'	:	style['menu']['height']+'px',
+				'float' 	:	style['menu']['float']
+			});
+			
+			$('#SoftKeysArea > ul > li').css('width', parseInt(style['menu']['width']/2)-10);
+
+			
+			NOKIA.emulator.setMenuItemsStyle();
+			
+			$('#SoftKeys').css(style['softkeys']);
+//			$('#SoftKeys > a > img').css(style['softkeysImg']);
+
+			NOKIA.menu.createSFKArea();
+			
+			$("#DeviceDisplayLayout").show();
+			$("#PreferencesTab").show();
+			
+			if(!NOKIA.menu.is_dimmed)
+				$("#PreferencesBtn").show();
+		},
+		
+		setWidgetStyle : function()
+		{
+			var style = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode]['style'];
+			var height;
+			if(NOKIA.menu.softkeys_visibility || NOKIA.menu.is_softkeys_visible)
+				height = parseInt(style['widget']['height'] - style['menu']['height']);
+			else
+				height = style['widget']['height'];
+
+			$('#WidgetArea').css({
+				'width' 	:	style['widget']['width']+'px',
+				'height'	:	height+'px',
+				'float' 	:	style['widget']['float']
+			});
+		},
+		
+		setMenuItemsStyle : function()
+		{
+			var style 	= NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode]['style'];
+			var count = 1;
+			try {
+				if (NOKIA.emulator.child.menu) {
+					count = parseInt(NOKIA.helper.getElementsLengthInObject(NOKIA.emulator.child.menu.items)) + 1;
+				}
+			} catch (e) {
+				count = 1;
+			}
+			var height 	= parseInt(count*style['menu']['optionKeysheight']) + 10;
+			var top 	= parseInt(style['widget']['height'] - height); 
+
+			$('#MenuItemsArea').css({
+				'width'		:	style['widget']['width']+'px',
+				'height'	:	height+'px',
+				'marginTop'	:	'-2px',
+				'top'		:	(style['widget']['height']-height-style['menu']['height']+2)+'px',
+				'position'	: 	'relative'
+			});
+		}
+	};
+
+	/*
+	 * NOKIA.helper functions
+	 */
+	NOKIA.namespace('helper.loadScript');
+	NOKIA.helper = {
+		path : document.location.pathname,
+		errorDailog	: null,
+		prefDailog : null,
+		intervalId : null,
+		infoPlistCounter : false,
+		IconFileCounter  : false,
+		loadScript : function(path)
+		{
+			var head = document.getElementsByTagName("head")[0] || document.documentElement;
+			var script = document.createElement("script");
+	
+			script.type = "text/javascript";
+			script.src = src;
+			head.appendChild( script );
+		},
+
+		loadPreferences : function()
+		{
+			if(/dreamweaver/i.test(navigator.userAgent))
+			{
+				$("#dwDeviceHelp")[0].className = '';
+				$("#resSupportLink")[0].className = 'hide';
+			}
+			//	Selecting Resoltion
+			var resOptions = $("#resOptions")[0];
+			for(var i=0; i<NOKIA.resolution.length; i++)
+			{
+				if(NOKIA.resolution[i] == NOKIA.currentDevice)
+				{
+					resOptions.options[i].selected = true;
+					$("#resSupportLink")[0].href = resOptions.options[i].value;
+					break;
+				}				
+			}
+			
+			//	Selecting Orientation
+			if(NOKIA.mode == 'portrait')
+				$('#input_portrait')[0].checked = true;
+			else
+				$('#input_landscape')[0].checked = true;
+
+			if (!NOKIA.emulator.orientationSupports()) {
+				if (NOKIA.mode == 'portrait') 
+					$("#input_landscape")[0].disabled = true;
+				else 
+					$("#input_portrait")[0].disabled = true;
+					
+				$("#Orientation_Info").html("Not supported");
+				$("#Orientation_Info").show();
+				$("#Orientation_Controls").hide();
+			}
+			else {
+				$("#input_landscape")[0].disabled = false;
+				$("#input_portrait")[0].disabled = false;
+
+				$("#Orientation_Info").hide();
+				$("#Orientation_Controls").show();
+			}
+			
+			//	Selecting Version
+			if(NOKIA.version == 'WRT 1.0')
+				$('#wrt_version_1_0')[0].checked = true;
+			else
+				$('#wrt_version_1_1')[0].checked = true;
+				
+			//	HomeScreen Support
+			if(NOKIA.deviceList[NOKIA.currentDevice].homeScreenSupport)
+			{
+				if (typeof NOKIA.emulator.plist.MiniViewEnabled != 'undefined') {
+					if (NOKIA.emulator.plist.MiniViewEnabled == 'false') 
+						$('#HS_Control_Info').html("<span id='wrt-help' onclick='javascipt:NOKIA.helper.showMiniviewHelp();'></span><strong>Not Enabled</strong><br/><small>Click on help to read more about enabling Mini view support</small>");
+					else 
+						$('#HS_Control_Info').html("Supported");
+				}
+				else
+					$('#HS_Control_Info').html("<span id='wrt-help'></span>Not Supported");
+
+				$('#HS_Control_Info').show();
+
+			}
+			else
+			{
+				$('#HS_Control_Info').html("Not Supported for the selected Device resolution");
+				$('#HS_Control_Info').show();
+			}
+		},
+
+		getInfo : function(url, callback)
+		{
+			try {
+				var xhr = this.ajax();
+				
+				if ((/AppleWebKit/i.test(navigator.userAgent)))
+					xhr.open("GET", url, false);
+				else
+					xhr.open("GET", url, true);
+				
+				
+				xhr.onreadystatechange = function() 
+				{
+						// readyState = 4 ; "complete"
+						if (xhr.readyState==4)
+						{
+							// status = 200 ; "ok"
+							if( (xhr.status == 200) || (!xhr.status) )
+							{
+								callback(true, xhr);
+							}
+							else
+							{ 
+								callback(false, xhr);
+							}
+						}
+	
+				}
+				xhr.send(null);
+			} catch (e) {
+				if (e.name == 'NS_ERROR_FILE_NOT_FOUND') {
+					callback(false, xhr);
+				}			
+			}
+		},
+
+		getInfoCallback : function(flag, xhr)
+		{
+			//	If Info.plis NOT FOUND / FAILED LOAD
+			//	an ERROR!, unable to proceed further
+			// 	STOP there
+			if(!flag)
+			{
+				if(!NOKIA.helper.infoPlistCounter)
+				{
+					NOKIA.helper.infoPlistCounter = true;
+					NOKIA.helper.getInfo('info.plist', NOKIA.helper.getInfoCallback);
+					return false;
+				}
+
+				NOKIA.helper.error('Unable to intialize the widget, failed to process Info.plist file. <br/>Please ensure <strong style="color:#efe352;">Info.plist</strong> file exists on the widget root folder <br/>or check the filename of <strong style="color:#efe352;">Info.plist</strong> It is case-sensitive');
+				return false;
+			}
+			else{
+				
+				var xmlString = xhr.responseText;
+				
+				// do some cheating here
+				xmlString = xmlString.replace(/<\s*true\s*\/>/gi, "<string>true</string>");
+				xmlString = xmlString.replace(/<\s*false\s*\/>/gi, "<string>false</string>");
+	
+			/*
+			 * 	DomParser Logic
+				var appXml = new DOMParser();
+				var xmlobject = appXml.parseFromString(xmlString, "text/xml");
+			 */
+			
+				//	return the JSON Object
+				NOKIA.helper.validate(xml2json.parser(xmlString));
+			}
+			
+		},
+		
+		getIconCallback : function(flag, xhr)
+		{
+			
+			if(!flag)
+			{
+				if(!NOKIA.helper.IconFileCounter)
+				{
+					NOKIA.helper.IconFileCounter = true;
+					NOKIA.helper.getInfo('icon.png', NOKIA.helper.getIconCallback);
+					return false;	
+				}
+			}
+			else
+				NOKIA.emulator.iconFile =  (NOKIA.helper.IconFileCounter) ? "icon.png" : "Icon.png";
+		},
+		
+
+		validate : function(xmlObject)
+		{
+			window.xmlObject = xmlObject;
+			
+			//	<plist>
+			if(typeof xmlObject.plist != 'object' || xmlObject.plist == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+			//	<dict>
+			xmlObject = xmlObject.plist;
+			if(typeof xmlObject.dict != 'object' || xmlObject.dict == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			//	<key>
+			xmlObject = xmlObject.dict;
+			if(typeof xmlObject.key != 'object' || xmlObject.key == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			//	<string>
+			if(typeof xmlObject.string != 'object' || xmlObject.string == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			//	num of <key> = num of <string>
+			if(xmlObject.key.length != xmlObject.string.length)
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			for(var val in xmlObject.key)
+			{
+				if(NOKIA.emulator.plist[xmlObject.key[val]] != 'undefined'){
+					NOKIA.emulator.plist[xmlObject.key[val]] = xmlObject.string[val].toString(); 
+				}
+			}
+
+			try {
+				if(typeof NOKIA.emulator.plist.DisplayName != 'undefined'){
+					document.title = NOKIA.emulator.plist.DisplayName + ' - ' + document.title;
+				}
+			} catch (e) {}
+
+			//	Add UI-Event listeners
+			NOKIA.helper.addListeners();
+			NOKIA.layout.init();
+			NOKIA.emulator.render();
+		},
+
+
+		ajax : function() 
+		{
+			//	xmlHttpRequest object	
+			var request = null;
+		
+		    // branch for native XMLHttpRequest object
+		    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
+		    	try 
+				{
+					request = new XMLHttpRequest();
+					try
+					{
+						//	attach the Bypass code, if the browser is firefox
+						if(netscape.security.PrivilegeManager.enablePrivilege)
+						{
+							//	duplicate the function
+							request._open = request.open;
+							
+							//	redefine the function definition
+							request.open = function(method, url, flag)
+							{
+								try
+								{
+									// Enable Universal Browser Read
+									netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
+		
+									//	call the native XmlHttpRequest.open method
+									this._open(method, url, flag);
+								}catch(e)
+								{
+									//	call the native XmlHttpRequest.open method
+									this._open(method, url, flag);
+								}
+							}
+						}
+					}
+					catch(e)
+					{
+						//	eatup all exceptions
+					}
+				} 
+				catch(e) {
+					request = null;
+		        }
+		    // branch for IE/Windows ActiveX version
+		    } else if(window.ActiveXObject) {
+		       	try {
+		        	request = new ActiveXObject("Msxml2.XMLHTTP");
+		      	} catch(e) {
+		        	try {
+		          		request = new ActiveXObject("Microsoft.XMLHTTP");
+		        	} catch(e) {
+		          		alert('Failed to create XmlHttprequest');
+						return null;
+		        	}
+				}
+		    }
+			
+			return (request);
+		},
+
+		error : function(msg)
+		{
+			if(NOKIA.menu.enable_log)
+				NOKIA.layout.log("log", msg);
+			
+			$("#Dialog").html(msg);
+			$("#Dialog").dialog('open');
+		},
+
+		createCookie : function(name,value) 
+		{
+			var days = 240000;
+		    if (days) {
+				var date = new Date();
+				date.setTime(date.getTime()+(days*24*60*60*1000));
+				var expires = "; expires="+date.toGMTString();
+			}
+			else var expires = "";
+			document.cookie = "Nokia_WRT#" + NOKIA.helper.path + "#" + name + "=" + value + expires + "; path=/";
+		},
+		
+		readCookie : function(name) 
+		{
+			var nameEQ = "Nokia_WRT#" + NOKIA.helper.path + "#" + name + "=";
+			var ca = document.cookie.split(';');
+			for(var i=0;i < ca.length;i++) {
+				var c = ca[i];
+				while (c.charAt(0)==' ') c = c.substring(1,c.length);
+				if (c.indexOf(nameEQ) == 0) {
+					return c.substring(nameEQ.length,c.length);
+				}
+			}
+			return undefined;
+		},
+
+		toggle : function(ele)
+		{
+			if (NOKIA.emulator.orientationSupports()) {
+//				var mode = (NOKIA.mode == 'portrait') ? 'landscape' : 'portrait';
+				NOKIA.emulator.setMode(ele.value);
+			}
+			else
+			{	
+				ele.checked = false;
+				if(ele.value == 'portrait')
+					$("#input_landscape")[0].checked = true;
+				else
+					$("#input_portrait")[0].checked = true;
+			}
+		},
+
+		version : function(ele)
+		{
+			if (confirm('Would you like to reload the widget to apply the changes on the Version settings?')) 
+			{
+				NOKIA.helper.createCookie('_WRT_VERSION', ele.value);
+				$("#loaderDiv").html("Applying the " + ele.value + ", please wait...");
+				$("#loaderDiv").show();
+				$("#loaderDiv")[0].className = 'green';
+				
+				$("#PreferencesTab").dialog('close');
+				
+				window.setTimeout(function(){
+					document.location = document.location;
+				}, 3000);
+			}
+			else
+			{
+				ele.checked = false;
+				if(ele.value != 'WRT 1.0')
+					$("#wrt_version_1_0")[0].checked = true;
+				else
+					$("#wrt_version_1_1")[0].checked = true;
+			}
+		},
+
+		addListeners : function()
+		{
+			/*
+			 * Render Emulator for Interaction
+			 */
+			NOKIA.helper.prefDailog = $("#PreferencesTab").dialog({
+					width: 550,	minWidth: 550, minHeight: 350, height: 350, autoOpen: false, position : top, title : '&nbsp;',
+					buttons : {
+						Close : function(){
+							$("#PreferencesTab").dialog('close');
+
+							//	Hack for Mac firefox
+							if(/Mac/i.test(navigator.userAgent))
+							{
+								$("#WidgetArea iframe").css({overflow:'auto'});
+							}
+							
+							//	select index : 0 tab selected
+							$('#tabs').tabs( 'select' , 0);
+						}
+					}
+				});
+				
+			$('#PreferencesBtn').click(function(){
+				//	Load preferences
+				NOKIA.helper.loadPreferences();
+				$('#PreferencesTab').dialog('open');
+
+				//	Hack for Mac firefox
+				if(/Mac/i.test(navigator.userAgent))
+				{
+					$("#WidgetArea iframe").css({overflow:'hidden'});
+				}
+			});
+			
+			$('#input_portrait').change(function(){
+				NOKIA.helper.toggle(this);
+			});
+
+			$('#input_landscape').change(function(){
+				NOKIA.helper.toggle(this);
+			});
+
+			$('#resOptions').change(function(ele){
+				ele = ele.target || this;
+				
+				NOKIA.currentDevice = ele.options[ele.selectedIndex].text;
+				$("#resSupportLink")[0].href = ele.value;
+		
+				//	SAVE the device DATA
+				NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE', NOKIA.currentDevice);
+		
+				NOKIA.emulator.render();
+				NOKIA.helper.loadPreferences();
+			});
+
+			//	Hack for Mac firefox
+			if (/Mac/i.test(navigator.userAgent)) {
+				if (!(/AppleWebKit/i.test(navigator.userAgent))) {
+					$("#resOptions")[0].size = '4';
+				}
+			}
+
+
+			//	WRT Version controls
+			$('#wrt_version_1_0').change(function(){
+				NOKIA.helper.version(this);
+			});
+			
+			$('#wrt_version_1_1').change(function(){
+				NOKIA.helper.version(this);
+			});
+
+
+			$("#orientationIcon").click(function(){
+				var mode = (NOKIA.mode == 'portrait') ? 'landscape' : 'portrait';
+				NOKIA.emulator.setMode(mode);
+				$("#WidgetArea")[0].className = 'hs_'+NOKIA.mode;
+			});
+
+
+			$("#iframeMask").click(function(){
+
+				$("#PreferencesBtn").show();
+				$("#orientationIcon").hide();
+				$("#iframeMask").hide();
+				$("#loaderDiv").hide();
+
+				NOKIA.menu.is_dimmed = false;
+				
+				$("#WidgetArea")[0].className = '';
+				
+				NOKIA.menu.softkeys_visibility = true;
+				NOKIA.menu.showSoftKeys();
+
+			});
+
+
+			//	MenuItems DIV events
+			$("#MenuItemsArea").mouseover(function(){
+				if(NOKIA.helper.intervalId)
+					clearInterval(NOKIA.helper.intervalId);
+
+				$("#MenuItemsArea").show();
+			});
+
+			$("#MenuItemsArea").mouseout(function(){
+				if(NOKIA.helper.intervalId)
+					clearInterval(NOKIA.helper.intervalId);
+
+				NOKIA.helper.intervalId = setTimeout(function(){
+					NOKIA.menu.cancel()
+				}, 500);
+			});
+
+
+			// Tabs
+			$('#tabs').tabs({
+				select : function(event, ui){
+					if(parseInt(ui.index) == 1)
+					{
+						$("#event-icons").show();
+						$("#event-battery-info").hide();
+						$("#event-messaging-info").hide();
+						$("#event-memory-info").hide();
+						
+						//	WRT versionn check
+						if(NOKIA.version == 'WRT 1.1')
+						{
+							$("#event-messaging")[0].className = 'active';
+							$("#event-memory")[0].className = 'active';
+						}else
+						{
+							$("#event-messaging")[0].className = 'inactive';
+							$("#event-memory")[0].className = 'inactive';
+						}
+						$("#event-battery")[0].className = 'active';
+					}else if(parseInt(ui.index) == 0)
+					{
+						$("#settings-view").show();
+						$("#mini-view-info").hide();
+					}
+				}
+			});
+
+			
+			/*	
+			 * 	Event triggering
+			 */
+			
+			//	for battery
+			$("#event-battery").click(function(event){
+				if(event.target.className == 'active')
+				{
+					$("#event-icons").hide();
+					$("#event-battery-info").show();
+
+/*
+				$('#slider').slider('option', 'value', NOKIA.emulator.child._BRIDGE_REF.helper.getBatteryStrength());
+				NOKIA.emulator.child._BRIDGE_REF.helper.getBatteryStrength()
+				$('#slider').slider('option', 'value', 10);
+				$('#slider').slider();
+*/
+				}
+			});
+
+			$("#event-battery-back").click(function(event){
+				$("#event-icons").show();
+				$("#event-battery-info").hide();
+			});
+
+
+			//	for messaging
+			$("#event-messaging").click(function(event){
+				if(event.target.className == 'active')
+				{
+					$("#event-icons").hide();
+					$("#event-messaging-info").show();
+				}
+			});
+
+			$("#event-messaging-back").click(function(event){
+				$("#event-icons").show();
+				$("#event-messaging-info").hide();
+			});
+
+
+			//	for memory
+			$("#event-memory").click(function(event){
+				if(event.target.className == 'active')
+				{
+					$("#event-icons").hide();
+					$("#event-memory-info").show();
+				}
+			});
+
+			$("#event-memory-back").click(function(event){
+				$("#event-icons").show();
+				$("#event-memory-info").hide();
+			});
+
+
+			//	for minView more info
+			$("#mini-view-back").click(function(event){
+				$("#settings-view").show();
+				$("#mini-view-info").hide();
+			});
+
+
+			// Slider
+			$('#slider').slider({
+				range: true,
+				min : 0,
+				max : 100,
+				step : 1,
+				value : 10,
+				animate: true,
+				slide: function(event, ui) {
+					$("#slider-value-panel > span").html(ui.value.toString());
+				}
+				});
+
+			//	Bind Buttons to trigger values to WRT 1.0 / 1.1 bindings
+			
+			$("#connect-charger").click(NOKIA.helper.triggerEvents);
+			$("#disconnect-charger").click(NOKIA.helper.triggerEvents);
+			$("#update-batter-strength").click(NOKIA.helper.triggerEvents);
+
+			$("#send-sms").click(NOKIA.helper.triggerEvents);
+			$("#send-mms").click(NOKIA.helper.triggerEvents);
+
+			$("#connect-memory-card").click(NOKIA.helper.triggerEvents);
+			$("#disconnect-memory-card").click(NOKIA.helper.triggerEvents);
+			
+		},
+		
+		setHomeScreen : function()
+		{
+			//	HomeScreen Support
+			if (NOKIA.deviceList[NOKIA.currentDevice].homeScreenSupport) {
+
+				if (typeof NOKIA.emulator.plist.MiniViewEnabled != 'undefined') {
+					if (NOKIA.emulator.plist.MiniViewEnabled != 'false') 
+					{
+						$("#WidgetArea")[0].className = 'hs_' + NOKIA.mode;
+						
+						//	menu handlining
+						NOKIA.menu.softkeys_visibility = false;
+						NOKIA.menu.cancel();
+						NOKIA.menu.is_dimmed = true;
+						
+
+						$("#loaderDiv").html("Click on widget for Return to Full view");
+						$("#loaderDiv")[0].className = 'green';
+						$("#loaderDiv").show();
+
+						$("#iframeMask").show();
+						$("#orientationIcon").show();
+						$("#PreferencesBtn").hide();
+
+						$("#PreferencesTab").dialog('close');
+						return true;
+					}
+				}
+			}
+			return false;			
+		},
+		
+		getElementsLengthInObject : function(items){
+			var count = 0;
+			for (var i in items) 
+			{
+				if(!items[i].isDimmed)
+					count++;
+			}
+			
+			return count;
+		},
+		
+		triggerEvents : function(event)
+		{
+			if(typeof event.target.id == 'undefined')
+			return false;
+			
+			switch(event.target.id)
+			{
+				//	for battery
+				case 'connect-charger': 
+										NOKIA.helper.trigger("power", "chargerconnected", 1);
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Battery.ChargingStatus", {Status: 1});
+										break;
+
+				case 'disconnect-charger': 
+										NOKIA.helper.trigger("power", "chargerconnected", 0);
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Battery.ChargingStatus", {Status: 0});
+										break;
+
+				case 'update-batter-strength': 
+										var chargeValue = parseInt($('#slider').slider('value'));
+										NOKIA.helper.trigger("power", "chargelevel", chargeValue);
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Battery.BatteryStrength", {Status: chargeValue});
+										break;
+
+				//	for messaging
+				case 'send-sms': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.Messaging", "NewMessage", {MessageType: 'SMS'});
+										break;
+				case 'send-mms': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.Messaging", "NewMessage", {MessageType: 'MMS'});
+										break;
+
+				//	for memory
+				case 'connect-memory-card': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Memory.MemoryCard", {Status: 1});
+										break;
+				case 'disconnect-memory-card': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Memory.MemoryCard", {Status: 0});
+										break;
+			}
+		},	
+
+		triggerSapi : function(provider, eventType, data){
+			NOKIA.emulator.child.device.implementation.triggerListener(provider, eventType, data);
+		},	
+
+		trigger : function(provider, eventType, data){
+			NOKIA.emulator.child.widget.triggerListener(provider, eventType, data);
+		},
+		
+		showMiniviewHelp : function(){
+			$("#settings-view").hide();
+			$("#mini-view-info").show();
+		},
+		
+		checkDependencies : function(){
+			
+			for(var key in NOKIA.scriptsLoaded)
+			{
+				if(!NOKIA.scriptsLoaded[key])
+					return false;
+			}
+
+			//	for LSK
+			NOKIA.menu.setLsk(NOKIA.emulator.child.menu.show);
+		
+			//	for RSK
+			NOKIA.menu.setRsk(NOKIA.menu.exit);
+
+			return true;
+		}
+	};
+	
+
+	/*
+	 * NOKIA.layout functions
+	 */
+	NOKIA.namespace('layout');
+	NOKIA.layout = {
+		_console_minimized : true,
+		_console_enabled : false,
+		_consoleWindowHeight : 200,
+		_consoleHeaderHeight : 31,
+
+		init : function(){
+			
+			//	Toggle console window
+			$('#Console-Toggle-Button').click(function(){
+				
+				NOKIA.layout._console_minimized = (NOKIA.layout._console_minimized) ? false : true;
+				NOKIA.layout.render();
+			});
+			
+			// clear Log
+			$("#Console-Clear-Button").click(function(){
+				$("#preview-ui-bottom-body")[0].innerHTML = '';
+			});
+
+
+			$('#preview-ui-bottom').show();
+			NOKIA.layout.render();
+		},
+		
+		log : function(type, msg){
+			var p = document.createElement('p');
+			p.className = type;
+			p.innerHTML = msg;
+			var divBody = $('#preview-ui-bottom-body')
+			divBody.append(p);
+			divBody[0].scrollTop = divBody[0].scrollHeight;
+		},
+		
+		
+		render : function(){
+			var _width = parseInt(window.innerWidth);
+			var _height = parseInt(window.innerHeight);
+			
+			if(!NOKIA.layout._console_enabled)
+			{
+				$('#preview-ui-bottom').css({
+					display: 'none'
+				});
+				
+				$('#preview-ui-top').css({
+					height: _height+'px'
+				});
+
+				return false;
+			}
+			
+			
+			if(!NOKIA.layout._console_minimized)
+			{
+				$('#Console-Toggle-Button')[0].className = 'open';
+				
+				//	set STYLE details for TOP window
+				$('#preview-ui-top').css({
+					height: parseInt(_height - NOKIA.layout._consoleWindowHeight) + 'px'
+				});
+				
+				//	set STYLE details for Bottom window
+				$('#preview-ui-bottom').css({
+					height: NOKIA.layout._consoleWindowHeight + 'px',
+					display : 'block'
+				});
+
+				$('#preview-ui-bottom-header').css({
+					height: NOKIA.layout._consoleHeaderHeight + 'px'
+				});
+
+				$('#preview-ui-bottom-body').css({
+					height: parseInt(NOKIA.layout._consoleWindowHeight - NOKIA.layout._consoleHeaderHeight) + 'px',
+					display : 'block'
+				});
+				
+				// Auto scroll when console window opened from MINIMIZED => MAXIMIZED state
+				window.setTimeout(function(){
+					$('#preview-ui-bottom-body')[0].scrollTop = $('#preview-ui-bottom-body')[0].scrollHeight;
+				}, 100);
+				
+			}else{
+				$('#Console-Toggle-Button')[0].className = 'close';
+
+				//	set STYLE details for TOP window
+				$('#preview-ui-top').css({
+					height: parseInt(_height - NOKIA.layout._consoleHeaderHeight) + 'px'
+				});
+				
+				//	set STYLE details for Bottom window
+				$('#preview-ui-bottom').css({
+					height: NOKIA.layout._consoleHeaderHeight + 'px',
+					display : 'block'
+				});
+
+				$('#preview-ui-bottom-header').css({
+					height: NOKIA.layout._consoleHeaderHeight + 'px',
+					display : 'block'
+				});
+
+				$('#preview-ui-bottom-body').css({
+					display : 'none'
+				});
+			}
+		}
+		
+	};
+}
+
+$(document).ready(function () {
+	NOKIA.init();	
+});
+
+window.onresize = NOKIA.layout.render;