xMax = 273;
yMax = 0;
curMax = 0;
d_time = 0;
identify = 0;
temp = 67;


slide_array = new Array(5);

slide_array[0] = new Array(5);
slide_array[0][0] = 57/273;
slide_array[0][1] = 18;
slide_array[0][2] = "";
slide_array[0][3] = "yrs";
slide_array[0][4] = 30;
slide_array[1] = new Array(5);
slide_array[1][0] = 57/273;
slide_array[1][1] = 18;
slide_array[1][2] = "";
slide_array[1][3] = "yrs";
slide_array[1][4] = 65;
slide_array[2] = new Array(5);
slide_array[2][0] = 3000/273;
slide_array[2][1] = 0;
slide_array[2][2] = "$";
slide_array[2][3] = "k";
slide_array[2][4] = 50;
slide_array[3] = new Array(5);
slide_array[3][0] = 10000/273;
slide_array[3][1] = 0;
slide_array[3][2] = "$";
slide_array[3][3] = ""
slide_array[3][4] = 1000;
slide_array[4] = new Array(5);
slide_array[4][0] = 12/273;
slide_array[4][1] = 0;
slide_array[4][2] = "";
slide_array[4][3] = "%";
slide_array[4][4] = 4;
	
function startup(){
	cbLeft('slide1', Math.round((30 - 18)*273/57), 30);
	identify = 1;
	cbLeft('slide2', Math.round((65 - 18)*273/57), 65);
	cbLeft('slide2b', Math.round((65 - 18)*273/57), 65);
	identify = 2;
	cbLeft('slide3', Math.round((50)*273/3000), 50);
	identify = 3;
	cbLeft('slide4', Math.round((1000)*273/10000), 1000);
	cbLeft('slide4b', Math.round((1000)*273/10000), 1000);
	
	identify = 4;
	cbLeft('slide5', Math.round((4)*273/12), 4);
	cbLeft('slide5b', Math.round((4)*273/12), 4);

	cbGetElementById('age').value = slide_array[0][4] + slide_array[0][3];
	cbGetElementById('start_val').value = slide_array[2][4] ;
	
	cbGetElementById('slider1').value = slide_array[0][4] ;
	cbGetElementById('slider2').value = slide_array[1][4] ;
	cbGetElementById('slider2b').value = slide_array[1][4] ;
	cbGetElementById('slider3').value = slide_array[2][4] ;
	cbGetElementById('slider4').value = format_num(slide_array[3][4]);
	cbGetElementById('slider4b').value = format_num(slide_array[3][4]);
	cbGetElementById('slider5').value = slide_array[4][4] ;
	cbGetElementById('slider5b').value = slide_array[4][4] ;
	
	
	cbGetElementById('sofar').firstChild.nodeValue = "$" + format_num(far()) + "k";
	cbGetElementById('estimate').firstChild.nodeValue = "$" + format_num(estimated());
}

// cbGetElementByID: Cross-browser version of "document.getElementById()"
function cbGetElementById(element)
{
	if (document.getElementById) element = document.getElementById(element);
	else if (document.all) element = document.all[element];
	else element = null;
	return element;
}

// cbLeft: Cross-browser version of "element.style.left"
function cbLeft(elmnt, pos, value)
{
	
	//alert(elmnt + ":" + pos + ":" + value);
	if (!(elmnt = cbGetElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.left) == 'string')) {
		if (typeof(pos) == 'number'){
			//elmnt.style.position = 'relative';
			elmnt.style.left = pos + 'px';
			elmnt.firstChild.nodeValue = slide_array[identify][2] + format_num(value) + slide_array[identify][3];
			slide_array[identify][4] = value;
			//alert(slide_array[identify][4]);
			//elmnt.style.border = '1px solid #f00';
		}else {
			pos = parseInt(elmnt.style.left);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelLeft) {
		if (typeof(pos) == 'number') elmnt.style.pixelLeft = pos;
		else pos = elmnt.style.pixelLeft;
	}
	return pos;
}

