Calender=function(utc){
	this.id=null;
	this.class_name=null;
	this.container=null;
	this.utc=false;

	if(utc==true){
		this.utc=true;
	}

	this.now=new Date();
	this.current_date=new Date(this.toString(this.now));

	this.on_DATE_CHANGE=null;
}
Calender.prototype.broadcast_DATE_CHANGE=function(){
	if(this.on_DATE_CHANGE!=null){
		this.on_DATE_CHANGE.apply(this,[this.current_date]);
	}
}
Calender.prototype.get_datetime=function(){
	return this.current_date;
}
Calender.prototype.set_datetime=function(date){
	this.current_date=date;
}
Calender.prototype.getFullYear=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCFullYear();
	}else{
		return date.getFullYear();
	}
}
Calender.prototype.getMonth=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCMonth();
	}else{
		return date.getMonth();
	}
}
Calender.prototype.getDate=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCDate();
	}else{
		return date.getDate();
	}
}
Calender.prototype.getDay=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCDay();
	}else{
		return date.getDay();
	}
}
Calender.prototype.getHours=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCHours();
	}else{
		return date.getHours();
	}
}
Calender.prototype.getMinutes=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCMinutes();
	}
	else{
		return date.getMinutes();
	}
}
Calender.prototype.getSeconds=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.getUTCSeconds();
	}else{
		return date.getSeconds();
	}
}
Calender.prototype.setFullYear=function(year,date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		date.setUTCFullYear(year);
	}
	else{
		date.setFullYear(year);
	}
}
Calender.prototype.setMonth=function(month,date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		date.setUTCMonth(month,1);
	}else{
		date.setMonth(month,1);
	}
}
Calender.prototype.setDate=function(date_value,date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		date.setUTCDate(date_value);
	}
	else{
		date.setDate(date_value);
	}
}
Calender.prototype.setHours=function(hours,date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		date.setUTCHours(hours);
	}else{
		date.setHours(hours);
	}
}
Calender.prototype.setMinutes=function(minutes,date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		date.setUTCMinutes(minutes);
	}else{
		date.setMinutes(minutes);
	}
}
Calender.prototype.setSeconds=function(seconds,date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		date.setUTCSeconds(seconds);
	}else{
		date.setSeconds(seconds);
	}
}
Calender.prototype.toString=function(date){
	if(date==null){
		date=this.current_date;
	}

	if(this.utc==true){
		return date.toUTCString();
	}else{
		return date.toString();
	}
}
Calender.prototype.broadcast_DATE_CHANGE=function(){
	if(this.on_DATE_CHANGE!=null){
		this.on_DATE_CHANGE.apply(this,[this.current_date]);
	}
}
Calender.prototype.build=function(div){
	if(div!=null){
		this.id=div.id;
		this.class_name=div.className;
		this.container=div;
	}

	if(this.container!=null){
		var new_calender=this.get_calender();
		new_calender.id=this.id;
		if(this.class_name!=""){
			new_calender.className=this.class_name;
		}

		this.container.parentNode.replaceChild(new_calender,this.container);

		this.container=new_calender;
	}
}
Calender.prototype.get_calender=function(){
	//header
	var calender=DOM.createElement("div");

	var back_arrow=DOM.createElement("div","<");
	back_arrow.className="back arrow";
	back_arrow.onclick=STD.delegate(this,this.previous_month);
	calender.appendChild(back_arrow);

	var next_arrow=DOM.createElement("div",">");
	next_arrow.className="next arrow";
	next_arrow.onclick=STD.delegate(this,this.next_month);
	calender.appendChild(next_arrow);

	var title=STD.months[this.getMonth()]+" "+this.getFullYear();

	var current_month_year=DOM.createElement("div",title);
	current_month_year.className="title";
	calender.appendChild(current_month_year);

	//days
	var days=DOM.createElement("div");
	days.className="days";

	var day;
	var i;
	for(i=0;i<7;i++){
		day=DOM.createElement("span",STD.short_days[i]);
		day.className="day";

		days.appendChild(day);
	}

	calender.appendChild(days);


	//dates
	var dates=DOM.createElement("div");
	dates.className="dates";

	var temp_date=new Date();
	this.setFullYear(this.getFullYear(),temp_date);
	this.setMonth(this.getMonth(),temp_date);
	this.setDate(1,temp_date);

	var current_month=this.getMonth(temp_date);

	var date_box;
	var working_date;

	for(i=0;i<this.getDay(temp_date);i++){
		date_box=this.build_blank_box();
		date_box.className="date blank";
		dates.appendChild(date_box);
	}

	while(this.getMonth(temp_date)==current_month){
		working_date=this.getDate(temp_date);

		date_box=this.build_date_box(temp_date);
		date_box.className="date";

		if(working_date==this.getDate() && this.getMonth(temp_date)==this.getMonth()){
			date_box.className+=" selected-date";
		}

		if(working_date==this.getDate(this.now) && this.getMonth(temp_date)==this.getMonth(this.now)){
			date_box.className+=" today-date";
		}

		dates.appendChild(date_box);

		this.setDate(working_date+1,temp_date);
	}

	calender.appendChild(dates);

	//today

	var today=DOM.createElement("div","Today: "+this.getFullYear(this.now)+"-"+STD.number_pad(this.getMonth(this.now),2)+"-"+STD.number_pad(this.getDate(this.now),2));
	today.onclick=STD.delegate(this,this.today);
	today.className="today";

	calender.appendChild(today);

	//return
	return calender;
}
Calender.prototype.build_blank_box=function(date){
	var box=DOM.createElement("span","blank");
	return box;
}
Calender.prototype.build_date_box=function(date){
	var box=DOM.createElement("span",this.getDate(date));
	box.onclick=STD.delegate(this,this.date_CLICK);

	return box;
}
Calender.prototype.next_month=function(){
	this.setMonth(this.getMonth()+1);
	this.build();

	this.broadcast_DATE_CHANGE();
}
Calender.prototype.previous_month=function(){
	this.setMonth(this.getMonth()-1);
	this.build();

	this.broadcast_DATE_CHANGE();
}
Calender.prototype.today=function(){
	this.setFullYear(this.getFullYear(this.now));
	this.setMonth(this.getMonth(this.now));
	this.setDate(this.getDate(this.now));

	this.build();

	this.broadcast_DATE_CHANGE();
}
Calender.prototype.date_CLICK=function(event){
	var target=STD.target(event);

	var date=target.firstChild.nodeValue;
	this.setDate(date);

	this.build();

	this.broadcast_DATE_CHANGE();
} 
document.write=function(value){
	//bit of a crazy function to be optimized latter

	var loc=null;
	var tag=null;

	var f=0;
	var l=0;
	var url="";

	var type=value.substr(0,4);

	switch(type){
		case "<scr":
			loc=DOM.getElementByTagName("head");

			f=value.indexOf('src="')+5;
			l=value.indexOf('">');
			url=value.substring(f,l);

			var mime_type="application/javascript";
			if(STD.browser_type()==STD.NON_STANDARD_BROWSER){
				mime_type="text/javascript";
			}

			tag=DOM.createElement("script");
			tag.setAttribute("type", mime_type);
			tag.setAttribute("src", url);

			break;
		case "<img":
			loc=DOM.getElementByTagName("body");

			f=value.indexOf('src="')+5;
			l=value.indexOf('" />');
			url=value.substring(f,l);

			tag=DOM.createElement("img");
			tag.setAttribute("src", url);
			break;
	}

	loc.appendChild(tag);
}

