var preloadArray = new Array();
var preloadCounter = 0;
function preloadImages(IMAGESOURCE){
	preloadArray[preloadCounter] = new Image();
	preloadArray[preloadCounter].src = IMAGESOURCE;
	preloadCounter++
}

function assignRollovers(){
	var aImages = document.getElementsByTagName('img');
	for (i=0; i<aImages.length; i++){
		var oRolloverImage = aImages[i];
		if (oRolloverImage.getAttribute('rollover')){
			oRolloverImage.onmouseover = tweenOn;
			var vFilePath = oRolloverImage.src.toString().substring(0,oRolloverImage.src.toString().lastIndexOf('/') + 1);
			var vOver = oRolloverImage.getAttribute('rollover');
			var vNewSource = vFilePath + vOver;
			preloadImages(vNewSource);
		}
	}
}

function tweenOn(){
	var vFilePath = this.src.toString().substring(0,this.src.toString().lastIndexOf('/') + 1);
	var vOver = this.getAttribute('rollover');
	var vOut = this.src;
	this.src = vFilePath + vOver;
	this.onmouseout = function(){this.src = vOut};
}

function tweenON(){
	var image = this.getAttribute('reveal');
	document.getElementById(image).style.display = 'block';
	}
function tweenOFF(){
	var image = this.getAttribute('reveal');
	document.getElementById(image).style.display = 'none';
	}
	
function masterTheTween(){
	var flash = document.getElementsByTagName("object");
	if (flash){
		for (i=0; i < flash.length; i++){
			var theFlashDaddy = flash[i].parentNode;
			var theFlash = theFlashDaddy.innerHTML;
			theFlashDaddy.innerHTML = "";
			theFlashDaddy.innerHTML = theFlash;
		}
	}
}

// Stuff from select_tool.js
//JavaScript File for the Device Select Tool
//Author : Chase Mathewson
//Date Created : June 25, 2007

function selectToolSetup(){
	//Assign Functions
	document.getElementById('category').onchange = selectTool;
	document.getElementById('brand').onchange = selectTool;
	document.getElementById('device').onchange = selectTool;
	document.getElementById('category').value = "";
	document.getElementById('brand').value = "";
	document.getElementById('device').value = "";
}

function selectTool(){
	//Define and Indecate Fields
	$form = document.getElementById('guided_search').getElementsByTagName('form')[0];
	$category = document.getElementById('category');
	$brand = document.getElementById('brand');
	$device = document.getElementById('device');
	$complete = document.getElementById('complete');
	$step = this.id;
	switch ($step){
		case "category":
			$brand.setAttribute('disabled','disabled');
			$device.value = "";
			$device.setAttribute('disabled','disabled');
			$ajax_request = "?step=category&category=" + $category.value;
			break;
		case "brand":
			$device.value = "";
			$device.setAttribute('disabled','disabled');
			$ajax_request = "?step=brand&category=" + $category.value + "&brand=" + encodeURIComponent($brand.value);
			break;
		case "device":
			//$device_name = $device.value.replace(" "," AND ")
      
			$complete.value = $category.value + "|" + $brand.value + "|" + $device.value;
			$form.submit();
			break;
		default:
			return false;
			break;
	}
	if (document.getElementById($step).value == "") return false;
	takeStep($ajax_request,$step);
}

function takeStep(AJAX,STEP){
	//Assign Function Variables
	$ajax_request = AJAX;
	$step = STEP;
	if (!$ajax_request) return false;

	//Prepare AJAX Object
	var xmlHttp = false;
	try {
   	xmlHttp=new XMLHttpRequest();
   }
	catch (e) {
   	try {
      	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
   	catch (e) {
   		try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
      	catch (e) {
				//If this line is breached AJAX is not available on the client's browser
				//but javascript is...
      	}
      }
	}
	//Set Response Behavior
	xmlHttp.onreadystatechange = function(){
	  	switch(xmlHttp.readyState){
	  		case 0:
	  			break;
	  		case 1:
	  			break;
	  		case 2:
	  			break;
	  		case 3:
	  			break;
	  		case 4:
				//alert(xmlHttp.responseText);
				switch ($step){
					case "category":
						$brand.removeAttribute('disabled');
						$options = xmlHttp.responseText.split('|');
						protectiveSevices($brand);
						var $option = document.createElement('option');
						$option.value = "";
						$option.innerHTML = "Select a Brand";
						$brand.appendChild($option);
						for(i=0; i<$options.length; i++){
							var $value = $options[i];
							var $option = document.createElement('option');
//              $option.value = encodeURIComponent($value);
							$option.value = $value;
							$option.innerHTML = $value;
							$brand.appendChild($option);
						}
						if ($options == "Apple"){
							$brand.value = "Apple";
							$step = "brand";
							$ajax_request = "?step=brand&category=" + $category.value + "&brand=" + encodeURIComponent($brand.value);
							takeStep($ajax_request,$step);
						}
						break;
					case "brand":
						$device.removeAttribute('disabled');
						$options = xmlHttp.responseText.split('|');
						protectiveSevices($device);
						var $option = document.createElement('option');
						$option.value = "";
						$option.innerHTML = "Select a Device";
						$device.appendChild($option);
						for(i=0; i<$options.length; i++){
							var $value = $options[i];
//              $value = $value.split(',');
							var $option = document.createElement('option');
							$option.value = $value;
							$option.innerHTML = $value;
							$device.appendChild($option);
						}
						break;
					default:
						return false;
						break;
				}
	  			break;
	  		default:
				return false;
	  			break;
		}
	}
	xmlHttp.open("GET","/includes/files/select_tool.php" + $ajax_request,true);
	xmlHttp.send(null);
}

function protectiveSevices(PARENT){
	$node = PARENT;
	while ($node.firstChild){
	  $node.removeChild($node.firstChild);
	}
}

function toggleLayer( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}

function showLayerShipping( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display=='none')
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
    //vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none'; 
}