// cbTop: Cross-browser version of "element.style.top"
function cbTop(elmnt, pos)
{
	if (!(elmnt = cbGetElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.top) == 'string')) {
		if (typeof(pos) == 'number') elmnt.style.top = pos + 'px';
		else {
			pos = parseInt(elmnt.style.top);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelTop) {
		if (typeof(pos) == 'number') elmnt.style.pixelTop = pos;
		else pos = elmnt.style.pixelTop;
	}
	return pos;
}
// moveSlider: Handles slider and display while dragging
function moveSlider(evnt)
{
	var evnt = (!evnt) ? window.event : evnt; // The mousemove event
	if (mouseover) { // Only if slider is dragged
		x = pxLeft + evnt.screenX - xCoord // Horizontal mouse position relative to allowed slider positions
		y = pxTop + evnt.screenY - yCoord // Horizontal mouse position relative to allowed slider positions
		if (x > xMax) x = xMax // Limit horizontal movement
		if (x < 0) x = 0 // Limit horizontal movement
		if (y > yMax) y = yMax // Limit vertical movement
		if (y < 0) y = 0 // Limit vertical movement
		v = Math.round(x * slide_array[identify][0]) + slide_array[identify][1];
		cbLeft(sliderObj.id, x, v)  // move slider to new horizontal position
		//cbTop(sliderObj.id, y) // move slider to new vertical position
		sliderVal = x + y // pixel value of slider regardless of orientation
		sliderPos = (sliderObj.pxLen / sliderObj.valCount) * Math.round(sliderObj.valCount * sliderVal / sliderObj.pxLen)
		//v = Math.round((sliderPos * sliderObj.scale + sliderObj.fromVal) * // calculate display value
			//Math.pow(10, displayObj.dec)) / Math.pow(10, displayObj.dec)
		//displayObj.value = v // put the new value in the slider display element
		return false
	}
	return
}
// moveSlider: Handles the start of a slider move.
function slide(evnt, orientation, length, from, to, count, decimals, display)
{
	if (!evnt) evnt = window.event;
	sliderObj = (evnt.target) ? evnt.target : evnt.srcElement; // Get the activated slider element.
	sliderObj.pxLen = length // The allowed slider movement in pixels.
	sliderObj.valCount = count ? count - 1 : length // Allowed number of values in the interval.
	displayObj = cbGetElementById(display) // Get the associated display element.
	identify = parseInt(sliderObj.id.charAt(5)) - 1;
	temp = slide_array[identify][4];
	//displayObj.dec = decimals // Number of decimals to be displayed.
	sliderObj.scale = (to - from) / length // Slider-display scale [value-change per pixel of movement].
	if (orientation == 'horizontal') { // Set limits for horizontal sliders.
		sliderObj.fromVal = from
		xMax = length
		yMax = 0
	}
	if (orientation == 'vertical') { // Set limits and scale for vertical sliders.
		sliderObj.fromVal = to
		xMax = 0
		yMax = length
		sliderObj.scale = -sliderObj.scale // Invert scale for vertical sliders. "Higher is more."
	}
	pxLeft = cbLeft(sliderObj.id) // Sliders horizontal position at start of slide.
	pxTop  = cbTop(sliderObj.id) // Sliders vertical position at start of slide.
	xCoord = evnt.screenX // Horizontal mouse position at start of slide.
	yCoord = evnt.screenY // Vertical mouse position at start of slide.
	mouseover = true
	document.onmousemove = moveSlider // Start the action if the mouse is dragged.
	document.onmouseup = sliderMouseUp // Stop sliding.
}
// sliderMouseup: Handles the mouseup event after moving a slider.
// Snaps the slider position to allowed/displayed value. 
function sliderMouseUp(evnt)
{
	//alert(identify);
	var evnt = (!evnt) ? window.event : evnt; // The mousemove event
	sliderObj = (evnt.target) ? evnt.target : evnt.srcElement; // Get the activated slider element.
	mouseover = false // Stop the sliding.
	if (document.removeEventListener) { // Remove event listeners from 'document' (Moz&co).
		document.removeEventListener('mousemove', moveSlider, false)
		document.removeEventListener('mouseup', sliderMouseUp, false)
	}
	else if (document.detachEvent) { // Remove event listeners from 'document' (IE&co).
		document.detachEvent('onmousemove', moveSlider)
		document.detachEvent('onmouseup', sliderMouseUp)
	}
	
	cbGetElementById('sofar').firstChild.nodeValue = "$" + format_num(far()) + "k";
	cbGetElementById('estimate').firstChild.nodeValue = "$" + format_num(estimated());
	if (identify == 1 || identify == 3 || identify == 4){
		if (identify == 1 && slide_array[identify][4] <= slide_array[0][4]){
			alert("Retirment age must be greater than your current age");
			slide_array[identify][4] = temp;
			cbLeft('slide' + (identify + 1), Math.round((temp - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1)), temp);
		}
		cbLeft('slide' + (identify + 1) + 'b', format_num(Math.round((slide_array[identify][4] - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1))), slide_array[identify][4]);
		cbLeft('slide' + (identify + 1), format_num(Math.round((slide_array[identify][4] - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1))), slide_array[identify][4]);
		cbGetElementById('slider' + (identify + 1) + 'b').value = format_num(slide_array[identify][4]);
		cbGetElementById('slider' + (identify + 1)).value = format_num(slide_array[identify][4]);
	}else if(identify == 0){
		if (slide_array[identify][4] >= slide_array[1][4]){
			alert("Retirment age must be greater than your current age");
			slide_array[identify][4] = temp;			
			cbLeft('slide' + (identify + 1), format_num(Math.round((temp - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1))), temp);
		}
	
		cbGetElementById('age').value = slide_array[identify][4] + slide_array[identify][3];
	}else if(identify == 2)
		cbGetElementById('start_val').value = format_num(slide_array[identify][4]);
		cbGetElementById('start_val_2').value = cbGetElementById('start_val').value;
		
	cbGetElementById('slider' + (identify + 1)).value = format_num(slide_array[identify][4]);
	//v = (displayObj.value) ? displayObj.value : 0 // Find last display value.
	//pos = (v - sliderObj.fromVal)/(sliderObj.scale) // Calculate slider position (regardless of orientation).
	//if (yMax == 0) cbLeft(sliderObj.id, pos) // Snap horizontal slider to corresponding display position.
	//if (xMax == 0) cbTop(sliderObj.id, pos) // Snap vertical slider to corresponding display position.
}