//DOM Class
DOM=function(){}

DOM.get_href_anchor=function(element){
	var href=element.getAttribute("href");

	if(href!=null){
		var start_index=href.indexOf("#");

		if(start_index>=0){
			var hash=href.substring(start_index+1);

			return hash;
		}
	}

	return null;
}
DOM.xpath=function(expression,doc,node){
	if(doc==null){
		doc=document;
	}

	if(node==null){
		node=doc.documentElement;
	}

	var nodes=new Array();
	var result;

	if(window.ActiveXObject){
		doc.setProperty("SelectionLanguage","XPath");
		result=node.selectNodes(expression);

		for(var i=0;i<result.length;i++){
			nodes.push(result[i]);
		}
	}else{
		result=doc.evaluate(expression, node, null, XPathResult.ANY_TYPE, null);

		var n=result.iterateNext();
		while(n){
			nodes.push(n);
			n=result.iterateNext();
		}
	}

	return nodes;
}
DOM.getElementById=function(id){
	return document.getElementById(id);
}
DOM.getElementByTagName=function(tag_name,element){
	var list=DOM.getElementsByTagName(tag_name,element);

	if(list!=null){
		return list[0];
	}else{
		return null;
	}
}
DOM.getElementsByTagName=function(tag_name,element){
	if(element==null){
		element=document;
	}

	var list=element.getElementsByTagName(tag_name);
	return list;
}
DOM.getElementByName=function(name){
	var list=DOM.getElementsByName(name);

	if(list!=null){
		return list[0];
	}else{
		return null;
	}
}
DOM.getElementsByName=function(name){
	return document.getElementsByName(name);
}
DOM.getElementByClassName=function(class_name,element){
	var list=DOM.getElementsByClassName(class_name,element);

	if(list!=null){
		return list[0];
	}else{
		return null;
	}
}
DOM.getElementsByClassName=function(class_name,element){
	if(element==null){
		element=document;
	}

	var list=null;

	if(element.getElementsByClassName){
		list=element.getElementsByClassName(class_name);
	}else{
		//walk tree
		list=new Array();

		var stack=new Array();
		var i=0;
		var node=null;

		stack.push(element);
		while(node!=null || stack.length>0){
			if(node!=null && node.childNodes.length>0){
				for(i=0;i<node.childNodes.length;i++){
					if(node.childNodes[i].nodeType==STD.element){
						stack.push(node.childNodes[i]);

						if(DOM.hasClass(node.childNodes[i],class_name)==true){
							list.push(node.childNodes[i]);
						}
					}
				}
			}

			node=stack.shift();
		}
	}

	return list;
}
DOM.hasClass=function(element,class_name){
	var rs="(^| )"+class_name+"( |$)";
	var re=new RegExp(rs);

	return re.test(element.className);
}
DOM.setClass=function(element,classes){
	element.className=classes;
}
DOM.addClass=function(element,class_name){
	if(DOM.hasClass(element,class_name)==false){
		if(element.className!=null && element.className!=""){
			class_name=" "+class_name;
		}

		element.className+=class_name;
	}
}
DOM.removeClass=function(element,class_name){
	if(DOM.hasClass(element,class_name)==true){
		var rs="(^| )"+class_name+"( |$)";
		var re=new RegExp(rs);

		DOM.setClass(element,element.className.replace(re,""));
	}
}
DOM.createElement=function(type,value){
	var element=document.createElement(type);

	if(value!=null){
		var text=document.createTextNode(value);
		element.appendChild(text);
	}

	return element;
}
DOM.createTextNode=function(value){
	return document.createTextNode(value);
}
DOM.removeChildren=function(node){
	while(node.hasChildNodes()){
		node.removeChild(node.firstChild);
	}
}
DOM.actualTop=function(node){
	var top=node.offsetTop;

	while(node=node.offsetParent){
		top+=node.offsetTop;
	}

	return top;
}
DOM.actualLeft=function(node){
	var left=node.offsetLeft;

	while(node=node.offsetParent){
		left+=node.offsetLeft;
	}

	return left;
} 
Reveal=function(){}

