// Create button class
var Button = Class.create();
Button.prototype = {
	
	// initialize 
	initialize: function(el) {
		// attach element (el) to the button
		this.el = $(el);
		
		// attach radio to the button
		this.radio  = $(el+'-radio');				

		// an array for other buttons that set the same variable
		this.others = Array();

		// setup an action function 
		this.action = function() {};
		
		// enable button
		this.enable();
		
		// if the radio is already checked, activate the button
		if(this.radio.checked) {
			this.activate();
		}
		
		// setup hover for element
		this.el.onmouseover = this.onMouseOver.bindAsEventListener(this);
		this.el.onmouseout = this.onMouseOut.bindAsEventListener(this);
		
		// setup onclick for element
		this.el.onmousedown = this.onClick.bindAsEventListener(this);
		
		// hide radio button and label
		this.radio.style.visibility = 'hidden';
		this.el.getElementsByTagName('label')[0].style.visibility = 'hidden';
	},
	
	// disable the button
	disable: function() {
		this.enabled = false;
		this.active = false;
		Element.addClassName(this.el, 'disabled');
		Element.removeClassName(this.el, 'option');
		Element.removeClassName(this.el, 'active');
		this.radio.checked = false;
	},
	
	// enable the button (can be activated)
	enable: function() {
		if(!this.active) {
			this.enabled = true;
			Element.addClassName(this.el, 'option');
			Element.removeClassName(this.el, 'disabled');
			Element.removeClassName(this.el, 'active');
		}
	},
	
	// activate the button
	activate: function() {
		this.enabled = false;
		this.active = true;
		Element.addClassName(this.el, 'active');
		Element.removeClassName(this.el, 'option');
		Element.removeClassName(this.el, 'disabled');
		Element.removeClassName(this.el, 'hover');
		this.radio.checked = true;
		
		// deactivate others
		for(var i = 0; i < this.others.length; i++) {
			this.others[i].deactivate();
		}
	},
	
	// deactivate the button
	deactivate: function() {
		if(this.active) {
			this.active = false;
			this.enable();
			this.radio.checked = false;
		}
	},
	
	// mouseover event
	onMouseOver: function() {
		if(this.enabled) {
			Element.addClassName(this.el, 'hover');
		}
	},
	
	// mouseout event
	onMouseOut: function() {
		Element.removeClassName(this.el, 'hover');
	},
	
	// onclick event
	onClick: function() {
		if(this.enabled) {
			this.activate();	// activate button
			this.action();		// perform any actions
		}
	},
	
	// specify which other buttons control the same variable
	setOthers: function() {
		var elements = [];
		$c(arguments).each(function(el){
			elements.push($(el));
		});
		this.others = elements;
	}
};

