package
{
/*
Realizzato da Nazareno Marcello Ciampa.
#######################################
NON CANCELLARE QUESTO COMMENTO ::::::::>
#######################################
sito:http://www.marcellociampa.it
*/


import flash.display.*;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.system.Security;

import flash.display.Graphics;
import flash.display.Shape;

import flash.display.Sprite;
import flash.utils.*;

import flash.net.URLLoader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;

public class lavagnacs3 extends MovieClip
{
public var timed:int=0;
var intervalId:uint;

var speed1:int=5;

public var grafite:Shape;

public var d:Boolean=false;

public var strumento1:MovieClip;
public var color1:uint=0xff0000;
public var size1:int=2;
public var alpha1:Number=1;

// Memoria tratto
public var arrX:Array=new Array();
public var arrY:Array=new Array();
public var arrAlpha:Array=new Array();
public var arrSize:Array=new Array();
public var arrColor:Array=new Array();
public var arrTime:Array=new Array();// getTime()

//public var TNow:uint=0;

//PACCCHETTI
public var pacchettiX:Array=new Array();
public var pacchettiY:Array=new Array();
public var pacchettiS:Array=new Array();
public var pacchettiC:Array=new Array();
public var pacchettiA:Array=new Array();

public var pack:int=0;
public var remoteP:int=0;
public var localP:int=0;


// parametri URL:
public var saveLoad:URLLoader= new URLLoader();
public var saveUrl:URLRequest;
public var leggiXML:XML=new XML();
public var leggiTrak:XMLList;
public var readLoad:URLLoader= new URLLoader();

public var urlL:String="http://www.nomedeltuosito.es/nome_cartella/php/load2.php";

public var readUrl:URLRequest=new URLRequest(urlL+randomVar().toString());

public var varsParams:String="";
public var arrParams:Array=new Array();
public var arrParamsName:Array=new Array();

public function lavagnacs3():void
{
init();
disegna();
//leggiDatiInit();

root.loaderInfo.addEventListener(Event.COMPLETE, flashVars);

}

public function flashVars(e:Event):void
{

var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.border = true;
addChild(tf);
tf.y=100;

tf.appendText("params:" + "\n");
try {
var keyStr:String;
var valueStr:String;
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
for (keyStr in paramObj) {
valueStr = String(paramObj[keyStr]);

arrParamsName.push(keyStr);
arrParams.push(valueStr);

varsParams+="&" + keyStr + "=" + valueStr;

tf.appendText("\t" + keyStr + ":\t" + valueStr + "\n");
}
} catch (error:Error) {
tf.appendText(error.toString());
}

tf.appendText(varsParams);
leggiDatiInit();
}

private function init():void
{
stage.frameRate=31;

strumento1=tratto_mc;

grafite=new Shape();

zero.addChild(grafite);
}

public function disegna():void
{
//strumento1.addEventListener(MouseEvent.MOUSE_DOWN,disegnaPlay);
tratto_mc.addEventListener(MouseEvent.MOUSE_DOWN,disegnaPlay);
colorPicker1.addEventListener(Event.CHANGE,changeColor);
numStep1.addEventListener(Event.CHANGE,changeSize);
numStepAlpha.addEventListener(Event.CHANGE,changeAlpha);
play1_mc.addEventListener(MouseEvent.MOUSE_DOWN,caricaDisegno);
play2_mc.addEventListener(MouseEvent.MOUSE_DOWN,setMyInterval);
cancella1_mc.addEventListener(MouseEvent.MOUSE_DOWN,cancella);
cancella2_mc.addEventListener(MouseEvent.MOUSE_DOWN,cancellaArrDis);
salvaDati_mc.addEventListener(MouseEvent.MOUSE_DOWN,salvaDati);
leggiDati_mc.addEventListener(MouseEvent.MOUSE_DOWN,leggiDati);

//cancellaArrDis
}

private function disegnaPlay(event:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_DOWN,press1);
stage.addEventListener(MouseEvent.MOUSE_UP,press0);

}
private function disegnaStop():void
{
stage.removeEventListener(MouseEvent.MOUSE_DOWN,press1);
stage.removeEventListener(MouseEvent.MOUSE_UP,press0);
}


private function press0(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,tratto);
arrX.push("x");
arrY.push("x");
arrAlpha.push("x");
arrSize.push("x");
arrColor.push("x");
//arrTime.push(getTime());// getTime()
}

private function press1(event:MouseEvent):void
{
grafite.graphics.lineStyle(size1,color1,alpha1);
grafite.graphics.moveTo(mouseX,mouseY);
stage.addEventListener(MouseEvent.MOUSE_MOVE,tratto);
}

