codice:
function calc(x,y) {					//positioning pages and shadows by x,y reference points --------------------------------------------------
	if(hflip) {	//hardflip...
		var xp = (sx<0)? -x: x;
		if(xp>0) {
			sp2._visible = false;
			sp3._visible = true;
			scalc(sp3,x);
		} else {
			sp3._visible = false;
			sp2._visible = true;
			scalc(sp2,x);
		}
		pages.flip.setMask(null);
		pages.flip._visible = true;
		pages.flip.fgrad._visible = false;
		pages.flip.p2._visible = pages.flip.p3._visible = false;
		return;
	} else pages.flip.fgrad._visible = true;
	
	//normal flipping process---------------------------------------------------------------------
	var rr0 = Math.sqrt((y+ph/2)*(y+ph/2)+x*x);
	var rr1 = Math.sqrt((ph/2-y)*(ph/2-y)+x*x);
	if((rr0>r0 || rr1>r1) && !tear) {	// we can tear off pages now:)
							// so reference points must be recalculated!
		if(y<sy) {	// k1-gyel kell osszehasonlitani!
			var a = Math.asin((ph/2-y)/rr1);
			y = (ph/2-Math.sin(a)*r1);
			x = (x<0)? -Math.cos(a)*r1: Math.cos(a)*r1;
			if(y>sy) {
				if((sx*x)>0) y = sy, x = sx;
				else y = sy, x = -sx;
			}
			if((rr1-r1)>tlimit && ctear) {
				teard = -5;
				tear = true;
				tox = ox = x;
				toy = oy = y;
			}
		} else {	// k0-val kell osszehasonlitani!
			var a = Math.asin((y+ph/2)/rr0);
			y = Math.sin(a)*r0-ph/2;
			x = (x<0)? -Math.cos(a)*r0: Math.cos(a)*r0;
			if(y<sy) {
				if((sx*x)>0) y = sy, x = sx;
				else y = sy, x = -sx;
			}
			if((rr0-r0)>tlimit && ctear) {
				teard = 5;
				tear = true;
				tox = ox = x;
				toy = oy = y;
			}
		}
	}
	if((sx<0 && (x-sx)<10) || (sx>0 && (sx-x)<10)) {
		if(sx<0) x = -pw+10;
		if(sx>0) x = pw-10;
	} 
	//calculating flipping process
	pages.flip._visible = true;
	pages.flip.p3shadow._visible = pages.pgrad._visible = !tear;
	pages.flip.p2._visible = pages.flip.p3._visible = true;
	//equation of the line
	var vx = x-sx;
	var vy = y-sy;
	var a1 = vy/vx;
	var a2 = -vy/vx;
	
	cx = sx+(vx/2);
	cy = sy+(vy/2);
	//trigonometriai szamitasok
	//calculating rotation of the page, and the masks
	var r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
	var a = Math.asin((sy-y)/r);
	if(sx<0) a = -a;	
	ad = a/AM; 	//in degree
	pageN._rotation = ad*2;
	r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
	rl = (pw*2);
	if(sx>0) { 				//flip forward
		pages.mask._xscale = 100;
		nx = cx-Math.tan(a)*(ph/2-cy);
		ny = ph/2;
		if(nx>pw) {
			nx = pw;
			ny = cy+Math.tan(Math.PI/2+a)*(pw-cx);
		}
		pageN.pf._x = -(pw-nx);
		pages.flip.fgrad._xscale = (r/rl/2)*pw;
		pages.pgrad._xscale = -(r/rl/2)*pw;
		pages.flip.p3shadow._xscale = (r/rl/2)*pw;
	} else { 				//flip backward
		pages.mask._xscale = -100;
		nx = cx-Math.tan(a)*(ph/2-cy);
		ny = ph/2;
		if(nx<-pw) {
			nx = -pw;
			ny = cy+Math.tan(Math.PI/2+a)*(-pw-cx);
		}
		pageN.pf._x = -(pw-(pw+nx));
		pages.flip.fgrad._xscale = -(r/rl/2)*pw;
		pages.pgrad._xscale = (r/rl/2)*pw;
		pages.flip.p3shadow._xscale = -(r/rl/2)*pw;
	}
	pages.mask._x = cx;
	pages.mask._y = cy;
	pages.mask._rotation = ad;
	pageN.pf._y = -ny;
	pageN._x = nx+offs;
	pageN._y = ny;
	pages.flip.fgrad._x = cx;
	pages.flip.fgrad._y = cy;
	pages.flip.fgrad._rotation = ad;
	pages.flip.fgrad._alpha = (r>(rl-50))? 100-(r-(rl-50))*2: 100;
	pages.flip.p3shadow._x = cx;
	pages.flip.p3shadow._y = cy;
	pages.flip.p3shadow._rotation = ad;
	pages.flip.p3shadow._alpha = (r>(rl-50))? 100-(r-(rl-50))*2: 100;
	pages.pgrad._x = cx;
	pages.pgrad._y = cy;
	pages.pgrad._rotation = ad+180;
	pages.pgrad._alpha = (r>(rl-100))? 100-(r-(rl-100)): 100;
	pages.flip.fmask.page._x = pageN._x;
	pages.flip.fmask.page._y = pageN._y;
	pages.flip.fmask.page.pf._x = pageN.pf._x;
	pages.flip.fmask.page.pf._y = pageN.pf._y;
	pages.flip.fmask.page._rotation = pageN._rotation;
}