// Upon load, create buttons and set up dependencies
if(document.getElementById) {
	attachOnload( function() {
		
		/***** set up transitions *****/
		
		// define transition duration
		var transitionDuration = 500;

		// extend the fx.Height class to allow expand() and collapse() functions
		Object.extend(fx.Height.prototype, {
			expand: function() {
				if (this.el.offsetHeight == 0) this.custom(0, this.el.scrollHeight);
			},
			
			collapse: function() {
				if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0);
			}
		});
		
		// create transitions for price calculator totals

		var toggleOptionsPrice = new fx.Height('optionsPriceWrap', { duration: transitionDuration });
		toggleOptionsPrice.hide();
		var toggleDesignPrice = new fx.Height('designPriceWrap', { duration: transitionDuration });
		toggleDesignPrice.hide();
		
		function turnImagesOff() {
hideImage('USBImage01');
hideImage('USBImage02');
hideImage('USBImage03');
hideImage('USBImage04');
hideImage('USBImage05');
hideImage('USBImage06');
hideImage('USBImage07');
hideImage('USBImage08');
hideImage('USBImage09');
		}

		function usbTypeSelected () {
			return (usbType01.active || usbType02.active || usbType03.active || usbType04.active || usbType05.active || usbType06.active || usbType07.active || usbType08.active || usbType09.active);	
		}
		
		function usbSizeSelected () {
			return (usbSize256MB.active || usbSize512MB.active || usbSize1GB.active || usbSize2GB.active || usbSize4GB.active || usbSize8GB.active || usbSize16GB.active);	
		}
		
		function logoDesignSelected() {
			return (logoDesignOwn.active || logoDesignUs.active);	
		}
		
		function colorSelected() {
			return (colorRed.active || colorOrange.active || colorYellow.active || colorGreen.active || colorBlue.active || colorPurple.active || colorPink.active || colorBlack.active || colorDefault.active);
		}
		
		function enablelogoDesign () {
			logoDesignOwn.enable();
			logoDesignUs.enable();
		}
		
		function disablelogoDesign () {
			logoDesignOwn.disable();
			logoDesignUs.disable();
		}
		
		function disableusbTypes () {
			usbType01.disable();
			usbType02.disable();
			usbType03.disable();
			usbType04.disable();
			usbType05.disable();
			usbType06.disable();
			usbType07.disable();
			usbType08.disable();
			usbType09.disable();
		}
		
		function enableusbTypes () {
			usbType01.enable();
			usbType02.enable();
			usbType03.enable();
			usbType04.enable();
			usbType05.enable();
			usbType06.enable();
			usbType07.enable();
			usbType08.enable();
			usbType09.enable();
		}
		
		function disableusbSizes () {
			usbSize256MB.disable();
			usbSize512MB.disable();
			usbSize1GB.disable();
			usbSize2GB.disable();
			usbSize4GB.disable();
			usbSize8GB.disable();
			usbSize16GB.disable();
		}
		
		function enableusbSizes () {
			usbSize256MB.enable();
			usbSize512MB.enable();
			usbSize1GB.enable();
			usbSize2GB.enable();
			usbSize4GB.enable();
			usbSize8GB.enable();
			usbSize16GB.enable();
		}
		
		function disableColors() {
			colorRed.disable();
			colorOrange.disable();
			colorYellow.disable();
			colorGreen.disable();
			colorBlue.disable();
			colorPurple.disable();
			colorPink.disable();
			colorBlack.disable();
			colorDefault.disable();
		}
		
		function enableColors() {
			colorRed.enable();
			colorOrange.enable();
			colorYellow.enable();
			colorGreen.enable();
			colorBlue.enable();
			colorPurple.enable();
			colorPink.enable();
			colorBlack.enable();
			colorDefault.enable();
		}
		
		function checkSteps() {
			if(usbTypeSelected()) {
				enableusbSizes();
				if (usbSizeSelected()) {
					enableColors();
					if (colorSelected()) {
						enablelogoDesign();
					} else {
						disablelogoDesign();
					}
				} else {
					disableColors();
				}
			} else {
				disablelogoDesign();
				disableusbSizes();
				disableColors();
			}	
		}
		
		// function to check statuses
		function checkToggles() {
			// if disc type is CD or DVD
			if(quantityTextInput.value > 0) {
				enableusbTypes();
			} else {
				
				logoDesignOwn.deactivate();
				logoDesignUs.deactivate();
				usbSize512MB.deactivate();
				usbSize256MB.deactivate();
				usbSize1GB.deactivate();
				usbSize2GB.deactivate();
				usbSize4GB.deactivate();
				usbSize8GB.deactivate();
				usbSize16GB.deactivate();

				disableColors();
				disableusbTypes();
				disablelogoDesign();
				disableusbSizes();
			}

		if(usbTypeSelected() && usbSizeSelected() && logoDesignSelected()) {
			continueButton.disabled = false;
		} else {
			continueButton.disabled = true;
		}
		setPrices();
		
		}

		
//////////////////////////
///// MATH FUNCTIONS /////
//////////////////////////
function pF(n) {
	
  var result = 'FREE';
  
  if (n>0) {
	  result = '+$'+n.toFixed(2);
  } else if (n<0) {
	  n *= -1;
	  result = '-$'+n.toFixed(2);
  }

  return result;
}

function setPrices () {
var basePrice = 0;
var logoDesignPrice = 0;
var optionsPrice = 0;
	
if (quantityTextInput.value > 999) {
	if (usbSize256MB.active) {
		basePrice = 4.69;	
	} else if (usbSize512MB.active) {
		basePrice = 5.19;	
	} else if (usbSize1GB.active) {
		basePrice = 5.89;
	} else if (usbSize2GB.active) {
		basePrice = 6.69;
	} else if (usbSize4GB.active) {
		basePrice = 10.09;
	} else if (usbSize8GB.active) {
		basePrice = 20.39;
	} else if (usbSize16GB.active) {
		basePrice = 42.29;
	}
} else if (quantityTextInput.value > 499) {
	if (usbSize256MB.active) {
		basePrice = 4.89;	
	} else if (usbSize512MB.active) {
		basePrice = 5.39;	
	} else if (usbSize1GB.active) {
		basePrice = 6.19;
	} else if (usbSize2GB.active) {
		basePrice = 6.99;
	} else if (usbSize4GB.active) {
		basePrice = 10.59;
	} else if (usbSize8GB.active) {
		basePrice = 21.39;
	} else if (usbSize16GB.active) {
		basePrice = 44.29;
	}
} else if (quantityTextInput.value > 249) {
	if (usbSize256MB.active) {
		basePrice = 5.39;	
	} else if (usbSize512MB.active) {
		basePrice = 5.99;	
	} else if (usbSize1GB.active) {
		basePrice = 6.79;
	} else if (usbSize2GB.active) {
		basePrice = 7.59;
	} else if (usbSize4GB.active) {
		basePrice = 11.39;
	} else if (usbSize8GB.active) {
		basePrice = 22.49;
	} else if (usbSize16GB.active) {
		basePrice = 46.29;
	}
} else if (quantityTextInput.value > 99) {
	if (usbSize256MB.active) {
		basePrice = 6.09;	
	} else if (usbSize512MB.active) {
		basePrice = 6.69;	
	} else if (usbSize1GB.active) {
		basePrice = 7.49;
	} else if (usbSize2GB.active) {
		basePrice = 8.29;
	} else if (usbSize4GB.active) {
		basePrice = 12.09;
	} else if (usbSize8GB.active) {
		basePrice = 23.49;
	} else if (usbSize16GB.active) {
		basePrice = 47.69;
	}
} else {
	if (usbSize256MB.active) {
		basePrice = 7.39;	
	} else if (usbSize512MB.active) {
		basePrice = 8.09;	
	} else if (usbSize1GB.active) {
		basePrice = 8.89;
	} else if (usbSize2GB.active) {
		basePrice = 9.79;
	} else if (usbSize4GB.active) {
		basePrice = 13.89;
	} else if (usbSize8GB.active) {
		basePrice = 26.09;
	} else if (usbSize16GB.active) {
		basePrice = 52.19;
	}
}

if (document.quote.option1.checked) {
	optionsPrice += 0.25;
}
if (document.quote.option2.checked) {
	optionsPrice += 0.25;
}
if (document.quote.option3.checked) {
	optionsPrice += 0.40;
}

if (document.quote.option4.checked) {
	optionsPrice += 0.60;
}

if (document.quote.option5.checked) {
	optionsPrice += 0.70;
}

if (logoDesignUs.active) {
logoDesignPrice = 99;	
}

if (quantityTextInput.value > 0 && usbTypeSelected() && usbSizeSelected()) {
	document.quote.perUnitPrice.value = pF(basePrice);
} else {
	logoDesignPrice = 0;
	optionsPrice = 0;
	document.quote.perUnitPrice.value = '';
}

if (logoDesignPrice == 0) {
	document.quote.logoDesignPrice.value = '';
	toggleDesignPrice.collapse();
} else {
	document.quote.logoDesignPrice.value = pF(logoDesignPrice);
	toggleDesignPrice.expand();
}

if (optionsPrice == 0) {
	document.quote.optionsPrice.value = '';
	toggleOptionsPrice.collapse();
} else {
	document.quote.optionsPrice.value = pF(optionsPrice);
	toggleOptionsPrice.expand();
}

if (quantityTextInput.value > 0) {
	document.quote.totalUnitPrice.value = '$'+(((basePrice+optionsPrice)*quantityTextInput.value + logoDesignPrice)/quantityTextInput.value).toFixed(2);
} else {
	document.quote.totalUnitPrice.value = '$0.00';
}
document.quote.total.value = '$'+((basePrice+optionsPrice)*quantityTextInput.value + logoDesignPrice).toFixed(2);

}

		// set up variables
		var quantity = $('quantity');
		var quantityText = $('quantity-text');
		var quantityTextInput = $('quantity-text-input');
		
		// restrict input text box to integers between 1 and 25000
		quantityTextInput.onchange = function() {
			// minimum 1
			if(Number(this.value) < 0) {
				this.value = 100;
			}
			
			// only integers
			if(/\D/.test(this.value)) { // search for non-digits
				this.value = 300;
				alert('Please enter a whole number between 1 and 25,000.');
				this.focus();
			}
			
			if(Number(this.value) > 2499) {
				document.getElementById('popups').style.visibility="visible";
				document.getElementById('specialPricing').style.display="block";
			}
			
			if(Number(this.value) < 50) {
				document.getElementById('popups').style.visibility="visible";
				document.getElementById('popupCallUs').style.display="block";
				this.value = 50;
			}
			
			checkToggles();
		};

		
		/***** instantiate buttons *****/
		var usbType01 = new Button('usbType-ud627');
		var usbType02 = new Button('usbType-ud628');
		var usbType03 = new Button('usbType-ud619');
		var usbType04 = new Button('usbType-udf113');
		var usbType05 = new Button('usbType-udf120');
		var usbType06 = new Button('usbType-udf132');
		var usbType07 = new Button('usbType-udf161');
		var usbType08 = new Button('usbType-udf610');
		var usbType09 = new Button('usbType-ud612');
		var logoDesignOwn = new Button('logoDesign-own');
		var logoDesignUs = new Button('logoDesign-us');
		var usbSize256MB = new Button('usbSize-256MB');
		var usbSize512MB = new Button('usbSize-512MB');
		var usbSize1GB = new Button('usbSize-1GB');
		var usbSize2GB = new Button('usbSize-2GB');
		var usbSize4GB = new Button('usbSize-4GB');
		var usbSize8GB = new Button('usbSize-8GB');
		var usbSize16GB = new Button('usbSize-16GB');
		var colorRed = new Button('color-red');
		var colorOrange = new Button('color-orange');
		var colorYellow = new Button('color-yellow');
		var colorGreen = new Button('color-green');
		var colorBlue = new Button('color-blue');
		var colorPurple = new Button('color-purple');
		var colorPink = new Button('color-pink');
		var colorBlack = new Button('color-black');
		var colorDefault = new Button('color-default');
		
		/***** assign actions to each button *****/
		
	
		// USB Type 01
		usbType01.setOthers(usbType02,usbType03,usbType04,usbType05,usbType06,usbType07,usbType08,usbType09);
		usbType01.action = function() {
			turnImagesOff();
			showImage('USBImage01');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 02
		usbType02.setOthers(usbType01,usbType03,usbType04,usbType05,usbType06,usbType07,usbType08,usbType09);
		usbType02.action = function() {
			turnImagesOff();
			showImage('USBImage02');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 03
		usbType03.setOthers(usbType01,usbType02,usbType04,usbType05,usbType06,usbType07,usbType08,usbType09);
		usbType03.action = function() {
			turnImagesOff();
			showImage('USBImage03');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 04
		usbType04.setOthers(usbType01,usbType02,usbType03,usbType05,usbType06,usbType07,usbType08,usbType09);
		usbType04.action = function() {
			turnImagesOff();
			showImage('USBImage04');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 05
		usbType05.setOthers(usbType01,usbType02,usbType03,usbType04,usbType06,usbType07,usbType08,usbType09);
		usbType05.action = function() {
			turnImagesOff();
			showImage('USBImage05');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 06
		usbType06.setOthers(usbType01,usbType02,usbType03,usbType04,usbType05,usbType07,usbType08,usbType09);
		usbType06.action = function() {
			turnImagesOff();
			showImage('USBImage06');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 07
		usbType07.setOthers(usbType01,usbType02,usbType03,usbType04,usbType05,usbType06,usbType08,usbType09);
		usbType07.action = function() {
			turnImagesOff();
			showImage('USBImage07');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 08
		usbType08.setOthers(usbType01,usbType02,usbType03,usbType04,usbType05,usbType06,usbType07,usbType09);
		usbType08.action = function() {
			turnImagesOff();
			showImage('USBImage08');
			checkSteps();
			checkToggles();
		};
		
		// USB Type 09
		usbType09.setOthers(usbType01,usbType02,usbType03,usbType04,usbType05,usbType06,usbType07,usbType08);
		usbType09.action = function() {
			turnImagesOff();
			showImage('USBImage09');
			checkSteps();
			checkToggles();
		};
		


		// Disc Design: You
		logoDesignOwn.setOthers(logoDesignUs);
		logoDesignOwn.action = function() {
			checkSteps();
			checkToggles();
		};
		
		// Disc Design: Us
		logoDesignUs.setOthers(logoDesignOwn);
		logoDesignUs.action = function() {
			checkSteps();
			checkToggles();
		};

		// USB Size: 256MB
		usbSize256MB.setOthers(usbSize512MB,usbSize1GB,usbSize2GB,usbSize4GB,usbSize8GB,usbSize16GB);
		usbSize256MB.action = function() {
			checkSteps();
			checkToggles();
		}

		// USB Size: 512MB
		usbSize512MB.setOthers(usbSize256MB,usbSize1GB,usbSize2GB,usbSize4GB,usbSize8GB,usbSize16GB);
		usbSize512MB.action = function() {
			checkSteps();
			checkToggles();
		}

		// USB Size: 1GB
		usbSize1GB.setOthers(usbSize256MB,usbSize512MB,usbSize2GB,usbSize4GB,usbSize8GB,usbSize16GB);
		usbSize1GB.action = function() {
			checkSteps();
			checkToggles();
		}

		// USB Size: 2GB
		usbSize2GB.setOthers(usbSize256MB,usbSize512MB,usbSize1GB,usbSize4GB,usbSize8GB,usbSize16GB);
		usbSize2GB.action = function() {
			checkSteps();
			checkToggles();
		}

		// USB Size: 4GB
		usbSize4GB.setOthers(usbSize256MB,usbSize512MB,usbSize1GB,usbSize2GB,usbSize8GB,usbSize16GB);
		usbSize4GB.action = function() {
			checkSteps();
			checkToggles();
		}

		// USB Size: 8GB
		usbSize8GB.setOthers(usbSize256MB,usbSize512MB,usbSize1GB,usbSize2GB,usbSize4GB,usbSize16GB);
		usbSize8GB.action = function() {
			checkSteps();
			checkToggles();
		}

		// USB Size: 16GB
		usbSize16GB.setOthers(usbSize256MB,usbSize512MB,usbSize1GB,usbSize2GB,usbSize4GB,usbSize8GB);
		usbSize16GB.action = function() {
			checkSteps();
			checkToggles();
		}

		// Color: Red
		colorRed.setOthers(colorOrange,colorYellow,colorGreen,colorBlue,colorPurple,colorPink,colorBlack,colorDefault);
		colorRed.action = function() {
			checkSteps();
			checkToggles();
		}
		
		// Color: Orange
		colorOrange.setOthers(colorRed,colorYellow,colorGreen,colorBlue,colorPurple,colorPink,colorBlack,colorDefault);
		colorOrange.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Yellow
		colorYellow.setOthers(colorRed,colorOrange,colorGreen,colorBlue,colorPurple,colorPink,colorBlack,colorDefault);
		colorYellow.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Green
		colorGreen.setOthers(colorRed,colorOrange,colorYellow,colorBlue,colorPurple,colorPink,colorBlack,colorDefault);
		colorGreen.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Blue
		colorBlue.setOthers(colorRed,colorOrange,colorYellow,colorGreen,colorPurple,colorPink,colorBlack,colorDefault);
		colorBlue.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Purple
		colorPurple.setOthers(colorRed,colorOrange,colorYellow,colorGreen,colorBlue,colorPink,colorBlack,colorDefault);
		colorPurple.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Pink
		colorPink.setOthers(colorRed,colorOrange,colorYellow,colorGreen,colorBlue,colorPurple,colorBlack,colorDefault);
		colorPink.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Black
		colorBlack.setOthers(colorRed,colorOrange,colorYellow,colorGreen,colorBlue,colorPurple,colorPink,colorDefault);
		colorBlack.action = function() {
			checkSteps();
			checkToggles();
		}		
		// Color: Default
		colorDefault.setOthers(colorRed,colorOrange,colorYellow,colorGreen,colorBlue,colorPurple,colorPink,colorBlack);
		colorDefault.action = function() {
			checkSteps();
			checkToggles();
		}
		/***** Set up reset button *****/
		var reset = $('reset');
		reset.onclick = function() {
			if(confirm('Are you sure you want to clear your selections?')) {
				quantityTextInput.value = '0';
				turnImagesOff();
				checkToggles();
			}
		};
		
		var option1 = $('option1');
		option1.onclick = function() {
			setPrices();
		};
		var option2 = $('option2');
		option2.onclick = function() {
			setPrices();
		};
		var option3 = $('option3');
		option3.onclick = function() {
			option4.checked = false;
			option5.checked = false;
			setPrices();
		};
		var option4 = $('option4');
		option4.onclick = function() {
			option3.checked = false;
			option5.checked = false;
			setPrices();
		};
		var option5 = $('option5');
		option5.onclick = function() {
			option3.checked = false;
			option4.checked = false;
			setPrices();
		};
		
		/***** Set up complete button *****/
		var continueButton = $('continue');
		continueButton.onmouseover = function() {
			checkToggles();
		};

		

		/***** Upon load, perform activation actions for any pre-selected buttons *****/
		
		// array of buttons
		buttons = Array(
			usbType01,
			usbType02,
			usbType03,
			usbType04,
			usbType05,
			usbType06,
			usbType07,
			usbType08,
			usbType09,
			usbSize256MB,
			usbSize512MB,
			usbSize1GB,
			usbSize2GB,
			usbSize4GB,
			usbSize8GB,
			logoDesignOwn,
			logoDesignUs
		);

		checkSteps();

		// perform activation routines for selected buttons
		for(var i = 0; i < buttons.length; i++) {
			if(buttons[i].active) {
				buttons[i].activate();
				buttons[i].action();
			}
		}

		checkToggles();

	});

}

// Attach an onload event 
function attachOnload(handler)
{
	if(window.addEventListener) {
		window.addEventListener("load",handler,false);
	}
	else if(window.attachEvent) {
		window.attachEvent("onload",handler);
	}
	else if(window.onload) {
		var oldHandler = window.onload;
		window.onload = function piggyback() {
			oldHandler();
			handler();
		};
	}
	else {
		window.onload = handler;
	}
}

//Create an array 
var allPageTags = new Array(); 

function setType() {
if (document.create_account.type[0].checked) { hide('company'); }
else { show('company'); }
}

function onSubmitForm(goto)
{

  if(goto != 'Email')
  {
    document.quote.action ="details.php";
  }
  document.quote.submit();
}

function show(thisId){ document.getElementById('popups').style.visibility="visible";document.getElementById(thisId).style.display="block"; }
function hide(thisId){ document.getElementById('popups').style.visibility="hidden";document.getElementById(thisId).style.display="none"; }
function showImage(thisId) { document.getElementById(thisId).style.display="block"; }
function hideImage(thisId) { document.getElementById(thisId).style.display="none"; }