// Unicodé

var mouseCoords = { x : 0, y : 0 };
var zIndexed = {};

jQuery.fn.extend({
	coords : function(arg_1, arg_2, arg_3) {
		if(isset(arg_1) === false) {
			var obj = $(this).get(0);
			
			if(isset(obj) === false) {
				return { left : 0, top : 0 };	
			}
			
			var curLeft = obj.offsetLeft || 0;
			var curTop = obj.offsetTop || 0;
			
			while (obj = obj.offsetParent) {
				curLeft += obj.offsetLeft
				curTop += obj.offsetTop
			}
			
			return { left : curLeft, top : curTop};
		}
		
		var obj = $(this);
		
		if(arg_1 == 'mouse') {
			var left = mouseCoords.x;
			var top = mouseCoords.y;
			var always_visible = true;
		}
		else if(isset(arg_2)) {
			var always_visible = (isset(arg_3) && arg_3 ? true : false);
			var obj = $(this);
			
			var left = Math.round(arg_1);
			var top = Math.round(arg_2);
		}
		
		if(left == -1 && top == -1) {
			left = ((Math.round(client('width') / 2) - Math.round(obj.outerWidth() / 2)) + scroll_left());
			top = ((Math.round(client('height') / 2) - Math.round(obj.outerHeight() / 2)) + scroll_top());
		}
		
		if(left < 0) {
			left = 0;
		}
		
		if((left + obj.outerWidth()) > (client('width') + scroll_left())) {
			left = (((client('width') + scroll_left()) - obj.outerWidth()) - 5);
		}
		
		if(top < 0) {
			top = 5;	
		}
		
		if(always_visible) {
			if((top + obj.outerHeight()) > (client('height') + scroll_top())) {
				top = (((client('height') + scroll_top()) - obj.outerHeight()) - 5);
			}
			
			if(top < scroll_top()) {
				top = scroll_top();	
				
				if(top == 0) {
					top = 5;	
				}
			}
		}
		
		obj.css('left', left).css('top', top);
		
		return obj;
	},
	create : function(cfg) {
		cfg = array_merge({
			parent : 'body',
			tag : 'div'
		}, cfg);
		
		if($(this).size() > 0) {
			return $(this);	
		}
		
		var id = str_replace('#', '', $(this).selector);
		var obj = $(document.createElement(cfg.tag));
		
		if(id != '') {
			obj.attr('id', id);
		}
			
		if(cfg.parent == 'body') {
			$(document.body).append(obj);
		}
		else {
			$('#'+cfg.parent).append(obj);
		}
		
		return obj;
	},
	limit : function(show_words) {
		var obj = $(this);
		var id = obj.attr('id');
		
		if(isset(show_words) === false) {
			show_words = true;	
		}
	
		var chars_max = parse_int($('#'+id+'_chars_max').html());
		
		if(strlen(obj.val()) > chars_max) {
			obj.val(sub_str(obj.val(), 0, chars_max));
									
			return false;
		}
		
		var value = obj.val();
		var buffer = '';
		
		if(show_words) {
			var spl = value.split(' ');
			var words = (value == '' ? 0 : spl.length);
	
			if(words > 0) {
				buffer += 	words+' mot'+s(words)+' - ';
			}
			
			buffer += strlen(value);
		}
		else {
			buffer += strlen(value);
		}
		
		$('#'+id+'_chars_used').html(buffer);
		
		return true;
	},
	mouseCoords : function() {
		return mouseCoords;
	},
	setScrollTop : function(child_id, offset) {
		if(isset(offset) === false) {
			offset = 15;	
		}
		
		var obj = $(this);

		obj.scrollTop((Math.round($('#'+child_id).position().top - obj.position().top) + obj.scrollTop()) - offset);

		return obj;
	},
	tagName : function() {
		return this.get(0).tagName;
	},
	zIndexize : function() {
		var obj = $(this);
		var id = obj.attr('id');
	
		if(id == '') {
			return obj;	
		}
		
		if(obj.css('z-index') != 100) {
			zIndexed[id] = obj.css('z-index');
		}
		
		var k = '';
		
		for(k in zIndexed) {
			$('#'+k).css('z-index', zIndexed[k]);
		}
		
		obj.css('z-index', 100);
		
		return obj;
	}
});

$(document).ready(function() {
	$(document).mousemove(function(event) {
		var x = 0;
		var y = 0;
		var doc = (document.documentElement && document.documentElement.clientWidth ? document.documentElement : document.body);
		
		if(event && event.pageX && event.pageY) {
			x = event.pageX;
			y = event.pageY;
		}
		else {		
			var x = (event.clientX + doc.scrollLeft);
			var y = (event.clientY + doc.scrollTop);
		}
		
		mouseCoords = { x : x, y : y };
	})
});