// JavaScript Document

function swapAllCheckbox(obj,form,inputname){
	form.getInputs("checkbox",inputname).each(function(ele){ele.checked=obj.checked;});
}
function openwin(url,p){
	var features=$H({
		directories:"no",
		toolbar:"no",
		menubar:"no",
		location:"no",
		resizable:"no",
		scrollbars:"no",
		status:"no"
	});
	
	var cfeatures={
		width:p.width,
		height:p.height,
		left:(screen.width-p.width)/2,
		top:(screen.height-p.height)/2
	};
	
	features = $H(features).merge(cfeatures);
	
	delete p.width;
	delete p.height;
	features = $H(features).merge(p);

	
	return open(url,"",features.invoke('join','=').join(','));
}

var Cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled=='boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') == '1');
  }
}


String.prototype.qupdate=function(params){
	path = this.replace(/(\?.*)?$/,'');
	uparams = Object.extend(this.toQueryParams(),params);
	return path+"?"+$H(uparams).toQueryString();
}

Object.extend(Number.prototype, {
	format:function(f){
		if(f==undefined) f=2;
		var r=[];
		i=0;
		n=String(this.toFixed(f)).split('.');
		n[0].toArray().reverse().each(
			function(c){
				if(((i++)%3)==0){
					r.push(",");
					r.push(c);	
				}else{
					r.push(c);	
				}
				
			}
		);
		
		if(n.length==1){
			return Number(r.reverse().join('').sub(/,$/,''))	
		}else{
			return r.reverse().join('').sub(/,$/,'')+'.'+n[1]
		}
	}
});

Object.extend(String.prototype, {
	isEmail:function(){
		s = this.strip();
		return 	/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(s);
	}
});






var ua = navigator.userAgent.toLowerCase();

isStrict = document.compatMode == "CSS1Compat",
isOpera = ua.indexOf("opera") > -1,
isSafari = (/webkit|khtml/).test(ua),
isIE = !isOpera && ua.indexOf("msie") > -1,
isIE7 = !isOpera && ua.indexOf("msie 7") > -1,
isGecko = !isSafari && ua.indexOf("gecko") > -1,
isBorderBox = isIE && !isStrict,
isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1),
isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1),
isLinux = (ua.indexOf("linux") != -1),
isSecure = window.location.href.toLowerCase().indexOf("https") === 0;




Object.extend(Hash.prototype, {
       isDiff:function(h){
		   		var tobj = this.toObject();
               return !this.keys().all(function(k){return tobj[k]==h[k]}.bind(this));
       }
});



Element.addMethods('FORM',{
	  linkaction:function(form,url){
		  form.action=url;
		  if(form.onsumbit) {
			if(form.onsubmit()==false){
				return false;
			}
		  }
		  
		  form.submit();
	  },
	  required:function(form,classname,options){
			var fail=false;
			var radios={};
			form.getElementsBySelector("input."+classname,"textarea."+classname,"select."+classname).each(
				function(ele){
					
					if((ele.type=="text"||ele.type=="textarea" ||ele.type=="password" || ele.tagName=="SELECT") && !ele.present()){ 
						ele.addClassName(options.spotclass);
						fail=true;
					}else{
							
						ele.removeClassName(options.spotclass);
					} 
					
					if(ele.type=="radio") {
						if(!radios[ele.name]) radios[ele.name]=[];
						radios[ele.name].push(ele);
					}
				}
			);
			$H(radios).each(
				function(pair){
					if(!pair.value.any(function(ele){return ele.checked})){
						pair.value.invoke("addClassName",options.spotclass);
						fail=true;
					}
				}
			);
			return !fail;
	  },
	  getMissingInputs:function(form,classname){
		  	var invalid_input_eles=[];
			
			var fail=false;
			var radios={};
			form.select("input."+classname,"textarea."+classname,"select."+classname).each(
				function(ele){
					
					if(ele.disabled) return;
					if((ele.type=="text"||ele.type=="textarea" ||ele.type=="password" || ele.tagName=="SELECT") && !ele.present()){ 
						invalid_input_eles.push(ele);
					} 
					
					if(ele.type=="checkbox") {
						if(!ele.checked) invalid_input_eles.push(ele);
					}
					
					if(ele.type=="radio") {
						if(!radios[ele.name]) radios[ele.name]=[];
						radios[ele.name].push(ele);
					}
				}
			);
			
			$H(radios).each(
				function(pair){
					if(!pair.value.any(function(ele){return ele.checked})){
						
						//pair.value.invoke("addClassName",options.spotclass);
						invalid_input_eles=invalid_input_eles.concat(pair.value);
					}
				}
			);
			
			return invalid_input_eles;
		}
 	}
);

var __cmps={};
function regcmp(objcmp,id){
	ele = $(objcmp.ele || objcmp.element);
	if(!id) id=ele.identify();
	__cmps[id]=objcmp;
}

function getcmp(ele){
	return __cmps[Object.isElement(ele)?ele.identify():ele];
}


