var objects= ["lay\n[fa-file]+","btn\n[fa-dot-circle-o]+","tgl\n[fa-toggle-on]","img\n[fa-image]+","snd\n[fa-music]+","lst\n[fa-list]+","cam\n[fa-camera]+"];
var objNum=[0,0,0,0,0,0]
var start=false;
var del= false;
var orient= "Portrait"; //app.GetOrientation();
var code= ""; var body= "";
var order= []; //obj+objName in order
var pos,x,y, meW, meH;
var objVal= [,,,] //posX,posY (,width,height

function OnStart()
{
//	app.SetDebugEnabled( false );
	app.SetOrientation( orient );
	OnConfig();
}

function OnConfig()
{
if (start)
{
app.DestroyLayout( lay );
app.DestroyLayout( moveImg );
app.DestroyLayout( layEdt );
}
start= true;

switch( app.GetOrientation() )
{
case "Portrait" :
	bck= app.CreateLayout( "absolute", "HCenter" )
		bck.AddChild( bcki= app.CreateImage( "/Sys/Img/BlueBack.png", 1,1 ) );
		bck.AddChild( txt= app.CreateTextEdit( "" ) );
		txt.SetTextSize( 10 );
		txt.SetTextColor( "white" );
		txt.SetPosition( 0.1,0,0.8,1)
	app.AddLayout( bck );
	
	 lay = app.CreateLayout( "absolute" ) 
		lay.AddChild( moveImg= app.CreateImage( null, 1, 1) );
		moveImg.SetPaintColor( "white" );
		moveImg.SetPaintStyle( "line" );
		moveImg.SetAutoUpdate( false );

		lay.AddChild( layEdt= app.CreateLayout( "absolute" ) );

		lay.AddChild( list= app.CreateList( objects , 0.16, 0.6, "FontAwesome") );
		list.SetPosition( 0.86, 0.2 );
		list.SetTextMargins( -0.02 );
		list.SetOnTouch( addObj );
		
		lay.AddChild( btnCopy= app.CreateButton( "Copy" ) );
		btnCopy.SetPosition( 0.8, 0);
		btnCopy.SetOnTouch( copy );
		
		trash= app.CreateButton( "",0.2, 0.1,"fontawesome" );
		trash.SetPosition( 0.8,0.9 );
		trash_off();
		lay.AddChild( trash );

	app.AddLayout( lay );
break;

case "Landscape" :
break;
}
}

function move(ev)
{
//action.SetText( ev.action );

    meW = this.GetWidth();
    meH = this.GetHeight();
    pos=this.GetPosition();

    x = pos.left- this.X * meW + ev.X * meW;
    y = pos.top - this.Y * meH + ev.Y * meH;
    x = Math.max(0,Math.min(x,1-meW)); 
    y = Math.max(0,Math.min(y,1-meH));
    
    if(ev.action==="Down")
    {
         this.X = ev.X;
         this.Y = ev.Y;
         objVal= [pos.left, pos.top, pos.width, pos.height]
         intv= setInterval( drag )
         app.ShowPopup( objVal );
    }
        
    if ((x+this.X>0.8) && (y+this.Y>0.9)) trash_on()
    else trash_off()
    
  	if (ev.action === "Up")
  	{
		this.SetPosition(x,y)
  	if (del)  chCode(this);
  	clearInterval( drag )
  	moveImg.Update();
//  	chCode1( this );
  	}
}

function drag()
{
    moveImg.DrawRectangle( x,y, x+meW, y+meH );
    moveImg.Update();
    moveImg.Clear();
}

function trash_on()
{
trash.SetBackColor( "#a0ff0000" );
trash.SetText( "[fa-trash-o]" );
del=true;
}

function trash_off()
{
trash.SetBackColor( "#a0000000" );
trash.SetText( "[fa-trash]" );
del=false;
}

function copy()
{
	app.SetClipboardText( txt.GetText() );
	app.ShowPopup( "code copied to clipboard!" );
}

