// switch images
function switchImage(i) {
	$('big-img').down().href = i.src;
	$('big-img').down(1).src = i.src;  
}

// scroller
var Scroller = {
	_scrolling: -1 // used by setInterval
	, _current_top: 0
	, _top_el_offset: 0
	, _clientX: 0
	, _rows: 0
	, _li_height: 0
	, _target: $('scroller')
	, _arrows: false
	, _arrow_up: false
	, _arrow_down: false
	, _mouseheight: 75
	, _speed: 40
	, _visible_rows: 2
	, _limargin: 2
	, _columns: 1
	, _direction: 0
	, init: function(target, up, down, mouseheight, speed, limargin, columns) {
		/* new scroller:
			target - the ul element (prototyped) to scroll
			up - an up arrow for the scroll
			down - a down arrow for the scroll
			mouseheight - the height of the areas on the top / bottom of the ul that trigger movement
			speed - how fast to scroll - lower is faster
			limargin - the vertical margin on each li
			columns - number of columns the images are in
		*/
		Scroller._target = target ? target : Scroller._target;
		Scroller._mouseheight = mouseheight ? mouseheight : Scroller._mouseheight;
		Scroller._speed = speed ? speed : Scroller._speed;
		Scroller._limargin = limargin ? limargin : Scroller._limargin;
		Scroller._columns = columns ? columns : Scroller._columns;
		
		Scroller._arrows = (up && down);
		if (Scroller._arrows) {
			Scroller._arrow_up = up ? up : Scroller._up;
			Scroller._arrow_down = down ? down : Scroller._down;
		}
	}, start: function() {
		// get sizes, set up private vars, etc
		
		// the target
		Scroller._target.onmouseover = Scroller.start_mouseover_scroll;
		Scroller._target.onmousemove = Scroller.start_mouseover_scroll;
		Scroller._target.onmouseout = Scroller.stop_scroll;
		if (Scroller._arrows) {
			// the up arrow
			Scroller._arrow_up.onmouseover = Scroller.start_arrow_up_scroll;
			Scroller._arrow_up.onmousemove = Scroller.start_arrow_up_scroll;
			Scroller._arrow_up.onmouseout = Scroller.stop_scroll;
			
			// the down arrow
			Scroller._arrow_down.onmouseover = Scroller.start_arrow_down_scroll;
			Scroller._arrow_down.onmousemove = Scroller.start_arrow_down_scroll;
			Scroller._arrow_down.onmouseout = Scroller.stop_scroll;
		}
		Scroller._rows = Math.ceil(Scroller._target.down().childElements().length / Scroller._columns);
		Scroller._li_height = Scroller._target.down(1).offsetHeight + Scroller._limargin;
		Scroller._visible_rows = Math.floor(Scroller._target.offsetHeight / Scroller._li_height);
		
		Scroller._target.down().setStyle('height:' + (Scroller._rows * Scroller._li_height) + 'px;');	
	}, start_mouseover_scroll: function(e) {
		// called on mouse over
		Scroller._direction = 0;
		Scroller.start_scroll(e);
	}, start_arrow_up_scroll: function(e) {
		// called on up arrow over
		Scroller._direction = 2;
		Scroller.start_scroll(e);
	}, start_arrow_down_scroll: function(e) {
		// called on down arrow over
		Scroller._direction = 1;
		Scroller.start_scroll(e);
	}, start_scroll: function(e) {
		// set up the scroll, and start the interval
		Scroller._top_el_offset = 0;		
		if (e) { Scroller._clientY = Event.pointerY(e);	} 
			else { Scroller._clientY = Event.pointerY(event); }
		
		var obj = Scroller._target;
		
		do {
			Scroller._top_el_offset += obj.offsetTop;
		} while (obj = obj.offsetParent);

		if (Scroller._scrolling == -1) {
			Scroller._scrolling = window.setInterval(Scroller.scroll, Scroller._speed);
		}	
	}, scroll: function() {
		// called via setInterval
		var up = false; // direction the images are moving in
		if (Scroller._direction == 0) {
			var offTop = 0;
			var offTop = (Scroller._clientY - Scroller._top_el_offset + offTop);
			var bottom_bound = Scroller._target.offsetHeight - Scroller._mouseheight;
			
			if (offTop > bottom_bound) {
				up = true;
			} else if (offTop < Scroller._mouseheight) {
				up = false;
			} else {
				return;
			}
		} else {
			up = (Scroller._direction == 1);
		}
		if (up) {
			// images moving up, cursor at bottom
			if (Scroller._current_top >= (0 - ((Scroller._rows - Scroller._visible_rows) * Scroller._li_height))) {
				Scroller._current_top -= 5;
				Scroller._target.down().setStyle('top:' + Scroller._current_top + 'px;');
			}
		} else {
			// images moving down, cursor at top
			if (Scroller._current_top <= -5) {
				Scroller._current_top += 5;
				Scroller._target.down().setStyle('top:' + Scroller._current_top + 'px;');
			}
		}
	}, stop_scroll: function() {
		// called on mouse out
		if (Scroller._scrolling > -1) {
			window.clearInterval(Scroller._scrolling);
			Scroller._scrolling = -1;
		}
	}
};