function hideSlide(elmnt)
{
	if (!(elmnt = cbGetElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.display) == 'string')) 
		elmnt.style.display = 'none';
	else
		return 0;
	return 1;
}

function showSlide(elmnt)
{
	if (!(elmnt = cbGetElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.display) == 'string')) 
		elmnt.style.display = 'block';
	else
		return 0;
	return 1;
}

function estimated()
{
	//base = slide_array[2][4] * 1000 * Math.round(Math.pow((1 + slide_array[4][4]/100), slide_array[1][4] - slide_array[0][4]));
	//alert(base);
	//alert(slide_array[1][4] - slide_array[0][4]);
	if (slide_array[4][4] != 0)
		return Math.round(far() + slide_array[3][4]  * ((Math.pow((1 + slide_array[4][4]/100), slide_array[1][4] - slide_array[0][4])) - 1)/(slide_array[4][4]/100));
	return far() + slide_array[3][4] * (slide_array[1][4] - slide_array[0][4]);
}

function far()
{
	//alert(slide_array[2][4]);
	if (slide_array[4][4] != 0 && slide_array[2][4] != 0)
		return Math.round(slide_array[2][4] * 1000 * Math.pow((1 + slide_array[4][4]/100), slide_array[1][4] - slide_array[0][4]));
	return slide_array[2][4] * 1000;
}

