Array.prototype.in_array = function (value){ 
	for(var i=0; i < this.length; i++){
		if(this[i] === value){ 
			return true; 
		} 
	} 
	return false; 
};

function clearRadio(frm, FieldName){	
  for(var i=0;i<frm.elements.length;i++)
    if(frm.elements[i].name == FieldName && frm.elements[i].type == 'radio')    	
      frm.elements[i].checked = false;
}

Array.prototype.inArray = function (value)
{
  var i;
  for(i=0; i < this.length; i++){
  	if(this[i] == value){
    	return true;
    }
  }
  return false;
};
				
Array.prototype.shift=function(){
	var i=0,
  b=this[0];
  for(i;i<this.length-1;i++)
  	this[i]=this[i+1];
 	this.length--;
 		return b
};
				
var custom = 'custom';
var labelClassName = '';
var errorClassName = '';
var dynamicSize = '';
var do_script = function(){}
var do_script_values = function(){}
var do_computation = function(){}
var do_shipping_computation = function(){}
var setSizeExceptions = function(){}

var param_str = '';
var width = 0;
var height = 0;
var qty = 0;
				
function checkText(Field){
  var td_label = document.getElementById('td_'+Field.name.replace('attr', ''));
  if ((Field.type == 'text') || (Field.type == 'textarea') || (Field.type == 'password') || (Field.type == 'hidden')){
    str = trimXSpaces(Field.value);
     if(str == ''){
       if(td_label && errorClassName) td_label.className = errorClassName;
          return false;
    }
  }				
	
  if(td_label && labelClassName) td_label.className = labelClassName;
  return true;
}
				
function trimXSpaces(str){
  if(!str.length) return str;					
	
  while(str.charAt(0) == ' ')
    str = str.substring(1, str.length);
  						
  if(!str.length) return str;

  while(str.charAt(str.length - 1) == ' ')
    str = str.substring(0, str.length - 1);

  return str;
}		
			  
function checkRadio(frm, FieldName){
  var td_label = document.getElementById('td_'+FieldName.replace('attr', ''));
	
  for(var i=0;i<frm.elements.length;i++)
    if(frm.elements[i].type == 'radio' && frm.elements[i].name == FieldName)
      if(frm.elements[i].checked){
        if(td_label && labelClassName) td_label.className = labelClassName;
        return true;				
      }
  if(td_label && errorClassName) td_label.className = errorClassName;
  return false;
}
			  
function getRadio(frm, FieldName, bln_text){
  var answer = '';
  for(var i=0; i<frm.elements.length; i++){
    if(frm.elements[i].type == 'radio' && frm.elements[i].name == FieldName)
      if(frm.elements[i].checked){
        answer = (bln_text ? document.getElementById('div_'+FieldName+'_'+frm.elements[i].value).innerHTML : frm.elements[i].value);
        break;
      }
  }
  return answer;
}
				
function checkSelect(Field){
  var td_label = document.getElementById('td_'+Field.name.replace('attr', ''));
  for(var i=0;i<Field.options.length;i++)
    if(Field.options[i].selected && Field.options[i].value > 1){
    	if(td_label) td_label.className = labelClassName;
      return true;
    }
   
  if(td_label && errorClassName) td_label.className = errorClassName;
  return false;
}
			  
function getSelect(SelectField, bln_text){	
  var answer = '';
  for(var i=0; i<SelectField.options.length; i++){
    if(SelectField.options[i].selected)
      answer += (answer ? ',' : '') + (bln_text ? SelectField.options[i].text : SelectField.options[i].value);
  }
  return answer;
}
			  
function getFieldValue(Field, bln_text){
	var answer = '';
	var elementType = Field.tagName.toLowerCase();
	var frm = Field.form;
	switch(elementType){
		case 'input':
			switch(Field.type){
				case 'text':
					answer = Field.value;
					break;
				case 'hidden':
					answer = (bln_text ? document.getElementById('div_'+Field.id+'_text').innerHTML : Field.value);
					break;
				case 'radio' :
					answer = getRadio(frm, Field.name, bln_text);
					break;
				//case 'checkbox':
				//	answer = getCheckbox(frm, Field.name);
				//	break;
			}
			break;
		//case 'textarea':
		//	answer = getText(Field);
		//	break;
		case 'select':
			answer = getSelect(Field, bln_text);
			break;
	}

	return answer;
}
				