private function tratto(event:MouseEvent):void
{
//event.target.graphics.moveTo(mouseX,mouseY);
grafite.graphics.lineTo(mouseX,mouseY);
memoTratto()
}

//colorPicker1
private function changeColor(event:Event):void
{
//color1=event.target.selectedColor;
color1=event.target.selectedColor;
}

//Slider1
// numStep1
private function changeSize(event:Event):void
{
//color1=event.target.selectedColor;
size1=event.target.value;
}

private function changeAlpha(event:Event):void
{
//color1=event.target.selectedColor;
alpha1=event.target.value;
}



// Memorizza tratto
private function memoTratto():void
{
arrX.push(mouseX);
arrY.push(mouseY);
arrAlpha.push(alpha1);
arrSize.push(size1);
arrColor.push(color1);
//arrTime.push(getTime())

/*
trace("X:");
trace(arrX.toString());
trace("Y:");
trace(arrY.toString());
trace("Alpha:");
trace(arrAlpha.toString());
trace("Size:");
trace(arrSize.toString());
trace("Color:");
trace(arrColor.toString());
*/
}



private function cancella(event:MouseEvent):void
{
grafite.graphics.clear();
//arrX =new Array();
//arrY =new Array();
//arrAlpha =new Array();
//arrSize =new Array();
//arrColor =new Array();
}

private function cancellaArrDis(event:MouseEvent):void
{
grafite.graphics.clear();
arrX =new Array();
arrY =new Array();
arrAlpha =new Array();
arrSize =new Array();
arrColor =new Array();
//arrTime=new Array();
}



private function setMyInterval(event:MouseEvent):void
{
grafite.graphics.clear();

//arrX.push("x");
//arrY.push("x");
//arrAlpha.push("x");
//arrSize.push("x");
//arrColor.push("x");
//arrTime.push(getTime())
intervalId = setInterval(playDisegno, speed1);
}

private function setMyIntervalInit():void
{
grafite.graphics.clear();

//arrX.push("x");
//arrY.push("x");
//arrAlpha.push("x");
//arrSize.push("x");
//arrColor.push("x");
//arrTime.push(getTime())
intervalId = setInterval(playDisegno, speed1);
}



private function caricaDisegno(event:MouseEvent):void
{


grafite.graphics.lineStyle(size1,color1,alpha1);


for(var i:int=0;i<arrX.length;i++)
{
if(arrX[i]=="x")
{
d=true;

}
else
{
if(d==true)
{
grafite.graphics.lineStyle(arrSize[i],arrColor[i],arrAlpha[i]);
grafite.graphics.moveTo(arrX[i],arrY[i]);
d=false;
}
else
{
//grafite.graphics.lineStyle(arrSize[i],arrColor[i],arrAlpha[i]);
grafite.graphics.lineTo(arrX[i],arrY[i]);
d=false;
}



}

}

}


private function playDisegno():void
{
//grafite.graphics.clear();

if(arrX[timed]=="x")
{
d=true;
timed+=1;
}
else
{
if(d==true)
{
grafite.graphics.lineStyle(arrSize[timed],arrColor[timed],arrAlpha[timed]);
grafite.graphics.moveTo(arrX[timed],arrY[timed]);
d=false;
}
else
{
//grafite.graphics.lineStyle(arrSize[timed],arrColor[timed],arrAlpha[timed]);
grafite.graphics.lineTo(arrX[timed],arrY[timed]);
d=false;
}

timed+=1;

}


//trace(timed);

if(timed>arrX.length)
{
clearInterval(intervalId);
/*
arrX.push("x");
arrY.push("x");
arrAlpha.push("x");
arrSize.push("x");
arrColor.push("x");
*/
//arrTime.push(getTime())
timed=0;
}
}

/* DATI DATI DATI DATI DATI DATI DATI DATI DATI DATI
metodi che gestiscono la lettura e l'invio dei dati.
*/// DATI DATI DATI DATI DATI DATI DATI DATI DATI DATI

private function salvaDati(event:MouseEvent):void
{


var variables:URLVariables = new URLVariables();
variables.xP=arrX.toString();
variables.yP=arrY.toString();
variables.cP=arrColor.toString();
variables.sP=arrSize.toString();
variables.aP=arrAlpha.toString();
saveUrl=new URLRequest("http://www.nomedeltuosito.es/nome_cartella/php/save.php"+randomVar().toString());
saveUrl.method=URLRequestMethod.POST;
saveUrl.data = variables;

//saveUrl.xP=

try {
saveLoad.load(saveUrl);
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}

//saveLoad.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
text1.text="Salvataggio in corso.. ";
saveLoad.addEventListener(Event.COMPLETE, traceCiao);


}

private function leggiDatiInit():void
{
readUrl=new URLRequest(urlL+randomVar()+varsParams+"&pack=1");


try {
readLoad.load(readUrl);
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}


readLoad.addEventListener(Event.COMPLETE, loaderCompleteHandler);
}

