// JavaScript Document
  
  
/********************************************************************/
/*							ajax methods							*/
/********************************************************************/

/* TODO: Convert this to use prototype

BTW, to get the number of items in the cart,
POST to ../../listener.cgi/oqo/oqoservices.p with ServiceName=CartContent&sessionNumber=xxxx

This grabs the number of items in the cart if a store session is found and displays it next to 
the shopping cart icon.
*/
var BASE_QUERY_STRING_CART = 'ServiceName=CartContent&sessionNumber=';

function makeRequest( query_string, target_element ) {

	var http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...

  	http_request = new XMLHttpRequest();

    if (http_request.overrideMimeType) {

    	http_request.overrideMimeType('text/xml');
      // See note below about this line

		}

  } else if (window.ActiveXObject) { // IE

  	try {

    	http_request = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e) {

    	try {

      	http_request = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e) {}
    }
  }
     

  if (!http_request) {

  	//alert('Giving up :( Cannot create an XMLHTTP instance');

    return false;

  }      

  http_request.onreadystatechange = function() { updatePage( http_request, target_element ); };

  http_request.open( 'POST', "/store/listener.cgi/oqo/oqoservices.p", true );

  http_request.setRequestHeader( "Content-Type","application/x-www-form-urlencoded; charset=UTF-8" );

  http_request.send( query_string ); 

}

function updatePage( http_request, target_element ) {
	
	if (http_request.readyState == 4) {
	    if (http_request.status == 200) {
	    
	        if ( target_element.id == 'cart_item_count' ) {
	        	target_element.innerHTML = parseInt( http_request.responseText );
	        }
	        
	    } else {
	        //alert('There was a problem with the request.');
	    }
	}
}


/***************	utility methods *****************/

function swapImage( target_id, new_image_id ) {
							
    if ( document.images ) {
															
			var main_image = document.images[target_id];
			document.images[ target_id ].src = images_normal_state[ new_image_id ].src;
			return true;
			
    }
    return false;
}

function imageRollover( image_id, state ) {
							
    if ( document.images ) {
															
			image = document.images[image_id];
			
			if ( image.className.indexOf( 'selected' ) == -1 ) {
						
				if ( state == "hover" ) {
						
					document.images[image_id].src = images_hover_state[image_id].src;
					return true;
						
				} else if ( state == "normal" ) {
				
					image.src = images_normal_state[image_id].src;
					return true;
				}
			}
    }
    return false;
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

/*
 * Checks if the value of the element this function was called from is greater
 * than the given max_length and sets the display style of the given alert message
 * if so. Otherwise, hides the provided alert message.
 */
function validateInputLength( input_element, max_length, alert_message_id ) {
    
    alert_message_tag_style = document.getElementById( alert_message_id ).style;
        
    if( input_element.value.length > max_length ) {
        
        alert_message_tag_style.display = "block";
        truncateInput( input_element, max_length );
        
    } /* else {
    
        alert_message_tag_style.display = "none";
    }
    */
}

/*
 * If the value of the element this function is passed is greater than the given max_length,
 * this function sets the value of the element to the substring of the old value with number
 * of chars equal to max_length.
 */
function truncateInput ( input, max_length ) {
	
	if( input.value.length > max_length ) {
		input.value = input.value.substring( 0, max_length );
	}
	
}

/********************************************************************/
/*							onload methods							*/
/********************************************************************/

var debug = 0;

/*
 * executes page load functionality
 */
function initPage() {
	
	try {
		preloadImages();
		setSelectedNavigation();
	} catch (e) {
		if ( debug >= 1 ) alert( e );	
	}
	
	set_external_links_target();

	var item_count_span = document.getElementById( 'cart_item_count' );
	
	if ( item_count_span && typeof item_count_span != "undefined" ) {
	
		sessionNumber = readCookie( 'sessionNumber' );
		if ( sessionNumber != null && sessionNumber != "" ) {
			var query_string = BASE_QUERY_STRING_CART + sessionNumber;
			makeRequest( query_string, item_count_span );
		}
		
	}
	
	
}

/*
 * This method sets the target of any links with rel="external" attribute to '_blank'
 * The target attribute has been removed from the HTML 4.0 and XHTML 1.0 standards but is still available
 * in DOM 2.0.
 * Method modified from: http://www.sitepoint.com/article/standards-compliant-world/3
 */
function set_external_links_target() {

 if ( !document.getElementsByTagName ) return;
 
 var anchors = document.getElementsByTagName( "a" );
 
 for (var i = 0; i < anchors.length; i++) {
 
   var anchor = anchors[i];
   if (anchor.getAttribute( "href" ) && anchor.className.match("new_window") ) {
     anchor.target = "_blank";
   }
 }
 
}

/*
 * Checks for the existence of hidden fields containing the id of the selected element
 * for the leftnav and topnav and if found, sets the proper img elements src property to the selected state
 * and sets the class property to 'selected'.
 *
 * see also: image_rollover.js
 */
function setSelectedNavigation() {

  var inner_nav_selected_hidden = document.getElementById( "inner_nav_selected" );
	
	if ( inner_nav_selected_hidden && typeof inner_nav_selected_hidden != "undefined" ) {
			
		var inner_nav_selected_value = document.getElementById( "inner_nav_selected" ).value;
		var inner_nav_selected_image = document.getElementById( inner_nav_selected_value );
		
		inner_nav_selected_image.className = inner_nav_selected_image.className + " selected";		
		
	}

	var left_nav_selected_hidden = document.getElementById( "left_nav_selected" );
	
	if ( left_nav_selected_hidden && typeof left_nav_selected_hidden != "undefined" ) {
			
		var left_nav_selected_value = document.getElementById( "left_nav_selected" ).value;
		var left_nav_selected_image = document.getElementById( left_nav_selected_value );
	
		left_nav_selected_image.className = left_nav_selected_image.className + " selected"
		
	}

	var top_nav_selected_hidden = document.getElementById( "top_nav_selected" );
	
	if ( top_nav_selected_hidden && typeof left_nav_selected_hidden != "undefined" ) {
		
		var top_nav_selected_value = document.getElementById( "top_nav_selected" ).value;
		var top_nav_selected_li = document.getElementById( top_nav_selected_value );
		
		top_nav_selected_li.className = top_nav_selected_li.className + " selected";
					
	}
}

/*
 * preloads the images for page specific images ( preloadPageSpecificImages() )
 */ 
function preloadImages () {
		
	if ( document.images ) {
			if ( debug >= 3 ) { alert( 'in preloadImages' );	}
		
			images_normal_state = new Object( ); // no var to make it global
			images_selected_state = new Object( );
			images_hover_state = new Object( );
						
			if ( self.preloadPageSpecificImages ) {
				preloadPageSpecificImages();
			}
			
	} // end if

} // end preloadImages()

