$(document).ready(function(){
	app.c.init();
	app.v.init();
	app.c.listeners();
})
/////////////////////////////////////////////////////////////////////////////////

var app={m:{},v:{},c:{}};

/////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////

app.c.init=function(){
	app.m.password=false;
	app.m.metadata={"name":"Iconic","version":"0.0.2"};
	var b=app.c.bounds();
	app.m.genome={};
	app.m.genome.r=[];
	app.m.genome.rf=[];
	app.m.genome.color=[];
	app.m.genome.lw=[];
	app.m.genome.steps=[];
	app.m.genome.incrementMod=[];
	app.m.genome.n=[];
	app.m.genome.rotation=[];
	app.m.genome.fadeColor=[];
	app.m.genome.fadeRadius=[];
};

app.c.listeners=function(){
	$("#mitLicense").on("click",function(){
		$("#license").slideToggle();
	});


	$("input#clear").on("click",function(){
		$("div#icons").html("");
		for (var i=0;i<5;i++){
			var iconWidth=$("input[name=size]:checked").val();
			iconWidth=parseInt(iconWidth);
			app.v.icon("div#icons",iconWidth);
			//console.log(iconWidth);
		}
	});

/*	
	$(window).resize(function(){
		$("body").fadeOut(function(){
			$("body").html("");
			app.c.init();
			app.v.init();
			$("body").fadeIn();
		})
	});
*/
};

app.c.bounds=function(){	
	var b=app.m.bounds={};
	b.left=0;
	b.top=0;
	b.right=$(document).width();
	b.bottom=$(document).height();
	b.centerX=b.right/2;
	b.centerY=b.bottom/2;

	return b;
};

/////////////////////////////////////////////////////////////////////////////////

app.v.init=function(){
	app.v.style();
	var b=app.m.bounds;
	var d="";
	d+="<input type='text' value='Iconic'>";
	d+="<div id='radios'><form actio=''>";

		d+="<table><tr>";
			d+="<td><input type='radio' name='size' value='1024'><br>1024</td>";
			d+="<td><input type='radio' name='size' value='512' ><br>512</td>";
			d+="<td><input type='radio' name='size' value='144' checked><br>144</td>";
			d+="<td><input type='radio' name='size' value='72' ><br>72</td>";
		d+="</tr></table>";
	d+="</form></div>";
	d+="<div id='icons'></div>";
	d+="<div id='controlls'>";
		d+="<input type='button' value='more' id='clear'></input>";
	d+="</div>";
	d+="<p>click the icons you save below for a png version</p>"
	d+="<div id='saved'></div>";
	d+=davis.license();
	$("body").html(d);
	var iconWidth=$("input[name=size]:checked").val();
	iconWidth=parseInt(iconWidth);
	//console.log(iconWidth);
	for (var i=0;i<5;i++){
		app.v.icon("div#icons",iconWidth);
	}
};

app.v.icon=function(target,width){
	app.m.text=$("input[type=text]").val().split("")[0];

	var width=width || 144;
	var height=width;
	var target=target || "body";
	var id=davis.randomWord()+davis.random(100);
	var c=app.v.canvas(width,height,id);
	$(target).append(c);
	$("div#icons canvas#"+id).on("click",function(){
		
		$("div#saved").prepend(this);
		if ($("div#icons > canvas").size()<5){
			var iconWidth=$("input[name=size]:checked").val();
			iconWidth=parseInt(iconWidth);
			app.v.icon("div#icons",iconWidth);
			///console.log(iconWidth);
		}

		$("div#saved canvas#"+id).on("click",function(){
		 	var dataURL = this.toDataURL();
		    if (!window.open(dataURL)) {
		        document.location.href = dataURL;
		    }
		});


		//send it to the database
		if (app.m.password!=false){
		var dataURL=document.getElementById(id).toDataURL();
		$.ajax({
			  type: "POST",
			  url: "http://peopleofthebit.com/luke_davis/labs/iconic/php/createRecord.php",
			  data: {image:dataURL,password:app.m.password}
			}).done(function(o) {
			  //console.log('saved');
			});
		}

	});
	c=document.getElementById(id);
	var ctx=c.getContext("2d");
	
	app.v.radial(ctx,width,height);
	davis.maybe(1,3,function(){	
		ctx.clearRect(0, 0, width, height);
		app.v.textIcon(ctx,width,height);
	})

	//app.v.textIcon(ctx,width,height);
	//app.v.bilateral(ctx,width,height);
	//app.v.radial(ctx,width,height);

};


