////////////////////////////////////////////////////////////////////////////////
// Note from the Scriptographer.org Team
//
// In Scriptographer 2.9, we switched to a top-down coordinate system and
// degrees for angle units as an easier alternative to radians.
// 
// For backward compatibility we offer the possibility to still use the old
// bottom-up coordinate system and radians for angle units, by setting the two
// values bellow. Read more about this transition on our website:
// http://scriptographer.org/news/version-2.9.064-arrived/

script.coordinateSystem = 'bottom-up';
script.angleUnits = 'radians';

// stroke_tone_line.jp
// Sunabe kazumichi 2009
// http://dp48069596.lolipop.jp/
//sample_parallel: (upoffset:1.5, dwnoffset:1.5, upwidth:3, dwnwidth:3, dist:1)
//UI and others changed on SG ver 2.5 ( 2009/7/24)

// ------------------------  Dialog stuff  ------------------------ 

var dialog = new FloatingDialog('tabbed'){
	title: "Stroke tone_line",
	size: new Size(212, 160),
	visible: true,
	onClose: function() {
		this.destroy();
	}
	};

var uprotate = new TextPane(dialog){
	text:"uprot:",
	position: new Point(136, 16)
};

var uprotateField = new TextEdit(dialog){
	bounds:[178, 14, 25, 20],
	text:"-30"
}

var dwnrotate = new TextPane(dialog){
	text:"dnrot:",
	position: new Point(136, 36)
};

var dwnrotateField = new TextEdit(dialog){
	bounds:[178, 34, 25, 20],
	text:"30"
}

var upoffset = new TextPane(dialog){
	text:"upoffs:",
	position: new Point(136, 60)
};

var upoffsetField = new TextEdit(dialog){
	bounds:[178, 58, 25, 20],
	text:"3"
};

var dwnoffset  = new TextPane(dialog){
	text:"dnoffs:",
	position: new Point(136, 80)
};

var dwnoffsetField = new TextEdit(dialog){
	bounds:[178, 78, 25, 20],
	text:"2"
};

var dist  = new TextPane(dialog){
	text:"dist:",
	position: new Point(150, 104)
};

var distField = new TextEdit(dialog){
	bounds:[178, 102, 25, 20],
	text:"1"
};
var upcColor = new TextPane(dialog){
	text:"C:",
	position:new Point(15, 22)
};

var upcColorField = new TextEdit(dialog){
	bounds: [30, 20, 25, 20],
	text:"30"
};

var upmColor = new TextPane(dialog){
	text:"M:",
	position: new Point(15, 42)
};

var upmColorField = new TextEdit(dialog){
	bounds:[30, 40, 25, 20],
	text:"0"
}

var upyColor = new TextPane(dialog){
	text:"Y:",
	position:new Point(15, 62)
};

var upyColorField = new TextEdit(dialog){
	bounds: [30, 60, 25, 20],
	text:"0"
};

var upkColor = new TextPane(dialog){
	text:"K:",
	position: new Point(15, 82)
};

var upkColorField = new TextEdit(dialog){
	bounds:[30, 80, 25, 20],
	text:"0"
}

var upwidth = new TextPane(dialog){
	text:"W:",
	position: new Point(12, 106)
};

var upwidthField = new TextEdit(dialog){
	bounds:[30, 104, 25, 20],
	text:"0.2"
};
		
var dwncColor = new TextPane(dialog){
	text:"C:",
	position:new Point(76, 22)
};

var dwncColorField = new TextEdit(dialog){
	bounds: [92, 20, 25, 20],
	text:"100"
};

var dwnmColor = new TextPane(dialog){
	text:"M:",
	position: new Point(76, 42)
};

var dwnmColorField = new TextEdit(dialog){
	bounds:[92, 40, 25, 20],
	text:"0"
}

var dwnyColor = new TextPane(dialog){
	text:"Y:",
	position:new Point(76, 62)
};

var dwnyColorField = new TextEdit(dialog){
	bounds: [92, 60, 25, 20],
	text:"0"
};

var dwnkColor = new TextPane(dialog){
	text:"K:",
	position: new Point(76, 82)
};

var dwnkColorField = new TextEdit(dialog){
	bounds:[92, 80, 25, 20],
	text:"0"
}

var dwnwidth = new TextPane(dialog){
	text:"W:",
	position: new Point(72, 106)
};

var dwnwidthField = new TextEdit(dialog){
	bounds:[92, 104, 25, 20],
	text:"0.2"
}

