	// SETTINGS
	var answer, frametic, can, ctx, $cardbox, $canvas, $overlay, title, startaudio, loopaudiom, clickaudio, clickaudio2, bgaudio;
	var $play, $playtab, $linelable, $animatelable, $colorarea, $colorselector, $colorsample, $redrange, $greenrange, $bluerange, $alpharange, $cover, $copy;
	var bg_color = "rgba(255,255,255,.01)";
	var fps = 80;
	var color_rotate = 1;
	var windowW = 0;
	var windowH = 0;
	var mouseX = 0;
	var mouseY = 0;
	var amouseX = 0;
	var amouseY = 0;
	var right_edge = 0;
	var left_edge = 0;
	var speed = 10;
	var dot_pop = 20;
	var line_draw = 0;
	var max_lines = 700;
	var mouse_bubble = 50;
	var anchor_x = 0;
	var anchor_y = 0;
	var offset = 300;
	var lineweight = 1;
	var selected_color = 0;
	var sound = true;
	var playing = true;
	var mover = false;
	var ctrl_win = false;
	var click_odd = true;
	var dots = new Array();
	var colors = new Array();
	var Ip = new Array();
	var color_scheme = new Array();
	colors.push("rgba(0,108,255,.9)");
	colors.push("rgba(31,126,255,.9)");
	colors.push("rgba(0,0,0,.9)");
	colors.push("rgba(31,31,40,.9)");
	colors.push("rgba(240,20,0,.9)");
	colors.push("rgba(242,49,31,.9)");
	//
	function setGrad(start,end){
		var color_set = new Array()
		color_set.push(start);
		color_set.push(end);
		color_scheme.push(color_set);
	}
	//
	function create_grads(){
		color_scheme.length = 0;
		for(c=0;c<colors.length;c+=2){
			setGrad(colors[c],colors[c+1]);
		}
	}
	create_grads();
	//
	var isiPad = navigator.userAgent.match(/iPad/i) != null;
	var isiPod = navigator.userAgent.match(/iPod/i) != null;
	var isiPhn = navigator.userAgent.match(/iPhone/i) != null;
	var isIE = navigator.userAgent.match(/MSIE/i) != null;
	var isChrome =  navigator.userAgent.match(/chrome/i) != null;
	var isSafari =  navigator.userAgent.match(/safari/i) != null;
	//
	function noError(){return true;}
	window.onerror = noError;
	//
	function checkOS(){
		windowW = $(window).width()-26;
		windowH = $(window).height()-26;
		if(isiPad||isiPod||isiPhn){
			dot_pop = 5;
			fps = 80;
			mouseX = windowW/2;
			mouseY = windowH/2;
			windowW = $(window).width();
			windowH = $(window).height();
		}
		if(isIE){
			$('canvas').remove();
			//$overlay.css("background-image","url(images/nengajo.jpg)");
			//CFInstall.check({mode: "overlay",node: "prompt"});
			//$overlay.bind("click",function(){
				//$(this).append('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="100%" height="100%" id="nengajo" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="swf/nengajo.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="swf/nengajo.swf" quality="high" bgcolor="#ffffff" width="100%" height="100%" name="nengajo" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object>');
			//});
		}
		//
		$cardbox = $('#cardbox');
		$canvas = $('canvas');
		//
		$cardbox.css("width",windowW);
		$cardbox.css("height",windowH);	
		//$overlay.css("width",windowW);
		//$overlay.css("height",windowH);
		//$overlay.css("height",windowH);
		$canvas.attr("width",windowW);
		$canvas.attr("height",windowH);
		//
		right_edge = windowW;
		left_edge = 0;
		//
	}
	//
	function mDown(e){
		//
		if(isiPad||isiPod||isiPhn){
		}else{
			mover = true;
			nextColor();
		}
		//
	}
	function mUp(e){
		if(isiPad||isiPod||isiPhn){}else{
			mover = false;
		}
		if(click_odd){
			//clickaudio.play();
		}else{
			//clickaudio2.play();
		}
		click_odd = !click_odd;
	}
	function mMove(e){
		if(isiPad||isiPod||isiPhn){}else{
			mouseX = e.pageX-12;
			mouseY = e.pageY;
		}
	}
	function aMove(e){
		if(isiPad||isiPod||isiPhn){
			amouseX = e.pageX;
			amouseY = e.pageY;
		}else{
			amouseX = e.pageX;
			amouseY = e.pageY;
		}
	}
	function tStart(e){
		nextColor();
		mouseX = e.touches.item(0).pageX;
		mouseY = e.touches.item(0).pageY;
		mover = true;
		 e.preventDefault();
	}
	function tMove(e){
		if(e.touches.length>1){
			ctx.clearRect(0, 0, windowW, windowW);
		}
		mouseX = e.touches.item(0).pageX;
		mouseY = e.touches.item(0).pageY;
		mover = true;
		e.preventDefault();
	}
	function tEnd(e){
		mouseX = e.touches.item(0).pageX;
		mouseY = e.touches.item(0).pageY;
		mover = false;
		e.preventDefault();
	}
	function kUp(e){
		if(e.keyCode==32){
			if(playing){
				animate("pause");
			}else{
				animate("start");
			}
		}
	}
	function makeGrid(){
		var gr = 0.618033;
		var g_top = 0;
		var g_left = 0;
		var g_width = windowW;
		var g_height = windowH;
		//
		var add_p = Array();
		add_p.push(windowW*gr);
		add_p.push(0);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW-(windowW*gr));
		add_p.push(0);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW*gr);
		add_p.push(windowH);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW-(windowW*gr));
		add_p.push(0);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW-(windowW*gr));
		add_p.push(windowH);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW*gr);
		add_p.push(windowH);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW);
		add_p.push(0);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(windowW);
		add_p.push(windowH);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(0);
		add_p.push(windowH);
		Ip.push(add_p);
		//
		var add_p = Array();
		add_p.push(0);
		add_p.push(0);
		Ip.push(add_p);
		//
		var cord1 = meet(windowW,0,0,windowH,windowW*gr,0,windowW,windowH*gr).split(":");
		var cord2 = meet(windowW,windowH,0,0,windowW-(windowW*gr),0,0,windowH*gr).split(":");
		var cord3 = meet(0,windowH/3,windowW,windowH/3,(windowW/3)*2,0,(windowW/3)*2,windowH).split(":");
		var cord4 = meet(0,windowH/3,windowW,windowH/3,windowW/3,0,windowW/3,windowH).split(":");
		var cord5 = meet(0,(windowH/3)*2,windowW,(windowH/3)*2,(windowW/3)*2,0,(windowW/3)*2,windowH).split(":");
		var cord6 = meet(0,(windowH/3)*2,windowW,(windowH/3)*2,windowW/3,0,windowW/3,windowH).split(":");
		var cord7 = meet(windowW,0,0,windowH,windowW-(windowW*gr),windowH,0,windowH-(windowH*gr)).split(":");
		var cord8 = meet(windowW,windowH,0,0,windowW,windowH-(windowH*gr),windowW*gr,windowH).split(":");
		//
		Ip.push(cord1);
		Ip.push(cord2);
		Ip.push(cord3);
		Ip.push(cord4);
		Ip.push(cord5);
		Ip.push(cord6);
		Ip.push(cord7);
		Ip.push(cord8);
		//
	}
	//
	function meet(x1,y1,x2,y2,x3,y3,x4,y4){
		var z1 = (x1-x2); 
		var z2 = (x3-x4); 
		var z3 = (y1-y2); 
		var z4 = (y3-y4);
		var d = (z1*z4) - (z3*z2);
		
		if(d==0) return getPoint("W") + ":" + getPoint("H");
		
		var pre = (x1*y2 - y1*x2);
		var post = (x3*y4 - y3*x4);
		var x =( pre * z2 - z1 * post ) / d;
		var y = ( pre * z4 - z3 * post ) / d;
		
		if ( x < Math.min(x1, x2) || x > Math.max(x1, x2) || x < Math.min(x3, x4) || x > Math.max(x3, x4) ) return getPoint("W") + ":" + getPoint("H");
		if ( y < Math.min(y1, y2) || y > Math.max(y1, y2) || y < Math.min(y3, y4) || y > Math.max(y3, y4) ) return getPoint("W") + ":" + getPoint("H");
		
		return Math.round(x) + ":" + Math.round(y);
	}
	//
	$(window).resize(function() {
		checkOS();
	});
	//
	function getPoint(o){
		if(o=="W"){
			return Math.round(Math.random()*windowW);
		}else{
			return Math.round(Math.random()*windowH);
		}
	}
	//
	function nextColor(){
		color_rotate++;
		if(color_rotate>color_scheme.length-1){
			color_rotate = 0;
		}
	}
	//
	function make_dots(){
		dots.length = 0;
		for(d=0;d<dot_pop;d++){
			//
			var rp = Math.round(Math.random()*Ip.length-1);
			if(rp<0){
				rp=0;
			}
			var Start_x = Ip[rp][0];
			var Start_y = Ip[rp][1];	
			var A_x = Start_x;
			var A_y = Start_y;
			var B_x = getPoint("W");
			var B_y = getPoint("H");
			var C_x = getPoint("W");
			var C_y = Start_y-25;
			var Xer = 0;
			var Yer = 0;
			var my_color = color_rotate;
			nextColor();
			var my_thick = Math.random()*2;
			var my_speed = Math.round(Math.random()*16)+8;
			//
			var nd = new Array();
			nd.push(A_x); // _x (0)
			nd.push(A_y); // _y (1)
			nd.push(A_x); // A_x (2)
			nd.push(A_y); // A_y (3)		
			nd.push(B_x); // B_x (4)
			nd.push(B_y); // B_y (5)
			nd.push(C_x); // C_x (6)
			nd.push(C_y); // C_y (7)
			nd.push(Xer); // Xer (8)
			nd.push(Yer); // Yer (9)
			nd.push(my_color); // COLOR (10)
			nd.push(my_thick); // THICKNESS (11)
			nd.push(my_speed); // SPEED (12)
			nd.push(B_x); // WAYPOINT X (13)
			nd.push(B_y); // WAYPOINT Y (14)
			nd.push(1); // WAY (15)
			nd.push(A_x); // OLD X (16)
			nd.push(A_y); // OLD Y (17)
			dots.push(nd);
			//
		}
	}
	//
	var ticktock = 0;
	function drawStage(){
		//
		ctx.save();
		//
		if(isiPad||isiPod||isiPhn){
			ctx.fillStyle = bg_color;
			ctx.fillRect(0, 0, windowW, windowW);
		}else if(isIE){
			ctx.fillStyle = bg_color;
			ctx.fillRect(0, 0, windowW, windowW);
		}else{
			ctx.fillStyle = bg_color;
			ctx.fillRect(0, 0, windowW, windowW);
		}
		//
		if(mouseX>0&&mouseY>0){
			for(d=0;d<dots.length;d++){
				//
				var _x = dots[d][0];
				var _y = dots[d][1];
				var A_x = dots[d][2];
				var A_y = dots[d][3];
				var B_x = dots[d][4];
				var B_y = dots[d][5];
				var C_x = dots[d][6];
				var C_y = dots[d][7];
				var Xer = dots[d][8];
				var Yer = dots[d][9];
				var my_color = dots[d][10];
				var my_thick = dots[d][11];
				var my_thick = lineweight;
				var my_speed = dots[d][12];
				var waypoint_x = dots[d][13];
				var waypoint_y = dots[d][14];
				var way = dots[d][15];
				var old_x = dots[d][16];
				var old_y = dots[d][17];
				//
				ctx.lineWidth = my_thick;
				var grd=ctx.createLinearGradient(0,0,0,windowH);
				var startColor = color_scheme[color_rotate][0];
				var endColor = color_scheme[color_rotate][1];
				grd.addColorStop(0,startColor);
				grd.addColorStop(1,endColor);
				ctx.strokeStyle = grd;
				//
				if(mover){
					A_x = getPoint("W");
					C_x = getPoint("W");
				}
				//
				if(waypoint_y>windowH){
					way = true;
				}else if(waypoint_y<0){
					way = false;
				}
				if(way){
					waypoint_y -= Math.random()*offset;
				}else{
					waypoint_y += Math.random()*offset;
				}
				//
				_x -= (_x-waypoint_x)/my_speed;
				_y -= (_y-waypoint_y)/my_speed;
				//
				ctx.beginPath();
				ctx.moveTo(old_x,old_y);
				ctx.lineTo(_x,_y);
				ctx.lineTo(mouseX,mouseY);
				ctx.stroke();
				//
				dots[d][0] = _x;
				dots[d][1] = _y;		
				dots[d][2] = A_x;
				dots[d][3] = A_y;
				dots[d][4] = B_x;
				dots[d][5] = B_y;	
				dots[d][6] = C_x;
				dots[d][7] = C_y;	
				dots[d][8] = Xer;
				dots[d][9] = Yer;	
				dots[d][10] = my_color;
				dots[d][11] = my_thick;
				dots[d][12] = my_speed;
				dots[d][13] = waypoint_x;
				dots[d][14] = waypoint_y;
				dots[d][15] = way;
				dots[d][16] = old_x;
				dots[d][17] = old_y;
			}
		}
		//
		ctx.restore();
		//
		if(sound&&!isIE){
			if(color_rotate==0){
				//loopaudiom.play();
			}else{
				//loopaudiom.play();
			}
		}
	}
	//
	function animate(cmd){
		clearInterval(frametic);
		playing = false;
		sound = false;
		//loopaudiom.pause();
		//bgaudio.pause();
		if(cmd=="start"){
			frametic = setInterval(drawStage,fps);
			playing = true;
			sound = true;
			//bgaudio.play();
		}
	}
	//
	$(document).ready(function(){
		//
		$("<div/>",{id:'easteregg'}).appendTo("body");
		//
		$('#easteregg').bind('click',function(){
			Creator();
		});
		//
	});
	//
	function Creator(){
			
	    $("<canvas/>",{id:'canvas'}).appendTo("#wrapper").css({"width":$(document).width(),"height":$(document).height()});
	    
	    can = document.getElementById('canvas');
	    dis = document.getElementById('wrapper');
	    title = document.getElementById('my_title');
	    ctx = can.getContext('2d');
	    $copy = $("#copy");
	    //
	    checkOS();
	    makeGrid();
	    //
	    if(isiPad||isiPod||isiPhn){
	    	dis.addEventListener('touchstart', tStart, false);
	    	dis.addEventListener('touchmove', tMove, false);
	    	dis.addEventListener('touchend', tEnd, false);
	    }else if(isIE){
	    	$(document).bind("mousedown",function(e){
	    		mover = true;
	    		nextColor();
	    	});
	    	$(document).bind("mouseup",function(e){	
	    		mover = false;
	    	});
	    	$(document).bind("mousemove",function(e){
	    		mouseX = e.pageX;
	    		mouseY =  e.pageY;
	    	});
	    }else{
	    	dis.addEventListener('mousedown', mDown, false);
	    	dis.addEventListener('mouseup', mUp, false);
	    	dis.addEventListener('mousemove', mMove, false);
	    	document.addEventListener('mousemove', aMove, false);
	    	document.addEventListener('keyup', kUp, false);
	    }
	    //
	    make_dots();
	    animate("start");
	    //
	};
	//
	console.log("+---------------------------------------------+");
	console.log("|");
	console.log("|           IF YOU FIND AN ERROR");
	console.log("|           LET US KNOW AT THIS EMAIL:");
	console.log("|           info [at] eatcreative [dot] jp");
	console.log("|");
	console.log("+---------------------------------------------+");
//