app.v.textIcon=function(ctx,width,height){ctx.beginPath();

	var color=davis.randomColor();
	var gradient=ctx.createLinearGradient(0,0,0,height);
	gradient.addColorStop(0,color);
	gradient.addColorStop(1,davis.pick([color,davis.randomColor(),"#000","#fff",davis.alpha(color,0)]));
	ctx.fillStyle=gradient;
	ctx.fillRect(0,0,width,height);
	
	
	for (var j=0;j<davis.random(4);j++){
		var r=davis.random(width/2);
		var rf=davis.random(width/2);
		var color=davis.randomColor();
		davis.maybe(2,3,function(){color=davis.randomColor("grey");});
		var lw=1+davis.random(width/10);
		var steps=1+davis.random(30);
		var incrementMod=davis.random(3)*90;
		var n=davis.random(6);
		var rotation=90*davis.random(3);
		var fadeColor=davis.pick(["rgba(0,0,0,0)","rgba(255,255,255,0)"]);
		var fadeRadius=Math.random();
		davis.maybe(1,5,function(){fadeRadius=0;});
		davis.maybe(1,5,function(){fadeRadius=false;});
		for (var i=0;i<steps;i++){
			var increment=i*360/steps;
			var x=geo.getPoint(width/2,height/2,rf,increment+incrementMod).x2;
			var y=geo.getPoint(width/2,height/2,rf,increment+incrementMod).y2;

			app.v.circle({
				n:n,
				gradient:true,
				context:ctx,
				x:x,
				y:y,
				r:r,
				rotation:rotation,
				lineWidth:lw,
				color:color,
				fadeColor:fadeColor,
				fadeRadius:fadeRadius
			});	
		}
	}

	pattern=ctx.createPattern(ctx.canvas,"no-repeat");
	ctx.clearRect(0, 0, width, height);


	app.v.ngon({
		n:3+davis.random(9),
		gradient:true,
		context:ctx,
		x:width/2,
		y:height/2,
		r:width/4+davis.random(width/4),
		fill:pattern,
		lineWidth:davis.random(width/15)
	});	

	var x=width/2;
	var y=height/2;
	var fonts=[
		"Verdana, Geneva, sans-serif",
		"Courier, monospace",
		"Monaco, monospace",
		"Helvetica, sans-serif",
		"Impact, Charcoal, sans-serif",
		"cursive, sans-serif",
		"'Arial Black', Gadget, sans-serif",
		"'Times New Roman', Times, serif",
		"'Palatino Linotype', 'Book Antiqua', Palatino, serif"
	];
	var text=app.m.text;
	if (typeof text!="string"){
		text=" ";
	}
	davis.maybe(1,4,function(){text=text.toUpperCase();});
	davis.maybe(1,4,function(){text=text.toLowerCase();});
	ctx.textAlign = "center";
	ctx.textBaseline = "middle";
	ctx.font="900 "+((width/4)+davis.random(width/4))+"px "+davis.pick(fonts);
	//ctx.fillStyle=pattern;
	ctx.fillStyle="#fff";
	ctx.fillText(text,x,y);
};


app.v.bilateral=function(ctx,width,height){
	var color=davis.randomColor();
	var strokeStyle=davis.alpha(davis.randomColor("grey"),(0.5+(Math.random()/2)));
	var fillStyle=davis.alpha(color,Math.random());
	for (var i=0;i<4;i++){
		davis.maybe(1,2,function(){

			var lineWidth=1+davis.random(width/100);
			var r=davis.random(width/3);

			var x=r+lineWidth+davis.random((width/2)-r-lineWidth);
			var y=r+lineWidth+davis.random((height)-(2*(r+lineWidth)));
			ctx.beginPath();
			ctx.strokeStyle=strokeStyle;
			ctx.arc(x,y,r,0,2*Math.PI);
			ctx.lineWidth=lineWidth;
			ctx.fillStyle=fillStyle;
			ctx.fill();
			ctx.stroke();
			ctx.beginPath();
			x=width/2+(width/2)-x;
			ctx.arc(x,y,r,0,2*Math.PI);
			ctx.fillStyle=fillStyle;
			ctx.fill();
			ctx.stroke();
		});
	}
	for (var i=0;i<3;i++){
		davis.maybe(1,2,function(){
			var lineWidth=1+davis.random(width/100);
			var r=davis.random(width/3);
			var x=width/2;
			var y=r+lineWidth+davis.random((height)-(2*(r+lineWidth)));
			ctx.beginPath();
			ctx.strokeStyle=strokeStyle;
			ctx.arc(x,y,r,0,2*Math.PI);
			ctx.lineWidth=lineWidth;
			ctx.fillStyle=fillStyle;
			davis.maybe(1,3,function(){ctx.fill();});
			ctx.stroke();
		})
	}
};