function getFieldValueText(Field){
	return getFieldValue(Field, true);
}

function setException(attribute_id){
	var arr_ids = [];
	var obj = setException.arguments;
	
	for(var i=1; i<obj.length; i++){
		arr_ids.push(obj[i]);
	}
	
	eval('setException'+attribute_id+'('+arr_ids.join()+');');
}

function checkOrderPageForm(frm, compute_price, is_turnaround){
  var validated = true;				  	
  do_script(frm);
  if(!validated && !compute_price){
    alert('Please select a product before placing an order');
  }
  return validated;
}	

function computePrice(frm, is_turnaround){
	if(dynamicSize == 'y' || dynamicSize == 'c'){
  	setSizeExceptions(frm);
  }	

  if(checkOrderPageForm(frm, true)){
    param_str = do_script_values(frm);
    is_turnaround = (is_turnaround && frm.compute_flag.value == 1) ? true : false;
    
    do_computation(frm, is_turnaround);

    frm.compute_flag.value = 1;
  }else{
  	frm.compute_flag.value = 0;
    if(document.getElementById('disp_unit_price'))
      document.getElementById('disp_unit_price').innerHTML = '0';
    if(document.getElementById('disp_total_price'))
      document.getElementById('disp_total_price').innerHTML = '0';
    if(document.getElementById('disp_shipping'))
      document.getElementById('disp_shipping').innerHTML = '0';
    if(document.getElementById('disp_subtotal'))
      document.getElementById('disp_subtotal').innerHTML = '0';
  }
}

function displayPrice(returned_value){
  eval(returned_value);
  
  if(typeof(exit_flag) != 'undefined'){
    if(exit_flag){
    	return true;
    }
  }
  
  if(document.getElementById('disp_unit_price'))
    document.getElementById('disp_unit_price').innerHTML = unit_price;
  if(document.getElementById('disp_total_price'))
    document.getElementById('disp_total_price').innerHTML = total_price;
	
  frm = document.orderPageForm;
  if(frm.weight)
    frm.weight.value = weight;
  if(frm.total_price)
    frm.total_price.value = total_price;
  if(frm.unit_price)
    frm.unit_price.value = unit_price;					
  if(frm.width)
    frm.width.value = width;
  if(frm.height)
    frm.height.value = height;
  
	
  if (error_msg){
    alert(error_msg);
    if(document.getElementById('disp_unit_price'))
      document.getElementById('disp_unit_price').innerHTML = '0';
    if(document.getElementById('disp_total_price'))
      document.getElementById('disp_total_price').innerHTML = '0';
    if(document.getElementById('result_shippingRates'))
   	  document.getElementById('result_shippingRates').innerHTML = '';    
    
  }else{
   	do_shipping_computation();
  }
}

function do_call_ups() {
  frm = document.orderPageForm;
  if(frm.weight && frm.weight.value > 0){
    compute_shipping();
  }
}

function do_call_ups_xml(){
	frm = document.orderPageForm;
  
  var param_str = 'product_id='+ frm.product_id.value;
  {$str_param_values}
  
  if(document.getElementById('shippingCalculatorTD').style['display'] != 'none')
  	x_call_ups_xml(param_str, frm.zip_code.value, (frm.weighted_dist && frm.weighted_dist.checked ? 1 : 0), list_shipping);
  else
  	document.getElementById('result_shippingRates').innerHTML = '';
  	
}

function list_shipping(returnedValue){
	document.getElementById('result_shippingRates').innerHTML = returnedValue;
}

function display_shipping(returned_array){
  eval(returned_array);
  document.getElementById('result_shippingRates').innerHTML = quote;
}

function compute_shipping() {
  var ups_product = '';
  frm = document.orderPageForm;
  
  var shipping_zip = frm.zip_code.value;
  var weight = frm.weight.value;
  
  if(document.getElementById('shippingCalculatorTD').style['display'] != 'none')
  	x_call_ups('GND', shipping_zip, weight, display_shipping);
  else
  	document.getElementById('result_shippingRates').innerHTML = '';
}

function isNumberKey(evt){
	var charCode = (evt.which) ? evt.which : event.keyCode
	if ((charCode >= 48 && charCode <= 57 && charCode != 46) || charCode == 8 || charCode == 13)
		return true;
	return false;
}