function addObj( item )
{
	switch( item.slice(0,3) )
	{
	case "lay" :
	objNum[0]++;
	layN= app.CreateImage(null, 0.5, 0.5)
	order.push( layN );
	layN.SetBackColor( "#754AF514" );
	layN.SetPosition( 0,0,0.5,0.5 );
	layN.SetOnTouch( move );
	layEdt.AddChild( layN );
	pos= layN.GetPosition( );
	objVal= [pos.left, pos.top, pos.width, pos.height]
	name= "lay"+objNum[0];
	alert(objVal)
	code+= "	"+name+"= app.CreateLayout( \"Linear\", \"FillXY\" );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n"
	break;
	
	case "btn" :
	objNum[1]++;
	btnN= app.CreateImage( null, 0.18, 0.08 );
	order.push( btnN );
	btnN.SetPosition( 0.1,0.1 );
	btnN.SetBackColor( "#70000000" );
	btnN.SetTextSize( 20 );
	btnN.DrawText( "Button" ,0.02,0.6);
	btnN.SetOnTouch( move );
	layEdt.AddChild( btnN );
	pos= btnN.GetPosition( );
	objVal= [pos.left, pos.top, pos.width, pos.height]
	name= "btn"+objNum[1];
	code+= "	"+name+"= app.CreateButton( \""+name+"\");\n		"+name+".SetPosition( "+objVal+" );\n		"+name+".SetOnTouch( "+name+"_OnTouch );\n	lay.AddChild( "+name+" );\n\n";
	body+= "\nfunction "+name+"_OnTouch()\n{\n\n}\n"
	break;
	
	case "tgl" :
	objNum[2]++;
	tglN= app.CreateImage( null, 0.18, 0.08 );
	order.push( tglN );
	tglN.SetPosition( 0.1,0.1, 0.18, 0.08 );
	tglN.SetBackColor( "#70000000" );
	tglN.SetTextSize( 20 );
	tglN.DrawText( "Toggle" ,0.02,0.6);
	tglN.SetOnTouch( move );
	layEdt.AddChild( tglN );
	pos= tglN.GetPosition( );
	objVal= [pos.left, pos.top, pos.width, pos.height]
	name= "tgl"+objNum[2];
	code+= "	"+name+"= app.CreateToggle( \""+name+"\" );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n";
	break;
	
	case "snd" :
	objNum[3]++;
	sndN= app.CreateImage(null , 0.2, 0.1 );
	order.push( sndN );
	sndN.SetTextSize( 20 );
	sndN.DrawText( "snd" );
	sndN.SetBackColor( "#550000ff" );
	sndN.SetOnTouch( move );
	layEdt.AddChild( sndN );
	pos= layEdt.GetPosition( );
	objVal= [pos.left, pos.top, pos.width, pos.height]
	name= "snd"+objNum[3];
	code+= "	"+name+"= app.CreateMediaPlayer();\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n"
	break;
	
	case "img" :
	objNum[4]++;
	imgN= app.CreateImage( null, 0.4, 0.4 );
	order.push( imgN );
	imgN.SetPosition( 0.1,0,0.4,0.4 );
	imgN.SetTextSize( 20 );
	imgN.DrawText( "Image", 0.3, 0.49 );
	imgN.SetBackColor( "#A0FF0000" );
	imgN.SetOnTouch( move );
	layEdt.AddChild( imgN );
	pos= layEdt.GetPosition( );
	objVal= [pos.left, pos.top, pos.width, pos.height]
	name= "img"+objNum[3];
	code+= "	"+name+"= app.CreateImage( null, 0.5, 0.5 );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n"
	break;
	
	case "cam" :
	objNum[6]++;
	if (objNum[5]>1) alert( "You cant have more than one CameraView on your layout!" )
	else
	{
	camN= app.CreateImage( null, 0.4, 0.4 );
	order.push( camN );
	camN.SetPosition( 0.1,0,0.4,0.4 );
	camN.SetTextSize( 20 );
	camN.DrawText( "Camera", 0.23, 0.49 );
	camN.SetBackColor( "blue" );
	camN.SetOnTouch( move );
	layEdt.AddChild( camN );
	pos= camN.GetPosition( );
	objVal= [pos.left, pos.top, pos.width, pos.height]
	name= "cam"+objNum[5];
	code+= "	"+name+"= app.CreateCameraView();\n		"+name+".SetPosition( "+objVal+" );\n		"+name+".SetOnReady( "+name+"_OnReady );\n	lay.AddChild( "+name+" );\n\n"
	body+= "\nfunction "+name+"_OnReady()\n{\n	"+name+".StartPreview();\n}\n"
	}
	break;
	
	default : app.ShowPopup( "Not available yet!" );
	}
	order.push( name );
	txt.SetText("\nfunction OnStart()\n{\nlay= app.CreateLayout( \"absolute\" );\n\n"+code+"app.AddLayout( lay );\n}\n"+body)
}