Reveal.load=function(node){
	var links;

	links=DOM.getElementsByClassName("reveal",node);
	Reveal.link_open(links);
}
Reveal.link_open=function(links){
	var url=window.location.href;
	var id=url.substring(url.indexOf("#"));

	var link;
	var link_url;

	for(var i=0;i<links.length;i++){
		link=links[i];
		link.onclick=Reveal.open;

		link_url=link.href.substring(link.href.indexOf("#"));

		if(link_url==id){
			link.onclick();
		}
	}
}
Reveal.open=function(node){
	if(node==null || node.nodeType!=1){
		var id=DOM.get_href_anchor(this);

		if(id!=null){
			node=DOM.getElementById(id);
		}
	}

	if(node!=null){
		var close=DOM.getElementByClassName("close",node);

		if(close==null){
			close=DOM.createElement("div","close");
			close.className="close small button";
			close.onclick=Reveal.close;

			node.appendChild(close);
		}

		node.style.display="block";

		return false;
	}

	return true;
}
Reveal.close=function(){
	this.parentNode.style.display="none";

	this.parentNode.removeChild(this);
} 
RSS_Parser=function(){}

RSS_Parser.load=function(xml,container_id,count){
	var container=DOM.getElementById(container_id);

	if(xml!=null && container!=null){
		var no_cache=new Date();

		var feed=xml+"?nocache="+no_cache.getTime();

		var request=STD.rpc(feed,"get");
		request.send(null);

		var data=request.responseXML;

		var rss_parser=new RSS_Parser();
		rss_parser.build(data,container,count);
	}
}
RSS_Parser.prototype.build=function(data,div,count){
	var items_array=data.getElementsByTagName("item");

	var i;
	var item;

	if(count==null || count>items_array.length){
		count=items_array.length;
	}

	var ul=DOM.createElement("ul");

	for(i=0;i<count;i++){
		item=this.create_item(items_array[i]);

		if(i==count-1){
			item.className+=" last";
		}

		ul.appendChild(item);
	}

	div.appendChild(ul);
}
RSS_Parser.prototype.create_item=function(node){
	var item=DOM.createElement("li");
	item.id=DOM.getElementByTagName("guid",node).firstChild.nodeValue;
	item.className="rss-item";

	var title=DOM.createElement("span",DOM.getElementByTagName("title",node).firstChild.nodeValue);
	title.className="title";
	item.appendChild(title);

	var dv=DOM.getElementByTagName("pubDate",node).firstChild.nodeValue;
	var d=new Date(dv);
	var fd=STD.short_months[d.getMonth()]+" "+d.getDate()+" "+d.getFullYear();
	fd="posted on "+fd;

	var date=DOM.createElement("span",fd);
	date.className="date";
	item.appendChild(date);

	var description=DOM.createElement("p",DOM.getElementByTagName("description",node).firstChild.nodeValue+" ");
	description.className="description";

	item.appendChild(description);

	var link=DOM.createElement("a","read more");
	link.setAttribute("href", DOM.getElementByTagName("link",node).firstChild.nodeValue);

	item.appendChild(link);

	return item;
} 
Scrollbox=function(scrollbox){
	this.scrollbox=scrollbox;
	this.ul=DOM.getElementByTagName("ul",this.scrollbox);

	this.ul_copy=this.ul.cloneNode(true);
	this.ul_copy.style.position="static";
	this.ul_copy.className="float-horizontal-list menu";

	Reveal.load(this.ul_copy);

	this.list=DOM.getElementsByTagName("li",this.ul);

	this.vertical=true;

	if(DOM.hasClass(this.scrollbox,"horizontal")==true){
		this.vertical=false;

		var width=0;
		var style=null;

		for(var i=0;i<this.list.length;i++){
			if(this.list[i].clientWidth!=0){
				this.set_pos(this.list[i],this.list[i].clientWidth*i);
			}else{
				style=this.get_computed_style(this.list[i]);
				width=parseInt(style.width);

				this.set_pos(this.list[i],width*i);
			}
		}
	}

	this.start_pos=this.get_start(this.ul);
	this.current_element=0;

	var button;

	button=DOM.createElement("div");
	button.onclick=STD.delegate(this,this.next);
	button.className="scroll-arrow scroll-next";
	this.scrollbox.appendChild(button);

	button=DOM.createElement("div");
	button.onclick=STD.delegate(this,this.prev);
	button.className="scroll-arrow scroll-prev";
	this.scrollbox.appendChild(button);

	var all_link;

	all_link=DOM.createElement("a","view all");
	all_link.href="#view-all";
	all_link.onclick=STD.delegate(this,this.view_all);
	all_link.className="scroll-all";
	this.scrollbox.appendChild(all_link);
}

