var remove = new Array('lang');
var optionsWindow;

/***********************************************************
* Logout
************************************************************/
function logout_check(del){
	var agree=confirm(info_msgs['logout_confirmation']);
	if (agree) {
		return true;
	} else {
		return false;
	}
}

/***********************************************************
* Removes submit and places and onchange->submit on select
************************************************************/
function removeSubmit(id){
	//Remove submit
	var submit = document.getElementById('submit_'+id);
	submit.style.display='none';

	//Create onchange to submit form
	var select = document.getElementById(id);
	select.onchange = function(){
		return this.form.submit();
	}
}

/***********************************************************
* Pop-up Window
************************************************************/
function showPopup(url,name,options)
{
	if(optionsWindow!=null && !optionsWindow.closed && optionsWindow.location) {
		optionsWindow.location.href = url;
	} else {
		optionsWindow = window.open(url,name,options);
		if(!optionsWindow.opener) {
			optionsWindow.opener = self;
		}
	}

	if(window.focus) {
		optionsWindow.focus();
	}
}

/***********************************************************
* Toggle display of tabs, extendable
************************************************************/
function toggle_description(reveal) {
	// show div of id $div, hide the rest of class 'information'
	//alert(reveal.id);
	var tabheader=reveal;
	if (tabheader) {
		var revealdiv=document.getElementById(reveal.id+'_tab');
		if (revealdiv) {
			// get the divs to hide
			//var divs=new Array('description','specification');
			var divs=document.getElementById('product_nav').getElementsByTagName('li');

			for(i=0; i<divs.length; i++){
				div=divs[i];
				if (div==tabheader) {
					div.className='active';
				} else {
					div.className='';
				}

				tab_div=document.getElementById(divs[i].id+'_tab');
				//The ridiculous way to display and hide tabs is because of IE6
				if (tab_div==revealdiv) {
					tab_div.style.display='inline';
					tab_div.style.visibility='visible';
					tab_div.style.height = 'auto';
					tab_div.style.padding = '';
					tab_div.style.margin = '';
				} else {
					//tab_div.style.display='none';
					tab_div.style.height = '0px';
					tab_div.style.padding = '0';
					tab_div.style.margin = '0';
					tab_div.style.visibility='hidden';
				}
			}
		}
	}
	return false;
}

/***********************************************************
* Calculate the price * quantity
************************************************************/
function calculatePrice(price, orig_quantity, pack_size, target, text) {
	var quantity = orig_quantity.value;

	var check_num = trim(quantity);
/* 	if(check_num==''){
		orig_quantity.value = 0;
		return false;
	} */

	//Check if number
	var numberRE = new RegExp(/^[0-9.]*$/);
	if (!numberRE.test(check_num)) {
		//Uncomment if the value should be set to 0 if it is not a number
		orig_quantity.value = 0;
		return false;
	}

	if (quantity<=0){ //If below 0, round up to 1
		quantity = 1;
	} else {
		if (parseInt(quantity)!=quantity-0){ //If not whole number, round up
			quantity = Math.ceil(quantity);
			orig_quantity.value = quantity;
		}
	}

	//Set price
/* 	price_element = document.getElementById(target);
	if(price_element){
		price_element.innerHTML = r2(price*quantity);
	} */

	total_text = '('+text+' = '+pack_size*Math.ceil(orig_quantity.value)+')';

	total_units_element = document.getElementById('total');
	if(total_units_element){
		total_units_element.innerHTML = total_text;
	} else {
		quantity_element = document.getElementById('quantity');
		var small  = document.createElement('small');
		var span = document.createElement('span');
		span.setAttribute('id','total');
		var append = document.createTextNode(total_text);

		span.appendChild(append);
		small.appendChild(span);
		quantity_element.appendChild(small);
	}

	return false;
}

/***********************************************************
* Convert number to two decimal places
************************************************************/
function r2(n) {
	ans = n * 1000
	ans = Math.round(ans /10) + ""
	while (ans.length < 3) {ans = "0" + ans}
	len = ans.length
	ans = ans.substring(0,len-2) + "." + ans.substring(len-2,len)
	return ans
}

/***********************************************************
* Redirect
************************************************************/
function redirect(pv, pv_select){
	document.getElementById(pv).value = 'true';
	return pv_select.form.submit();
}

/***********************************************************
* Form Validation
************************************************************/
var node_text = 3;	// DOM text node-type
var emptyString = new RegExp(/^\s*$/ );

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function msg(fld, msgtype, messtext, messnumber){
	var dispmessnumber;
	if (emptyString.test(messtext))
		dispmessnumber = String.fromCharCode(160);
	else
		dispmessnumber = messtext;
	var elem = document.getElementById(fld);
	elem.firstChild.nodeValue = dispmessnumber;
	elem.className=msgtype;
}

var proceed = 2;

function commonCheck(valfield, infoID)
{
  if (!document.getElementById)
	return true;  // not available on this browser - leave validation to the server
  var elem = document.getElementById(infoID);
  if (!elem.firstChild) return true;  // not available on this browser
  if (elem.firstChild.nodeType != node_text) return true;  // infoID is wrong type of node

  return proceed;
}

function validaterequired(valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

	if (emptyString.test(valfield.value)) {
	  msg (infoID, "warning", info_msgs['form_required'], 1);
	  return false;
	}

  msg (infoID, "valid", "", 3);
  return true;
}

function validateemail  (valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var email = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i);
  if (!email.test(tfld)) {
	msg (infoID, "warning", info_msgs['invalid_email'], 1);
	return false;
  } else {
	msg (infoID, "valid", "", 3);
	return true;
	}
}

