var ajax = new function(){
	var getRO = function(){return (navigator.appName == "Microsoft Internet Explorer") ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();}
	this.get = function(url,handler) {
		var http = getRO();
		http.open('get', url, true);
		http.onreadystatechange = function(){
			if(http.readyState == 4 && http.status == 200) handler(http.responseText);
		};
		http.send(null);
		return false;
	}
	this.post = function(url,handler,data){
		var form = typeof(data) == "string" ? document.getElementById(data) : data;
		if(form && form.nodeName == "FORM"){
			for(var i=0,item,data=''; item=form.elements[i];i++){
				if(item.type == "select-multiple"){
					for(var p=0,opt; opt=item.options[p]; p++) if(opt.selected == true) data += item.name+"[]="+opt.value.replace("&","%26")+"&";
				} else if(item.type){
					data += ((item.type != "checkbox" && item.type != "radio") || item.checked == true) ? item.name+"="+item.value.replace("&","%26")+"&" : "";
				}
			}
			data = data.substr(0,(data.length - 1));
		} else if(typeof(data) == "object" && data.length && data.join){
			data = data.join('&');
		}
		var http = getRO();
		http.open('post', url);
		http.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
		//http.setRequestHeader("Content-length", data.length);
		//http.setRequestHeader("Connection", "close");
		http.onreadystatechange = function(){
			if(http.readyState == 4 && http.status == 200) handler(http.responseText);
		};
		http.send(data);
	}
}
var Placeholders = new function(){
	var set = function(input){
		if(input.getAttribute('placeholder') && !input.placeholder_activated){
			input.focusPL = function(){
				if(this.value == this.getAttribute('placeholder')){
					var el = this;
					if(this.oldType){
						el = newEl('input',{'type':this.oldType,'name':el.name,'placeholder':el.getAttribute('placeholder')});
						this.parentNode.replaceChild(el, this);
						el.focus(); el.focus(); set(el);
					}
					el.value = '';
					el.style.color='';
				}
			}
			input.blurPL = function(){
				if(this.value==''){
					var el = this;
					if(this.type == 'password'){ 
						el = newEl('input', {'type':'text','name':el.name,'placeholder':el.getAttribute('placeholder')});
						this.parentNode.replaceChild(el, this);
						el.oldType='password'; set(el);
					}
					el.value = this.getAttribute('placeholder');
					el.style.color= this.getAttribute('color') ? this.getAttribute('color') :'#888888';
				}
			}
			addEvent(input, "focus", input.focusPL);
			addEvent(input, "blur", input.blurPL);
			input.placeholder_activated = true;
			initForm(input.form);
			return true;
		}
	}
	this.activate = function(el){
		if(el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"){
			set(el); el.blurPL();
		} else{
			for(var i=0, tag, tags = ['input','textarea']; tag=tags[i]; i++){
				for(var j=0, input,inputs=el.getElementsByTagName(tag); input=inputs[j]; j++){
					if(set(input))	input.blurPL();
				}
			}
		}
	}
	var initForm = function(form){
		if(!form.placeholderSubmit){
			var old_onsubmit = form.onsubmit;
			form.onsubmit = function(){
				for(var j=0, input; input=form.elements[j]; j++){
					 if(input.focusPL) input.focusPL();
				}
				if(typeof(old_onsubmit) == "function"){
					form.onsubmit = old_onsubmit;
					return form.onsubmit();
				} else{
					return true;
				}
			}
			form.placeholderSubmit = true;
		}
	}
	var addEvent = function(el, event, func){
		if(el.attachEvent) el.attachEvent('on'+event, function(){func.call(el);});
		else el.addEventListener(event, func, false );
	}
	// INITIALIZE 
	addEvent(window, "load", function(){Placeholders.activate(document)});
}
	
function $(id){
	return document.getElementById(id);
}
function newEl(el,attrs,styles){
	if(el.toUpperCase() == "TEXT"){
		var el = document.createTextNode(attrs);
	} else{
		var el = document.createElement(el);
		if(attrs){
			for(attr in attrs){
				if(attr == "class"){ 
					el.className = attrs[attr]
				}else{
					if(attr == "type" && (el.nodeName == "INPUT" || el.nodeName == "BUTTON" || el.nodeName == "SELECT")){
						// I HATE INTERNET EXPLORER!!!!!!!!!!!!!!!!!!!!!!!!!!
						var k = document.createElement('div');
						k.innerHTML = "<"+el.nodeName+" type='"+attrs[attr]+"'>";
						el = k.firstChild;
					} else{
						el.setAttribute(attr,attrs[attr]);
						el[attr] = attrs[attr]; 
					}
				}
			}
		}
		if(styles) setStyle(el,styles);
	}
	return el;	
}

function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
	obj.addEventListener( type, fn, false );
  return {'obj':obj,'type':type,'fn':fn};
}
function removeEvent( obj, type, fn ) {
	if(obj){
		if(obj.obj){
			removeEvent(obj.obj,obj.type,obj.fn);
			delete obj;
			return;	
		} else{
		  if ( obj.detachEvent ) {
			obj.detachEvent( 'on'+type, obj[type+fn] );
			obj[type+fn] = null;
		  } else
			obj.removeEventListener( type, fn, false );
		}
	}
}
function hasClassName(el,className){
	var classRegexp = new RegExp("( |^)"+className+"( |$)", "i");
	return classRegexp.test(el.className);
}
function addClassName (el, className) {
    if(!hasClassName(el,className)) el.className = (el.className + " " + className).trim();
}
function removeClassName (el, className) {
	var classRegexp = new RegExp("( |^)"+className+"( |$)", "i");
    el.className = el.className.replace(classRegexp, "$1");
}
function removeChildren(el){ while(el.hasChildNodes()) el.removeChild(el.firstChild);}
Array.prototype.inArray = function(a){for(var i=0;i<=this.length;i++) if(this[i] == a) return true; return false;}
String.prototype.trim =  function() { var str = this.replace(/^\s\s*/, ''), ws = /\s/, i = str.length; while (ws.test(str.charAt(--i))); return str.slice(0, i + 1);}