//static
Scrollbox.load=function(){
	var scrollboxes=DOM.getElementsByClassName("scrollbox");

	for(var i=0;i<scrollboxes.length;i++){
		new Scrollbox(scrollboxes[i]);
	}
}


//methods
Scrollbox.prototype.get_computed_style=function(element){
	if(window.getComputedStyle){
		return window.getComputedStyle(element,null);
	}else if(element.currentStyle){
		return element.currentStyle;
	}else{
		return null;
	}
}
Scrollbox.prototype.get_start=function(element){
	if(this.vertical==true){
		return element.offsetTop;
	}else{
		return element.offsetLeft;
	}
}
Scrollbox.prototype.set_pos=function(element,pos){
	var new_pos=pos+"px";

	if(this.vertical==true){
		element.style.top=new_pos;
	}else{
		element.style.left=new_pos;
	}
}
Scrollbox.prototype.next=function(){
	if(this.current_element<this.list.length-1){
		++this.current_element;

		this.update();
	}
}
Scrollbox.prototype.prev=function(){
	if(this.current_element>0){
		--this.current_element;

		this.update();
	}
}
Scrollbox.prototype.update=function(){
	var item=this.list[this.current_element];

	var new_pos=this.start_pos-this.get_start(item);
	this.set_pos(this.ul,new_pos);
}
Scrollbox.prototype.view_all=function(){
	var data=DOM.createElement("div");
	data.id="scrollbox-view-all";
	data.className="cover-data";

	var close=DOM.createElement("div","close");
	close.className="close button";
	close.onclick=STD.delegate(this,this.close);

	data.appendChild(close);

	var inner_div=DOM.createElement("div");
	inner_div.className="inner";
	inner_div.appendChild(this.ul_copy);

	var cl=DOM.createElement("div");
	cl.className="clear";
	inner_div.appendChild(cl);

	data.appendChild(inner_div);

	document.body.appendChild(data);

	Reveal.open(data);

	return false;
}
Scrollbox.prototype.close=function(){
	var data=DOM.getElementById("scrollbox-view-all");
	data.parentNode.removeChild(data);
} 
STD=function(){}

