// jq_utils.js

$.fn.inset = function(dH, dW)
	{
	var elem = $(this);
	var r = new Rect()
		.getElem(elem)
		.inset(dH, dW)
		.setElem(elem);
	delete r;
	return elem;
	}

$.fn.move = function(h, w)
	{
	var elem = $(this);
	var r = new Rect()
		.getElem(elem)
		.move(h, w)
		.setElemPos(elem);
	delete r;
	return elem;
	}

$.fn.left = function()
	{
	var pos = $(this).position();
	var left = pos.left;
	delete pos;
	return left;
	}

$.fn.top = function()
	{
	var pos = $(this).position();
	var top = pos.top;
	delete pos;
	return top;
	}

$.fn.attrZero = function(attr)
	{
	var val = $(this).attr(attr);
	if (val) return $(this).attr(attr);
	return 0;
	}

$.fn.positionTL = function()
	{
	return {top:parseInt($(this).css("top")),left:parseInt($(this).css("left"))};
	}

$.fn.centerInPar = function()
	{
	var elem = $(this);
	var parRect = new Rect().getElem(elem.parent());
	var r = new Rect().getElem(elem)
	.centerInRect(parRect)
	.setElemPos(elem);
	delete r;
	delete parRect;
	return elem;
	}
	
$.fn.hcenterInPar = function()
	{
	var elem = $(this);
	var parRect = new Rect().getElem(elem.parent());
	var r = new Rect().getElem(elem)
	.hcenterInRect(parRect)
	.setElemPos(elem);
	delete r;
	delete parRect;
	return elem;
	}
	
$.fn.progressbar = function(max, value)
	{
	$(this).children().css("width",parseInt(($(this).width()*value)/max));
	return $(this);
	}
	
$.fn.toLocal = function(pt)
	{
	var pos = $(this).offset();
	pt.top -= pos.top;
	pt.left -= pos.left;
	return $(this);
	}
	
$.fn.toGlobal = function(pt)
	{
	var pos = $(this).offset;
	pt.top += pos.top;
	pt.left += pos.left;
	return $(this);
	}
$.fn.copyRectFromEl = function(el)
	{
	var r = new Rect().getElem(el);
	r.setElem($(this));
	delete r;
	return $(this);
	}
	
//------------------------------------------
$.fn.parClass = function(klass)
	{
	var elem = $(this);
	if (elem.hasClass(klass)) return elem;
	elem = elem.parent();
	while(elem)
		{
		if (elem.hasClass(klass)) return elem;
		elem = elem.parent();
		}
	}
//------------------------------------------
$.fn.moveInPar = function(top, left, padding)
	{
	var el = $(this);
	var p = el.parent();
	top += p.scrollTop();
	left += p.scrollLeft();
	var par = new Rect().getElem(p).move(p.scrollTop(), p.scrollLeft());
	if (padding) par.inset(padding,padding);
	var r = new Rect().getElem(el).move(top,left).keepInRect(par);
	el.css({top:r.top, left:r.left});
	return $(this);
	}

//------------------------------------------
$.fn.appendTxt = function(txt, blanks)
	{
	if (blanks) var sp = nbsp(blanks);
	else sp = "";
	txt = $("<a>"+sp+txt+"</a>")
	.disableTextSelect()
	.css({cursor:"pointer"})
	.appendTo($(this));
	return txt;
	}
	
//------------------------------------------
$(function(){
$.extend($.fn.disableTextSelect = function() {
		return this.each(function(){
			if($.browser.mozilla){//Firefox
				$(this).css('MozUserSelect','none');
			}else if($.browser.msie){//IE
				$(this).bind('selectstart',function(){return false;});
			}else{//Opera, etc.
				$(this).mousedown(function(){return false;});
			}
		});
	});
	$('.noSelect').disableTextSelect();//No text selection on elements with a class of 'noSelect'
});	

//------------------------------------------
$.fn.cover = function(killfunc)
	{
	$(this).addClass("cover")
	.css({zIndex: 32767})
	.bind("mousedown",function(){
		if (killfunc) killfunc();
		$(this).remove();return false;})
	.appendTo($("body"));
	return $(this);
	}
//------------------------------------------
$.fn.saveRect = function(r)
	{
	var e = $(this);
	if (r) r.set(e.attr("savTop"), e.attr("savLeft"),e .attr("savHeight"), e.attr("savWidth"));
	else
		{
		e.attr("savTop", parseInt(e.css("top")));
		e.attr("savLeft", parseInt(e.css("left")));
		e.attr("savHeight", parseInt(e.css("height")));
		e.attr("savWidth", parseInt(e.css("width")));
		}
	}

//---------------------------------
$.fn.hoverClass = function(className)
	{
	$(this).hover(function(){$(this).addClass(className);}, 
	function(){$(this).removeClass(className);});
	return $(this).each(function(){
	});
	}
