Object.extend(Event,{ 
	_domReady:function(){
		if(arguments.callee.done)return;
			arguments.callee.done=true;
	
		if(this._timer)
			clearInterval(this._timer);
	
		this._readyCallbacks.each(function(f){f()});
		this._readyCallbacks=null;
	},
	
	onDOMReady:function(f){
		if(!this._readyCallbacks){
			var domReady=this._domReady.bind(this);
		
			if(document.addEventListener)
				document.addEventListener("DOMContentLoaded",domReady,false);
			
			/*@cc_on @*/
			/*@if (@_win32)
				document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
				document.getElementById("__ie_onload").onreadystatechange = function() {
					if (this.readyState == "complete") domReady(); 
				};
			/*@end @*/
			
			if(/WebKit/i.test(navigator.userAgent)){
				this._timer=setInterval(function(){
					if(/loaded|complete/.test(document.readyState))domReady();
				},10);
			}
		
			Event.observe(window,'load',domReady);
			Event._readyCallbacks=[];
		}
		Event._readyCallbacks.push(f);
	}
});


if(typeof(AC)=="undefined")
	AC={};

AC.decorateSearchInput=function(field,options){
	
	var searchField=$(field);
	var standIn=null;
	
	var results=0;
	var placeholder='';
	var autosave='';
	
	if(options){
		if(options.results){
			results=options.results;
		}
		if(options.placeholder){
			placeholder=options.placeholder;
		}
		if(options.autosave){
			autosave=options.autosave;
		}
	}

	if(AC.Detector.isWebKit()){
		searchField.setAttribute('type','search');
		if(!searchField.getAttribute('results')){
			searchField.setAttribute('results',results);
		}
		if(null!=placeholder){
			searchField.setAttribute('placeholder',placeholder);
			searchField.setAttribute('autosave',autosave);
		}
	}else{
		searchField.setAttribute('autocomplete','off');
		standIn=document.createElement('input');
		searchField.parentNode.replaceChild(standIn,searchField)

		var left=document.createElement('span');
		Element.addClassName(left,'left');
		
		var right=document.createElement('span');
		Element.addClassName(right,'right');
		
		var reset=document.createElement('div');
		Element.addClassName(reset,'reset');
		
		var wrapper=document.createElement('div');
		Element.addClassName(wrapper,'search-wrapper');
		
		var alreadyHasPlaceholder=field.value==placeholder;
		var isEmpty=field.value.length==0;
		
		if(alreadyHasPlaceholder||isEmpty){
			searchField.value=placeholder;
			Element.addClassName(wrapper,'blurred');
			Element.addClassName(wrapper,'empty');
		}
		wrapper.appendChild(left);
		wrapper.appendChild(searchField);
		wrapper.appendChild(right);
		wrapper.appendChild(reset);
	
		var focus=function(){
			var blurred=Element.hasClassName(wrapper,'blurred');
			if(searchField.value==placeholder&&blurred){
				searchField.value='';
			}
			Element.removeClassName(wrapper,'blurred');
		}
		Event.observe(searchField,'focus',focus);
	
		var blur=function(){
			if(searchField.value==''){
				Element.addClassName(wrapper,'empty');
				searchField.value=placeholder;
			}
			
			Element.addClassName(wrapper,'blurred');
		}
		Event.observe(searchField,'blur',blur);
	
		var toggleReset=function(){
			if(searchField.value.length>=0){
				Element.removeClassName(wrapper,'empty');
			}
		}
		Event.observe(searchField,'keydown',toggleReset);
	
		var resetField=function(){
			return(function(evt){
				var escaped=false;
				if(evt.type=='keydown'){
					if(evt.keyCode!=27){
						return;
					}else{
						escaped=true;
					}
				}
	
				searchField.blur();
				searchField.value='';
				Element.addClassName(wrapper,'empty');
				searchField.focus();
			})
		}
		Event.observe(reset,'mousedown',resetField());
		Event.observe(searchField,'keydown',resetField());
	
		if(standIn){
			standIn.parentNode.replaceChild(wrapper,standIn);
		}
	}
}

var Element2={};
Element2.Methods={
	getInnerDimensions:function(element){

		element=$(element);
		var d=Element.getDimensions(element);

		var innerHeight=d.height;
		var styleOf=Element.getStyle;
		innerHeight-=styleOf(element,'border-top-width')&&styleOf(element,'border-top-width')!='medium'?parseInt(styleOf(element,'border-top-width'),10):0;
		innerHeight-=styleOf(element,'border-bottom-width')&&styleOf(element,'border-bottom-width')!='medium'?parseInt(styleOf(element,'border-bottom-width'),10):0;
		innerHeight-=styleOf(element,'padding-top')?parseInt(styleOf(element,'padding-top'),10):0;
		innerHeight-=styleOf(element,'padding-bottom')?parseInt(styleOf(element,'padding-bottom'),10):0;

		var innerWidth=d.width;
		innerWidth-=styleOf(element,'border-left-width')&&styleOf(element,'border-left-width')!='medium'?parseInt(styleOf(element,'border-left-width'),10):0;
		innerWidth-=styleOf(element,'border-right-width')&&styleOf(element,'border-right-width')!='medium'?parseInt(styleOf(element,'border-right-width'),10):0;
		innerWidth-=styleOf(element,'padding-left')?parseInt(styleOf(element,'padding-left'),10):0;
		innerWidth-=styleOf(element,'padding-right')?parseInt(styleOf(element,'padding-right'),10):0;
		
		return{width:innerWidth,height:innerHeight};
	},

	getOuterDimensions:function(element){
		element=$(element);
		var clone=element.cloneNode(true);
		
		document.body.appendChild(clone);
		Element.setStyle(clone,{position:"absolute",visibility:"hidden"});
		var d=Element.getDimensions(clone);
		
		var outerHeight=d.height;
		var styleOf=Element.getStyle;
		outerHeight+=styleOf(clone,'margin-top')?parseInt(styleOf(clone,'margin-top'),10):0;
		outerHeight+=styleOf(clone,'margin-bottom')?parseInt(styleOf(clone,'margin-bottom'),10):0;
		
		var outerWidth=d.width;
		outerWidth+=styleOf(clone,'margin-left')?parseInt(styleOf(clone,'margin-left'),10):0;
		outerWidth+=styleOf(clone,'margin-right')?parseInt(styleOf(clone,'margin-right'),10):0;
		
		Element.remove(clone);
		
		return{width:outerWidth,height:outerHeight};
	},
	
	removeAllChildNodes:function(element){
		element=$(element);
		if(!element){return;}
		
		while(element.hasChildNodes()){
			element.removeChild(element.lastChild);
		}
	}
};

Object.extend(Element,Element2.Methods);


