blocks = new Array();
paths = new Array();
line_paths = new Array();

function init(init_x, init_y) {
	init_x = init_x || 450;
	init_y = init_y || 450;
	
	root_layer = new DynLayer();
	root_layer.setID('root_layer', true);
	root_layer.setPosition('absolute');
	
	subroot_layer = new DynLayer();
	subroot_layer.setID('subroot_layer', true);
	subroot_layer.setPosition('relative');
	subroot_layer.setClass('subroot');
	
	root_layer.addChild(subroot_layer);
	dynapi.document.addChild(root_layer);

	blocks[0]  = new ImageClip({clipImage:"/images/background/a.png", x:init_x, y:init_y+2, w:30, h:30, cols:1, rows:1});
	blocks[1]  = new ImageClip({clipImage:"/images/background/p.png", x:blocks[0].x+blocks[0].w+2, y:blocks[0].y, w:33, h:47, cols:1, rows:1});
	blocks[2]  = new ImageClip({clipImage:"/images/background/h.png", x:blocks[1].x+blocks[1].w+6, y:blocks[0].y-20, w:36, h:49, cols:1, rows:1});
	blocks[3]  = new ImageClip({clipImage:"/images/background/a.png", x:blocks[2].x+blocks[2].w+4, y:blocks[0].y-1, w:30, h:30, cols:1, rows:1});
	blocks[4]  = new ImageClip({clipImage:"/images/background/s.png", x:blocks[3].x+blocks[3].w+4, y:blocks[0].y-1, w:20, h:30, cols:1, rows:1});
	blocks[5]  = new ImageClip({clipImage:"/images/background/i.png", x:blocks[4].x+blocks[4].w+4, y:blocks[0].y-16, w:17, h:45, cols:1, rows:1});
	blocks[6]  = new ImageClip({clipImage:"/images/background/a.png", 	  x:blocks[5].x+blocks[5].w+4, y:blocks[0].y-1, w:30, h:30, cols:1, rows:1});
	blocks[7]  = new ImageClip({clipImage:"/images/background/colon.png",     x:blocks[6].x+blocks[6].w+7,   y:blocks[0].y+4, w:6, h:23, cols:1, rows:1});
	blocks[8]  = new ImageClip({clipImage:"/images/background/o_braket.png",  x:blocks[7].x+blocks[7].w+14,   y:blocks[0].y-13, w:11, h:57, cols:1, rows:1});
	blocks[9]  = new ImageClip({clipImage:"/images/background/pro_a.png",     x:blocks[8].x+blocks[8].w+5,     y:blocks[0].y+3, w:23, h:26, cols:1, rows:1});
	blocks[10] = new ImageClip({clipImage:"/images/background/pro_dash.png",  x:blocks[9].x+blocks[9].w+6,   y:blocks[0].y+11, w:20, h:4, cols:1, rows:1});
	blocks[11] = new ImageClip({clipImage:"/images/background/pro_f.png", 	  x:blocks[10].x+blocks[10].w+3, y:blocks[0].y-16, w:20, h:44, cols:1, rows:1});
	blocks[12] = new ImageClip({clipImage:"/images/background/pro_a_bar.png", x:blocks[11].x+blocks[11].w+3, y:blocks[0].y-8, w:27, h:37, cols:1, rows:1});
	blocks[13] = new ImageClip({clipImage:"/images/background/pro_apos.png",  x:blocks[12].x+blocks[12].w-2, y:blocks[0].y-15, w:4, h:17, cols:1, rows:1});
	blocks[14] = new ImageClip({clipImage:"/images/background/pro_z.png", 	  x:blocks[13].x+blocks[13].w+2, y:blocks[0].y+4, w:24, h:25, cols:1, rows:1});
	blocks[15] = new ImageClip({clipImage:"/images/background/pro_h.png",     x:blocks[14].x+blocks[14].w+2,   y:blocks[0].y-15, w:32, h:44, cols:1, rows:1});
	blocks[16] = new ImageClip({clipImage:"/images/background/pro_a.png",     x:blocks[15].x+blocks[15].w+3,   y:blocks[0].y+3, w:23, h:26, cols:1, rows:1});
	blocks[17] = new ImageClip({clipImage:"/images/background/c_braket.png",  x:blocks[16].x+blocks[16].w+4,   y:blocks[0].y-13, w:11, h:57, cols:1, rows:1});
	
	blocks[18] = new ImageClip({clipImage:"/images/background/noun.png",  x:blocks[0].x+1,  y:blocks[0].y+70, w:31, h:25, cols:1, rows:1});
	blocks[19] = new ImageClip({clipImage:"/images/background/period.png", x:blocks[18].x+blocks[18].w+4, y:blocks[18].y+20, w:6, h:6, cols:1, rows:1});
	blocks[20] = new ImageClip({clipImage:"/images/background/comma.png",  x:blocks[19].x+blocks[19].w+8, y:blocks[18].y+20, w:9, h:17, cols:1, rows:1});
	blocks[21] = new ImageClip({clipImage:"/images/background/shi_l.png",  x:blocks[20].x+blocks[20].w+26, y:blocks[18].y-7, w:15, h:34, cols:1, rows:1});
	blocks[22] = new ImageClip({clipImage:"/images/background/shi_r.png",  x:blocks[21].x+blocks[21].w,   y:blocks[21].y, w:19, h:34, cols:1, rows:1});
	blocks[23] = new ImageClip({clipImage:"/images/background/yu_l.png",   x:blocks[22].x+blocks[22].w+2, y:blocks[21].y, w:17, h:34, cols:1, rows:1});
	blocks[24] = new ImageClip({clipImage:"/images/background/yu_r.png",   x:blocks[23].x+blocks[23].w, y:blocks[23].y, w:18, h:34, cols:1, rows:1});
	blocks[25] = new ImageClip({clipImage:"/images/background/jeng_l.png", x:blocks[24].x+blocks[24].w+1, y:blocks[23].y, w:25, h:34, cols:1, rows:1});
	blocks[26] = new ImageClip({clipImage:"/images/background/jeng_r.png", x:blocks[25].x+blocks[25].w, y:blocks[23].y+3, w:10, h:29, cols:1, rows:1});
	blocks[27] = new ImageClip({clipImage:"/images/background/comma_s.png", x:blocks[26].x+blocks[26].w+1, y:blocks[18].y+20, w:6, h:10, cols:1, rows:1});
	blocks[28] = new ImageClip({clipImage:"/images/background/now_l.png",  x:blocks[27].x+blocks[27].w+11, y:blocks[23].y, w:13, h:34, cols:1, rows:1});
	blocks[29] = new ImageClip({clipImage:"/images/background/now_r.png",  x:blocks[28].x+blocks[28].w, y:blocks[23].y, w:21, h:34, cols:1, rows:1});
	blocks[30] = new ImageClip({clipImage:"/images/background/bu_l.png",   x:blocks[29].x+blocks[29].w+1, y:blocks[23].y, w:23, h:34, cols:1, rows:1});
	blocks[31] = new ImageClip({clipImage:"/images/background/bu_r.png",   x:blocks[30].x+blocks[30].w, y:blocks[23].y, w:12, h:33, cols:1, rows:1});
	blocks[32] = new ImageClip({clipImage:"/images/background/sho_l.png",  x:blocks[31].x+blocks[31].w+1, y:blocks[23].y+1, w:20, h:33, cols:1, rows:1});		
	blocks[33] = new ImageClip({clipImage:"/images/background/sho_r.png",  x:blocks[32].x+blocks[32].w, y:blocks[32].y-2, w:15, h:34, cols:1, rows:1});
	blocks[34] = new ImageClip({clipImage:"/images/background/shan_u.png", x:blocks[33].x+blocks[32].w-2, y:blocks[32].y-2, w:32, h:15, cols:1, rows:1});
	blocks[35] = new ImageClip({clipImage:"/images/background/shan_b.png", x:blocks[34].x-2, y:blocks[34].y+blocks[34].h, w:35, h:20, cols:1, rows:1});
	blocks[36] = new ImageClip({clipImage:"/images/background/gi_l.png",   x:blocks[35].x+blocks[35].w+2, y:blocks[23].y, w:16, h:33, cols:1, rows:1});
	blocks[37] = new ImageClip({clipImage:"/images/background/gi_r.png",   x:blocks[36].x+blocks[36].w,   y:blocks[23].y, w:18, h:33, cols:1, rows:1});
	blocks[38] = new ImageClip({clipImage:"/images/background/ho_u.png",   x:blocks[37].x+blocks[37].w, y:blocks[37].y, w:34, h:18, cols:1, rows:1});
	blocks[39] = new ImageClip({clipImage:"/images/background/ho_b.png",   x:blocks[38].x, y:blocks[38].y+blocks[38].h-1, w:35, h:16, cols:1, rows:1});
	blocks[40] = new ImageClip({clipImage:"/images/background/comma_s.png", x:blocks[39].x+blocks[39].w+1, y:blocks[18].y+20, w:6, h:10, cols:1, rows:1});
	
	blocks[41] = new ImageClip({clipImage:"/images/background/o_quotation.png", x:blocks[0].x+7, y:blocks[18].y+45, w:12, h:25, cols:1, rows:1});
	blocks[42] = new ImageClip({clipImage:"/images/background/mei_l.png",  x:blocks[41].x+blocks[41].w+2, y:blocks[41].y, w:19, h:35, cols:1, rows:1});
	blocks[43] = new ImageClip({clipImage:"/images/background/mei_r.png",  x:blocks[42].x+blocks[42].w,   y:blocks[41].y, w:16, h:34, cols:1, rows:1});
	blocks[44] = new ImageClip({clipImage:"/images/background/yo_u.png",   x:blocks[43].x+blocks[43].w+1, y:blocks[41].y, w:34, h:27, cols:1, rows:1});
	blocks[45] = new ImageClip({clipImage:"/images/background/yo_b.png",   x:blocks[44].x+8, y:blocks[44].y+blocks[44].h, w:20, h:8, cols:1, rows:1});
	blocks[46] = new ImageClip({clipImage:"/images/background/yu_l.png",   x:blocks[45].x+blocks[22].w+9, y:blocks[41].y, w:17, h:34, cols:1, rows:1});
	blocks[47] = new ImageClip({clipImage:"/images/background/yu_r.png",   x:blocks[46].x+blocks[23].w, y:blocks[41].y, w:18, h:34, cols:1, rows:1});
	blocks[48] = new ImageClip({clipImage:"/images/background/yen_l.png",  x:blocks[47].x+blocks[47].w+1, y:blocks[41].y+3, w:21, h:32, cols:1, rows:1});
	blocks[49] = new ImageClip({clipImage:"/images/background/yen_r.png",  x:blocks[48].x+blocks[48].w, y:blocks[48].y-2, w:13, h:34, cols:1, rows:1});
	blocks[50] = new ImageClip({clipImage:"/images/background/c_quotation.png", x:blocks[49].x+14, y:blocks[18].y+50, w:12, h:25, cols:1, rows:1});
	blocks[51] = new ImageClip({clipImage:"/images/background/hwo_u.png",  x:blocks[50].x+blocks[50].w+6, y:blocks[41].y, w:34, h:18, cols:1, rows:1});
	blocks[52] = new ImageClip({clipImage:"/images/background/hwo_b.png",  x:blocks[51].x, y:blocks[51].y+blocks[51].h-1, w:34, h:17, cols:1, rows:1});
	blocks[53] = new ImageClip({clipImage:"/images/background/o_quotation.png", x:blocks[52].x+blocks[52].w+6, y:blocks[18].y+40, w:12, h:25, cols:1, rows:1});
	blocks[54] = new ImageClip({clipImage:"/images/background/shi_l.png",  x:blocks[53].x+blocks[53].w+1, y:blocks[41].y, w:15, h:34, cols:1, rows:1});
	blocks[55] = new ImageClip({clipImage:"/images/background/shi_r.png",  x:blocks[54].x+blocks[54].w, y:blocks[41].y, w:19, h:34, cols:1, rows:1});
	blocks[56] = new ImageClip({clipImage:"/images/background/chi_l.png",  x:blocks[55].x+blocks[55].w+3, y:blocks[41].y, w:16, h:33, cols:1, rows:1});
	blocks[57] = new ImageClip({clipImage:"/images/background/chi_r.png",  x:blocks[56].x+blocks[56].w, y:blocks[41].y, w:18, h:34, cols:1, rows:1});
	blocks[58] = new ImageClip({clipImage:"/images/background/yu_l.png",   x:blocks[57].x+blocks[57].w+1, y:blocks[41].y, w:17, h:34, cols:1, rows:1});
	blocks[59] = new ImageClip({clipImage:"/images/background/yu_r.png",   x:blocks[58].x+blocks[58].w, y:blocks[41].y, w:18, h:34, cols:1, rows:1});
	blocks[60] = new ImageClip({clipImage:"/images/background/yen_l.png",  x:blocks[59].x+blocks[59].w+1, y:blocks[41].y+3, w:21, h:32, cols:1, rows:1});
	blocks[61] = new ImageClip({clipImage:"/images/background/yen_r.png",  x:blocks[60].x+blocks[60].w, y:blocks[48].y-2, w:13, h:34, cols:1, rows:1});
	blocks[62] = new ImageClip({clipImage:"/images/background/c_quotation.png", x:blocks[61].x+13, y:blocks[18].y+50, w:12, h:25, cols:1, rows:1});
	blocks[63] = new ImageClip({clipImage:"/images/background/nun_u.png",  x:blocks[62].x+blocks[62].w+7, y:blocks[41].y, w:34, h:21, cols:1, rows:1});
	blocks[64] = new ImageClip({clipImage:"/images/background/nun_b.png",  x:blocks[63].x+2, y:blocks[63].y+blocks[63].h-1, w:32, h:14, cols:1, rows:1});
	blocks[65] = new ImageClip({clipImage:"/images/background/li_l.png",   x:blocks[64].x+blocks[64].w+2, y:blocks[41].y, w:14, h:34, cols:1, rows:1});
	blocks[66] = new ImageClip({clipImage:"/images/background/li_r.png",   x:blocks[65].x+blocks[65].w, y:blocks[65].y, w:18, h:34, cols:1, rows:1});
	blocks[67] = new ImageClip({clipImage:"/images/background/comma_s.png", x:blocks[66].x+blocks[66].w+4, y:blocks[41].y+25, w:6, h:10, cols:1, rows:1});
	
	blocks[68] = new ImageClip({clipImage:"/images/background/yu_l.png",   x:blocks[0].x+2, y:blocks[41].y+53, w:17, h:34, cols:1, rows:1});
	blocks[69] = new ImageClip({clipImage:"/images/background/yu_r.png",   x:blocks[68].x+blocks[68].w+1, y:blocks[68].y, w:18, h:34, cols:1, rows:1});
	blocks[70] = new ImageClip({clipImage:"/images/background/yen_l.png",  x:blocks[69].x+blocks[69].w+2, y:blocks[68].y+3, w:21, h:32, cols:1, rows:1});
	blocks[71] = new ImageClip({clipImage:"/images/background/yen_r.png",  x:blocks[70].x+blocks[70].w, y:blocks[70].y-2, w:13, h:34, cols:1, rows:1});	
	blocks[72] = new ImageClip({clipImage:"/images/background/biaw_l.png", x:blocks[71].x+blocks[71].w+1, y:blocks[68].y+5, w:15, h:29, cols:1, rows:1});
	blocks[73] = new ImageClip({clipImage:"/images/background/biaw_r.png", x:blocks[72].x+blocks[72].w, y:blocks[72].y-5, w:20, h:35, cols:1, rows:1});
	blocks[74] = new ImageClip({clipImage:"/images/background/da_l.png",   x:blocks[73].x+blocks[73].w+1, y:blocks[68].y+1, w:16, h:33, cols:1, rows:1});
	blocks[75] = new ImageClip({clipImage:"/images/background/da_r.png",   x:blocks[74].x+blocks[74].w, y:blocks[74].y-1, w:19, h:34, cols:1, rows:1});
	blocks[76] = new ImageClip({clipImage:"/images/background/yu2_u.png",  x:blocks[75].x+blocks[75].w+3, y:blocks[68].y, w:29, h:21, cols:1, rows:1});
	blocks[77] = new ImageClip({clipImage:"/images/background/yu2_b.png",  x:blocks[76].x-3, y:blocks[68].y+blocks[76].h-1, w:35, h:14, cols:1, rows:1});
	blocks[78] = new ImageClip({clipImage:"/images/background/li2_l.png",  x:blocks[77].x+blocks[77].w, y:blocks[68].y+1, w:16, h:33, cols:1, rows:1});
	blocks[79] = new ImageClip({clipImage:"/images/background/li2_r.png",  x:blocks[78].x+blocks[78].w, y:blocks[78].y-1, w:19, h:34, cols:1, rows:1});
	blocks[80] = new ImageClip({clipImage:"/images/background/chie_u.png", x:blocks[79].x+blocks[79].w+2, y:blocks[68].y, w:34, h:20, cols:1, rows:1});
	blocks[81] = new ImageClip({clipImage:"/images/background/chie_b.png", x:blocks[80].x, y:blocks[80].y+blocks[80].h-1, w:35, h:14, cols:1, rows:1});
	blocks[82] = new ImageClip({clipImage:"/images/background/nun_u.png",  x:blocks[81].x+blocks[81].w+1, y:blocks[68].y, w:34, h:21, cols:1, rows:1});
	blocks[83] = new ImageClip({clipImage:"/images/background/nun_b.png",  x:blocks[82].x+2, y:blocks[82].y+blocks[82].h-1, w:32, h:14, cols:1, rows:1});
	blocks[84] = new ImageClip({clipImage:"/images/background/li_l.png",   x:blocks[83].x+blocks[83].w+1, y:blocks[68].y, w:14, h:34, cols:1, rows:1});
	blocks[85] = new ImageClip({clipImage:"/images/background/li_r.png",   x:blocks[84].x+blocks[84].w, y:blocks[84].y, w:18, h:34, cols:1, rows:1});
	blocks[86] = new ImageClip({clipImage:"/images/background/chan_u.png", x:blocks[85].x+blocks[85].w+6, y:blocks[68].y, w:32, h:15, cols:1, rows:1});
	blocks[87] = new ImageClip({clipImage:"/images/background/chan_b.png", x:blocks[86].x-2, y:blocks[86].y+blocks[86].h-1, w:34, h:19, cols:1, rows:1});
	blocks[88] = new ImageClip({clipImage:"/images/background/shen_l.png", x:blocks[87].x+blocks[87].w+1, y:blocks[68].y, w:17, h:32, cols:1, rows:1});
	blocks[89] = new ImageClip({clipImage:"/images/background/shen_r.png", x:blocks[88].x+blocks[88].w, y:blocks[88].y, w:18, h:32, cols:1, rows:1});
	blocks[90] = new ImageClip({clipImage:"/images/background/jan_l.png",  x:blocks[89].x+blocks[89].w+2, y:blocks[68].y, w:16, h:34, cols:1, rows:1});
	blocks[91] = new ImageClip({clipImage:"/images/background/jan_r.png",  x:blocks[90].x+blocks[90].w, y:blocks[90].y, w:17, h:34, cols:1, rows:1});
	blocks[92] = new ImageClip({clipImage:"/images/background/ai_l.png",   x:blocks[91].x+blocks[91].w+1, y:blocks[68].y, w:17, h:35, cols:1, rows:1});
	blocks[93] = new ImageClip({clipImage:"/images/background/ai_r.png",   x:blocks[92].x+blocks[92].w, y:blocks[92].y, w:18, h:35, cols:1, rows:1});
	
	var listener = {
		onmove : function(e) {
			var me = e.getSource();
			var a= me.getDirectionAngle();
			me.setFrame(Math.floor(a/22));
			status=a;
		}
	}
	
	var len = blocks.length;
	for (i=0; i<len; i++) {
		blocks[i].addEventListener(listener);
		blocks[i].makeSolid();
		subroot_layer.addChild(blocks[i]);
	}
}

