function getObj(objId){ // converts element command to browser specific
	  if (document.getElementById)
	  {
		this.obj = document.getElementById(objId);
		this.style = document.getElementById(objId).style;
	  }
	  else if (document.all)
	  {
		this.obj = document.all[objId];
		this.style = document.all[objId].style;
	  }
	  else if (document.layers)
	  {
		this.obj = document.layers[objId];
		this.style = document.layers[objId];
	  }
	}
	
	
////////////////////////////////////////////////////////////////
//////// **** Data Capture and Handling Functions **** /////////
////////////////////////////////////////////////////////////////

// Variables //
var lit = 'list_0'
var listlength = 0
var maxlistlength = 15
var lasttxtfld_val = 'blank'
var lastkeypressed
var ogsrch_val = ''
var clickArea = null
var errorCheck = 'No Error'
var server_rtn = false
var detail_rtn = false
var results_ary
var sglchar_ary
var alt_ary = new Array(maxlistlength)
var relatedonly = false
var emT_ary = new Array('','','','','','','','','','','','','','','','','','','','','','','','','')


// DETAIL: Prevents Enter from submitting form
	//function noenter() {
	//  return !(window.event && window.event.keyCode == 13);
	//}

// DETAIL: Exectues specific action based on key pressed
	function handleKP(field, evt){
		lastkeypressed = null;
		
		var keyCode = 
			document.layers ? evt.which :
			document.all ? event.keyCode :
			document.getElementById ? evt.keyCode : 0;
		if (keyCode == 16){  // Shift key
			lastkeypressed = 'ignore'
		}else if(keyCode == 20){  // Caps Lock key
			lastkeypressed = 'ignore'
		}else if(keyCode == 17){  // Ctrl key
			lastkeypressed = 'ignore'
		}else if(keyCode == 9){  // Tab key
			lastkeypressed = 'ignore'
		}else if(keyCode == 38){  // Up key
			selectNextItem('up');
			lastkeypressed = 'nav';
		}else if(keyCode == 40){  // Down key
			selectNextItem('down');
			lastkeypressed = 'nav';
		}else if(keyCode == 37 || keyCode == 39){
			lastkeypressed = 'nav';
		}else if(keyCode == 8){  // Delete
			lastkeypressed = 'delete';
			server_rtn = true;
			swapClass('list_0','list_over');
		}else if(keyCode == 46){  // Forward Delete
			lastkeypressed = 'delete';
			server_rtn = true;
		}else if(keyCode == 13){  // Enter Key
			lastkeypressed = 'ignore'
		}
		
		
		if (lastkeypressed != 'nav' && lastkeypressed != 'ignore'){  // Only updates stored search value if user added to it 
			if (lastkeypressed != 'delete'){
				ogsrch_val = ogsrch_val + String.fromCharCode(keyCode).toLowerCase()
				
			}else{
				ogsrch_val = field.value.toLowerCase();
			};
			document.getElementById('list_0_link').innerHTML = ogsrch_val;		
			updateList(ogsrch_val)  // Run Primary update function
		} else if (lastkeypressed != 'ignore'){
			ogsrch_val = field.value;
		};
		
	}

// DETAIL: Captures height value and reformats as an integer 	
	function getHeight(id){
		h = document.getElementById(id).style.height;
		h.substr(0, h.length-2 )
		h = parseInt(h)
		return h
	}	

// DETAIL: Handles all class swapping
	function swapClass(id, newclass) {
		if (document.getElementById) {
			if (newclass == 'list_over'){  // Records which list item is highlighted and resets last highlighted item
				if(lit){
					document.getElementById(lit+'_link').className = 'list';
					document.getElementById(lit).className = 'list_def';
				}
				document.getElementById(id+'_link').className = 'list_hover';
				lit = id;
			}else if (newclass == 'list_def'){ // Resets highlighted memory
				if(lit == id){
				document.getElementById(lit+'_link').className = 'list';
				lit = 'list_0';}
			};
			document.getElementById(id).className = newclass;
		}; 
	};
	
	
