// Prototype fixes
Position.page = function(forElement) {
	var valueT = 0, valueL = 0;

	do {
		valueL += forElement.offsetLeft || 0;
		valueT += forElement.offsetTop || 0; 
		
		var disp = Element.getStyle(forElement,'display');
		if (  (disp != 'inline') && (disp != 'table-row')  &&  (forElement.nodeName!='BODY')  ) {
			valueL -= forElement.scrollLeft || 0;
			valueT  -= forElement.scrollTop || 0; 
		}
	} while (forElement = forElement.offsetParent);

	return [valueL, valueT];
}
	
// Extensions
Ajax.fwAutocompleter = Class.create();
Object.extend(Ajax.fwAutocompleter.prototype, Ajax.Autocompleter.prototype);
Object.extend(Ajax.fwAutocompleter.prototype, {
	startIndicator: function() {
		if (  (this.options.indicatorclass)  &&  (!this.element.hasClassName(this.options.indicatorclass))  )
			this.element.addClassName(this.options.indicatorclass);

		if(this.options.indicator) Element.show(this.options.indicator);
	},
	
	stopIndicator: function() {
		if (  (this.options.indicatorclass)  &&  (this.element.hasClassName(this.options.indicatorclass))  )
			this.element.removeClassName(this.options.indicatorclass);
		
		if(this.options.indicator) Element.hide(this.options.indicator);
	},
	
	setOptions: function(options) {
			this.options = Object.extend({ 
			minChars: this.minChars || 3,
			onShow: function (element, update){
				if(!update.style.position || update.style.position=='absolute') {
					update.style.position = 'absolute';
					Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
				}
				Effect.Appear(update,{duration:0.2});
			},
			
			onHide: function (element, update){
				new Effect.Fade(update,{duration:0.2})
			}
		
		}, options || {});
		
	}
});


fwLoadingList = function(objid) {
	var loaderid = objid + 'Loader';
	var obj = $(objid);
	
	new Insertion.Top(obj,'<div id="' + loaderid + '" class="AjaxListLoader" style="display:none">Loading</div>');
	var loader = $(loaderid);
	loader.style.position = 'absolute';
	
	
	var orgdim = obj.getDimensions();
	
	// Netscape workaround
	loader.show();
	var loaderdim = loader.getDimensions();
	loader.hide();
	
	Position.clone(obj, loader, {
		offsetLeft: Math.floor((orgdim.width-loaderdim.width)/2),
		offsetTop: Math.floor((orgdim.height-loaderdim.height)/2),
		setWidth: false,
		setHeight: false});

	Effect.Appear(loader, {duration: 0.2});
}

