var canvas;


FABridge.addInitializationCallback('canvas', initCanvas);

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

	canvas.create = function(name) { return FABridge.canvas.create(name); }
	canvas.classRef = function(name) { return FABridge.canvas.classRef(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.canvasAddChild(item);
		canvas.setSelected(item);
		return item;
	}
	
	canvas.utils.setFont = function(fontName) {
		if ( canvas.utils.methodExists(canvas.getSelection(), 'setFont') ) {
			var font = canvas.utils.getFontManager().getFontNames().get(fontName);
			if ( font ) {
				canvas.getSelection().setFont(font);
			}
		}
	}
	
	canvas.utils.getFontManager = function() {
		return canvas.classRef('activa.canvas.FontManager').getInstance();
	}
	
	canvas.utils.scaleText = function(val) {
		if ( canvas.utils.methodExists(canvas.getSelection(), 'scale') )
			canvas.getSelection().scale(val);
	}
	
	canvas.utils.sizeText = function(val) {
		if ( canvas.utils.methodExists(canvas.getSelection(), 'size') )
			canvas.getSelection().size(val);
	}
		
	canvas.utils.colorText = function(color) {
		if ( typeof(color) == 'string' ) {
			color = parseInt('0x'+color);
		}
		if ( canvas.getSelection().typeName == 'activa.canvas::TextItem' ) {
			canvas.getSelection().setColor(color);
		}
	}
	
	canvas.utils.uploadImage = function() {
		var i = canvas.create('activa.canvas.ImageItem');
		canvas.canvasAddChild(i);
		i.upload();
		canvas.setSelected(i);
		return i;
	}
	
	canvas.utils.downloadImage = function(url) {
		var i = canvas.create('activa.canvas.ImageItem');
		canvas.canvasAddChild(i);
		i.download(url);
		canvas.setSelected(i);
		return i;
	}
	
	canvas.utils.scaleImage = function(scale) {
		if ( canvas.getSelection().typeName != 'activa.canvas::ImageItem' ) {
			return;
		}
		canvas.getSelection().setSize(canvas.getSelection().getWidth() * scale, canvas.getSelection().getHeight() * scale);
	}
	
	canvas.utils.scaleImageHeight = function(scale) {
		if ( canvas.getSelection().typeName != 'activa.canvas::ImageItem' ) {
			return;
		}
		canvas.getSelection().setSize(canvas.getSelection().getWidth(), canvas.getSelection().getHeight() * scale);
	}
	
	canvas.utils.scaleImageWidth = function(scale) {
		if ( canvas.getSelection().typeName != 'activa.canvas::ImageItem' ) {
			return;
		}
		canvas.getSelection().setSize(canvas.getSelection().getWidth() * scale, canvas.getSelection().getHeight());
	}
	
	canvas.utils.remove = function() {
		canvas.canvasRemoveChild(canvas.getSelection());
		if ( canvas.getNumChildren() > 0 ) {
			canvas.setSelection(canvas.canvasGetChildAt(canvas.getNumChildren() - 1));
		}
	}
	
	canvas.utils.duplicate = function() {
		canvas.utils.duplicateObj(canvas.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.canvasAddChild(dest);
		dest.deserialize(obj.serialize());
		canvas.setSelection(dest);
		return dest;
	}
	
	canvas.utils.arrangeFront = function() {
		if ( canvas.canvasGetChildIndex(canvas.getSelection()) < canvas.getNumChildren() - 1 ) {
			canvas.canvasSetChildIndex(canvas.getSelection(), canvas.canvasGetChildIndex(canvas.getSelection()) + 1);
		}
	}
	
	canvas.utils.arrangeBack = function() {
		if ( canvas.canvasGetChildIndex(canvas.getSelection()) > 0 ) {
			canvas.canvasSetChildIndex(canvas.getSelection(), canvas.canvasGetChildIndex(canvas.getSelection()) - 1);
		}
	}
	
	canvas.utils.bringFront = function() {
		if ( canvas.canvasGetChildIndex(canvas.getSelection()) < canvas.getNumChildren() - 1 ) {
			canvas.canvasSetChildIndex(canvas.getSelection(), canvas.getNumChildren() - 1);
		}
	}
	
	canvas.utils.sendBack = function() {
		if ( canvas.canvasGetChildIndex(canvas.getSelection()) > 0 ) {
			canvas.canvasSetChildIndex(canvas.getSelection(), 0);
		}
	}
	
	canvas.utils.rotateRight = function(deg) {
		canvas.getSelection().rotate(deg);
	}
	
	canvas.utils.rotateLeft = function(deg) {
		canvas.getSelection().rotate(-deg);
	}
	
	canvas.utils.setBackgroundColor = function(color) {
		if ( typeof(color) == 'string' ) {
			color = parseInt('0x'+color);
		}
		canvas.setBackgroundColor(color);
	}
		
	canvas.utils.methodExists = function(obj, method) {
		if ( !obj ) {
			return false;
		}
		if ( !obj[method] ) {
			return false;
		}
		return true;
	}
}