// DETAIL: Hides/Reveals List elements
	function peekaboo(id, forcedVal){
		if (document.getElementById) {
			d = document.getElementById(id).style.display
			if (id == 'vitk_list'){  // Handles full list
				if (d == 'block' || forcedVal == 'none'){
					document.getElementById(id).style.display = 'none';
				}else{
					document.getElementById(id).style.display = 'block';
				}
			}else{  // Handles individual list item and resizes full list accordingly
				if (forcedVal == 'block'){
					document.getElementById(id).style.display = 'block';
					h = getHeight('vitk_list');
					if (h < 14*maxlistlength){
						document.getElementById('vitk_list').style.height = h + 14;
					};
				}else if(forcedVal != 'block'){
					swapClass(id, 'list_def')
					document.getElementById(id).style.display = 'none';
					h = getHeight('vitk_list');
					if (h > 0){
						document.getElementById('vitk_list').style.height = h - 14;
					};
				} 
			}
		}
	}
	
// DETAIL: Hides List when user clicks outside of search area.
	function exitSrchFld(){
		if(clickArea != 'search'){
			peekaboo('vitk_list', 'none');
		}
	}

// DETAIL: Responds to user keypresses for list navigation.
	function selectNextItem(movement){
		x = String(lit);
			x = x.substr(5);
			x = parseInt(x);

		if(movement == 'up'){
			swapClass('list_'+String(Math.max(x-1,0)),'list_over');
			replaceSrchVal('list_'+String(Math.max(x-1,0))+'_link');
			//swapClass('list_'+String(Math.max(x-1,0)+'_link'),'list_hover');
		}else if(movement == 'down'){
			swapClass('list_'+String(Math.min(x+1,listlength)),'list_over');
			replaceSrchVal('list_'+String(Math.min(x+1,listlength))+'_link');
			//swapClass('list_'+String(Math.max(x+1,5)+'_link'),'list_hover');
		};
	}
	