// simple column fixer
function fixColumns(el) {
	// add two columns just below el - div left and div right. put the content in each div so we have two columns
	var left = 0;
	var totalHeight = 0; // can't get el's scroll height - if it has padding it screws everything up
	
	var elements = el.childElements();
	
	for (i = 0, j = elements.length; i<j; i++) {
		totalHeight += elements[i].offsetHeight;
	}
	
	var leftHeight = 0;
	
	// move everything to right div
	// in current version of prototype (1.6.0.3) these two lines don't work in IE8 (sets the "className" attribute, instead of "class").  The next lines take care of the problem.
	//var rightDiv = new Element('div', { 'class': 'col-right' });
	//var leftDiv = new Element('div', { 'class' : 'col-left' });
	
	var rightDiv = new Element('div');
	var leftDiv = new Element('div');
	rightDiv.addClassName('col-right');
	leftDiv.addClassName('col-left');
	
	var l = true;
	
	var halfHeight = totalHeight / 2;
	
	for (i = 0, j = elements.length; i<j; i++) {
		if (l) {
			left += elements[i].offsetHeight;
			leftDiv.insert(elements[i]);
			l = (left < halfHeight);
		} else {
			rightDiv.insert(elements[i]);
		}
	}
	
	el.update(leftDiv);
	el.insert(rightDiv);	
}

// car detail panels
var panel_sem = 0;

function pStart() { panel_sem++; }
function pFinish() { panel_sem--; }

function togglePanel() {
	if (panel_sem == 0) {
		n = $(this).parentNode.childElements()[1];
		if (n.panelOn) { 
			n.visualEffect('blind_up',{duration:.5, beforeStart:pStart, afterFinish:pFinish});
			n.panelOn = false;
		} else {
			$$('.panel').each(function(s) {
				j = s.childElements()[1];
				if (j.panelOn) {
					j.visualEffect('blind_up',{duration:.5, beforeStart:pStart, afterFinish:pFinish});
					j.panelOn = false;
				}
			});
			n.visualEffect('blind_down',{duration:.5, beforeStart:pStart, afterFinish:pFinish});
			n.panelOn = true;
		}
	}
}

// loan calculator
function lc_calc() {
	price = $('lc_price').innerHTML.replace('$','').replace(',','');
	dp = $('lc_dp').value.replace('$','').replace(',','');
	term = $('lc_months').options[$('lc_months').selectedIndex].value;
	interest = $('lc_interest').value;
	
	principle = price - dp;
	
	interest = interest / 100;
	mr = interest / 12;
	
	mp = Math.floor(( principle * mr ) / (1 - Math.pow((1+mr),(-1*term)))*100)/100;		
	
	if (isNaN(mp)) {
		$('lc_monthly').innerHTML = '[Error!]';	
	} else {
		mp = "$" + mp;
		if (mp.lastIndexOf('.') > 0) {
			if (mp.lastIndexOf('.') == mp.length - 2) {
				mp += "0";
			} else {
				mp = mp.substring(0, mp.lastIndexOf('.') + 3);
			}
		} else {
			mp += '.00';
		}
		$('lc_monthly').innerHTML = mp;		
	}
	return true;
}

/**************************************************************************
* Menu / Rollover Handler
*
* Sets up links, drop down menus, and rollover image links.
* Scott Wespi (scott@darkstardesign.com)
*
* Requires Prototype / Scriptaculous
**************************************************************************/
var dsd_menu = {
	_auto_close_time: 100
	, _close_timeout: false
	, _current_menu: 0
	, init: function() {	
		// rollovers
		$$('a.rollover').each(function(s){
			var a = new Image();
			var b = s.down().src;
			a.src = ( b.substring(0,b.lastIndexOf('.')) + '-over' + b.substring(b.lastIndexOf('.'),b.length) );
			s.oldImg = a;
			s.onmouseover = dsd_menu.swap;
			s.onmouseout = dsd_menu.swap;
		});
		
		// drop downs
		$$('a.drop-down').each(function(s) {
			s.onmouseover = dsd_menu.open;
			s.onmouseout = dsd_menu.start_close;
			
			s.next('.sub-menu').onmouseover = dsd_menu.cancel_close;
			s.next('.sub-menu').onmouseout = dsd_menu.start_close;
		});		
	}, swap: function() {
		// if a drop down is open, close it
		if (this.oldImg) {
			a = this.down().src;
			this.down().src = this.oldImg.src;
			this.oldImg.src = a;
		}
	}, open: function() {
		dsd_menu.cancel_close();	
		dsd_menu.close();
		if (!$(this).next('.sub-menu').hasClassName('out')) {
			if ($(this).hasClassName('rollover')) {
				dsd_menu.swap.call($(this));
			}
		}
		dsd_menu._current_menu = $(this).next('.sub-menu');
		$(this).next('.sub-menu').show(); // could use effect here
		$(this).next('.sub-menu').addClassName('out');
	}, close: function() {
		if (dsd_menu._current_menu) {
			if (dsd_menu._current_menu.previous('a.drop-down').hasClassName('rollover')) {
				if (dsd_menu._current_menu.hasClassName('out')) {
					dsd_menu.swap.call(dsd_menu._current_menu.previous('a.drop-down'));
				}
			}
			dsd_menu.close_menu(); // could use effect here
		}
	}, close_menu: function() {
		if (dsd_menu._current_menu) {
			dsd_menu._current_menu.removeClassName('out');
			dsd_menu._current_menu.hide(); // could use effect here
			dsd_menu._current_menu = false;
		}
	}, start_close: function() {
		dsd_menu._close_timeout = window.setTimeout(dsd_menu.close, dsd_menu._auto_close_time);
	}, cancel_close: function() {
		if(dsd_menu._close_timeout) {
			window.clearTimeout(dsd_menu._close_timeout);
			dsd_menu._close_timeout = false;
		}
	}, debug_time: function() {
		var d = new Date()

		return d.getMinutes()+':'+d.getSeconds()+'.'+d.getMilliseconds();
	}
};