function hideLayerShipping( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'none':'block';
    //vis.display = (vis.display==''||vis.display=='block')?'none':'block'; 
}


//JavaScript File for User Interface
//Author : Chase Mathewson
//Date Created : June 25, 2007
//Date Edited : August 3, 2007

function initalize() {
	selectToolSetup();
	more_links();
	login_form();
	assign_forms();
	document.getElementById('search_form').onsubmit = convert_for_pdg;
	preloadImages("/images/link_ipod-category.jpg");
	preloadImages("/images/link_smartphone-category.jpg");
	preloadImages("/images/link_cell-phone-category.jpg");
	preloadImages("/images/link_camera-category.jpg");
	preloadImages("/images/link_gps-category.jpg");
	preloadImages("/images/link_laptop-category.jpg");
	preloadImages("/images/link_more-category.jpg");
	preloadImages("/images/over_ipod-category.jpg");
	preloadImages("/images/over_smartphone-category.jpg");
	preloadImages("/images/over_cell-phone-category.jpg");
	preloadImages("/images/over_camera-category.jpg");
	preloadImages("/images/over_gps-category.jpg");
	preloadImages("/images/over_laptop-category.jpg");
	preloadImages("/images/over_more-category.jpg");
	related_items_rewrite();
}

window.onload = initalize;

//User Interface

//Preload Links
var $preloadArray = new Array();
var $preloadCounter = 0;
function preloadImages(IMAGESOURCE){
	$preloadArray[$preloadCounter] = new Image();
	$preloadArray[$preloadCounter].src = IMAGESOURCE;
	$preloadCounter++
}

//Validate Form Fields
function assign_forms(){
	$forms = document.getElementsByTagName('form');
	for(i=0; i<$forms.length; i++){
		$form = $forms[i];
		if ($form.getAttribute('validate')){
			if($form.onsubmit){old_function = $form.onsubmit};
			$form.onsubmit = function(){
				$form = this;
				validate_form($form);
				if($error){return false};
				if(typeof(old_function) == 'function'){old_function()};
			};
		}
	}
}