function validatenumber (valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);

  if(tfld==''){
	return true
  }

  var numberRE = new RegExp(/^[0-9 ]*$/);
  if (!numberRE.test(tfld)) {
	msg (infoID, "warning", info_msgs['invalid_number'], 1);
	return false;
  }
	msg (infoID, "valid", "", 3);
  return true;
}

function validatenumber_require (valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);

	if(tfld==''){
		msg (infoID, "warning", info_msgs['invalid_number'], 1);
		return false;
	}

  var numberRE = new RegExp(/^[0-9 ]*$/);
  if (!numberRE.test(tfld)) {
	msg (infoID, "warning", info_msgs['invalid_number'], 1);
	return false;
  }
	msg (infoID, "valid", "", 3);
  return true;
}


function validateOnSubmit() {
var elem;
var errs=0;

var numberLinks = getElementsByClass('number','input');
for (var i=0; i < numberLinks.length; i++){
	//alert('info_'+numberLinks[i].name);
	if (!validatenumber(numberLinks[i], 'info_'+numberLinks[i].name)) errs +=1;
}

var require_numberLinks = getElementsByClass('require_number','input');
for (var i=0; i < require_numberLinks.length; i++){
	//alert('info_'+require_numberLinks[i].name);
	if (!validatenumber_require(require_numberLinks[i], 'info_'+require_numberLinks[i].name)) errs +=1;
}

var emailLinks = getElementsByClass('email','input');
for (var i=0; i < emailLinks.length; i++){
	//alert('info_'+emailLinks[i].name);
	if (!validateemail(emailLinks[i], 'info_'+emailLinks[i].name)) errs +=1;
}

var requireLinks = getElementsByClass('require','input');
var requireLinks1 = getElementsByClass('require','textarea');
for (var i=0; i < requireLinks.length; i++){
	//alert('info_'+requireLinks[i].name);
	if (!validaterequired(requireLinks[i], 'info_'+requireLinks[i].name)) errs +=1;
}
for (var i=0; i < requireLinks1.length; i++){
	//alert('info_'+requireLinks[i].name);
	if (!validaterequired(requireLinks1[i], 'info_'+requireLinks1[i].name)) errs +=1;
}

return (errs==0);
};

/***********************************************************
* Set up the links in the page with their onblur and onsubmit handlers
************************************************************/
function preparePage(){
	var forms = getElementsByClass('validate','form');
	for (var i=0; i < forms.length; i++){
		forms[i].onsubmit = function(){
			return validateOnSubmit();
		}
	}

	var pop_ups = getElementsByClass('pop','a');
	for (var i=0; i < pop_ups.length; i++){
		pop_ups[i].onclick = function(){
			showPopup(this.href+'?pop_up=true','popup','toolbar=no, scrollbars=yes, resizable=yes, menubar=no, width=800, height=600');
			return false;
		}
	}

	//Remove submit button and add onchange to equal submit
	for (var i=0; i < remove.length; i++){
		var item = document.getElementById(remove[i]);
		if (item!=null){
			removeSubmit(remove[i]);
		}
	}

	//Hide tab content and set onclick
	if (document.getElementById('product_nav')){
		var tab_list=document.getElementById('product_nav')
		var nav_tab = tab_list.getElementsByTagName('li');
		for (var i=0; i<nav_tab.length; i++){
			//Set on click for each tab
			nav_tab[i].onclick = function(){
				return toggle_description(this);
			}

			var tab_content = document.getElementById(nav_tab[i].id+'_tab');
			//Hide all but first tab
			if(i>0){
				//tab_content.style.display='none';
				tab_content.style.height = '0px';
				tab_content.style.padding = '0';
				tab_content.style.margin = '0';
				tab_content.style.visibility='hidden';
			}
		}
	}

	var logoutLinks = getElementsByClass('logout','a');
	for (var i=0; i < logoutLinks.length; i++){
		logoutLinks[i].onclick = function(){
			return logout_check(this);
		}
	}

	if(document.getElementById('partner_overlay')){
		initPopUp(document.getElementById('partner_overlay').innerHTML);
		showPopWin(document.getElementById('partner_overlay').innerHTML, 400, 200);
	}
	
	var add_images = getElementsByClass('add_image','a');
	
	var replaceImg = function(rep,perm)
	{
		var url = rep.href;
		var img = rep.getElementsByTagName('img')[0].cloneNode(true);
		var mimg = getElementsByClass('product_image','img')[0];
		if(mimg == null)
		{
			mimg = getElementsByClass('no_image','div')[0];
		}
		
		mimg.parentNode.replaceChild(img,mimg);
		img.src = url;
		img.className = 'product_image';
		
		if(perm)
		{
			var old = document.getElementById('current_product_image');
			if(old!=null) old.id = '';
			rep.id = "current_product_image";
		}
		
		return false;	
	}
	
	for (var i=0; i < add_images.length; i++){
		add_images[i].onclick = function(){ return replaceImg(this,true); };
		add_images[i].onmouseover = function(){ return replaceImg(this,false); };
		add_images[i].onmouseout = function(){ return replaceImg(document.getElementById('current_product_image'),false); };
	}
	
	
}

/*Dustin Diaz I think */
function getElementsByClass(searchClass,type) {
	var classList = new Array();
	var els = document.getElementsByTagName(type);

	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	var j=0;
	for (var i = 0, l=els.length; i<l; i++) {
		if ( pattern.test(els[i].className) ) {
			classList[j] = els[i];
			j++;
		}
	}
	return classList;
}

window.onload = preparePage;