STD.STANDARD_BROWSER="standard-browser";
STD.NON_STANDARD_BROWSER="non-standard-broswer";

STD.element=1;
STD.short_days=["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
STD.days=["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
STD.short_months=["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
STD.months=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

STD.config=new Object();

STD.get_url_param=function(param){
	var regexp=new RegExp("[\\?&]"+param+"=([^&#]*)");
	var results=regexp.exec(window.location.href);

	if(results==null){
		return null;
	}else{
		return results[1];
	}
}
STD.delegate=function(ref,method){
	var f=function(){
		return method.apply(ref,arguments);
	}

	return f;
}
STD.rpc=function(location,method){
	var rpc;

	//select xml request object
	if(window.XMLHttpRequest){
		rpc=new XMLHttpRequest();
	}else if(window.ActiveXObject){
		rpc=new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		throw new Error("no xml request");
	}

	if(method==null){
		method="post";
	}

	rpc.open(method,location,false);

	if(method=="post"){
		rpc.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	}

	return rpc;
}
STD.get_form_params=function(form){
	var params;
	var temp;

	for(i=0;i<form.elements.length;i++){
		temp=form.elements[i];

		if(temp.name!="" && temp.name!=undefined){
			if(params!=""){
				params+="&";
			}

			params+=temp.name+"="+temp.value;
		}
	}

	return params;
}
STD.addLoadListener=function(func){
	if(window.addEventListener){
		window.addEventListener("load", func, false);
	}else if(window.attachEvent){
		window.attachEvent("onload",func);
	}
}
STD.addResizeListener=function(func){
	if(window.addEventListener){
		window.addEventListener("resize", func, false);
	}else if(window.attachEvent){
		window.attachEvent("onresize",func);
	}
}
STD.inString=function(needle,haystack){
	return haystack.indexOf(needle)>-1;
}
STD.halt=function(halt_length){
	halt_length=halt_length*1000;

	var halted=true;
	var now=new Date();

	var cur;
	var start=now.getTime();

	while(halted){
		cur=new Date();

		if(cur.getTime()-start > halt_length){
			halted=false;
		}
	}
}
STD.set_cookie=function(name,value,domain,expires){
	var c="";
	c+=name+"="+value;

	if(domain!=null){
		c+="; domain="+domain;
	}

	c+="; path=/";

	if(expires==null){
		expires=new Date();
		expires.setDate(expires.getDate()+1);
	}

	c+="; expires="+expires.toGMTString();

	document.cookie=c;
}
STD.remove_cookie=function(name,domain){
	var date=new Date();
	date.setDate(date.getDate()-1);

	STD.set_cookie(name,"",domain,date);
}
STD.get_cookie=function(name){
	var cname=name+"=";
	var ca=document.cookie.split(';');

	var c;
	for(var i=0;i<ca.length;i++){
		c=ca[i];

		while(c.charAt(0)==' '){
			c=c.substring(1,c.length);
		}

		if(c.indexOf(cname)==0){
			return c.substring(cname.length,c.length);
		}
	}

	return null;
}
STD.root_domain=function(){
	if(STD.config.root_domain!=undefined){
		return STD.config.root_domain;
	}

	var current_domain=document.domain;

	if(current_domain!=null){
		var domain_array=current_domain.split(".");
		var length=domain_array.length;
		var root_domain=domain_array[length-2]+"."+domain_array[length-1];
		return root_domain;
	}else{
		return null;
	}
}
STD.get_checked=function(elements){
	var element;

	var i=0;
	if(elements!=null){
		while(i<elements.length){
			element=elements[i];

			if(element.checked==true){
				return element;
			}else{
				i++;
			}
		}
	}

	return null;
}
STD.dollar=function(value){
	return "$"+value.toFixed(2);
}
STD.target=function(e){
	if(e!=null){
		return e.target;
	}else if(e==null && window.event!=null){
		return window.event.srcElement;
	}else{
		return null;
	}
}
STD.fill_states=function(select){
	var pre=DOM.getElementById("pre-selected-state");

	var rpc=STD.rpc("/cms/xml/states.xml","get");
	rpc.send(null);

	var data=rpc.responseXML;

	var states=DOM.getElementsByTagName("state",data);

	var option;
	var state;
	var value;
	for(var i=0;i<states.length;i++){
		state=states[i];

		option=DOM.createElement("option",state.firstChild.nodeValue);
		value=state.getAttribute("abbreviation");
		option.setAttribute("value",value);

		if(pre!=null && pre.value==value){
			option.setAttribute("selected","selected");
		}

		select.appendChild(option);
	}
}
STD.fill_countries=function(select){
	var pre=DOM.getElementById("pre-selected-country");

	var rpc=STD.rpc("/cms/xml/countries.xml","get");
	rpc.send(null);

	var data=rpc.responseXML;

	var countries=DOM.getElementsByTagName("country",data);

	var option;
	var country;
	var value;
	for(var i=0;i<countries.length;i++){
		country=countries[i];

		option=DOM.createElement("option",country.firstChild.nodeValue);
		value=country.getAttribute("value");
		option.setAttribute("value",value);

		if(pre!=null && pre.value==value){
			option.setAttribute("selected","selected");
		}

		select.appendChild(option);
	}
}
STD.on_country_change=function(){
	var id=this.getAttribute("id");

	var state_id=id.replace("country","state");
	var state=DOM.getElementById(state_id);

	if(state!=null){
		var state_parent=state.parentNode;

		if(this.value=="US"){
			state_parent.style.display="block";
		}else{
			state_parent.style.display="none";
		}
	}
}
STD.number_pad=function(number,length){
	var str=number.toString();

	while(str.length<length){
		str="0"+str;
	}

	return str;
}
STD.w3c_datetime=function(date,utc){
	var str="";

	var year;
	var month;
	var date_in_month;
	var hours;
	var minutes;
	var seconds;
	var offset;

	if(utc==true){
		year=date.getUTCFullYear();
		month=date.getUTCMonth();
		date_in_month=date.getUTCDate();
		hours=date.getUTCHours();
		minutes=date.getUTCMinutes();
		seconds=date.getUTCSeconds();
		offset="Z";
	}else{
		year=date.getFullYear();
		month=date.getMonth();
		date_in_month=date.getDate();
		hours=date.getHours();
		minutes=date.getMinutes();
		seconds=date.getSeconds();

		var offset_sign=-1*date.getTimezoneOffset();
		offset=STD.number_pad(date.getTimezoneOffset()/60,2);
		offset+=":00";
		if(offset_sign<0){
			offset="-"+offset;
		}else{
			offset="+"+offset;
		}
	}

	str+=STD.number_pad(year,4);
	str+="-";
	str+=STD.number_pad(month+1,2);
	str+="-";
	str+=STD.number_pad(date_in_month,2);
	str+="T";
	str+=STD.number_pad(hours,2);
	str+=":";
	str+=STD.number_pad(minutes,2);
	str+=":";
	str+=STD.number_pad(seconds,2);
	str+=offset;

	return str;
}
STD.browser=function(){
	var agent=window.navigator.userAgent;

	var browsers=new Array("MSIE","Firefox","Chrome","Opera","Safari");
	var browser;

	for(var i=0;i<browsers.length;i++){
		browser=browsers[i];

		if(STD.inString(browser,agent)==true){
			return browser.toLowerCase();
		}
	}

	return "firefox";
}
STD.browser_type=function(){
	if(document.doctype==undefined){
		return STD.NON_STANDARD_BROWSER;
	}else{
		return STD.STANDARD_BROWSER;
	}
}
STD.flash_object=function(swf){
	var flash_object=DOM.createElement("object");
	flash_object.setAttribute("type","application/x-shockwave-flash");
	flash_object.setAttribute("data",swf);

	var param=DOM.createElement("param");
	param.setAttribute("name","movie");
	param.setAttribute("value",swf);

	flash_object.appendChild(param);

	var a=DOM.createElement("a","You do not have the flash player installed.");
	a.setAttribute("href","http://get.adobe.com/flashplayer/");

	flash_object.appendChild(a);

	return flash_object;
} 
Tabs=function(container){
	var tab_title;
	var prev_tab_title;
	var pos=0;

	this.container=container;

	this.current_tab=null;

	var tabs=DOM.getElementsByClassName("tab",this.container);

	for(var i=0;i<tabs.length;i++){
		tab_title=DOM.getElementByClassName("title",tabs[i]);

		if(i>0){
			prev_tab_title=DOM.getElementByClassName("title",tabs[i-1]);
			pos=prev_tab_title.offsetLeft+prev_tab_title.offsetWidth;

			tab_title.style.left=pos+"px";
		}

		tab_title.onclick=STD.delegate(this,this.tab_click);
	}

	STD.addResizeListener(STD.delegate(this,this.on_resize));

	this.switch_tab(tabs[0]);
}

Tabs.load=function(){
	var tab_holders=DOM.getElementsByClassName("tabs");
	var tab_holder;

	for(var i=0;i<tab_holders.length;i++){
		tab_holder=tab_holders[i];

		new Tabs(tab_holder);
	}
}

Tabs.prototype.tab_click=function(event){
	var target=STD.target(event);

	var tab=target;

	while(tab.parentNode!=document && tab.className!="tab"){
		tab=tab.parentNode;
	}

	this.switch_tab(tab);
}
Tabs.prototype.switch_tab=function(tab){
	var content=null;
	var title=null;

	if(this.current_tab!=null){
		title=DOM.getElementByClassName("title",this.current_tab);
		title.className="title";

		content=DOM.getElementByClassName("content",this.current_tab);
		content.style.display="none";
	}

	this.current_tab=tab;

	title=DOM.getElementByClassName("title",this.current_tab);
	title.className="title selected";

	content=DOM.getElementByClassName("content",this.current_tab);
	content.style.display="block";

	this.container.style.height=(content.offsetTop+content.offsetHeight)+"px";
}
Tabs.prototype.on_resize=function(){
	var content=DOM.getElementByClassName("content",this.current_tab);
	this.container.style.height=(content.offsetTop+content.offsetHeight)+"px";
} 
Twitter=function(){}

Twitter.load=function(tjson,list,count){
	var div=DOM.getElementById(list);

	if(div!=null){
		var type="application/javascript";
		if(STD.browser_type()==STD.NON_STANDARD_BROWSER){
			type="text/javascript";
		}

		var script=DOM.createElement("script");
		script.setAttribute("type", type);
		script.setAttribute("src", tjson+"?callback=twitterCallback2&count="+count);

		div.parentNode.appendChild(script);
	}
} 
Validate=function(){}

Validate.load=function(){
	var forms=DOM.getElementsByTagName("form");

	var form;
	for(var i=0;i<forms.length;i++){
		form=forms[i];

		if(STD.inString("validate",form.className)==true){
			form.onsubmit=function(){
				return Validate.validate(this);
			}
		}
	}
}
Validate.createError=function(value,element){
	Validate.clearError();

	var error=DOM.createElement("span",value);
	error.id="error";
	error.className="error";

	element.parentNode.insertBefore(error,element.nextSibling);

	window.scrollTo(0,element.offsetTop);
}
Validate.clearError=function(){
	var error=DOM.getElementById("error");
	if(error!=null){
		var parent=error.parentNode;
		parent.removeChild(error);
	}
}
Validate.validate=function(form){
	Validate.clearError();

	var elements;
	var element;
	var i=0;

	elements=DOM.getElementsByTagName("input",form);
	for(i=0;i<elements.length;i++){
		element=elements[i];

		if(Validate.run(element,form)==false){
			return false;
		}
	}

	elements=DOM.getElementsByTagName("textarea",form);
	for(i=0;i<elements.length;i++){
		element=elements[i];

		if(Validate.run(element,form)==false){
			return false;
		}
	}

	elements=DOM.getElementsByTagName("select",form);
	for(i=0;i<elements.length;i++){
		element=elements[i];

		if(Validate.run(element,form)==false){
			return false;
		}
	}

	return true;
}
Validate.run=function(element,form){
	if(DOM.hasClass(element,"validate")){
		if(Validate.check(element)==false){
			Validate.createError("You have entered an incorrect "+element.name,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-word")){
		if(Validate.checkWord(element)==false){
			Validate.createError("You have entered an incorrect "+element.name,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-length")){
		if(Validate.checkLength(element)==false){
			Validate.createError("You have entered to many or no characters in "+element.name+" - current length: "+element.value.length,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-integer")){
		if(Validate.checkInteger(element)==false){
			Validate.createError("You have entered an incorrect "+element.name,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-float")){
		if(Validate.checkFloat(element)==false){
			Validate.createError("You have entered an incorrect "+element.name,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-match")){
		if(Validate.checkMatch(element)==false){
			Validate.createError("You have a mismatch: "+element.id,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-cardnumber")){
		if(Validate.checkCardNumber(element)==false){
			Validate.createError("You have entered an incorrect card number",element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-cardverification")){
		if(Validate.checkCardVerification(element)==false){
			Validate.createError("You have entered an incorrect cvv2/cvc2/cid number",element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-name")){
		if(Validate.checkName(element)==false){
			Validate.createError("You have entered an incorrect name - "+element.name,element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-email")){
		if(Validate.checkEmail(element)==false){
			Validate.createError("Please enter a valid email",element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-phone")){
		if(Validate.checkPhone(element)==false){
			Validate.createError("Please enter a valid phone number",element);
			return false;
		}
	}

	if(DOM.hasClass(element,"validate-state")){
		if(Validate.checkState(element)==false){
			Validate.createError("Please choose a state",element);
			return false;
		}
	}

	return true;
}
Validate.check=function(element){
	if(element.value==""){
		return false;
	}

	return true;
}
Validate.checkWord=function(element){
	var re=new RegExp("[^A-Za-z]");

	if(Validate.check(element)==false || re.test(element.value)==true){
		return false;
	}

	return true;
}
Validate.checkLength=function(element){
	if(Validate.check(element)==false || element.value.length>1000){
		return false;
	}

	return true;
}
Validate.checkInteger=function(element){
	var re=new RegExp("[^0-9]");

	if(Validate.check(element)==false || re.test(element.value)==true){
		return false;
	}

	return true;
}
Validate.checkFloat=function(element){
	var re=new RegExp("^-?[0-9]*\\.?[0-9]+$");

	if(Validate.check(element)==false || re.test(element.value)==false){
		return false;
	}

	return true;
}
Validate.checkMatch=function(element){
	var id=element.getAttribute("id");
	var match_id=id.substr(id.indexOf("match-")+6);

	var match_element=DOM.getElementById(match_id);

	if(match_element==null || match_element.value!=element.value){
		return false;
	}

	return true;
}
Validate.checkCardNumber=function(element){
	var re=new RegExp("[^0-9]");

	if(Validate.check(element)==false || element.value.length<12 || element.value.length>19 || re.test(element.value)==true){
		return false;
	}

	return true;
}
Validate.checkCardVerification=function(element){
	var re=new RegExp("[^0-9]");

	if(Validate.check(element)==false || element.value.length<3 || re.test(element.value)==true){
		return false;
	}

	return true;
}
Validate.checkName=function(element){
	var re=new RegExp("[`~!@\\$%\\^\\*=\\+\\[\\]\\{\\}\\|\";:<>\\?]");

	if(Validate.check(element)==false || re.test(element.value)==true){
		return false;
	}

	return true;
}
Validate.checkEmail=function(element){
	var re=new RegExp("^[A-Z0-9._%+-]+@([A-Z0-9-]+\\.)+[A-Z]{2,}$","i");

	if(Validate.check(element)==false || re.test(element.value)==false){
		return false;
	}

	return true;
}
Validate.checkPhone=function(element){
	var re=new RegExp("[^0-9-.() ]");

	if(Validate.check(element)==false || re.test(element.value)==true){
		return false;
	}

	return true;
}
Validate.checkState=function(element){
	var id=element.getAttribute("id");
	var country_id=id.replace("state","country");
	var country=DOM.getElementById(country_id);

	if(country==null){
		return true;
	}

	if(country.value=="US" && element.value==""){
		return false;
	}else{
		return true;
	}
} 