function validate_form($form){
	$error = false;
	$inputs = $form.getElementsByTagName('input');
	for(i=0; i<$inputs.length; i++){
		$input = $inputs[i];
    //set title to name of input field
		var $title = $input.getAttribute('name');
    //if there is a title, set title equal to the title instead
		if ($input.getAttribute('title')) $title = $input.getAttribute('title');
  		if ($input.getAttribute('required')=="required" && ($input.value == "")){
  			alert($title + " must be entered to continue.");
  			$error = true;
  			return false;
  		}
       
		if ($input.getAttribute('datatype')){
			var $datatype = $input.getAttribute('datatype');
			var $data = $input.value;
			switch($datatype){
				case "alpha":
					$expression = /^([A-Za-z]\s)+$/;
					break;
				case "numeric":
					$expression = /^([0-9]|\s)+$/;
					break;
				case "alphanumeric":
					$expression = /^([A-Za-z0-9]|\.|\'|\,|\s)+$/;
					break;
				case "phone":
					$expression = /^\(?[0-9][0-9][0-9]\)? ?-?[0-9][0-9][0-9]-? ?[0-9][0-9][0-9][0-9]$/;
					break;
				case "email":
					$expression = /@\w+\.\w+$/;
					break;
				case "name":
					$expression = /^([A-Za-z]|\.|\s)+$/;
					break;
			}
			if($data.match($expression) || ($data == "")){
				//success
			}
			else{
				alert($title + " is invalid.");
				$error = true;
				return false;
			}
		}
	}
	return true;
}

//Show and Hide Login Form
function login_form(){
	$login_form = document.getElementById('login_form');
	$login = document.getElementById('login');
	$cancel = document.getElementById('cancel');
	
	$login_form.style.visibility = "hidden";
	$login_visible = false;
	
	$cancel.onclick = function(){
		$login_form.style.visibility = "hidden";
		$login_visible = false;
		return false;
	}
	$login.onclick = function(){
		if($login_visible){
			$login_form.style.visibility = "hidden";
			$login_visible = false;
		}
		else{
			$login_form.style.visibility = "visible";
			$login_visible = true;
		}
		return false;
	};
	
}

//Show and Hide More>> Links
function more_links(){
	$more_links = document.getElementById('more_links');
	$more = document.getElementById('more');
	$fadeing = false;
	
	$more_links.onmouseover = function(){ 
		if ($fadeing){
			clearTimeout($fadeout);
			$fadeing = false;
		}
		$more_links.style.visibility = "visible";
	};
	$more_links.onmouseout = function(){ 
		$fadeout = setTimeout("fadeout($more_links)",500);
		$fadeing = true;
	};
	$more.onmouseover = function(){
		if ($fadeing){
			clearTimeout($fadeout);
			$fadeing = false;
		}
		$more_links.style.visibility = "visible";
	};
	$more.onmouseout = function(){
		$fadeout = setTimeout("fadeout($more_links)",500);
		$fadeing = true;
	};
}
function fadeout(ELEMENT){
	$element = ELEMENT;
	$element.style.visibility = "hidden";
}

//Append Search Results
function convert_for_pdg() {
	var $keywords = document.getElementById('keywords');
	var $search_term = $keywords.value;
	var $new_term = "";
	var $skip_flag = 0;
	for (i = 0; i < $search_term.length; i++) {
		if ($search_term.charAt(i) != " ") {
			$new_term += $search_term.charAt(i);
			$skip_flag = 0;
		}
		else {
			if($skip_flag == 0) {
				$new_term += " AND ";
				$skip_flag = 1;
    		}
		}
	}
	document.getElementById('converted').value = $new_term;
	return true;
}

//Enter to win Form
function enter_to_win(){
	//Assign Function Variables
	$email = document.getElementById('email');
	if ($email.value == ""){
		alert('Please first enter an e-mail address.');
		return false;
	}
	$email.setAttribute('disabled','disabled');
	$ajax_request = "?email=" + $email.value + "&action=add";
	//Prepare AJAX Object
	var xmlHttp = false;
	try {
   	xmlHttp=new XMLHttpRequest();
   }
	catch (e) {
   	try {
      	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
   	catch (e) {
   		try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
      	catch (e) {
				//If this line is breached AJAX is not available on the client's browser
				//but javascript is...
      	}
      }
	}
	//Set Response Behavior
	xmlHttp.onreadystatechange = function(){
	  	switch(xmlHttp.readyState){
	  		case 0:
	  			break;
	  		case 1:
	  			break;
	  		case 2:
	  			break;
	  		case 3:
	  			break;
	  		case 4:
				$email.removeAttribute('disabled');
				$email.value = "";
				alert(xmlHttp.responseText);
	  			break;
	  		default:
				return false;
	  			break;
		}
	}
	xmlHttp.open("GET","/includes/files/enter_to_win.php" + $ajax_request,true);
	xmlHttp.send(null);
	return false;
}

//Related Items Listing
function related_items_rewrite(){
	//Assign Function Variables
	if (document.getElementById('cross_sale')){
		$cross_sale = document.getElementById('cross_sale');
	}
	else {
		return false;
	}
	if (document.getElementById('cross_sale').getElementsByTagName('a')) $related_items = document.getElementById('cross_sale').getElementsByTagName('a');
	$main_sku = document.getElementById('cross_sale').getAttribute('title');
//  if (!$related_items[0]) return false ;
	$ajax_request = "?sku=" + $main_sku;

	//Prepare AJAX Object
	var xmlHttp = false;
	try {
   		xmlHttp=new XMLHttpRequest();
		}
	catch (e) {
   	try {
      	xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
   	catch (e) {
   		try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
      	catch (e) {
				//If this line is breached AJAX is not available on the client's browser
				//but javascript is...
      	}
      }
	}
	//Set Response Behavior
	xmlHttp.onreadystatechange = function(){
	  	switch(xmlHttp.readyState){
	  		case 0:
	  			break;
	  		case 1:
	  			break;
	  		case 2:
	  			break;
	  		case 3:
	  			break;
	  		case 4:
				$cross_sale.innerHTML = xmlHttp.responseText;
				return true;
	  			break;
	  		default:
				return false;
	  			break;
		}
	}
	xmlHttp.open("GET","/includes/files/related_items.php" + $ajax_request,true);
	xmlHttp.send(null);
	return false;
}


// some functions to disable submitting the form

//to disable the button
function disable_button() {
  //get the button id and assign to "button"
  var button = document.getElementById("submit_process");
  //disable the button
  button.disabled = true;
  //throw error if button is not disabled
  if(button.disabled == false){
    alert("Order is processing, please do not submit the order again!");
  }
  //change button source code
  button.src = "/images/button_processing_gray.jpg";
  return false;
}

var submittedAlready = false;
function trySubmit() {
  if(submittedAlready) {
    //form has already been submitted, do not submit again
    disable_button();
    return false;
  } else {
    disable_button();
    //return true and submit form
    return true;
  }
} 


//*******************************************************
//function to validate the required fields
//*******************************************************
function validateFormOnSubmit(theForm) {
var reason = "";

  reason += validateEmpty(theForm.contact_name);
  reason += validateEmail(theForm.contact_email);
  reason += validateEmpty(theForm.selRecipient);
  reason += validateEmpty(theForm.contact_message);
      
  if (reason != "") {
    alert("Some fields need correction:\n" + reason);
    return false;
  }
  theForm.submit_contact.disabled = true;
  theForm.submit_contact.value = "Sending, please wait..";
  return true;
}

function validateEmpty(fld) {
    var error = "";
 
    if (fld.value.length == 0) {
        fld.style.background = '#faf8f4'; 
        fld.style.color = 'Black';
        fld.style.border = '1px solid #b97f7f;'
        error = "      The " + fld.title + " field has not been filled in.\n"
    }else if(fld.value == 0) {
        fld.style.background = '#faf8f4'; 
        fld.style.color = 'Black';
        fld.style.border = '1px solid #b97f7f;'
        error = "      You must select a recipient.\n"
    }else {
        fld.style.background = 'White';
    }
    return error;  
}

function trim(s)
{
  return s.replace(/^\s+|\s+$/, '');
}

function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value);                        // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
    var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
   
    if (fld.value == "") {
        fld.style.background = '#faf8f4'; 
        fld.style.color = 'Black';
        fld.style.border = '1px solid #b97f7f;'
        error = "      You didn't enter an email address.\n";
    } else if (!emailFilter.test(tfld)) {              //test email for illegal characters
        fld.style.background = '#faf8f4'; 
        fld.style.color = 'Black';
        fld.style.border = '1px solid #b97f7f;'
        error = "      Please enter a valid email address.\n";
    } else if (fld.value.match(illegalChars)) {
        fld.style.background = '#faf8f4'; 
        fld.style.color = 'Black';
        fld.style.border = '1px solid #b97f7f;'
        error = "      The email address contains illegal characters.\n";
    } else {
        fld.style.background = 'White';
    }
    return error;
}

function checkCapsLock( e ) {
	var myKeyCode=0;
	var myShiftKey=false;
	var myMsg='Caps Lock is On.\n\nTo prevent entering your password incorrectly,\nyou should press Caps Lock to turn it off.';

	// Internet Explorer 4+
	if ( document.all ) {
		myKeyCode=e.keyCode;
		myShiftKey=e.shiftKey;

	// Netscape 4
	} else if ( document.layers ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	// Netscape 6
	} else if ( document.getElementById ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	}

	// Upper case letters are seen without depressing the Shift key, therefore Caps Lock is on
	if ( ( myKeyCode >= 65 && myKeyCode <= 90 ) && !myShiftKey ) {
		alert( myMsg );

	// Lower case letters are seen while depressing the Shift key, therefore Caps Lock is on
	} else if ( ( myKeyCode >= 97 && myKeyCode <= 122 ) && myShiftKey ) {
		alert( myMsg );

	}
}


function checkPayment(selected) {
  if(selected == 1){
     var elem, vis;
     var whichLayer = "showhidecc"
     
     if( document.getElementById ) // this is the way the standards work
       elem = document.getElementById( whichLayer );
     else if( document.all ) // this is the way old msie versions work
       elem = document.all[whichLayer];
     else if( document.layers ) // this is the way nn4 works
       elem = document.layers[whichLayer];
     vis = elem.style;
     // if the style.display value is blank we try to figure it out here
     if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
       vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'none':'none';
     vis.display = (vis.display==''||vis.display=='none')?'none':'none';
  }
  if(selected == 0){
     var elem, vis;     
     var whichLayer = "showhidecc"
     
     if( document.getElementById ) // this is the way the standards work
       elem = document.getElementById( whichLayer );
     else if( document.all ) // this is the way old msie versions work
         elem = document.all[whichLayer];
     else if( document.layers ) // this is the way nn4 works
       elem = document.layers[whichLayer];
     vis = elem.style;
     // if the style.display value is blank we try to figure it out here
     vis.display = "block";
  }
}