function chCode(obj)
{
app.ShowPopup( objVal );
  name= order[order.indexOf( obj )+1]
  switch( name.slice( 0, 3 ) )
  {    
  case "lay" :
	code.replace( "	"+name+"= app.CreateLayout( \"Linear\", \"FillXY\" );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n", "" );
	break;
	
	case "btn" :
	code= code.replace( "	"+name+"= app.CreateButton( \""+name+"\");\n		"+name+".SetPosition( "+objVal+" );\n		"+name+".SetOnTouch( "+name+"_OnTouch );\n	lay.AddChild( "+name+" );\n\n", "" );
	body= body.replace( "\nfunction "+name+"_OnTouch()\n{\n\n}\n", "" );
	break;
	
	case "tgl" :
	code=code.replace( "	"+name+"= app.CreateToggle( \""+name+"\" );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n", "" );
	break;
	
	case "img" :
	code= code.replace( "	"+name+"= app.CreateImage( null, 0.5, 0.5 );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n", "" );
	break;
	
	case "cam" :
	code= code.replace( "	"+name+"= app.CreateCameraView();\n		"+name+".SetPosition( "+objVal+" );\n		"+name+".SetOnReady( "+name+"_OnReady );\n	lay.AddChild( "+name+" );\n\n", "" );
	body= body.replace( "\nfunction "+name+"_OnReady()\n{\n	"+name+".StartPreview();\n}\n", "" );
	objNum[5]--;
	break;
	}
	
	txt.SetText("\nfunction OnStart()\n{\nlay= app.CreateLayout( \"absolute\" );\n\n"+code+"app.AddLayout( lay );\n}\n"+body)
  layEdt.RemoveChild( obj );
	trash_off()
}

function chCode1(obj)
{
	name= order[order.indexOf( obj )+1]
  switch( name.slice( 0, 3 ) )
  {    
  case "lay" :
	code.replace( name+".SetPosition( "+objVal+" );", "" );
	break;
	
	case "btn" :
	code= code.replace( "	"+name+"= app.CreateButton( \""+name+"\");\n		"+name+".SetPosition( "+objVal+" );\n		"+name+".SetOnTouch( "+name+"_OnTouch );\n	lay.AddChild( "+name+" );\n\n", "" );
	body= body.replace( "\nfunction "+name+"_OnTouch()\n{\n\n}\n", "" );
	break;
	
	case "tgl" :
	code=code.replace( "	"+name+"= app.CreateToggle( \""+name+"\" );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n", "" );
	break;
	
	case "img" :
	code= code.replace( "	"+name+"= app.CreateImage( null, 0.5, 0.5 );\n		"+name+".SetPosition( "+objVal+" );\n	lay.AddChild( "+name+" );\n\n", "" );
	break;
	
	case "cam" :
	code= code.replace( "	"+name+"= app.CreateCameraView();\n		"+name+".SetPosition( "+objVal+" );\n		"+name+".SetOnReady( "+name+"_OnReady );\n	lay.AddChild( "+name+" );\n\n", "" );
	body= body.replace( "\nfunction "+name+"_OnReady()\n{\n	"+name+".StartPreview();\n}\n", "" );
	break;
	}
	
	txt.SetText("\nfunction OnStart()\n{\nlay= app.CreateLayout( \"absolute\" );\n\n"+code+"app.AddLayout( lay );\n}\n"+body)
  layEdt.RemoveChild( obj );
	trash_off()

}