/* 
 * ============================================================================
 * Start: DecoderSearchExtension
 * ============================================================================
 * AL June 2011
 * The following code adds an event handler to the submit event of the search 
 * form. It eventually adds the Decoded part number to the search form.
 */
jQuery(document).ready(function ($) {
	var decodedPartId = "decoded-part";
	var srchThrobberId = "srch-throbber";
	
	var submitTriggeredByUser = true;

	// wanna center?
	jQuery.fn.center = function () {
		this.css("position","absolute");
		this.css("top", ( $(window).height() - this.height() ) / 2+$(window).scrollTop() + "px");
		this.css("left", ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + "px");
		return this;
	}

	/* We are querying Decoder, e.g.: http://pcse156.eu.vishayint.com:8080/bodhidharma?part-number=CRCW080510k
		<page>
			<!--
			decoder-url=http://lxmv32.corp.vishayint.com:8080/bodhidharma-1.0-SNAPSHOT/BodhidharmaDecoder
			-->
			<!--part-number=CRCW080510k-->
			<!--encoder=enhanced-->
			<decoder>
				<input-part>CRCW080510k</input-part>
				<decoded-part error="null" scheme="A0096" duration-ms="123">CRCW080510K0????</decoded-part>
			</decoder>
		</page>
	*/
	var onSearch = function(formId, queryFieldId) {

		$("#"+queryFieldId).blur(); // lose focus
		$("#"+srchThrobberId).center().show();
		
		$("#wrapper, #web-survey-link").fadeTo(500, 0.2);
		
		$(window).resize(function() {
		  $("#"+srchThrobberId).center();
		});
		
		// visualize search activity
		//$("body").fadeTo(500, 0.2);
		/*
		var throbber = $('<div/>', {
			id:'throbber',
			style:'background:red;'
		});
		$(throbber).html(" Analyzing search . . . ");
		$(throbber).appendTo("body").center();
		*/

		
		$.ajax({
			url: "/bodhidharma",
			data: $.param({"part-number": $("#"+queryFieldId).val()}),
			dataType: "xml",
			async: false,
			global: false, // trigger global ajax handlers
			timeout: 2000, // millis
			type: "GET",
			error: function(jqXHR, textStatus, errorThrown) {
				//alert("ERROR\n"+jqXHR+"\n"+textStatus+"\n"+errorThrown);
				$("#"+srchThrobberId).hide();
			},
			success: function(data, textStatus, jqXHR) {
				//alert("SUCCESS\n"+$(data).find("decoder").text()+"\n"+data+"\n"+textStatus+"\n"+jqXHR);
				//console.log("----------SUCCESS for form '"+formId+"'\n"+$(data).find("decoder").text()+"\n"+data+"\n"+textStatus+"\n"+jqXHR);

				// so here is our precious result
				var decodedPart = $(data).find("decoded-part").text();
				var decodingError = $(data).find("decoded-part").attr("error");
				//alert("ERRORS="+decodingError);

				if(!decodingError || decodingError==='' || decodingError==='null') {
					// if there is no hidden field in the form for the decoded
					// part, we'll created it first
					if(! $("#"+decodedPartId).length > 0) {
						var hiddenInput = $('<input/>', {type:'hidden', id:decodedPartId, name:decodedPartId});
						$(hiddenInput).appendTo("#"+formId);
					}

					// store the decoded value in the form so that it will be 
					// passed to the search on the server
					// BUT don't pollute the URL with "error: no interpretation" response from decoder!
					if(decodedPart.indexOf("error") === -1) {
						$("#"+decodedPartId).val(decodedPart);
					}
				}
				
			} // end: success handler
		});
	};
	
	// attach decoder result to ajax search form
	var formId1 = "search";
	var queryFieldId1 = "sbox";
	$("#"+formId1).submit(function(event) {
		onSearch(formId1, queryFieldId1);
	});
	
	// attach decoder result to second search form on search results page
	var formId2 = "search1";
	var queryFieldId2 = "srch";
	$("#"+formId2).submit(function(event) {
		onSearch(formId2, queryFieldId2);
	});
});
/* 
 * ============================================================================
 * End: DecoderSearchExtension
 * ============================================================================
 */

var whichDiv = "results";
var whichSearchDiv = "srch";
var whichSubmit = "sbox-submit";
var whichResultList = "resultList";
var whichWhere = "";

function ajaxSearch(input,ll,ul,code,where,resultList){
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null){
		alert ("Your browser does not support AJAX!");
		return;
	}		

	if(where == 'top'){
		whichDiv = "results-top";
		whichSearchDiv = "sbox";
        whichSubmit = "sbox-submit";
	}	
	else if(where == 'buy-now') {
		whichDiv = "results-inventory";
		whichSearchDiv = "search-inventory";
		whichSubmit = "search-inventory-submit";
	}
	else {
		whichDiv = "results";
		whichSearchDiv = "srch";
        whichSubmit = "search-submit";
	}

	whichWhere = where;
	whichResultList = resultList;
	
	var keyCode = code;	
	var string = input.replace(' ','');	
	var slen = string.length;	
	if(string != '' && string != null && keyCode != 40 && keyCode != 38){		
		var query = "?string="+string+"&lowerLimit="+ll+"&upperLimit="+ul+"&resultList="+resultList;
		var url = "/searchString"+query;

		//alert(url);

		xmlHttp.onreadystatechange=doSearch;
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null); 
	}
	else if (keyCode == 40 || keyCode == 38){
		scroll(keyCode);
	}
	else if(slen == 0){
		var div = document.getElementById(whichDiv).style.display = 'none';
	}
}