private function leggiDati(event:MouseEvent):void
{
readUrl=new URLRequest(urlL+randomVar()+varsParams+"&pack=1");


try {
readLoad.load(readUrl);
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}


readLoad.addEventListener(Event.COMPLETE, loaderCompleteHandler);
}

private function loaderCompleteHandler(event:Event):void {


leggiXML=new XML(readLoad.data);
leggiTrak=new XMLList(leggiXML);
remoteP=int(leggiXML.trak[0].p.valueOf());
localP=1;

arrX=new Array();
arrY=new Array();
arrAlpha=new Array();
arrSize=new Array();
arrColor=new Array();

for(var i=0;i<leggiXML.child("trak").length();i++)
{
arrX.push(leggiXML.trak[i].x.valueOf());
arrY.push(leggiXML.trak[i].y.valueOf());
arrAlpha.push(leggiXML.trak[i].a.valueOf());
arrSize.push(leggiXML.trak[i].s.valueOf());
arrColor.push(leggiXML.trak[i].c.valueOf());

//trace("for");
//trace(leggiXML.trak[i].x.valueOf());

}

pacchettiX[0]=arrX;
pacchettiY[0]=arrY;
pacchettiS[0]=arrSize;
pacchettiC[0]=arrColor;
pacchettiA[0]=arrAlpha;



trace("pacchetti remoti:");
trace(remoteP);
trace("pacchetti locali:");
trace(localP);

readPack();
}

private function readPack():void {

if(remoteP>localP)
{
leggiDatiPack();
}
else
{
datiOn(localP);

}

}

private function datiOn(n1):void {

n1-1;

arrX=new Array();
arrY=new Array();
arrAlpha=new Array();
arrSize=new Array();
arrColor=new Array();

for(var i=0;i<n1;i++)
{


for(var u=0;u<400;u++)
{
arrX.push(pacchettiX[i][u]);
arrY.push(pacchettiY[i][u]);
arrAlpha.push(pacchettiA[i][u]);
arrSize.push(pacchettiS[i][u]);
arrColor.push(pacchettiC[i][u]);
}

}

trace(pacchettiX[0][1]);
setMyIntervalInit();
}

private function leggiDatiPack():void
{

pack=localP+1;
readUrl=new URLRequest(urlL+randomVar()+varsParams+"&pack="+pack);


try {
readLoad.load(readUrl);
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}
readLoad.removeEventListener(Event.COMPLETE, loaderCompleteHandler);
readLoad.addEventListener(Event.COMPLETE, loaderCompletePack);
}

private function loaderCompletePack(event:Event):void {


leggiXML=new XML(readLoad.data);
leggiTrak=new XMLList(leggiXML);


arrX=new Array();
arrY=new Array();
arrAlpha=new Array();
arrSize=new Array();
arrColor=new Array();


for(var i=0;i<leggiXML.child("trak").length();i++)
{
arrX.push(leggiXML.trak[i].x.valueOf());
arrY.push(leggiXML.trak[i].y.valueOf());
arrAlpha.push(leggiXML.trak[i].a.valueOf());
arrSize.push(leggiXML.trak[i].s.valueOf());
arrColor.push(leggiXML.trak[i].c.valueOf());

//trace("for");
//trace(leggiXML.trak[i].x.valueOf());

}

pacchettiX[localP]=arrX;
pacchettiY[localP]=arrY;
pacchettiS[localP]=arrSize;
pacchettiC[localP]=arrColor;
pacchettiA[localP]=arrAlpha;

localP+=1;
trace("Pacchetti locali:");
trace(localP);

text1.text=localP+" di "+remoteP;

readPack();

grafite.graphics.clear();

}

/*

private function readNodes():void {

for(var i=0;i<leggiTrak.length;i++)
{
arrX=new Array();
arrY=new Array();
arrAlpha=new Array();
arrSize=new Array();
arrColor=new Array();

arrX.push(leggiXML.track[i].x.valueOf());
arrY.push(leggiXML.track[i].y.valueOf());
arrAlpha.push(leggiXML.track[i].s.valueOf());
arrSize.push(leggiXML.track[i].c.valueOf());
arrColor.push(leggiXML.track[i].a.valueOf());

//trace(arrX.toString());

}


}

*/
private function traceCiao(event:Event):void
{
text1.text="Salvataggio Completato.."+saveUrl.url;
text1.text=saveUrl.url;
text1.x-=200;
//trace("ciaooooo!");

}

private function randomVar():String
{
var num1=Math.floor(10000000*Math.random());
var num2:String="?b=0"+varsParams+"&caso="+num1;
return num2;

}

}
}