createCookie('is_path_init', 'false', 3);
var NUM_CHAR = 20;
var is_played = false;

function init_path() {
	if (readCookie('is_path_init')=='false') {
		var saved_path = new Array();
		//var y_saved_path = "[";
		//var x_saved_path = "[";
		var sel_array = new Array();
		var max_num = blocks.length-1;
		
		// CONSTANT VALUES
		var POINT_NUM = 500; //3000
		var PERIOD = 2*Math.PI;
		var EXACT_POINT_NUM = POINT_NUM-1;
		var N = PERIOD/POINT_NUM;
		
		for (var i=0; i<NUM_CHAR; i++) {
			// generate non-duplicated series
			var sel = 0;
			var is_duplicated = true;
			
			while (is_duplicated == true) {
				sel = Math.floor(Math.random()*max_num);
				is_duplicated = check_duplicated(sel, sel_array);
			}
			sel_array.push(sel);
			
			// create paths	
			paths[i] = new PathAnimation(blocks[sel]);
			
			saved_path[i] = new Array(2);
			saved_path[i][0] = new Array(); // y path
			saved_path[i][1] = new Array(); // x path
			
			var desired_rot_d = 1*Math.PI + Math.floor(Math.random()*5)/10*Math.PI;
			
			var AMP_Y = parseInt(POINT_NUM/10 + Math.floor(Math.random()*(POINT_NUM/10)));
			var AMP_X = parseInt(POINT_NUM/2 + Math.floor(Math.random()*(POINT_NUM/5)));
			
			for (d=1; d<EXACT_POINT_NUM; d++) {
				var cy = AMP_Y*(Math.sin(d*N));
				var cx = AMP_X*d/POINT_NUM;
				var r = Math.sqrt(Math.pow(cy, 2)+Math.pow(cx, 2));
				var exact_rot_d = desired_rot_d+Math.asin(cy/r)
				saved_path[i][0].push(parseInt(r*Math.sin(exact_rot_d))+blocks[sel].y);
				saved_path[i][1].push(parseInt(r*Math.cos(exact_rot_d))+blocks[sel].x);
			}
			//y_saved_path += "["+saved_path[i][0].toString()+"], ";
			//x_saved_path += "["+saved_path[i][1].toString()+"], ";
						
			// generate repeated paths
			var repeated_times = parseInt(5000/POINT_NUM);
			var last_y = saved_path[i][0][(POINT_NUM-2)-1]-saved_path[i][0][0];
			var last_x = saved_path[i][1][(POINT_NUM-2)-1]-saved_path[i][1][0];
			for (var m=1; m<repeated_times; m++) {
				for (var n=0; n<POINT_NUM-2; n++) {
					saved_path[i][0].push(saved_path[i][0][n]+last_y*m);
					saved_path[i][1].push(saved_path[i][1][n]+last_x*m);
				}
			}
			line_paths[i] = dynapi.functions.interlacePaths(saved_path[i][1],saved_path[i][0]);
			paths[i].add( line_paths[i] );

			// default interval
			sleep_time = parseInt(100);
			paths[i].sleep(sleep_time);
		}
		//y_saved_path += "]";
		//x_saved_path += "]";
		createCookie('is_path_init', 'true', 3);
	}
	//alert(y_saved_path);
	//alert(x_saved_path);
}

