// JavaScript Document
window._slideToggle = 'slideToggle';
window._savedDialogs = [];
$(document).ready(function(){
	var A = $('<div>').attr('id','bottom-left-bg');
	var B = $(document);
	var C = $('#sidebar');
	var D = $('#footer-wrap');
	if( C.size() ){
		$('#preContent').append($('<div>').attr('id','top-left-bg'));
		D.css({position:'relative'})
		.append( $('<a>').attr({href:'http://www.discoveryeducation.com',target:'_blank',title:'Discovery Education','class':'logo disced'}).text('Discovery Education') )
		.append( $('<a>').attr({href:'http://www.toyota.com/community',target:'_blank',title:'Toyota','class':'logo toyota'}).text('toyota') );
		if ( D.offset().top > 558 && B.width() > 179 ){
			A.width( B.width()-179-C.offset().left );
			A.height( B.height()-288-C.offset().top );
			C
				.append(A)
				.append(
					$('<div>')
						.attr('id','road-shadow')
						.css({
							left: A.position().left-135,
							top: A.position().top+2
						})
						.height(B.height()-A.offset().top-2)
						.width(B.width()-A.offset().left+135)
				);
		}
	}
	if( $('.tab-it').each(tabIt).size() > 0 )
		$('a.tabbed-it').wrapAll( '<div class="tab-it-h">' );
	$('h5')
		.bind('expandoToggle', _expando)
		.bind('expandoOpen',function(){if (!$(this).hasClass('open')) $(this).trigger('expandoToggle'); })
		.bind('expandoClose',function(){if ($(this).hasClass('open')) $(this).trigger('expandoToggle'); });	
	$('.toggle-hide')
		.bind('expandoToggle',function(){ window.location.hash=$(this).parent().find('.toggle-target').slideToggle().end().toggleClass('open').hasClass('open')?$('a[name]',this).attr('name'):'closed'; })
		.bind('expandoOpen',function(){ if ( !$(this).parent().hasClass('open') ) $(this).trigger('expandoToggle'); })
		.bind('expandoClose',function(){if ( $(this).parent().hasClass('open')) $(this).trigger('expandoToggle'); })
		.nextAll('dl').addClass('toggle-target')
	$('.read-more')
		.bind('expandoToggle',function(){ $(this).find('.toggle-target')[window._slideToggle]().end().toggleClass('open') })
		.bind('expandoOpen',function(){ if ( !$(this).hasClass('open') ) $(this).trigger('expandoToggle'); })
		.bind('expandoClose',function(){if ( $(this).hasClass('open')) $(this).trigger('expandoToggle'); })
		.children().not('.bold').addClass('toggle-target').end().end()
		.each(function(x,Y){$(Y).append($('<a>').attr({'class':'button small',href:'#',name:'readmore'+x}).text('Read More'));});
	$('a[name]').bind('click',function(evt){ evt.preventDefault(); evt.stopPropagation(); $(this).trigger('expandoToggle');	});
	$(':input').bind('blur',_onTop).trigger('blur');
	$('.parents .sweepstakes textarea').nextAll('input,label,img').hide().last().after( $('<a>').attr('href','#wall').addClass('button').text('Submit') );
	$('h3:has(a),h5:has(a)').bind('click', function(){ $('a',this).trigger('click'); });
	
	// remove this global from the challenge forms b/c its silly
	$(':not(.challenge).form').each(_ajaxBind);
	_ieFix();
	_hashPoll(_hu);
});
function _hashPoll(_F){
	var O=window, E='hashchange';
	if ( 'on'+E in O ) {
		if( 'addEventListener' in O) {
			O.addEventListener(E, _F, true);
		} else {
			O.attachEvent('on'+E,_F);
		}
	} else {
		setInterval(_F,250);
	}
	setTimeout(_F, 100);
}
function _hu (){
	var hash = window.location.hash;
	if (hash.substr(0,1) == '#') hash=hash.substr(1,hash.length-1);
	if (('oldHash' in window) && (window.oldHash == hash)) return;
	window.oldHash = hash;
	if (hash.length == 0) return;
	var a = $('a[name="'+hash+'"]').trigger('expandoOpen'),
		b = $('a[href*="#'+hash+'"]');
	if( hash in window._savedDialogs ) {
		$(window._savedDialogs[hash]).dialog('open');
	} else if( a.size() == 0 && b.size() > 0 ) {
		$.ajax({
			url:'/includes/'+hash+'.htm',
			success: function(m){
				var a = $('<div>').html(m);
				a.attr('title',a.find('h1').eq(0).remove().text());
				a.data('dialogName',hash).dialog({modal:true,width:627,resizable:false,close:_dialogSave});
				b.parents('form').each(function(i,E){
					var d=$(E).serializeArray(), n=null, v=null, f=a.find('form').last();
					for(var x=0,y=d.length;x<y;x++)
						if( a.find(':input[name="'+d[x].name+'"]').val(d[x].value).size() == 0 )
							$('<input>').attr({type:'hidden',name:d[x].name}).val(d[x].value).appendTo(f);
					a.find('.captcha').last().after( $(E).find('img').show() );
					$(E).find('.error').prependTo(f);
				});
				//Remove captcha if no image
				if( a.find('img').size() == 0 ) a.find('.captcha').remove();
				a.find('form').each(_ajaxBind);
				if( window._ie ) a.find('input[type=submit]').each(_ieSubmitReplace);
			}
		});
	}
}
function _ajaxBind(i,E) {
	var f = $(E);
	f.find(':input[name$=_step]').each(_tabUpdate);
	f.find('label.checkbox input').after( $('<span>') );
	f.find('input[type=file]').each(_genericUpload);	
	f.find('input.date').each(_datePicker);
	f.find('a[href^=?]').bind('click',_clickSubmit);
	f.find('input.phone').bind('blur',_phoneFormat).trigger('blur');
	if( window._ie ) {
		f.find('label:has(input)').bind('click',_ieCheckBox);
		f.find('input[type=submit]').each(_ieSubmitReplace);
	}
	if( !f.data('validating') )
		f.data('validating',true).bind('submit',_validateForm);
}
function _phoneFormat () {
	var n = $(this).val().match(_rules.phone.regexp);
	if ( n ) {
		$(this).val('('+n[1]+') '+n[2]+'-'+n[3]);
	}
}
function _tabUpdate(i, E) {
	var id = $(E).attr('name');
	var f = $(E).parents('form').addClass('tabbed');
	var val = $(E).remove().val();
	var h = f.html();
	var c = parseInt(val)-1,
		s = id+val;
	location.hash=s;
	$('#'+id)
		.children().removeClass('active')
		.eq(c)
		.wrapInner( $('<a>').attr({name:s,href:'#'+s}) )
		.data('formContent', h)
		.bind('expandoOpen', _formTabLoad)
		.addClass('active');
}
function _formTabLoad () {
	try{
		var h=$(this).data('formContent');
		var n=$('a[name]',this).attr('name').match(/.*step/)[0];
		$('form.tabbed').eq(0).html(h).each(_ajaxBind);
		$(this).addClass('active').nextAll().removeClass('active').end().prevAll().removeClass('active');
	}
	catch(e) {}
}
function _datePicker(i, E){
	new DatePicker(E);
}
function DatePicker(E){
	var hid=getHiddenField(E),
		day=getDaySelect(),
		mon=getMonthSelect(),
		yea=getYearSelect(),
		dpc=$('<span>').addClass('date-picker').append(hid).append(mon).append(day).append(yea);
	$(E).after(dpc).remove();
	updateDate();
	function updateDate() {
		var d = parseInt(day.val()),
			m = parseInt(mon.val()),
			y = parseInt(yea.val());
		var a = new Date(y,m,d);
		if ( !isNaN(a.getTime()) && a.getMonth() == m ){
			hid.val( [a.getMonth()+1,a.getDate(),a.getFullYear()].join('/') );
		} else
			hid.val('');
	}
	function getHiddenField(elem) {
		var $e = $(elem),
			atts = {type:'hidden'},
			copylist = ['name','class','id'],
			h = null;
		while( h=copylist.pop() ) atts[h]=$e.attr(h);
		return $('<input>').attr(atts);
	}
	function getDaySelect() {
		var s = $('<select>').addClass('day');
		s.append( $('<option>').attr({value:''}).text('--') );
		for( var i=1; i<=31; i++ )
			s.append( $('<option>').attr({value:i}).text(i) );
		return s.bind('change', updateDate );
	}
	function getMonthSelect() {
		var s = $('<select>').addClass('month');
			t = ['January','February','March','April','May','June','July','August','September','October','November','December'];
		s.append( $('<option>').attr({value:''}).text('--') );
		for( var i=0; i<=11; i++ )
			s.append( $('<option>').attr({value:i}).text(t[i]) );
		return s.bind('change', updateDate );
	}
	function getYearSelect() {
		var s = $('<select>').addClass('year'),
			y = (new Date()).getFullYear();
		s.append( $('<option>').attr({value:''}).text('--') );
		for( var i=y,j=y-100; i>j; i-- )
			s.append( $('<option>').attr({value:i}).text(i) );
		return s.bind('change', updateDate );
	}
}
function _validateForm(_evt){
	var err=false;
	$('.error',this).removeClass('error').attr({title:false});
	if( $('.req[value=""]',this).each(_reqField).size() > 0 ) err = true;
	if( $('fieldset:has(input[type=radio])',this).filter(':not(:has(input:checked))').each(_reqFieldset).size() > 0 ) err = true;
	if( $(':input[class*=min_age]',this).each(_dateGetMinAge).filter('.under_age').each(_reqMinAge).size() > 0 ) err = true;
	if( $(':input[class*=max_age]',this).each(_dateGetMaxAge).filter('.over_age').each(_reqMaxAge).size() > 0 ) err = true;
	if( $('input.req:checkbox:not(:checked)',this).each(_reqCheckbox).size() > 0 ) err = true;
	for( var x in _rules ) $('.'+x,this).each(function(i,E){
		var v=$(E).val()
		if(v && !v.match(_rules[x].regexp)){
			$('label[for="'+$(E).attr('id')+'"]').addClass('error').attr('title',_rules[x].msg);
			err = true;
		}
	});
	if( !err ) {
		var a = $('input[name=ajax]',this).remove(), b=$(this);
		if( a.size() > 0 )
			$.ajax({
				url:a.val(),
				data:b.serializeArray(),
				type: 'POST',
				success:function(m){ b.html(m).each(_ajaxBind); }
			});
		else return;
		b.find(':input').attr('disabled','disabled');
	}
	_evt.stopPropagation();
	_evt.preventDefault();
}
function _clickSubmit(_evt){
	var t=$(this);
		h = t.attr('href'),
		f = t.parents('form'),
		a = f.find(':input[name=ajax]');
	if( h.indexOf('?') > -1 && a.size() > 0 ) {
		_evt.stopPropagation();
		_evt.preventDefault();
		$.ajax({
			url:a.val(),
			data:h.split('?').pop(),
			type:'GET',
			success:function(n){ f.html(n).each(_ajaxBind); }
		});
	}
}
_rules = {
	email: {regexp:/^[a-z0-9._-]+@([a-z0-9-]+\.)+[a-z]{2,6}$/i,msg:'Please enter a valid email address'},
	phone: {regexp:/^\W?(\d{3})\W*(\d{3})\W?(\d{4})$/,msg:'Please enter a 10-digit phone number'},
	zip: {regexp:/^\d{5}(-\d{4})?$/,msg:'Please enter a valid zip code'}
};
function _reqField(i,E){
	$('label[for="'+$(E).attr('id')+'"]').addClass('error').attr('title','This field is required');
}
function _reqFieldset(i,E){
	$('legend',E).addClass('error').attr('title','Select an option');
}
function _reqCheckbox(i,E){
	$(E).parent().addClass('error').attr('title','You must check here to continue');
}
function _reqMinAge(i,E){
	$('label[for="'+$(E).attr('id')+'"]').addClass('error').attr('title','You must be at least '+_getPrefixVal('min_age',$(E).attr('class'))+' to submit the form');
}
function _reqMaxAge(i,E){
	$('label[for="'+$(E).attr('id')+'"]').addClass('error').attr('title','You must be no older than '+_getPrefixVal('max_age',$(E).attr('class'))+' to submit the form');
}
function _dateGetMinAge(i,E){
	var dob = new Date( $(E).val() );
	var age = parseInt( _getPrefixVal('min_age',$(E).attr('class'),0) );
	if( !age ) return;
	if( !isNaN(dob.getTime()) ){
		dob.setFullYear( dob.getFullYear()+age );
		$(E)[dob>Date.now()?'addClass':'removeClass']('under_age');
	}
}
function _dateGetMaxAge(i,E){
	var dob = new Date( $(E).val() );
	var age = parseInt( _getPrefixVal('max_age',$(E).attr('class'),0) );
	if( !age ) return;
	if( !isNaN(dob.getTime()) ){
		dob.setFullYear( dob.getFullYear()+age+1 );
		$(E)[dob<Date.now()?'addClass':'removeClass']('over_age');
	}
}
function _expando() {
	var A = $(this).toggleClass('open');
	if ( A.next().is('.expando') ){
		A.next().slideToggle();
	} else if ( A.next().is('ignore') ) {
		A.addClass('fix').nextAll('.expando').eq(0).slideToggle();
	} else {
		var B=$('<div>').addClass('expando');
		A.after( B );
		$.ajax({
			url: '/includes/'+A.find('a[name]').attr('name')+'.htm',
			success: function(m){
				B.html(m).each(_runVocab).bind('expandoClose',function(){ $(this).prevAll('h5').eq(0).trigger('expandoClose'); })
				B.find('input[type=radio]').after( $('<span>') )
				B.append( $('<a>').attr('href','#').text('Close').addClass('close').bind('click',function(_e){ _e.preventDefault(); $(this).trigger('expandoClose'); }) )
				B.find('form').bind('submit',_scoreQuiz);
				B.find('input.money').bind('blur',_accountingFormat).bind('change',_accountingFormat).trigger('blur');
				
				B.find('input.amount_financed').bind('change', _amount_financed);
				B.find('input.monthly_payment').bind('change', _monthly_payment);
				B.find('input.upkeep').bind('change', _upkeep);
				
				B.find('select.number_payments').bind('change', _monthly_payment);
				
				
				B.find('input.total_expenses').bind('change', _total_expenses);
				B.find('input.total_cost').bind('change', _total_cost);
				
				var pdf = B.find('link[href$=pdf]').remove();
				if( pdf.size() > 0 ){
					B.append( $('<div>').addClass('download').append( $('<a>').text('Download PDF').attr({target:'_blank',href:pdf.attr('href')}) ) );
					if( 'print' in window ){
						var a=B.find('.download a');
						a.before( a.clone().addClass('print').text('Print').bind('click',_printLink) ).before(' | ');
					}
				}
				//Inferior browsers can't reference checked input by css
				if( window._ie ) {
					B.find('label:has(input)').bind('click',_ieCheckBox);
					B.find('input[type=submit]').each(_ieSubmitReplace);
					/*if( 'curvyCorners' in window ) curvyCorners(_corners.all_15,B.get(0));
					else*/ if ('DD_roundies' in window) DD_roundies.addRule('.expando','15px');
				}
			}
		});
	}
	window.location.hash = A.hasClass('open')?A.find('a[name]').attr('name'):'closed';
}
function _ieCheckBox() {$(this).find('input:radio').attr('checked','checked').end().parent().children('label:has(input)').removeClass('checked').filter(':has(input:checked)').addClass('checked')}
function _printLink(_evt) {
	_evt.preventDefault();
	var _PRINT = 'printer_';
	if( _PRINT in window.frames ){
		window.open(this.href,_PRINT);
	} else {
		$('<iframe>').attr({name:_PRINT}).bind('load',function(){ setTimeout('window.frames.'+this.name+'.print()', 500); }).appendTo('body').attr({src:this.href});
	}
}
function _accountingFormat() {
	var a = parseFloat($(this).val());
	if( !isNaN(a) ) $(this).val( a.toFixed(2) );
}
function _scoreQuiz(evt) {
	evt.preventDefault();
	var A=$(this);
	var R=A.find('.results');
	var ak = A.find('input[name=answerkey]').val().split(',');
	var rs = A.find('input[name=responses]').val().split(',');
	A.find('fieldset').each(function(i,F){
		$(F).find('input[value='+ak[i]+']').parent('label').addClass('correct');
		$(F).find('label:has(input:checked):not(.correct)').addClass('incorrect');
	});
	var total=A.find('label.correct').size(),
		correct=A.find('label.correct input:checked').size();
	A.find('input').remove();
	R.empty();
	for(var i=0,j=rs.length; i<j; i++ ){
		switch( rs[i] ) {
			case 'score':
				R.append( $('<div>').addClass('score').text('You answered '+correct+' out of '+total+' correctly.') );
				break;
			default:
				R.append(A.find('.'+rs[i]).filter('.score-'+correct));
		}
	}
}
function _getCSS(_F) {
	if( !('init' in _getCSS) ){
		var $l = $('link[rel=stylesheet]');
		_getCSS.css = [];
		_getCSS.fStack = [];
		_getCSS.wait = $l.size();
		_getCSS.init = true;
		$l.each(function (y,X){
			try {
				$.ajax({url:X.href,success:function(d){
					_getCSS.css.push(d);
					_getCSS.wait--;
					for(var i=0,j=_getCSS.fStack.length;i<j;i++){
						_getCSS.fStack[i](d);
					}
				}});
			} catch(_e) {
				//Probably different domain; ignore
				_getCSS.wait--;
			}
		});
	}
	if ( _getCSS.wait > 0 ){
		_getCSS.fStack.push(_F);
	}
	for(var i=0,j=_getCSS.css.length; i<j; i++){
		_F(_getCSS.css[i]);
	}
}
function _ieLayerFix(cr) {
	//If browser doesn't support layered backgrounds, background-position will be undefined
	var css=[], j=$(cr).size();
	if( j == 0 || !!$(cr).css('backgroundPosition') )return;
	_getCSS(function(d){
		for(i=0; i<j; i++) {
			var h = [cr], rules = {}, _O=$(cr).eq(i), _c={};
			var temp = _O.attr('class').split(' '), _t;
			while ( _t = temp.pop() ) {
				if ( cr.indexOf(_t) < 0 ){
					h.push(cr+'.'+_t);
				}
			}
			for(a=0,b=h.length; a<b; a++){ 
				var s = d.indexOf(h[a]+' {'), l;
				if (s>0) {
					l = d.indexOf('}',s);
					$.extend(rules,_ruleParse( d.substr(s,l-s+1) ));
				}
			}
			if( _O.css('position') == 'static' ) _c.position = 'relative';
			_applyBG(rules, _O.css(_c) );
		}
	});
}
function _ruleParse(str) {
	var s=str.indexOf('{');
	var e=str.indexOf('}');
	var a=str.substr(s+1,e-s-1).split(';'), b;
	var o={};
	for( var x=0,y=a.length; x<y; x++ ){
		b = a[x].split(':')
		if ( b.length > 1 ){
			o[$.trim(b[0])]=$.trim(b[1]);
		}
	}
	return o;
}
function _applyBG (o, _O) {
	if( 'background-image' in o ){
		var c, d = o['background-image'], i=0, css={}, temp, origin;
		while( c = d.match(/\s*(.+?)\((["']?)(.+?)\2\)\s*[,]?/) ){
			css = {position:'absolute',zIndex:-1,border:'none'}, origin = [0,0,0,0];
			if( 'background-origin' in o ) {
				temp = o['background-origin'].split(',');
				temp = temp.length > 1 ? temp[i%temp.length] : temp[0];
				switch ($.trim(temp)) {
				case 'border-box':
					origin = [ parseInt(_O.css('borderTopWidth')) || 0,
							parseInt(_O.css('borderRightWidth')) || 0,
							parseInt(_O.css('borderBottomWidth')) || 0,
							parseInt(_O.css('borderLeftWidth'))|| 0];
					break;
				case 'padding-box':
				default:
					origin = [0,0,0,0];
				}
			}
			if( 'background-position' in o ) {
				temp = o['background-position'].split(',');
				temp = temp.length > 1 ? temp[i%temp.length] : temp[0];
				temp = $.trim(temp).split(' ');
				css['left']=temp[0];
				css['top']=temp[1];
				if( temp[0] == 'top' || temp[1] == 'top') css['top']=0-origin[0];
				if( temp[0] == 'bottom' || temp[1] == 'bottom'){ css['top']='auto'; css['bottom']=0-origin[2]; }
				if( temp[0] == 'left' || temp[1] == 'left') css['left']=0-origin[3];
				if( temp[0] == 'right' || temp[1] == 'right'){ css['left']='auto'; css['right']=0-origin[1]; }
				if( temp[0] == 'center'){ css['left']=0; css['right']=0; }
			}
			if( 'background-size' in o ) {
				temp = o['background-size'].split(',');
				temp = temp.length > 1 ? temp[i%temp.length] : temp[0];
				temp = $.trim(temp).split(' ');
				css['width']=temp[0];
				css['height']=temp[1];
			}
			
			switch (c[1]) {
			case 'url':
				if( ('DD_roundies' in window) && ('width' in css) && parseInt(css.width) > 0 ){
					$('<div>').data('width',parseInt(css.width)).css(css).prependTo(_O)
					.append(
						$('<img>').attr('src','/css/'+c[3]).bind('load',function(){
							var p=$(this).parent(),
								ow=this.width,
								oh=this.height,
								r=p.data('width')/ow;
							$(this).remove();
							p.height(oh*r).get(0).style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(SizingMethod='scale',Src='"+this.src+"');";
						})
					);
				} else
				$('<img>').attr('src','/css/'+c[3]).css(css).prependTo(_O);
			break;
			case '-webkit-gradient':
			case '-moz-linear-gradient':
				$('<div>').addClass('gradient').prependTo(_O);
			}
			i++;
			d=d.substr(c[0].length,d.length-c[0].length);
		}
	}
}
function _ieFix() {
	window._ie = !('addEventListener' in window);
	if(!window._ie)return;
	//ie fixes
	_ieButtonFix();
	_fixPNG();
	_ieCorners();
	_ieLayerFix('.columns');
	_ieLayerFix('#main-content > .bottom-narrow');
	_ieLayerFix('.visit-section');
	_ieLayerFix('#bottom ul li a');
}
function EWords(q) {
	var messages = getMessages(),
		_next = $('<a>').attr('href','#').addClass('next'),
		_prev = $('<a>').attr('href','#').addClass('prev'),
		msgPerPage = 3,
		dspList = $('<ul>').appendTo('.sweepstakes'),
		numPages = Math.ceil(messages.length/msgPerPage),
		currentPage = 1,
		pageList = getPageList();
	renderPage();
	function renderPage() {
		dspList.empty();
		for(var i=(currentPage-1)*msgPerPage,j=Math.min(messages.length,i+msgPerPage); i<j; i++){
			dspList.append( getMsgBody(i) );
		}
		updatePagination();
	}
	function updatePagination() {
		if (!pageList) return;
		pageList
			.text('Page '+currentPage+' of '+numPages)
			.append(_next.bind('click',nextPage))
			.append(_prev.bind('click',prevPage));
	}
	function getPageList() {
		if (numPages <= 1) return null;
		return $('<div>').addClass('pagination').appendTo('.sweepstakes');
	}
	function nextPage(_evt) {
		_evt.preventDefault();
		if ( currentPage>=numPages ) return;
		currentPage++;
		renderPage();
	}
	function prevPage(_evt) {
		_evt.preventDefault();
		if ( currentPage<=1 ) return;
		currentPage--;
		renderPage();
	}
	function getMsgBody(idx) {
		if( idx>=messages.length || idx<0 ) return null;
		var w=messages[idx];
		return $('<li>')
			.text(' '+w.msg+' ')
			.prepend( $('<strong>').text(w.to_name) )
			.append( $('<em>').text(w.from_name+' '+_ago(w.submit_time)) );
	}
	function getMessages() {
		var j=q.COLUMNS.length,m=[],o;
		for( var x=0,y=q.DATA.length; x<y; x++ ) {
			o={};
			for( var i=0; i<j; i++ )
				o[q.COLUMNS[i].toLowerCase()]=q.DATA[x][i];
			m.push(o);
		}
		return m;	
	}
	
}
function _Inspire(q) {
	// some quote thing for no reason
	//new EWords(q[0]);
}
function _Enspire(q) {
	q.preventDefault();
	var sw=$('.sweepstakes form');
	if ( sw.find(':input[value=""]').size()==0 ){
		$.ajax({
			url:'/includes/wall.cfm',
			data: sw.serialize(),
			success: function(){ window.location='/students.cfm' }
		});
	} else {
		sw.children().slideDown();
		sw.find('a:not(:has(span)),span').text('Confirm');
	}
}
function _ago(strTime) {
	var ms = Date.now() - Date.parse(strTime+' UTC');
	var SECOND = 1000, MINUTE = SECOND*60, HOUR = MINUTE*60, DAY = HOUR*24, WEEK = DAY*7, ONE = 1.5;
	if( ms > -10*SECOND ) {
		if( ms < ONE*SECOND ) {
			return 'just now';
		} else if( ms < MINUTE ) {
			return Math.ceil(ms/SECOND) + ' seconds ago';
		} else if (ms < ONE*MINUTE ) {
			return 'a minute ago';
		} else if (ms < HOUR) {
			return Math.ceil(ms/MINUTE) + ' minutes ago';
		} else if (ms < ONE*HOUR) {
			return 'about an hour ago';
		} else if (ms < DAY ) {
			return Math.ceil(ms/HOUR) + ' hours ago';
		} else if (ms < ONE*DAY) {
			return 'yesterday';
		} else if (ms < WEEK ) {
			return Math.ceil(ms/DAY) + ' days ago';
		} else if (ms < ONE*WEEK) {
			return 'last week';
		} else if (ms < 4*WEEK ) {
			return Math.ceil(ms/WEEK) + ' weeks ago';
		} else {
			return 'A while ago';
		}
	} else return '';
}
function _onTop() {
	$(this)[($(this).val()!='')?'addClass':'removeClass']('on-top');
}
function _ieButtonFix() {
	$('a.button:not(:has(span)), ').each(function(i,E){ $(E).html( $('<span>').text($(E).text()) ); });
	$('.visit-section > strong:not(.button)').each(function(i,E){ $(E).addClass('button').html( $('<span>').text($(E).text()) ); });
	$('a.arrow span').prepend( $('<img>').attr('src','/images/arrow.png') );
}
function _ieCorners() {
	if( ('curvyCorners' in window) ) _ie8Corners();
	else if( ('DD_roundies' in window) ) _ie6Corners();
}
function _ie8Corners() {
	if( !('curvyCorners' in window) )return;
	window._corners = {
		all_15:{
		  tl: { radius: 15 },
		  tr: { radius: 15 },
		  bl: { radius: 15 },
		  br: { radius: 15 },
		  antiAlias: true
		},
		all_9:{
		  tl: { radius: 9 },
		  tr: { radius: 9 },
		  bl: { radius: 9 },
		  br: { radius: 9 },
		  antiAlias: true
		},
		top_10:{
		  tl: { radius: 10 },
		  tr: { radius: 10 },
		  antiAlias: true
		},
		left_corner:{
		  tl: { radius: 13 },
		  antiAlias: true
		},
		right_corner:{
		  tr: { radius: 13 },
		  antiAlias: true
		}
	}
	_applyCCRule('#left-col > .top-wide',_corners.left_corner);
	_applyCCRule('#right-col > .top-wide',_corners.right_corner);
	_applyCCRule('.home #main-content ul li a, .sweepstakes .links, h4 a',_corners.all_9);
	_applyCCRule('.sweepstakes',_corners.all_15);
}
function _ie6Corners() {
	DD_roundies.addRule('#main-content ul li a, .sweepstakes .links, h4 a','9px');
	DD_roundies.addRule('.sweepstakes','15px');
	$(':input').focus(function(){$(this).addClass('on-top');});
}
function _applyCCRule(selector,rules) {
	if( !('curvyCorners' in window) )return;
	$(selector).each(function(i,E){curvyCorners(rules,E);});
}
function _fixPNG () {
	if( !('_ie6' in window) ) return;
	if( !('DD_roundies' in window) ) return;
	DD_roundies.addRule('#main-content, ul li, h1, .sign-up, .blurb, h3, .button, .button span, #road-shadow, h2, .cone, #bottom, .heads-up, .teens, .columns, #sidebar, .bottom-narrow, img, h4, h5, #float-pic, a.close, a.print, .bottom-narrow dl dt, #sidebar .student-sweeps p, .social, .social a, a.next, .top-wide form input');
	window._slideToggle='noop';
}
function _ieSubmitReplace(i,E){ 
	var $e = $(E);
	var text = $e.val();
	$e.after( 
		$('<a>')
			.attr('href','#')
			.addClass('button')
			.bind('click',function(_e){
				_e.preventDefault();
				$(this).parents('form').submit();
			})
			.append( $('<span>').text(text) )
	).remove();
}
function _clearHash() {
	window.location.hash='';
}
function _dialogSave(){
	window._savedDialogs[$(this).data('dialogName')]=this;
	window.location.hash='closed';
}
function _genericUpload(i, E){
	//Replace input[type=file] with swf uploader
	var $e = $(E),
		id = $e.attr('id'),
		_c = $e.attr('class'),
		fv = {
			pathUploadScript: "http://awesome.discoveryeducation.com/functions/upload-toyota.cfm",
			type: 'Docs',
			maxupload: 1048576,
			completeFunc:_getPrefixVal('func',_c,'fileUp'+i)
		},
		params = { allowScriptAccess: "always", wmode: 'transparent' },
		hi=$('<input>').attr({type:'hidden',name:_getPrefixVal('name',_c,$e.attr('name')),'class': _c,id:id});
	if ( !(fv.completeFunc in window) ){
		window[fv.completeFunc] = function(fn) { hi.val(fn) };
	}
	var atts = {id: id+i, 'class':'simple-upload'};
	$e.after(hi);
	swfobject.embedSWF("/swf/generic-upload.swf",
		id, "535", "150", "9", null, fv, params, atts);
}
function _proposalComplete (fn){
	$('input[name=proposal]').val(fn);
	$('.simple-upload').before( $('<a>').attr({href:'http://static.discoveryeducation.com/feeds/toyota/'+fn,target:'_blank'}).text('View File') ).remove();
}
function _getPrefixVal(prefix, list, def) {
	var d = def || '';
	var r = new RegExp(prefix+'-[a-zA-Z0-9-_]+');
		a = list.match(r);
	return a?a[0].substr(prefix.length+1):d;
}


function _amount_financed (i, E)
{
	var auto_price = $('input[name="auto_price"]');
	var down_payment = $('input[name="down_payment"]');
	var auto_loan = $('input[name="auto_loan"]');
	
	if (isNaN(auto_price.val())|| auto_price.val() == "" || isNaN(down_payment.val()) || down_payment.val() == "") {
		auto_loan.addClass('invalid').val('').trigger('change');
	}
	else {
		auto_loan.removeClass('invalid').val(Number(auto_price.val()) - Number(down_payment.val())).trigger('blur');
	}
	
}

function _monthly_payment (i, E)
{
	var auto_loan = $('input[name="auto_loan"]');
	var interest_rate = $('input[name="interest_rate"]');
	//var term = 60; //5 years
	var term = $('select[name="number_payments"]').val();
	
	var monthly_payment = $('input[name="monthly_payment"]');
	
	if (isNaN(auto_loan.val())|| auto_loan.val() == "" || isNaN(interest_rate.val()) || interest_rate.val() == "") {
		monthly_payment.addClass('invalid').val('').trigger('change');
	}
	else {
		var monthRate = Number(interest_rate.val())/(12 * 100);
		var mp = Math.floor((Number(auto_loan.val())*monthRate)/(1-Math.pow((1+monthRate),(-1*term)))*100)/100
		monthly_payment.removeClass('invalid').val(mp).trigger('blur');
		
		_total_expenses(i, E);
	}
}


function _upkeep (i, E)
{
	var fuel_cost = $('input[name="fuel_cost"]');
	var maintenance = $('input[name="maintenance"]');
	//var repairs = $('input[name="repairs"]');
	var taxes = $('input[name="taxes"]');
	var upkeep = $('input[name="upkeep"]');
	
	if (isNaN(fuel_cost.val())|| fuel_cost.val() == "" || isNaN(maintenance.val()) || maintenance.val() == "" || 
		isNaN(taxes.val()) || taxes.val() == "") {
		upkeep.addClass('invalid').val('').trigger('change');
	}
	else {
		upkeep.removeClass('invalid').val(Number(fuel_cost.val()) + Number(maintenance.val()) + Number(taxes.val())).trigger('blur');
	
		_total_expenses(i, E);
	}
}


function _total_expenses (i, E)
{
	var monthly_payment = $('input[name="monthly_payment"]');
	var upkeep = $('input[name="upkeep"]');
	var total_expenses = $('input[name="total_expenses"]');
	
	if (isNaN(monthly_payment.val())|| monthly_payment.val() == "" || isNaN(upkeep.val()) || upkeep.val() == "") {
		total_expenses.addClass('invalid').val('').trigger('change');
	}
	else {
		total_expenses.removeClass('invalid').val(Number(monthly_payment.val()) + Number(upkeep.val())).trigger('blur');
		
		_total_cost(i, E);
	}
}


function _total_cost (i, E)
{
	var monthly_payment = $('input[name="monthly_payment"]');
	var upkeep = $('input[name="upkeep"]');
	var insurance_premium = $('input[name="insurance_premium"]');
	var total_cost = $('input[name="total_cost"]');
	
	
	if (isNaN(monthly_payment.val())|| monthly_payment.val() == "" || isNaN(upkeep.val()) || upkeep.val() == "" || 
		isNaN(insurance_premium.val()) || insurance_premium.val() == "") {
		total_cost.addClass('invalid').val('').trigger('change');
	}
	else {
		total_cost.removeClass('invalid').val(Number(monthly_payment.val()) + Number(upkeep.val()) + Number(insurance_premium.val()) ).trigger('blur');
	}
}


function _total(i, E) {
	var name=$(E).attr('readonly','readonly').attr('name');
	$(':input.'+name).bind('change',_recalc);
	_recalc.apply(E);
}
function _recalc() {
	var a=$(this).attr('class').split(' '), b, c, d;
	while( b=a.pop() ){
		c = $(':input.total[name='+b+']');
		if( c.size() > 0 ){
			d = 0;
			$(':input.'+b).each(function(x,Y){ d+=parseFloat($(Y).val()); });
			if ( isNaN(d) )
				c.addClass('invalid').val('').trigger('change');
			else
				c.removeClass('invalid').val(d).trigger('change');
		}
	}
}
function _runVocab() {
	var x;
	for(x in _vocabulary){
		$('p:contains("'+x+'")',this).each(function(i,E){
			var h=$(E).html(),
				r = new RegExp('('+x+')','ig');
			$(E).html(h.replace(r,'<a href="#'+x.replace(/\s/g,'_')+'" class="vocabulary">$1</a>')).find('a.vocabulary').bind('click',_showVocab);
		});
	}
}
function _showVocab(_evt) {
	_evt.stopPropagation();
	_evt.preventDefault();
	var key = $(this).text();
	$('<div>').attr('title',key)
		.append( $('<h2>').text(key) )
		.append( $('<p>').html( _vocabulary[key] ) )
		.dialog({modal:true,width:627,resizable:false});
}
_vocabulary = {
	 "Interactive Vocabulary Journal": "An interactive journal in which students use the Internet, Discovery Education videos, images, articles, interviews they conduct, to define each term &mdash; in this manner, vocabulary is no longer the \"drill and kill\", but rather, \"sticky\" and personal and unique to each student; IVJs are cumulative so that at a course's or semester's conclusion, students have created a vocabulary portfolio they can share with classmates.",
	 "Digital Pamphlet": "Relying on the traditional look of a pamphlet, students create their own digitized version, using videos, music, images, etc. which they can share not only with classmates but also their school via the school's technologies.",
	 "Digital Infomercial": "Students create their own digitized version of the traditional infomercial they see on television, using videos, music, images, etc. which they can share not only with classmates but also their school via the school's technologies.",
	 "Digital Vlog": "Students create their own video-blogs using videos, music, images, interviews, notes, etc. which they can share not only with classmates but also their school via the school's technologies.",
	 "Digital Prevention Plan": "Students create Prevention Plans for their schools, using videos, music, images, interviews, notes, etc. which they can share not only with classmates but also their school via the school's technologies or school-wide exhibits.",
	 "Digital Poster": "Students create unconventional posters for their schools, using videos, music, images, interviews, notes, etc. which they can share not only with classmates but also their school via the school's technologies or school-wide exhibits.",
	 "Digital Montage": "Students create visual and audial montages for their schools, using videos, music, images, interviews, notes, etc. which they can share not only with classmates but also their school via the school's technologies or school-wide exhibits, via PPT or iMovies."
}
function tabIt(i,E){
	var $E=$(E), id=$E.attr('id');
	$E.after( $('<a>').addClass('tabbed-it').text($E.attr('title')).attr({href:'#'+id}) );
	window._savedDialogs[id]=$E.dialog({modal:true,width:627,resizable:false,autoOpen:false,close:_clearHash});
}



if ( !('now' in Date) ){
	Date.now = function() { return new Date(); };
}
if ( !('noop' in jQuery.fn) ){
	jQuery.fn.noop =  function(){return this;};
}
