var canvas;


FABridge.addInitializationCallback('canvas', initCanvas);

function initCanvas() {
	canvas = FABridge.canvas.root();

	canvas.create = function(name) { return FABridge.canvas.create(name); }
	canvas.utils = function() {};
	
	canvas.utils.createText = function(str) {
		var item = canvas.create('activa.canvas.TextItem')
		if ( typeof(str) == 'undefined' ) {
			str = 'Enter Your Text';
		}
		item.setText(str);
		canvas.getCurrentPage().canvasAddChild(item);
		canvas.getCurrentPage().setSelected(item);
		return item;
	}
	
	canvas.utils.scaleText = function(val) {
		if ( canvas.utils.methodExists(canvas.getCurrentPage().getSelection(), 'scale') )
			canvas.getCurrentPage().getSelection().scale(val);
	}
	
	canvas.utils.sizeText = function(val) {
		if ( canvas.getCurrentPage().utils.methodExists(canvas.getCurrentPage().getSelection(), 'size') )
			canvas.getCurrentPage().getSelection().size(val);
	}
	
	canvas.utils.shapeText = function(shape) {
		if ( canvas.getCurrentPage().getSelection() ) {
			return canvas.getCurrentPage().utils.shapeTextObj(canvas.getCurrentPage().getSelection(), shape);
		}
	}
	
	canvas.utils.shapes = function() {};

	canvas.utils.shapes.SemiCircle_Upper = "Upper Semi-Circle";
	canvas.utils.shapes.SemiCircle_Lower = "Lower Semi-Circle";
	canvas.utils.shapes.Wave = "Wave";
	canvas.utils.shapes.Circle = "Full Circle";
		
	canvas.utils.shapeTextObj = function(textObject, shape) {
		if ( typeof(shape) == 'undefined' ) {
			shape = 'Upper Semi-Circle';
		}
		if ( textObject.typeName == 'activa.canvas::ShapedText' ) {
			textObject.setType(shape);
			return textObject;
		}
		if ( textObject.typeName != 'activa.canvas::TextItem' ) {
			return;
		}
		var t = canvas.create('activa.canvas.ShapedText');
		canvas.getCurrentPage().canvasAddChild(t);
		t.setup(textObject, shape);
		return t;
	}
	
	canvas.utils.colorText = function(color) {
		if ( typeof(color) == 'string' ) {
			color = parseInt('0x'+color);
		}
		if ( canvas.getCurrentPage().getSelection().typeName == 'activa.canvas::TextItem' || canvas.getCurrentPage().getSelection().typeName == 'activa.canvas::ShapedText') {
			canvas.getCurrentPage().getSelection().setColor(color);
		}
	}
	
	canvas.utils.uploadImage = function() {
		var i = canvas.create('activa.canvas.ImageItem');
		canvas.getCurrentPage().canvasAddChild(i);
		i.upload();
		canvas.getCurrentPage().setSelected(i);
		return i;
	}
	
	canvas.utils.downloadImage = function(url) {
		var i = canvas.create('activa.canvas.ImageItem');
		canvas.getCurrentPage().canvasAddChild(i);
		i.download(url);
		canvas.getCurrentPage().setSelected(i);
		return i;
	}
	
	canvas.utils.scaleImage = function(scale) {
		if ( canvas.getCurrentPage().getSelection().typeName != 'activa.canvas::ImageItem' ) {
			return;
		}
		canvas.getCurrentPage().getSelection().setSize(canvas.getCurrentPage().getSelection().getWidth() * scale, canvas.getCurrentPage().getSelection().getHeight() * scale);
	}
	
	canvas.utils.scaleImageHeight = function(scale) {
		if ( canvas.getCurrentPage().getSelection().typeName != 'activa.canvas::ImageItem' ) {
			return;
		}
		canvas.getCurrentPage().getSelection().setSize(canvas.getCurrentPage().getSelection().getWidth(), canvas.getCurrentPage().getSelection().getHeight() * scale);
	}
	
	canvas.utils.scaleImageWidth = function(scale) {
		if ( canvas.getCurrentPage().getSelection().typeName != 'activa.canvas::ImageItem' ) {
			return;
		}
		canvas.getCurrentPage().getSelection().setSize(canvas.getCurrentPage().getSelection().getWidth() * scale, canvas.getCurrentPage().getSelection().getHeight());
	}
	
	canvas.utils.remove = function() {
		canvas.getCurrentPage().canvasRemoveChild(canvas.getCurrentPage().getSelection());
		if ( canvas.getCurrentPage().getNumChildren() > 0 ) {
			canvas.getCurrentPage().setSelection(canvas.getCurrentPage().canvasGetChildAt(canvas.getCurrentPage().getNumChildren() - 1));
		}
	}
	
	canvas.utils.duplicate = function() {
		canvas.utils.duplicateObj(canvas.getCurrentPage().getSelection());
	}
	
	canvas.utils.duplicateObj = function(obj) {
		if ( !canvas.utils.methodExists(obj, 'serialize' ) ) {
			return;
		}
		var type = obj.typeName;
		var dest = canvas.create(type.replace("::", "."));
		dest.setX(obj.getX() - Math.random() * 10 + 5);
		dest.setY(obj.getY() - Math.random() * 10 - 5);
		canvas.getCurrentPage().canvasAddChild(dest);
		dest.deserialize(obj.serialize());
		canvas.getCurrentPage().setSelection(dest);
		return dest;
	}
	
	canvas.utils.arrangeFront = function() {
		if ( canvas.getCurrentPage().canvasGetChildIndex(canvas.getCurrentPage().getSelection()) < canvas.getCurrentPage().getNumChildren() - 1 ) {
			canvas.getCurrentPage().canvasSetChildIndex(canvas.getCurrentPage().getSelection(), canvas.getCurrentPage().canvasGetChildIndex(canvas.getCurrentPage().getSelection()) + 1);
		}
	}
	
	canvas.utils.arrangeBack = function() {
		if ( canvas.getCurrentPage().canvasGetChildIndex(canvas.getCurrentPage().getSelection()) > 0 ) {
			canvas.getCurrentPage().canvasSetChildIndex(canvas.getCurrentPage().getSelection(), canvas.getCurrentPage().canvasGetChildIndex(canvas.getCurrentPage().getSelection()) - 1);
		}
	}
	
	canvas.utils.bringFront = function() {
		if ( canvas.getCurrentPage().canvasGetChildIndex(canvas.getCurrentPage().getSelection()) < canvas.getCurrentPage().getNumChildren() - 1 ) {
			canvas.getCurrentPage().canvasSetChildIndex(canvas.getCurrentPage().getSelection(), canvas.getCurrentPage().getNumChildren() - 1);
		}
	}
	
	canvas.utils.sendBack = function() {
		if ( canvas.getCurrentPage().canvasGetChildIndex(canvas.getCurrentPage().getSelection()) > 0 ) {
			canvas.getCurrentPage().canvasSetChildIndex(canvas.getCurrentPage().getSelection(), 0);
		}
	}
	
	canvas.utils.rotateRight = function(deg) {
		canvas.getCurrentPage().getSelection().rotate(deg);
	}
	
	canvas.utils.rotateLeft = function(deg) {
		canvas.getCurrentPage().getSelection().rotate(-deg);
	}
	
	canvas.utils.setBackgroundColor = function(color) {
		if ( typeof(color) == 'string' ) {
			color = parseInt('0x'+color);
		}
		canvas.getCurrentPage().setBackgroundColor(color);
	}
		
	canvas.utils.methodExists = function(obj, method) {
		if ( !obj ) {
			return false;
		}
		if ( !obj[method] ) {
			return false;
		}
		return true;
	}
}