function scalc(obj,x) {	//hardflip calc
	if(x<-pw) x=-pw;
	if(x>pw) x=pw;
	var a = Math.asin( x/pw );
	var rot = a/AM/2;
	var xs = 100;
	var ss = 100*Math.sin( rotz*AM );
	x = x/2;
	var y = Math.cos(a)*(pw/2)*(ss/100);
	placeImg(obj, rot, ss, x, y)
	pages.pgrad._visible = pages.flip._visible = true;
	pages.pgrad._xscale = x;
	pages.pgrad._alpha = pages.flip.p3shadow._alpha = 100;
	pages.flip.p3shadow._xscale = -x;
	pages.flip.p3shadow._x = 0;
	pages.flip.p3shadow._y = 0;
	pages.flip.p3shadow._rotation = 0;
	pages.pgrad._x = 0;
	pages.pgrad._y = 0;
	pages.pgrad._rotation = 0;
}

function placeImg(j, rot, ss, x, y) {
	var m = Math.tan( rot*AM );
	var f = Math.SQRT2/Math.sqrt(m*m+1);
	var phxs = 100*m;
	var phRot = -rot;;
	var xs = 100*f;
	var ys = 100*f;
	j.ph.pic._rotation = 45;
	j.ph.pic._xscale = (phxs<0)? - xs: xs;
	j.ph.pic._yscale = ys*(100/ss);
	j.ph._rotation = phRot;
	j.ph._xscale = phxs;
	j._yscale = ss;
	j._x = x;
	j._y = y;
	j._visible = true;
}

function setPages(p1,p2,p3,p4) {	//attach the right page "image" at the right place:)
	p0 = p1-2;						//pages for transparency...
	p5 = p4+2;
	if(p0<0) p0=0;
	if(p5>maxpage) p5=0;
	
	if(p1<0) p1=0;	//visible pages
	if(p2<0) p2=0;
	if(p3<0) p3=0;
	if(p4<0) p4=0;
	trace("setpages ->"+p1+","+p2+","+p3+","+p4);
	pleft = pages.p1.page.pf.ph.attachMovie(pageOrder[p1],"pic",0);
	pages.p1.page.pf.ph._y = -ph/2;
	pleftb = pages.p0.page.pf.ph.attachMovie(pageOrder[p0],"pic",0);
	pages.p0.page.pf.ph._y = -ph/2;
	if(hflip) {	//hardflip pages are specials!!! 
		var tm = pages.flip.hfliph.attachMovie("sph","sp2",0);
		sp2 = tm.ph.pic.attachMovie(pageOrder[p2],"pic",0);
		sp2._y = -ph/2, sp2._x = -pw/2;
		sp2 = eval("pages.flip.hfliph.sp2");
		var tm = pages.flip.hfliph.attachMovie("sph","sp3",1);
		sp3 = tm.ph.pic.attachMovie(pageOrder[p3],"pic",0);
		sp3._y = -ph/2, sp3._x = -pw/2;
		sp3 = eval("pages.flip.hfliph.sp3");
	} else {
		pages.flip.hfliph.sp2.removeMovieClip();
		pages.flip.hfliph.sp3.removeMovieClip();
		sp2 = pages.flip.p2.page.pf.ph.attachMovie(pageOrder[p2],"pic",0);
		pages.flip.p2.page.pf.ph._y = -ph/2;
		sp3 = pages.flip.p3.page.pf.ph.attachMovie(pageOrder[p3],"pic",0);
		pages.flip.p3.page.pf.ph._y = -ph/2;
	}
	pright = pages.p4.page.pf.ph.attachMovie(pageOrder[p4],"pic",0);
	pages.p4.page.pf.ph._y = -ph/2;
	prightb = pages.p5.page.pf.ph.attachMovie(pageOrder[p5],"pic",0);
	pages.p5.page.pf.ph._y = -ph/2;
}