function scroll(code){			
	keyCode = code;
	//alert('in scroll function: '+keyCode);
	if(keyCode == 40){		
		moveDownList();
	}
	else if(keyCode == 38){
		moveUpList();
	}
}



function moveUpList(){
	if(document.getElementById(whichResultList) == null) return;
	var list = document.getElementById(whichResultList).getElementsByTagName('li');
	var listLength = list.length - 1;
	var selected = findSelected(list,listLength);	
	if(selected == -1){
		selected = listLength;
	}
	if((selected - 1) == -1){
		var searchTerm = document.getElementById('searchTerm').value;
		var block = document.getElementById('currentBlock').value;
		var offset = document.getElementById('offset').value;
		var nextBlock = +block - +offset;			
		if(nextBlock >= 0){
			//alert(nextBlock);
			ajaxSearch(searchTerm,nextBlock,10,55, whichWhere, whichResultList);										
		}
		selected = listLength;		
		makeBlack(list[0]);
	}
	makeBlack(list[selected]);
	makeBlue(list[selected - 1]);
	select(list[selected-1],false);
}
function moveDownList(){	
	if(document.getElementById(whichResultList) == null) return;
	var list = document.getElementById(whichResultList).getElementsByTagName('li');
	var listLength = list.length - 1;
	var selected = findSelected(list,listLength);
	var ajaxListLength = document.getElementById('length').value;
	if(selected != -1){makeBlack(list[selected]);}
	if(selected + 1 == ajaxListLength && ajaxListLength != 10){selected = -1;}
	if(selected + 1 == (listLength)){					
		selected = -1;		
		var searchTerm = document.getElementById('searchTerm').value;
		var block = document.getElementById('currentBlock').value;
		var offset = document.getElementById('offset').value;		
		var nextBlock = +block + +offset;	
		//alert(nextBlock);
		ajaxSearch(searchTerm,nextBlock,10,55, whichWhere, whichResultList);							
			
	}
	makeBlue(list[selected + 1]);
	select(list[selected+1],false);
}

function findSelected(list,length){
	var ret = -1;
	for(var i=0;i<length;i++){				
		if(list[i].id == 'selected'){ret = i;}		
	}
	return ret;
}
function stall(l){
	var stall = 0;
	var time = l *  100;
	for(var i = 0;i<time;i++){
		stall = stall + i;
	}
}

function checkArrows (field, evt) {
	
	var keyCode =
	document.layers ? evt.which :
	document.all ? event.keyCode :
	document.getElementById ? evt.keyCode : 0;
	alert(keyCode);
	var r = '';
	if (keyCode == 39)
		r += 'arrow right';
	else if (keyCode == 40)
		r += 'arrow down';
	else if (keyCode == 38)
		r += 'arrow up';
	else if (keyCode == 37)
	r += 'arrow left';
	
	r += ' ' + keyCode;
	//alert(r);
	return keyCode;
}




function select(input,close){	
	//var output = input.innerHTML;	
	var output = input.title;	
    output = output.replace(new RegExp("\\.+$","g"),'');
    output = output.replace(new RegExp("[\s]","g"),'');
	document.getElementById(whichSearchDiv).value = output;	
	if(close){
		document.getElementById(whichDiv).style.display = 'none';
		document.getElementById(whichSubmit).click();
	}
}

function hideList(){
	document.getElementById(whichDiv).style.display = 'none';
}
function makeBlue(sb){
	sb.style.cursor='default';		
	sb.style.color = 'white';

	/* could have to change back */
	if(sb.childNodes[0].style){sb.childNodes[0].style.color = 'white';}
	if(sb.childNodes[1].style){sb.childNodes[1].style.color = 'white';}
	
	
	sb.style.background = 'blue';
	sb.id = 'selected';	
}
function makeBlack(sb){	
	sb.style.color = 'black';

	/* could have to change back */
	if(sb.childNodes[0].style){sb.childNodes[0].style.color = 'black';}
	if(sb.childNodes[1].style){sb.childNodes[1].style.color = 'black';}

	sb.style.background = 'white';
	sb.id = '';	
}
function toHand(sb){	
	sb.style.cursor='pointer';
	sb.style.cursor='hand';
}
function doSearch(){
  if (xmlHttp.readyState==4){        
    var update = xmlHttp.responseText;
    var results = update;    
    var div = document.getElementById(whichDiv);
	// printVars();
    div.innerHTML = update;   
    div.style.display = '';    
  }  	
  else{}
}

function GetXmlHttpObject(){
  var xmlHttp=null;
  try{
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
  catch (e){
    // Internet Explorer
    try{
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e){
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}

function printVars() {
	alert("whichDiv: " + whichDiv
	+ "\nwhichSearchDiv: " +  whichSearchDiv
	+ "\nwhichSubmit: "	+ whichSubmit);
}