app.v.radial=function(ctx,width,height){
	ctx.beginPath();
	ctx.arc(width/2,width/2,davis.random(width/2),0,2*Math.PI);
	ctx.strokeStyle=davis.randomColor();
	ctx.lineWidth=1+davis.random(0.5*width);
	ctx.stroke();
	
	
	for (var j=0;j<davis.random(4);j++){
		var r=davis.random(width/2);
		var rf=davis.random(width/2);
		var color=davis.randomColor();
		davis.maybe(2,3,function(){color=davis.randomColor("grey");});
		var lw=1+davis.random(width/10);
		var steps=1+davis.random(30);
		var incrementMod=davis.random(3)*90;
		var n=davis.random(6);
		var rotation=90*davis.random(3);
		var fadeColor=davis.pick(["rgba(0,0,0,0)","rgba(255,255,255,0)"]);
		var fadeRadius=Math.random();
		davis.maybe(1,5,function(){fadeRadius=0;});
		davis.maybe(1,5,function(){fadeRadius=false;});
		for (var i=0;i<steps;i++){
			var increment=i*360/steps;
			var x=geo.getPoint(width/2,height/2,rf,increment+incrementMod).x2;
			var y=geo.getPoint(width/2,height/2,rf,increment+incrementMod).y2;

			app.v.circle({
				n:n,
				gradient:true,
				context:ctx,
				x:x,
				y:y,
				r:r,
				rotation:rotation,
				lineWidth:lw,
				color:color,
				fadeColor:fadeColor,
				fadeRadius:fadeRadius
			});	
		}
	}
};

app.v.circle=function(c){
	var ctx= c.context || false;
	var x=c.x || 100;
	var y=c.y || x;
	var r=c.r || 10;
	var color=c.color || davis.randomColor("grey");
	var fadeColor=c.fadeColor || "rgba(0,0,0,0)";
	var fadeRadius=c.fadeRadius || Math.random();
	var cr=ctx.canvas.width/2;
	//console.log(cw);
	var gradient=ctx.createRadialGradient(cr,cr,(fadeRadius*cr),cr,cr,cr);
	gradient.addColorStop(0,color);
	gradient.addColorStop(1,fadeColor);
	var lineWidth=c.lineWidth || 1;
	ctx.beginPath();
	ctx.arc(x,y,r,0,2*Math.PI);
	ctx.strokeStyle=gradient;
	ctx.lineWidth=lineWidth;

	ctx.stroke();


	return true;
};

app.v.ngon=function(c){
	var n=c.n || 3;

	var ctx= c.context || false;
	var x=c.x || 100;
	var y=c.y || x;
	var r=c.r || 100;
	if (n%2==0){
		var rotation=360/(n*2)*davis.random(n*2);
	} 
	else {
		var rotation=90+(180*davis.random(2));
	};
	rotation=c.rotation || rotation;
	var color=c.color || davis.randomColor("grey");
	var lineWidth=c.lineWidth || 1;
	var fill=c.fill || davis.randcomColor();
	ctx.beginPath();
	for (var i=0;i<n+2;i++){
		var nx=geo.getPoint(x,y,r,rotation+(i*360/n)).x2;
		var ny=geo.getPoint(x,y,r,rotation+(i*360/n)).y2;
		ctx.lineTo(nx,ny);
	}
	ctx.lineJoin='miter';
	ctx.strokeStyle=color;
	ctx.lineWidth=lineWidth;
	ctx.fillStyle=fill;
	ctx.fill();
	ctx.stroke();
	return true;
};
app.v.canvas=function(w,h,id){
	var c="";
	c+="<canvas width='"+w+"' height='"+h+"' id='"+id+"'></canvas>";
	return c;
};

app.v.style=function(){
	davis.style("body",{
		"width":"100%",
		"margin":"0px",
		"padding":"0px",
		"text-align":"center",
		"background":"#ddd"
	});
	davis.style("canvas",{
		"margin":"20px",
		"cursor":"pointer"
	});
	davis.style("div",{
		"text-align":"center",
		"border":"1px solid #111",
		"margin":"20px"
	});
	davis.style("input[type=text]",{
		"font-size":"3em",
		"color":"#111",
		"text-align":"center",
		"margin-top":"30px"
	});
	davis.style("input[type=button]",{
		"font-size":"3em",
		"width":"100%",
		"margin":"0px",
		"cursor":"pointer",
		"background":"#EC1313",
		"color":"#fff"
	});
	davis.style("table",{
		"width":"100%",
		"table-layout":"fixed",
		"text-align":"center"
	});
	davis.style("input[type=radio]",{
		"margin-top":"20px",
		"width":"20px",
		"height":"20px"
	});
	davis.style("canvas",{
		"width":"100px",
		"height":"100px"
	});

};