function resetPages() {
	setPages(page,0,0,page+1);
}
	
function autoflip() {								//start auto flip!
	if(!aflip && !flip && !flipoff && canflip) {	//only when all conditions fits our needs...
		acnt = 0
		aamp = Math.random()*(ph/2)-(ph/4);
		var x= gflip? (gdir*pw)/2: ((pages._xmouse<0)? -pw/2: pw/2);
		var y= Math.random()*ph-(ph/2);				//random starty
		var pmh = ph/2;
		var r = Math.sqrt(x*x+y*y);
		var a = Math.asin(y/r);
		var yy = Math.tan(a)*pw;
		if(y>0 && y>ph/2) y = ph/2;
		if(y<0 && y<-ph/2) y = - ph/2;
		oy = sy = yy;
		ax = (pages._xmouse<0)? -pw/2: pw/2;
		var l = ((ph/2)-y);
		ay = y;+(Math.random()*2*l)-l;				//page turnig style randomizing
		offs = -pw;
		var hit = 0;
		if(x<0 && page>0) {
			pages.flip.p3._x = 0;
			hflip = checkCover(page,-1);
			if(!(preflip && hflip)) setPages(page-2,page-1,page,page+1);
			hit = -1;
		}
		if(x>0 && page<maxpage) {
			pages.flip.p3._x = pw;
			hflip = checkCover(page,1);
			if(!(preflip && hflip)) setPages(page,page+2,page+1,page+3);
			hit = 1;
		}
		if(hflip && preflip) {
			hit = 0;
			preflip = false;
			return false;
		}
		if(hit) {
			anim._visible = false;
			flip = true;
			flipOff = false;
			ox = sx = hit*pw;
			pages.flip.setMask(pages.mask);
			aadd = hit*(pw/(gflip? 5:10 ));			//autoflip takes 10 frames to be done!!!
			aflip = true;
			pages.flip.fmask._x = pw;
			if(preflip) {
				oy = sy = (pages._ymouse<0)? -(ph/2): (ph/2);
			}
			r0 = Math.sqrt((sy+ph/2)*(sy+ph/2)+pw*pw);
			r1 = Math.sqrt((ph/2-sy)*(ph/2-sy)+pw*pw);
			pageN = eval("pages.flip.p2.page");
			pageO = eval("pages.flip.p3");
			oef();
			return true;
		}
	} else return false;
}

function getm() {	//get x,y reference points depending of turning style: manual/auto
	if(aflip && !preflip) {
		x = ax;
		y = ay;
	} else {
		x = pages._xmouse;
		y = pages._ymouse;
	}
}

function gotoPage(i) {	//quickjump to the page number i
	i = getPN(i);
	if(i<0) return false;
	var p = int(page/2);
	var d = int(i/2);
	if(p!=d && canflip && !gflip) {		//target!=current page
		if(p<d) {						//go forward
			gdir = 1;
			gpage = d-p-1;
		} else {						//go backward
			gdir = -1
			gpage = p-d-1;
		}
		gflip = true;
		autoflip();
	}
}
function getPN(i) {	//get the right page number
	var find = false;
	for(j=1;j<=maxpage;j++) {
		if(i==pageNumber[j]) {
			i=j;
			find = true;
			break;
		}
	}
	if(find) return i;
	else return -1;
}
function removePage(i) {
	trace("remove page "+i);
	i = (Math.floor((i-1)/2)*2)+1;
	removedPages.push(pageNumber[i], pageNumber[i+1]);
	
	for(j=(i+2);j<=(maxPage+1);j++) {
		pageOrder[j-2]=pageOrder[j];
		pageCanTear[j-2]=pageCanTear[j];
		pageNumber[j-2]=pageNumber[j];
	}
	trace("removed pages "+i+","+(i+1));
	trace(removedPages.join(", "));
	maxPage -= 2;
}
onEnterFrame = function() {
	trace(getBytesLoaded());
	if(getBytesLoaded()==getBytesTotal()) {
		gotoAndPlay(2);
		delete onEnterFrame;
	}
}

//------------------------------------------------------------------------------------------------ PUT YOUR CODE HERE --------------


/*		you can use these functions:

		gotoPage( destinationPageNo );		//quick jump to the page number: destinationPageNo; values = 0-maxpages;
		autoflip();							//start autoflip (direction is calculated from _xmouse)

		canflip		//it's a variable. setting its value to false disables flipping

		other functions of page turning is automatic;
*/