// DETAIL: Replaces search field value with selected list item value	
	
	function replaceSrchVal(listItem, command){
		srchFld = document.vitkreg.vitk_search;	
		if (srchFld.value != document.getElementById(listItem).innerHTML){  //Ensures function only runs once
		srchFld.value = document.getElementById('list_0_link').innerHTML;
		startPos = document.getElementById('list_0_link').innerHTML.length;
		lwrcase_val = srchFld.value.toLowerCase()
	
		listItemVal = document.getElementById(listItem).innerHTML;
		
		listItemVal = listItemVal.replace(/<b>/, '');
		listItemVal = listItemVal.replace(/<\/b>/, '');
		listItemVal = listItemVal.replace(/<B>/, '');
		listItemVal = listItemVal.replace(/<\/B>/, '');
		listItemVal = listItemVal.replace(/\&amp\;/, '&');
		
		
		if(listItemVal.indexOf(lwrcase_val) != 0 || command){
			if(listItemVal == 'No Results Found'){
				return;
			}else{
				startPos = 0
			}
		}; 
		//listItemVal = listItemVal.substr(parseInt(offset));
			//IE support
			if (document.selection){
				//srchFld.focus();
				sel = document.selection.createRange();
				srchFld.value = listItemVal;
				sel.moveStart('character', startPos);
				sel.select();
			}
			
			//MOZILLA/NETSCAPE support
			else if (srchFld.selectionStart){
				
				//var endPos = srchFld.selectionStart;
				srchFld.value = listItemVal;
				
				//srchFld.focus();
				srchFld.selectionStart = startPos;
				srchFld.selectionEnd = listItemVal.length;
			}
			
			//Anyone else.
			else{
				srchFld.value = listItemVal;
			}
		};
	};

	function queryDB(srch,rtn)
	{
		srchmatch = "RelatedSearch";
		if(srch.indexOf(ogsrch_val) == 0)
		{srchmatch = "ExactSearch"};
		
		if(!rtn)
		{
		    rtn = "list"
        }

        //document.write("http://www.ptinr.com/data/pages/vitkprocessor.asp?srch="+srch+"&rtn="+rtn+"&srchmatch="+srchmatch+"&userID=test&userType=unknown";);
        frames['queryframe'].location.href = "http://www.ptinr.com/data/pages/vitkprocessor.asp?srch="+srch+"&rtn="+rtn+"&srchmatch="+srchmatch+"&userID=test&userType=unknown";

	};
	
	function submitForm()
	{
		if (lit == 'list_0')
		{
			queryDB(document.vitkreg.vitk_search.value,'card')
		}
		else
		{
			xlist(lit+'_link')
		};

	    return false;
	}
	
	function xlist(list)
	{
		tempval = document.getElementById(list).innerHTML
		tempval = tempval.replace(/<b>/, '');
		tempval = tempval.replace(/<\/b>/, '');
		tempval = tempval.replace(/<B>/, '');
		tempval = tempval.replace(/<\/B>/, '');
		
		fromAr = new Array(/<b>/,/<\/b>/,/<B>/,/<\/B>/) 
		toAr = new Array('','','','');
		for( var x = 0; x < fromAr.length; x++ ) {
			tempval = tempval.replace(fromAr[x],toAr[x]);
		}		
		tempval = tempval.replace(/&/g,'%26').replace(/'/g,'%27').replace(/\%26amp\;/g,'%26').replace(/\%/g,'%25');
		queryDB(tempval,'card');
	}
	
	function sortList(){  // Sorts the collected values in order of relavence and alphabetically
		alt_ary = results_ary.slice();
		lwrcase_val = ogsrch_val.toLowerCase()
		if (alt_ary[0]){
			server_rtn = true;
			if (ogsrch_val.length < 4){
				for (i=0; i < alt_ary.length; i++){
					testval = alt_ary[i].indexOf(lwrcase_val);
					if (testval != 0){
						alt_ary[i] = 'ignore me';
					}else{alt_ary[i] = alt_ary[i].replace(lwrcase_val, '<b>'+ lwrcase_val + '</b>')}
				};
			} else {
				server_rtn = true;
				var objective_ary = new Array()
				var related_ary = new Array()
				for (i=0; i < alt_ary.length; i++){
				testval = alt_ary[i].indexOf(lwrcase_val)
					if (testval == -1){
						alt_ary[i] = 'ignore me';
					}else if (testval != 0){
						alt_ary[i] = alt_ary[i].replace(lwrcase_val, '<b>'+ lwrcase_val + '</b>')
						related_ary.splice(Math.max(related_ary.length-1,0),0, alt_ary[i]);
					}else{
						alt_ary[i] = alt_ary[i].replace(lwrcase_val, '<b>'+ lwrcase_val + '</b>')
						objective_ary.splice(Math.max(objective_ary.length-1,0),0, alt_ary[i])
					};
				};
				
				objective_ary.sort()
				related_ary.sort()
				if(!objective_ary[0]){relatedonly = true}
				alt_ary = objective_ary.concat(related_ary)
			}
		};	errorCheck = results_ary
	}
		
	function rewriteList(ary){
		results_ary = ary.slice();
		if (ogsrch_val.length == 1){   // ensures the single character results array is defined for backwards render
			sglchar_ary = ary.slice();
		} else if (ogsrch_val.length > 1 && ogsrch_val.length < 4){
			if (server_rtn && lastkeypressed == 'delete'){
				results_ary = sglchar_ary.slice();
			} else if(!server_rtn){
				sglchar_ary = ary.slice();
			} 
		};
		
		if (ogsrch_val.length > 0){sortList();
		}else{alt_ary = emT_ary.slice();}
		
		for (i = 1; i <= maxlistlength; i++){
			peekaboo('list_'+i,'none')
		};
		
		x = 0 
		listlength = maxlistlength;  // writes the values into list items
		while (x < maxlistlength){
			if (!alt_ary[0]){
				server_rtn = false;
				if (document.vitkreg.vitk_search.value){
					alt_ary[0] = "No Results Found";
				};
			}
			if(alt_ary[x]){
				if(alt_ary[x] != 'ignore me'){
					document.getElementById('list_'+(x+1)+'_link').innerHTML = alt_ary[x];
					peekaboo('list_'+(x+1),'block')
					x++
				}else{
					alt_ary.splice(x,1);
				};
			}else{
				listlength = x;
				break
			};
		};
		if (lastkeypressed != 'delete'){
			replaceSrchVal('list_1_link'); 
		;}
	};
	
	
// DETAIL: Performes search and displays card, hiding search field
	function displayCard(cardtitle,cardtext,cardsource,cardimg,cardrate){
		if(!cardimg){
			cardimg = 'noimage.jpg'
		}
		cardimg = '../articlefiles/kyvk/' + cardimg
								
   		var vitk_title = document.getElementById("vitk_title");
		var vitk_text = document.getElementById("vitk_text");
		var vitk_source = document.getElementById("vitk_source");
		var vitk_rate = document.getElementById("vitk_rate");
		var vitk_img = document.getElementById("vitk_img");
		
		// Tests rate of vitamin k for item
		cardrate = parseInt(cardrate);
		if (cardrate > 10){
			if (cardrate > 25){
				cardrate = 'HIGH'	
				vitk_rate.style.backgroundColor = '00ff00'
			}else{
				cardrate = 'MEDIUM'	
				vitk_rate.style.backgroundColor = 'ccffff'
			};
		}else{
			cardrate = 'LOW'
			vitk_rate.style.backgroundColor = 'ffffff'
		};
		
		vitk_img.src=cardimg;
		vitk_title.firstChild.nodeValue=cardtitle;
		vitk_text.firstChild.nodeValue=cardtext;
		vitk_source.firstChild.nodeValue=cardsource;
		vitk_rate.firstChild.nodeValue=cardrate;
		
		
			
		
		document.getElementById('srch_table').style.display = 'none';
		document.getElementById('vitk_card').style.display = 'block';
	}
	
	function resetSearch(){
	
		//lit = 'list_0';
		//listlength = 0;
		//maxlistlength = <%=maxlistlength%>;
		//lasttxtfld_val = ogsrch_val + 'poo';
		
		//errorCheck = 'No Error';
		ogsrch_val = "";
		server_rtn = false;
		detail_rtn = false;
		relatedonly = false;
		document.getElementById('vitk_card').style.display = 'none';
		document.getElementById('srch_table').style.display = 'block';
		document.vitkreg.vitk_search.focus()
		replaceSrchVal(lit+'_link', 'all')
		swapClass('list_0','list_over');
		//peekaboo('vitk_list', 'block');
		//document.vitkreg.vitk_search.value = '';
		//document.getElementById('list_0_link').innerHTML = ogsrch_val;		
	}
	
	// For rating system
	function rate_feature(hide,reveal){
			var x = new getObj(hide);
			x.style.display = 'none';
			x.style.visibility = 'hidden';
			
			var y = new getObj(reveal);
			y.style.display = 'block';
			y.style.visibility = 'visible';
	}

////////////////////////////////////////////////////////////////
/// **** Vitamin K Registry --- Main Update Function **** ////
////////////////////////////////////////////////////////////////

	function updateList(txtfld_val){
		if(txtfld_val != lasttxtfld_val){  // If the text field value has changed
			lasttxtfld_val = txtfld_val; 
			if (txtfld_val == ''){
				server_rtn = false;
				ogsrch_val = '';
				rewriteList(emT_ary)
				peekaboo('vitk_list', 'none');  // Hides full list if search field is empty
			}else{
				if (!server_rtn || ogsrch_val.length > 3 && !detail_rtn){  // Run DB query if base query or detail query hasn't been run
					if (ogsrch_val.length < 4 && ogsrch_val.length > 1){
						queryDB(ogsrch_val.slice(0,1));  // get single character reference array without damaging search value
					}else{ 
						queryDB(ogsrch_val);  // get related items array
					};
				} else {
					rewriteList(results_ary.slice())
				};
				if (document.getElementById('vitk_list').style.display != 'block'){
					peekaboo('vitk_list');  // Reveals full list if hidden
				};
			};
		}
	}