function noNumbers(e)
{
	var keynum;
	var keychar;
	var numcheck;
	
	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	keychar = String.fromCharCode(keynum);
	numcheck = /\d/;
	return numcheck.test(keychar);
}

function change()
{
	cbGetElementById('splash').style.display = "none";
	cbGetElementById('accordion').style.display = "block";
	abstractAcc(1);
	abstractAcc(0);
	setTimeout('hideSlide("slide3")', 300);
}

function change_two()
{
	cbGetElementById('ec_0_0').style.display = "none";
	cbGetElementById('ec_0_0b').style.display = "block";
}

function go_back()
{
	cbGetElementById('ec_0_0b').style.display = "none";
	cbGetElementById('ec_0_0').style.display = "block";
}

function update_slider(id)
{
	identify = parseInt(id.charAt(6)) - 1;
	//if (slide_array[iden
	change2 = cbGetElementById(id).value
	if (change2 >= slide_array[identify][1] && change2 <= slide_array[identify][0] * 273 + slide_array[identify][1])
		cbLeft('slide' + (identify + 1), Math.round((change2 - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1)), change2);
	else
		alert("You have fallen out of range of the slider. Please select a value between " + slide_array[identify][1] + " and " + (slide_array[identify][0] * 273 + slide_array[identify][1]) + " inclusive");
		
	if (identify == 1 || identify == 3 || identify == 4){
		if (identify == 1 && slide_array[identify][4] <= slide_array[0][4]){
			alert("Retirment age must be greater than your current age");
			slide_array[identify][4] = temp;
			cbLeft('slide' + (identify + 1), Math.round((temp - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1)), temp);
		}
		cbLeft('slide' + (identify + 1) + 'b', Math.round((slide_array[identify][4] - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1)), slide_array[identify][4]);
		cbLeft('slide' + (identify + 1), Math.round((slide_array[identify][4] - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1)), slide_array[identify][4]);
		cbGetElementById('slider' + (identify + 1) + 'b').value = format_num(slide_array[identify][4]);
		cbGetElementById('slider' + (identify + 1)).value = format_num(slide_array[identify][4]);
	}else if(identify == 0){
		if (slide_array[identify][4] >= slide_array[1][4]){
			alert("Retirment age must be greater than your current age");
			slide_array[identify][4] = temp;			
			cbLeft('slide' + (identify + 1), Math.round((temp - slide_array[identify][1])*Math.pow(slide_array[identify][0], -1)), temp);
		}
	
		cbGetElementById('age').value = slide_array[identify][4] + slide_array[identify][3];
	}else if(identify == 2)
		cbGetElementById('start_val').value = format_num(slide_array[identify][4]);
		cbGetElementById('start_val_2').value = cbGetElementById('start_val').value;
		
		
	cbGetElementById('slider' + (identify + 1)).value = format_num(slide_array[identify][4]);

	cbGetElementById('sofar').firstChild.nodeValue = "$" + format_num(far()) + "k";
	cbGetElementById('estimate').firstChild.nodeValue = "$" + format_num(estimated());
}
	
function format_num(num)
{
	var numstr = "" + num;
	
	
	if (numstr.length < 4)
		return num;
	//alert(num);
	//alert(num.length);
	//start = numstr.length;
	result = "";
	
	
	for (i = 0; i < Math.floor((numstr).length/3) + 1; i = i + 1)
	{
		if ((numstr).length - i*3 -3 > 0)
			result = ',' + numstr.substring((numstr).length - i*3 -3, (numstr).length - i*3) + result;
		else
			result = numstr.substring(0, (numstr).length - i*3) + result;
			
	}
	
	
	return result;
		
}