/*
function init_path() {
	if (readCookie('is_path_init')=='false') {
		var POINT_NUM = 500;
		for (var i=0; i<NUM_CHAR; i++) {
			paths[i] = new PathAnimation(blocks[i]);
			
			var repeated_times = parseInt(5000/POINT_NUM);
			var last_y = y_saved_path[i][(POINT_NUM-2)-1]-y_saved_path[i][0];
			var last_x = x_saved_path[i][(POINT_NUM-2)-1]-x_saved_path[i][0];
			for (var m=1; m<repeated_times; m++) {
				for (var n=0; n<POINT_NUM-2; n++) {
					y_saved_path[i].push(y_saved_path[i][n]+last_y*m);
					x_saved_path[i].push(x_saved_path[i][n]+last_x*m);
				}
			}
			line_paths[i] = dynapi.functions.interlacePaths(x_saved_path[i], y_saved_path[i]);
			paths[i].add( line_paths[i] );

			// default interval
			paths[i].sleep(100);
		}
		createCookie('is_path_init', 'true', 3);
	}
}
*/
function play() {
	if(is_played==false) {
		for (var i=0; i<NUM_CHAR; i++) {
			paths[i].playAnimation(line_paths[i]);
		}
		is_played = true;
	}
}

function stop() {
	if(is_played==true) {
		for (var i=0; i<NUM_CHAR; i++) {
			paths[i].stopAnimation();
		}
		is_played = false;
	}
}

function switch_anim() {
	status = $('anim_control').innerHTML;
	if (status == "stop") {
		stop();
		$('anim_control').innerHTML = 'play';
	} else {
		play();
		$('anim_control').innerHTML = 'stop';
	}
}


