//Called when application is started. function OnStart() {      //keep in portrait orientation      app.SetOrientation("Portrait"); //Check if roku.pref exists existsFile = app.FileExists( "/sdcard/kidsroku/roku.pref" ); //check for for file existance if (existsFile == 0)  {  //create folder for preferences  app.MakeFolder( "/sdcard/kidsroku/" );  //default value  address = "http://172.16.20.84:8060/";  //write preference file  app.WriteFile( "/sdcard/kidsroku/roku.pref", address ); } // read file roku.pref address = app.ReadFile("/sdcard/kidsroku/roku.pref");     //Create a layout with objects vertically centered.     lay = app.CreateLayout( "Linear", "VCenter,FillXY" );         //set background      lay.SetBackground( "/Sys/Img/BlackBack.png" );      //Create a layout we can slide over the main layout.      //(This hidden layout is actually on top of the main      //layout, it just appears to slide from the left)      laySlide = app.CreateLayout( "Linear", "FillXY" );      laySlide.SetPadding( 0, 0.1, 0, 0 );       laySlide.SetBackground( "/Sys/Img/GreenBack.png" );      laySlide.SetVisibility( "Hide" );     //Create Verticle sub-layout for buttons.     layVert = app.CreateLayout( "Linear", "Verticle" );         //Create Horizontal sub-layout for buttons     layHori = app.CreateLayout("linear", "Horizontal");     layVert.AddChild( layHori);          //Create Home button.     btnHome = app.CreateImage( "Img/home.png", .25, -1 );     btnHome.SetMargins(.0,.01,.15,.08);     btnHome.SetOnTouchDown( btnHome_OnTouch );     layHori.AddChild( btnHome );          //Create Back button.     btnBack = app.CreateImage( "Img/back.png", .25, -1 );     btnBack.SetMargins(.15,.01,.0,.08);     btnBack.SetOnTouchDown( btnBack_OnTouch );     layHori.AddChild( btnBack );          //Create Up button.     btnUp = app.CreateImage( "Img/up.png",.35,-1 );     btnUp.SetOnTouchDown( btnUp_OnTouch );     layVert.AddChild( btnUp );          //Create horizontal layout2 for buttons     layHori2 = app.CreateLayout("linear", "Horizontal");     layVert.AddChild( layHori2);          //Create Left button.     btnLeft = app.CreateImage( "Img/left.png",.35,-1 );     btnLeft.SetOnTouchDown( btnLeft_OnTouch );     layHori2.AddChild( btnLeft );          //Create Select button.     btnSelect = app.CreateImage( "Img/select.png",.35,-1 );     btnSelect.SetOnTouchDown( btnSelect_OnTouch );     layHori2.AddChild( btnSelect );          //Create Right button.l     btnRight = app.CreateImage( "Img/right.png",.35,-1 );     btnRight.SetOnTouchDown( btnRight_OnTouch );     layHori2.AddChild( btnRight );          //Create Down button.     btnDown = app.CreateImage( "Img/down.png",.35,-1 );     btnDown.SetOnTouchDown( btnDown_OnTouch );     layVert.AddChild( btnDown );          //Create horizontal layout3 for buttons     layHori3 = app.CreateLayout("linear", "Horizontal");     layVert.AddChild( layHori3);         //Create button and add to main layout.      btnSave = app.CreateButton( "Save", 0.3, 0.06, "gray" );      btnSave.SetOnTouch( btnSave_OnTouch );      laySlide.AddChild( btnSave );     //Create menu     app.SetMenu("IP Address,Find Roku,Help");     //Create text edit     newAddress = app.CreateTextEdit( address, 0.8, 0.3 );      laySlide.AddChild( newAddress );     //Add verticle layout to main layout.     lay.AddChild( layVert );          //Add layout to app.         app.AddLayout( lay );     app.AddLayout(laySlide); }  //webscript post function webscript_post() {     xhr = new XMLHttpRequest();     xhr.open('POST', address + command,true);     xhr.timeout = setTimeout("xhr.abort()", 300);     xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');     xhr.send(null);     app.Vibrate( "0,20" ); } //Called when user touches Home button. function btnHome_OnTouch() { command = 'keypress/home' webscript_post() } //Called when user touches Back button. function btnBack_OnTouch() {  command = 'keypress/back' webscript_post() } //Called when user touches up button. function btnUp_OnTouch() { command = 'keypress/up' webscript_post() } //Called when user touches Left button. function btnLeft_OnTouch() { command = 'keypress/left' webscript_post() } //Called when user touches Select button. function btnSelect_OnTouch() { command = 'keypress/select' webscript_post() } //Called when user touches Right button. function btnRight_OnTouch() { command = 'keypress/right' webscript_post() } //Called when user touches Down button. function btnDown_OnTouch() { command = 'keypress/down' webscript_post()       }  //Called when user touches IP Adress menu item. function btnIpAddress_OnTouch() { laySlide.Animate( "SlideFromLeft" );     app.Alert( "http://172.16.20.56:8060/", "make sure to use this format " ); } //Called when user touches Find Roku menu item function btnFindRoku_OnTouch() {    findRoku() } //help function help() {    app.Alert("A simple roku remote for kids or anyone looking for a basic easy to use remote"); } //Called when user touches menu item Ip button function OnMenu(item) { if (item == "IP Address") {     btnIpAddress_OnTouch() } // Called when user touches menu item Find Roku if (item=="Find Roku") {     btnFindRoku_OnTouch() } if (item=="Help") {    help() } } //Called when user touches save button function btnSave_OnTouch() { laySlide.Animate( "SlideToLeft" ); address = newAddress.GetText(); app.WriteFile( "/sdcard/kidsroku/roku.pref", address ); }   // ***************************************************** //Search network for roku function findRoku()  {  //Get ip of device     ip = app.GetIPAddress();     startNum = ip.split (".");     ipEndd = Math.floor(startNum[3]/50);     ipEnd = ipEndd * 50+1 //Create a layout with objects vertically centered.      lay_findRoku = app.CreateLayout( "linear", "VCenter,FillXY" ); //Create a button to send request.      btn = app.CreateButton( "Find Roku", 0.9, 0.1 );       btn.SetMargins( 0, 0, 0, 0 );       btn.SetOnTouch( btn_OnTouch );       lay_findRoku.AddChild( btn );   //Create a text label to show results.      txt = app.CreateText( "", 0.9, 0.8, "Left,Multiline" )     txt.SetBackColor( "#ff222222" );       txt.SetTextSize( 12 );      lay_findRoku.AddChild( txt );  // Create a button to cancel request     btnCancel = app.CreateButton( "Cancel", 0.9, 0.1);     btnCancel.SetMargins(0, 0, 0, 0);     btnCancel.SetOnTouch( loadRemote );     lay_findRoku.AddChild( btnCancel );       //Add layout to app.          app.AddLayout( lay_findRoku );  }     //Load roku remote function loadRemote() { app.RemoveLayout(lay_findRoku); OnStart() } //Handle button press.  function btn_OnTouch()   {   //find device   ipArray = ip.split (".");   ipBase = (ipArray[0] + "." + ipArray[1] + "." + ipArray[2] + ".");   ipBase += ipEnd;   ipBase += ":8060/"   txt.SetText( "Checking..." + ipBase);    //Send request to roku   url = "http://" + ipBase + "/query/apps";   SendRequest( url  );  }  //Send an http get request.  function SendRequest( url )  {      httpRequest = new XMLHttpRequest();         httpRequest.open("GET", url, true);      httpRequest.onreadystatechange = function() { HandleReply(httpRequest); };      httpRequest.send(null);    } //Handle the roku's reply function HandleReply( httpRequest )  {     if( httpRequest.readyState==4 )      {          //If we got a valid response.          if( httpRequest.status==200 )          {     resTxt = httpRequest.responseText; //split returned xml    split1 = resTxt.split('"');    split2 = resTxt.split('>'); //get length of array split1 split1Length = split1.length //get length of array split2 split2Length = split2.length //build array of id's    y = 0    idArray = ["0"] for(z=1; z 254)   {ipEnd = 1}   setTimeout("btn_OnTouch()", 250); } } //write file for ip address function writeFile() { app.WriteFile( "/sdcard/kidsroku/roku.pref", "http://" + ipBase );   app.Vibrate( "0,100,30,100,50,300" ); } }