//------------------------------------
var transButton = new Button(dialog){
	text:"Parallel GO !!",
	position:new Point(110,136),
	size: new Size(90, 20),
	onClick : function(){
	
var upoffset=parseFloat(upoffsetField.text);	
var dwnoffset=parseFloat(dwnoffsetField.text);	

var dist=parseFloat(distField.text);	

var upc=upcColorField.text;
var upm=upmColorField.text;
var upy=upyColorField.text;
var upk=upkColorField.text;
var upwidth=upwidthField.text;

var dwnc=dwncColorField.text;
var dwnm=dwnmColorField.text;	
var dwny=dwnyColorField.text;	
var dwnk=dwnkColorField.text;	
var dwnwidth=dwnwidthField.text;			

		var art = new Path();		
		var shapes =  activeDocument.getItems({
		type: Path, 
		selected: true
		});
		
	var upColor=new CMYKColor(upc/100,upm/100,upy/100,upk/100);	
	var dwnColor=new CMYKColor(dwnc/100,dwnm/100,dwny/100,dwnk/100);		
		

		for (var j = 0; j <shapes.length; j++) 			
	{		
			var art = shapes[j];		
			art.curvesToPoints(dist);	
			var count = art.curves.length;

	var up_center = new Path();
	up_center.style.stroke.width =upwidth;
	up_center.style.stroke.color =  upColor;
	 var bezier0 = art.curves[0];	
	 var pt0 = bezier0.getPoint(0);
	 var up0_n = bezier0.getNormal(-1).normalize(upoffset);  
	
	dwnColor = new CMYKColor(1,0,0,0);	
	var dwn_center = new Path();	
	dwn_center.style.stroke.width = dwnwidth;
	dwn_center.style.stroke.color =  dwnColor;			
      var dwn_bezier = art.curves[0];	
	var dwn_n = dwn_bezier.getNormal(-1).normalize(dwnoffset); 
	//dwn_center.moveTo(dwn_pt.add(dwn_n)); 
	up_center.moveTo(pt0.add(up0_n));

for (var k = 0; k < count; k++) {	
      var bezier = art.curves[k];
      var pt = bezier.getPoint(0);
      var dwn_bezier = art.curves[k];
 	//
    	var up_n = bezier.getNormal(-1).normalize(upoffset);   	 
    	var dwn_n = bezier.getNormal(1).normalize(dwnoffset); 
   var p =bezier.getNormal(0).normalize(dwnoffset); 
	if(up_n.x != 0 || up_n.y != 0 || dwn_n.x != 0 || dwn_n.y != 0){
  	up_center.segments.add(pt.add(up_n));	
	}
	if(dwn_n.x != 0 || dwn_n.y != 0){
  	dwn_center.segments.add(pt.add(dwn_n));
	}
}
//
//last point

	 var bezier = art.curves[count-1];	    
	 var pt = bezier.getPoint(1);
	    
    	var up_n  = bezier.getNormal(-1).normalize(upoffset); 
   	
   	var dwn_n = bezier.getNormal(1).normalize(dwnoffset); 
 
   if(up_n.x != 0 || up_n.y != 0 || dwn_n.x != 0 || dwn_n.y != 0){
  	up_center.segments.add(pt.add(up_n));	
	}
	if(dwn_n.x != 0 || dwn_n.y != 0){
  	dwn_center.segments.add(pt.add(dwn_n));
	}
	
activeDocument.redraw();

}
}	
};

var transButton = new Button(dialog){
	text:"Slant GO !!",
	position:new Point(10,136),
	size: new Size(80, 20),
	onClick : function(){
		
	var uprotate=uprotateField.text;	
	var dwnrotate=dwnrotateField.text;	

	var upoffset=parseFloat(upoffsetField.text);	
	var dwnoffset=parseFloat(dwnoffsetField.text);	

	var dist=parseFloat(distField.text);	

	var upc=upcColorField.text;
	var upm=upmColorField.text;
	var upy=upyColorField.text;
	var upk=upkColorField.text;
	var upwidth=upwidthField.text;

	var dwnc=dwncColorField.text;
	var dwnm=dwnmColorField.text;	
	var dwny=dwnyColorField.text;	
	var dwnk=dwnkColorField.text;	
	var dwnwidth=dwnwidthField.text;			

		var art = new Path();		
		var shapes =  activeDocument.getItems({
	type: Path, 
	selected: true
	});

	var upColor=new CMYKColor(upc/100,upm/100,upy/100,upk/100);	
	var dwnColor=new CMYKColor(dwnc/100,dwnm/100,dwny/100,dwnk/100);		
		
	for (var j = 0; j <shapes.length; j++) 			
	{		
			var art = shapes[j];		
			art.curvesToPoints(dist);	
			var count = art.curves.length;
			
			for (var k = 0; k <count; k++) {

	var res = new Path();
	var res2 = new Path();	
	res.style.stroke.width = upwidth;
	res.style.stroke.color =  upColor;	
	res2.style.stroke.width = dwnwidth;
	res2.style.stroke.color =  dwnColor;	
      var bezier = art.curves[k];
      var pt = bezier.getPoint(0);	
	var ptk = bezier.getPoint(k);

	res.moveTo(pt);
    	var n = bezier.getNormal(-1).normalize(upoffset); 
   	
   	res2.moveTo(pt);  
   	var p = bezier.getNormal(0).normalize(dwnoffset); 
 
        	// normalize(10) = offset from shape : 10 pts
	if(n.x != 0 || n.y != 0){
  		res.segments.add(pt.add(n.rotate(uprotate*Math.PI /180)));
	}
		if(p.x != 0 || p.y != 0){
  		res2.segments.add(pt.add(p.rotate(dwnrotate*Math.PI /180)));
	}		
	}	

//last point
	var lastp = new Path();
	var lastp2 = new Path();	
	lastp.style.stroke.width = upwidth;
	lastp.style.stroke.color =  upColor;	
	lastp2.style.stroke.width = dwnwidth;
	lastp2.style.stroke.color =  dwnColor;	

	 var bezier = art.curves[count-1];	    
	 var ptk = bezier.getPoint(1);
	    
 	lastp.moveTo(ptk);
    	var n = bezier.getNormal(-1).normalize(upoffset); 
   	
   	lastp2.moveTo(ptk);  
   	var p = bezier.getNormal(0).normalize(dwnoffset); 
 
   	if(n.x != 0 || n.y != 0){
  		lastp.segments.add(ptk.add(n.rotate(uprotate*Math.PI /180)));
	}
	if(p.x != 0 || p.y != 0){
  		lastp2.segments.add(ptk.add(p.rotate(dwnrotate*Math.PI /180)));
	}

activeDocument.redraw();

}
}	
};


var thewordFrame=new Frame(dialog){
	text:"up",
	size:[60,130],
	position: new Point(3,0)
};

var pathFrame=new Frame(dialog){
	text:"down",
	size:[60,130],
	position:new Point(65,0)
};



