window.onload=onloadPageInit;
// -- CONFIF SECTION -- //
var sXmlDataFile='/apps/partcat/parts.xml';
var iShowRowCount=25;
var sHtmlUnabledToLoadXml='<center style="padding-top:70px;"><b><h3>PROBLEM LOADING PAGE</h3></b><br /><br />Sorry but we had a problem loading the page properly.<br />Please refresh this page to try and resolve the problem.<br />If you continue to have a problem, please contact the webmaster referencing <i>Error Code: 10</i></center>';
var sHtmlUnabledToParseXml='<center style="padding-top:70px;"><b><h3>PROBLEM LOADING PAGE</h3></b><br /><br />Sorry but we had a problem loading the page properly.<br />Please refresh this page to try and resolve the problem.<br />If you continue to have a problem, please contact the webmaster referencing <i>Error Code: 20</i></center>';
// -- GLOABL VARS -- //
var xmlDoc=null;
var myRequest;
var bXmlItemFoundInList=false;
var iTotalRecords=0;
var iTotalRecordsAfterFilter=0;
var iCurrentPage=1;
var iTotalPages=0;
var bShowingAllResults=false;
var bDoingPagingAction=false;
var aPartsListForIE = new Array();
var ModelIDLoaded=-1;
var iCurrentRecIndex=0;
var sSearchForInData='';
var CSSClass={};
CSSClass.is=function(e,c){
  if(typeof e=="string")e=document.getElementById(e);
  var classes=e.className;
  if(!classes)return false;
  if(classes==c)return true;
  return e.className.search("\\b"+c+"\\b")!=-1;
};
CSSClass.add=function(e,c){
  if(typeof e=="string")e=document.getElementById(e);
  if(CSSClass.is(e,c))return;
  if(e.className)c=" "+c;
  e.className+=c;
};
CSSClass.remove=function(e,c){
  if(typeof e=="string")e=document.getElementById(e);
  e.className=e.className.replace(new RegExp("\\b"+c+"\\b\\s*","g"),"");
};  
function onloadPageInit() {
  document.getElementById('freezemessage').innerHTML='Please wait while loading parts data...';
  myRequest = getXMLHTTPRequest();
  if (myRequest!=false) {
    loadXMLData(sXmlDataFile);
    document.getElementById('freezemessage').innerHTML='Data loaded, Ready for Search.';
    document.getElementById('searchactive2').style.visibility='hidden';
    document.getElementById('searchfreeze').style.visibility='hidden';
    document.getElementById('infomodel').innerHTML='&nbsp;';
    document.getElementById('infototalparts').innerHTML='&nbsp;';
    document.getElementById('infosortedby').innerHTML='';
  } else {
    alert('Sorry... an error occurred while loading the parts catalog data. Please close this webpage and try again. If you are still having problems, please contact the Webmaster.');
  }
}
function onloadPageInit2(){
  var qs = new Querystring();
  if (qs.contains("mid")) {
    var v1 = qs.get("mid");
    if(isNaN(v1)==true){
      document.getElementById('modelpartslistingmsg').innerHTML='INVALID MODEL ID SPECIFIED, PLEASE TRY AGAIN';		
      document.getElementById('infomodel').innerHTML='[NOT FOUND]';
      document.getElementById('infototalparts').innerHTML='[NOT FOUND]';
      document.getElementById('infosortedby').innerHTML='';
      showPane('MP');
	}else{setTimeout("timerDisplayPartsForModel("+v1+");",1000);}
  }else{
	showPane('PS');
    try{document.partssearch.searchfor.focus();}catch(ex){;}
  }
}
function displayPartsForModel(vModelID){
  if(isNaN(vModelID)==true){
    //Invalid ModelID
	alert('Sorry but we could not load the Parts Listing because the Model ID specified is not valid. Please try again.');
  }else{
	if(ModelIDLoaded==vModelID){showPane('MP');}else{
	  show_diag('dialogloading','show',1);
	  document.getElementById('DynPartsContainer2').innerHTML='';
	  setTimeout("timerDisplayPartsForModel("+vModelID+");",1000);
	}
  }
}
function timerDisplayPartsForModel(vModelID){
  ModelIDLoaded=vModelID;
  BuildDynPartsList(vModelID,'parentid',true);
  if (bXmlItemFoundInList==true){sorttable.init();}
  showPane('MP');
}
function setdeadcenterdiv(Xwidth,Yheight,divid) {
  try{
    var scrolledX,scrolledY;
    if(self.pageYOffset){scrolledX=self.pageXOffset;scrolledY=self.pageYOffset;}
    else if(document.documentElement && document.documentElement.scrollTop){
      scrolledX=document.documentElement.scrollLeft;
      scrolledY=document.documentElement.scrollTop;
    }else if(document.body){scrolledX=document.body.scrollLeft;scrolledY=document.body.scrollTop;}
    var centerX,centerY;
    if(self.innerHeight){
      centerX=self.innerWidth;
      centerY=self.innerHeight;
    }else if(document.documentElement && document.documentElement.clientHeight){
      centerX=document.documentElement.clientWidth;
      centerY=document.documentElement.clientHeight;
    }else if(document.body){
      centerX=document.body.clientWidth;
      centerY=document.body.clientHeight;
    }
    var leftOffset=scrolledX+(centerX-Xwidth)/2;
    var topOffset=scrolledY+(centerY-Yheight)/2;
    var o=document.getElementById(divid);
    var r=o.style;
    r.position='absolute';
    r.top=topOffset+'px';
    r.left=leftOffset+'px';
    r.display="block";
	return true;
  }catch(ex){return false;}
} 
function show_diag(elm_id,display,step){
  try{
    if(display=='show'){
      if(step==1){
        b=setdeadcenterdiv(400,200,elm_id);
	    if(b==true){
	      if(document.getElementById(elm_id).style.display=='none'){document.getElementById(elm_id).style.display='';}
          setTimeout("show_diag('"+elm_id+"', '"+display+"', 2);",50);
	    }
      }
      if(step<=15 && step!=1){
        elm_step=step+1;
        setTimeout("show_diag('"+elm_id+"', '"+display+"',"+elm_step+");",20);
      }
    }else if(display=='hide'){
      if(document.getElementById(elm_id).style.display!='none'){document.getElementById(elm_id).style.display='none';}
    }
  }catch(ex){;}
  return false;
}
function showPane(vPane){
  if(document.getElementById('PageLoading').style.display!='none'){
    document.getElementById('PageLoading').style.display='none';
	document.getElementById('PageReady').style.display='';
  }
  ele1=document.getElementById('PartsSearchPane');
  ele2=document.getElementById('ModelPartsPane');
  if(vPane=='MP'){
    if(ele2.style.display=='none'){
	  ele1.style.display='none';
	  ele2.style.display='';
      try{
	    CSSClass.remove(document.getElementById('lipartssearch'),'active');
	    CSSClass.add(document.getElementById('limodelparts'),'active');
	  }catch(ex){alert(ex);}
	}
  }else{
    if(ele1.style.display=='none'){
	  ele2.style.display='none';
	  ele1.style.display='';
      try{
	    CSSClass.add(document.getElementById('lipartssearch'),'active');
	    CSSClass.remove(document.getElementById('limodelparts'),'active');
	  }catch(ex){alert(ex);}
	}
  }
}
/*
  Written & Developed By Scott Bannon 2009 for non-exclusive use by Adept.
  The GNU General Public License (GPL) Version 2, June 1991
  http://www.opensource.org/licenses/gpl-2.0.php
*/
function Querystring(qs){
  this.params={};
  if(qs==null) qs = location.search.substring(1, location.search.length);
  if(qs.length==0) return;
  qs=qs.replace(/\+/g, ' ');
  var args=qs.split('&');
  for(var i=0;i<args.length;i++){
    var pair=args[i].split('=');
    var name=decodeURIComponent(pair[0]);
    var value=(pair.length==2) ? decodeURIComponent(pair[1]) : name;
    this.params[name]=value;
  }
}
Querystring.prototype.get = function(key, default_){
  var value=this.params[key];
  return (value!=null) ? value : default_;
}
Querystring.prototype.contains = function(key){
  var value=this.params[key];
  return (value!=null);
}
function BuildDynPartsList(sVal,sNodeName,bIsSortedByNodeName){
  var bShowAll=false;
  if(sVal=='ALL'){bShowAll=true;}
  var htmlDynList='<table class="sortable"><thead><tr>';
  htmlDynList+='<th class="tblsortabledetailsth1" onclick="setSortedBy2(\'Part Number\')" title="Click to sort by Part Number">Part Number</th>';
  htmlDynList+='<th class="tblsortabledetailsth2" onclick="setSortedBy2(\'Part Description\')" title="Click to sort by Part Description">Part Description</th>';
  htmlDynList+='<th class="tblsortabledetailsth3" onclick="setSortedBy2(\'Price (US)\')" title="Click to sort by Price">Price (US)</TH>';
  htmlDynList+='<th class="tblsortabledetailsth4"><SPAN class="editlinktip hasTip" title="FSE: Requires an Adept Field Engineer to install, please contact Adept Technical support."';
  htmlDynList+=' style="COLOR: #333; TEXT-DECORATION: none">FSE(1)</SPAN></th>';
  htmlDynList+='<th class="tblsortabledetailsth5"><SPAN class="editlinktip hasTip" title="Return: Call our technical support hotline or write to parts@adept.com for details." ';
  htmlDynList+=' style="COLOR: #333; TEXT-DECORATION: none">Return(2)</SPAN></th>';
  htmlDynList+='</tr></thead><tbody>';
  var iCtr=0;
  var iRecPos=0;
  var bFoundNode=false;
  var bItemNotInSortedNodeData=false;
  var sXMLNodeFieldMatch='';
  var sTmp1='';
  var NodeRecCount = xmlDoc.getElementsByTagName('partitem').length;
  var iXMLNodeFieldMatch=-1;
  var iVal=-2;
  var iMaxRecPerModel=-1;
  var sModelDesc='';
  iCtr=xmlDoc.getElementsByTagName('datainfo').length;
  sTmp1=xmlDoc.getElementsByTagName('maxrecpermodel')[0].childNodes[0].nodeValue;
  iMaxRecPerModel=parseInt(sTmp1);
  iCtr=0;
  if(isNaN(sVal)){iVal=-1;}else{iVal=parseInt(sVal);}
  if(NodeRecCount>=500){
    if (bIsSortedByNodeName==true){
      sXMLNodeFieldMatch=xmlDoc.getElementsByTagName(sNodeName)[(NodeRecCount-1)].childNodes[0].nodeValue;
      iXMLNodeFieldMatch=parseInt(sXMLNodeFieldMatch);
      if (iXMLNodeFieldMatch<iVal){bItemNotInSortedNodeData=true;
      }else{
        sXMLNodeFieldMatch=xmlDoc.getElementsByTagName(sNodeName)[0].childNodes[0].nodeValue;
        iXMLNodeFieldMatch=parseInt(sXMLNodeFieldMatch);
        if (iXMLNodeFieldMatch>iVal){bItemNotInSortedNodeData=true;
        }else{
          iRecPos= Math.round(NodeRecCount/2);
          sXMLNodeFieldMatch=xmlDoc.getElementsByTagName(sNodeName)[iRecPos].childNodes[0].nodeValue;
          iXMLNodeFieldMatch=parseInt(sXMLNodeFieldMatch);
          if(iXMLNodeFieldMatch==iVal){if((iRecPos-(iMaxRecPerModel-1))>=0){iRecPos=iRecPos-(iMaxRecPerModel-1);}else{iRecPos=0;}
          }else{
            if(iXMLNodeFieldMatch>iVal){
              iRecPos= Math.round(NodeRecCount/4);
              sXMLNodeFieldMatch=xmlDoc.getElementsByTagName(sNodeName)[iRecPos].childNodes[0].nodeValue;
              iXMLNodeFieldMatch=parseInt(sXMLNodeFieldMatch);
              if(iXMLNodeFieldMatch==iVal){if((iRecPos-(iMaxRecPerModel-1))>=0){iRecPos=iRecPos-(iMaxRecPerModel-1);}else{iRecPos=0;}
              }else if(iXMLNodeFieldMatch>iVal){iRecPos=0;}
            }else{
              iRecPos= (Math.round(NodeRecCount/2)+Math.round(NodeRecCount/4));
              sXMLNodeFieldMatch=xmlDoc.getElementsByTagName(sNodeName)[iRecPos].childNodes[0].nodeValue;
              iXMLNodeFieldMatch=parseInt(sXMLNodeFieldMatch);
              if(iXMLNodeFieldMatch==iVal){if((iRecPos-(iMaxRecPerModel-1))>=0){iRecPos=iRecPos-(iMaxRecPerModel-1);}else{iRecPos=0;}
              }else if(iXMLNodeFieldMatch>iVal){iRecPos=Math.round(NodeRecCount/2);}
            }
          }
        }
      }
    }
  }
  if(bItemNotInSortedNodeData==false){
    for(var x=iRecPos;x<NodeRecCount;x++){
      sXMLNodeFieldMatch=xmlDoc.getElementsByTagName(sNodeName)[x].childNodes[0].nodeValue;
      iXMLNodeFieldMatch=parseInt(sXMLNodeFieldMatch);
      if((iXMLNodeFieldMatch==iVal)||(bShowAll)){
        bFoundNode=true;
        iCtr++;
        if(sModelDesc==''){sModelDesc=xmlDoc.getElementsByTagName("modeldesc")[x].childNodes[0].nodeValue;}
        htmlDynList+='<TR vAlign=top>';
        htmlDynList+='<TD class="tblsortabledetailstd1">'+xmlDoc.getElementsByTagName("partno")[x].childNodes[0].nodeValue+'</TD>';
        htmlDynList+='<TD class="tblsortabledetailstd1">'+xmlDoc.getElementsByTagName("description")[x].childNodes[0].nodeValue+'</TD>';
        htmlDynList+='<TD class="tblsortabledetailstd2">'+xmlDoc.getElementsByTagName("priceus")[x].childNodes[0].nodeValue+'</TD>';
        sTmp1 = '';
		try{sTmp1=xmlDoc.getElementsByTagName("FSE1")[x].childNodes[0].nodeValue;}catch(ex){;}
		htmlDynList+='<TD class="tblsortabledetailstd3">'+sTmp1+'</TD>';
        sTmp1 = '';
		try{sTmp1=xmlDoc.getElementsByTagName("Return")[x].childNodes[0].nodeValue;}catch(ex){;}
        htmlDynList+='<TD class="tblsortabledetailstd3">'+sTmp1+'</TD></TR>';
      }else{
        if((bIsSortedByNodeName==true)&&(bFoundNode==true)){break;}else{
          if((bIsSortedByNodeName==true)&&(bFoundNode==false)&&(iXMLNodeFieldMatch>iVal)){break;}
        }
      }
    }
  }
  if(bFoundNode==false){
    htmlDynList+='<TR vAlign=top>';
    htmlDynList+='<TD colspan="5" height="60" align="center" valign="middle"><b>INVALID MODEL SPECIFIED, PLEASE TRY AGAIN</b></TD></TR>';
    document.getElementById('PartsListingFor').innerHTML='Parts Listing (<i>[NOT FOUND]</i>)';	
    document.getElementById('infomodel').innerHTML='[NOT FOUND]';
    document.getElementById('infototalparts').innerHTML='[NOT FOUND]';
    document.getElementById('infosortedby').innerHTML='';
  }else{
    bXmlItemFoundInList=true;
    document.getElementById('PartsListingFor').innerHTML='Parts Listing (<i>'+sModelDesc+'</i>)';	
    document.getElementById('infomodel').innerHTML=sModelDesc;
    document.getElementById('infototalparts').innerHTML=''+iCtr;
    document.getElementById('infosortedby').innerHTML='Part Number';
  }
  htmlDynList+='</TBODY></TABLE>';
  document.getElementById('DynPartsContainer2').innerHTML=htmlDynList;
  show_diag('dialogloading','hide',1);
}
function getXMLHTTPRequest() {
  var req=false;
  if(window.XMLHttpRequest) {
    try{req=new XMLHttpRequest();}catch(e){req=false;}
  }else if(window.ActiveXObject){try{req=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){
    try{req=new ActiveXObject('Microsoft.XMLHTTP');}catch(e){req=false;}
  }}
  return req;
}
function dosearchfor() {
  var bDoSearch=true;
  var sErrMsg='';
  var sSearchFor=document.partssearch.searchfor.value;
  sSearchFor=sSearchFor.trim();
  bDoingPagingAction=false;
  if(isblank(sSearchFor)==true){
    bDoSearch=false;
    document.partssearch.searchfor.value='';
    sErrMsg='Search cannot be blank';
  }
  if(bDoSearch){
    document.partssearch.searchfor.value=sSearchFor;
    document.partssearch.searchfor.blur();
    document.getElementById('freezemessage').innerHTML='Searching... Please Wait.';
    document.getElementById('tdsearchform').style.backgroundColor='silver';
    document.getElementById('searchfreeze').style.visibility='visible';
    document.getElementById('searchactive2').style.visibility='visible';
    document.getElementById('searchedfor').innerHTML=sSearchFor;
    document.getElementById('searchedoptions').innerHTML='';
    document.getElementById('searchedtotalmatch').innerHTML='0';
    document.getElementById('searchedsortedby').innerHTML='Robot Model (Where Used)';
    var iShowRowCountInResults=document.partssearch.RecPerPage.options[(document.partssearch.RecPerPage.selectedIndex)].value;
    iCurrentRecIndex=0;
    iCurrentPage=1;
    sSearchForInData=sSearchFor;
    bShowingAllResults=false;
    doSomething(function (value,total){
      if(iCurrentRecIndex<iTotalRecords){
        document.getElementById('freezemessage').innerHTML='Please wait... Search '+parseInt((100 * value / total))+'% Complete, Total Matches: '+iTotalRecordsAfterFilter;
        document.getElementById('searchedtotalmatch').innerHTML=''+iTotalRecordsAfterFilter+'';
      }
    });
  }else{document.partssearch.searchfor.focus();}
  return false;
}
function SearchPaneFreeze(vState,vMsg){
  if(vState=='on'){
    vMsg=vMsg.trim();
	if(vMsg==''){vMsg='Please wait while completing your request...';}
    document.getElementById('freezemessage').innerHTML=vMsg;
    document.getElementById('tdsearchform').style.backgroundColor='silver';
    document.getElementById('searchfreeze').style.visibility='visible';
    document.getElementById('searchactive2').style.visibility='visible';
  }else{
    document.getElementById('freezemessage').innerHTML='';
    document.getElementById('tdsearchform').style.backgroundColor='white';
    document.getElementById('searchfreeze').style.visibility='hidden';
    document.getElementById('searchactive2').style.visibility='hidden';
  }
}
function doShowAllPartsListing(){
  if(bDoingPagingAction==false){
    if(!bShowingAllResults){
      bDoingPagingAction=true;
      bShowingAllResults=true;
      var sRowID='';
      var objRow=null;
      var x=0;
      for(x=1;(x<(iTotalRecordsAfterFilter+1));x++){
        sRowID='PartRow'+x;
        objRow=document.getElementById(sRowID);
        objRow.style.display='';
      }
      for(x=1;(x<(iTotalPages+1));x++){
        sRowID='GotoPage'+x;
        objRow=document.getElementById(sRowID);
        objRow.className='partssearchpagingnav';
      }
      document.getElementById('ShowAllParts').className='partssearchpagingnavon';
      SearchPaneFreeze('off','');
      bDoingPagingAction=false;
    }
  }
}
function ShowAllPartsListing(){
  if(bDoingPagingAction==false){
    if(!bShowingAllResults){
	  SearchPaneFreeze('on','Please wait... Updating Page Listing.');
	  setTimeout("doShowAllPartsListing();",1000);
    }
  }
}
function ShowResultsPage(vPageNo){
  if(bDoingPagingAction==false){
	SearchPaneFreeze('on','Please wait... Updating Page Listing.');
	setTimeout("doShowResultsPage("+vPageNo+");",1000);
  }
}
function doShowResultsPage(vPageNo){
  if(bDoingPagingAction==false){
    bDoingPagingAction=true;
    var sTmp='';
    if(bShowingAllResults){
      sTmp='ShowAllParts';
      document.getElementById(sTmp).className='partssearchpagingnav';
    }else{
      sTmp='GotoPage'+iCurrentPage;
      document.getElementById(sTmp).className='partssearchpagingnav';
    }
    sTmp='GotoPage'+vPageNo;
    document.getElementById(sTmp).className='partssearchpagingnavon';
    bShowingAllResults=false;
    var iRecToShowStart=(((iShowRowCount*vPageNo)-iShowRowCount)+1);
    var iRecToShowLast=(iShowRowCount*vPageNo);
    var sRowID='';
    var objRow=null;
    for(var x=1;(x<(iTotalRecordsAfterFilter+1));x++){
      sRowID='PartRow'+x;
      objRow=document.getElementById(sRowID);
      if((x>=iRecToShowStart)&&(x<=iRecToShowLast)){objRow.style.display='';}else{objRow.style.display='none';}
    }
    iCurrentPage=vPageNo
    SearchPaneFreeze('off','');
    bDoingPagingAction=false;
  }
}
function setSortedBy(vText){document.getElementById('searchedsortedby').innerHTML=vText;}
function setSortedBy2(vText){document.getElementById('infosortedby').innerHTML=vText;}
function isblank(s){
  for(var i=0;i<s.length;i++){
    var c=s.charAt(i);
    if((c!=' ')&&(c!='\n')&&(c!='\t')) return false;
  }
  return true;
}
String.prototype.trim = function() {return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"");}
String.prototype.fulltrim = function() {return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"").replace(/\s+/g," ");}
function getXMLHTTPRequest(){
  var req=false;
  if(window.XMLHttpRequest){
    try{req=new XMLHttpRequest();}catch(e){req=false;}
  }else if(window.ActiveXObject){try{req=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){
    try{req=new ActiveXObject('Microsoft.XMLHTTP');}catch(e){req=false;}
  }}
  return req;
}
function loadXMLData(url){
  myRand=parseInt(Math.random()*9999999999999999);
  var modurl=url+"?rand="+myRand;
  myRequest.open('GET', modurl, true);
  myRequest.onreadystatechange = processReq;
  myRequest.send('');
}
function processReq(){
  if(myRequest.readyState==4){
    if(myRequest.status==200){
      xmlDoc=myRequest.responseXML;
	  var bSuccess;
      bSuccess=xml2array();
	  if(bSuccess==true){onloadPageInit2();}else{document.getElementById('PageLoading').innerHTML=sHtmlUnabledToParseXml;}
    }else{document.getElementById('PageLoading').innerHTML=sHtmlUnabledToLoadXml;}
  }
}
function xml2array(){
  var s='';
  var iRecErrCtr=0;
  var bResult=true;
  var bAdd=true;
  try{
    var NodeRecCount=0;
    NodeRecCount=xmlDoc.getElementsByTagName('partitem').length;
  }catch(ex){;}
  if(NodeRecCount!=0){
    var rows=xmlDoc.getElementsByTagName('partitem');
    for(var i=0,row;row=rows[i];i++){
	  bAdd=true;
      t=new Array();
	  try{
	    s=row.getElementsByTagName('parentid')[0].firstChild.nodeValue;
	    s=s.trim();
        t.parentid=s;
	    s=row.getElementsByTagName('modeldesc')[0].firstChild.nodeValue;
	    s=s.trim();
        t.modeldesc=s;
	    s=row.getElementsByTagName('partno')[0].firstChild.nodeValue;
	    s=s.trim();
        t.partno=s;
	    s=row.getElementsByTagName('description')[0].firstChild.nodeValue;
	    s=s.trim();
        t.description=s
	    s=row.getElementsByTagName('priceus')[0].firstChild.nodeValue;
	    s=s.trim();
        t.priceus=s;
	    s='';
	  }catch(ex){
	    iRecErrCtr+=1;
		bAdd=false;
		if(iRecErrCtr>=20){bReturn=false;break;}
	  }
	  if(bAdd==true){
	    try{s=row.getElementsByTagName('FSE1')[0].firstChild.nodeValue;}catch(ex){;}
	    t.fse=s;
	    s='';
	    try{s=row.getElementsByTagName('Return')[0].firstChild.nodeValue;}catch(ex){;}
	    t.rtn=s;
	  }
      if(bAdd==true){aPartsListForIE[aPartsListForIE.length]=t;}
    }
  }
  iTotalRecords=NodeRecCount;
  return bResult;
}
function doSomething (progressFn) {
  var iCtr=0;
  var sXMLNodeFieldMatch='';
  var sTmp1='';
  var sVal=sSearchForInData;
  iShowRowCount=document.partssearch.RecPerPage.options[(document.partssearch.RecPerPage.selectedIndex)].value;
  var bSearchModel=document.partssearch.searchmodel.checked;
  var bSearchPDesc=document.partssearch.searchpdesc.checked;
  var bSearchPN=document.partssearch.searchpn.checked;
  var bHighlighting=document.partssearch.matchhighlight.checked;
  if(bSearchModel==true){if (sTmp1==''){sTmp1='"Robot Model"';}else{sTmp1=sTmp1+', "Robot Model"';}}
  if(bSearchPDesc==true){if (sTmp1==''){sTmp1='"Part Description"';}else {sTmp1=sTmp1+', "Part Description"';}}
  if(bSearchPN==true){if(sTmp1==''){sTmp1='"Part Number"';}else{sTmp1=sTmp1+', "Part Number"';}}
  document.getElementById('searchedoptions').innerHTML=sTmp1;
  var bShowAll=false;
  if(sVal=='?'){bShowAll=true;}
  var htmlDynList='<table class="sortable"><thead><tr>';
  htmlDynList+='<th class="tblsortableth1" onclick="setSortedBy(\'Part Number\')" title="Click to sort by Part Number">Part Number</TH>';
  htmlDynList+='<th class="tblsortableth2" onclick="setSortedBy(\'Part Description\')" title="Click to sort by Part Description">Part Description</TH>';
  htmlDynList+='<th class="tblsortableth2" onclick="setSortedBy(\'Robot Models (Where Used)\')" title="Click to sort by Robot Models">Robot Models (Where Used)</TH>';
  htmlDynList+='<th class="tblsortableth3" onclick="setSortedBy(\'Price (US)\')" title="Click to sort by Price">Price (US)</TH>';
  htmlDynList+='<th class="tblsortableth4"><SPAN class="editlinktip hasTip" title="FSE: Requires an Adept Field Engineer to install, please contact Adept Technical support."';
  htmlDynList+='style="COLOR:#333;TEXT-DECORATION:none;">FSE(1)</SPAN></TH>';
  htmlDynList+='<th class="tblsortableth5"><SPAN class="editlinktip hasTip" title="Return: Call our technical support hotline or write to parts@adept.com for details." ';
  htmlDynList+='style="COLOR:#333;TEXT-DECORATION:none">Return(2)</SPAN></TH>';
  htmlDynList+='</tr></thead><tbody>';
  iTotalRecordsAfterFilter=0;
  iCurrentPage=1;
  var iVal=-2;
  var sModelDesc='';
  var sPartNo='';
  var sPartDesc='';
  var sUsPrice='';
  var iParentID=0;
  var bIsMatch=false;
  var matchexp=sVal;
  var re= new RegExp(matchexp,"i");
  var sCtr='';
  iCtr=0;
  (function () {
    var zStart;
    var zEnd;
    zStart=iCurrentRecIndex;
    if((iCurrentRecIndex+100)<iTotalRecords){zEnd=iCurrentRecIndex+100;}else{zEnd=iTotalRecords;}
    for(var x=zStart;x<zEnd;x++){
      bIsMatch=false;
      if(bShowAll==false){
        if(bSearchModel){
          sXMLNodeFieldMatch=aPartsListForIE[x].modeldesc;
          if(sXMLNodeFieldMatch.match(re)){bIsMatch=true;}else{bIsMatch=false;}
        }
        if((bSearchPN)&&(bIsMatch==false)){
          sXMLNodeFieldMatch=aPartsListForIE[x].partno;
          if(sXMLNodeFieldMatch.match(re)){bIsMatch=true;}else{bIsMatch=false;}
        }
        if((bSearchPDesc)&&(bIsMatch==false)){
          sXMLNodeFieldMatch=aPartsListForIE[x].description;
          if(sXMLNodeFieldMatch.match(re)){bIsMatch=true;}else{bIsMatch=false;}
        }
      }
      if((bIsMatch)||(bShowAll)){
        iCtr++;
        sTmp1=aPartsListForIE[x].parentid;
        iParentID=parseInt(sTmp1);
        sPartNo=aPartsListForIE[x].partno;
        sPartDesc=aPartsListForIE[x].description;
        sModelDesc=aPartsListForIE[x].modeldesc;
        sUsPrice=aPartsListForIE[x].priceus;
        if(bHighlighting){
          if(bSearchModel){sModelDesc=sModelDesc.replace(re,'<font color="red"><u>'+sVal+'</u></font>');}
          if(bSearchPN){sPartNo=sPartNo.replace(re,'<font color="red"><u>'+sVal+'</u></font>');}
          if(bSearchPDesc){sPartDesc=sPartDesc.replace(re,'<font color="red"><u>'+sVal+'</u></font>');}
        }
		sModelDesc='<a href="javascript:displayPartsForModel('+iParentID+')">'+sModelDesc+'</a>';
        sCtr=iCtr.toString();
        htmlDynList+='<tr valign="top" id="PartRow'+sCtr+'" name="PartRow'+sCtr+'" ';
        if(iShowRowCount==0){htmlDynList+='style="">';
        }else{
          if(iShowRowCount<iCtr){htmlDynList+='style="display:none;">';}else{htmlDynList+='style="">';}
        }
        htmlDynList+='<td class="tblsortabletd1">'+sPartNo+'</TD><TD class="tblsortabletd1">'+sPartDesc+'</TD><TD class="tblsortabletd1">'+sModelDesc+'</TD><TD class="tblsortabletd2">'+sUsPrice+'</TD>';
        sTmp1=aPartsListForIE[x].fse;
        htmlDynList+='<TD class="tblsortabletd3">'+sTmp1+'</TD>';
        sTmp1=aPartsListForIE[x].rtn;
        htmlDynList+='<TD class="tblsortabletd3">'+sTmp1+'</TD></TR>';
      }
    }
    iCurrentRecIndex=zEnd;
    iTotalRecordsAfterFilter=iCtr;
    var value=iCurrentRecIndex;
    var total=iTotalRecords;
    if(iCurrentRecIndex<iTotalRecords){
      progressFn(value,total);
      setTimeout(arguments.callee,0);
    }else{
      iTotalRecordsAfterFilter=iCtr;
      if(iCtr==0){
        bXmlItemFoundInList=false;
        iTotalRecordsAfterFilter=0;
        htmlDynList+='<tr valign=top><td colspan="6" height="60" align="center" valign="middle"><b>No Parts Found for Search Criteria</b></td></tr>';
        iTotalPages=0;
      }else{bXmlItemFoundInList=true;}
      htmlDynList+='</tbody></table>';
      document.getElementById('DynPartsContainer').innerHTML=htmlDynList;
      htmlDynList='';
      if(iCtr==0){document.getElementById('PartsNavPageOptions').innerHTML='';
      }else{
        sTmp1='';
        iVal=parseInt(iTotalRecordsAfterFilter/iShowRowCount);
        if(iTotalRecordsAfterFilter>(iVal*iShowRowCount)){iVal++;}
        iTotalPages=iVal;
        if(iShowRowCount==0){
          bShowingAllResults=true;
          sTmp1='<span class="partssearchpagingnavon" id="ShowAllParts" name="ShowAllParts" title="Show All Parts" onclick="ShowAllPartsListing()">ALL</span>';
        }else{
          bShowingAllResults=false;
          sTmp1='<span class="partssearchpagingnav" id="ShowAllParts" name="ShowAllParts" title="Show All Parts" onclick="ShowAllPartsListing()">ALL</span>';
        }
        for(var x=1;(x<(iVal+1));x++){
          if(x==1){
            if(iShowRowCount==0){sTmp1+='<span class="partssearchpagingnav" id="GotoPage'+x+'" name="GotoPage'+x+'" title="Show Parts 1-'+iShowRowCount+'" onclick="ShowResultsPage('+x+')">'+x+'</span>';
            }else{sTmp1+='<span class="partssearchpagingnavon" id="GotoPage'+x+'" name="GotoPage'+x+'" title="Show Parts 1-'+iShowRowCount+'" onclick="ShowResultsPage('+x+')">'+x+'</span>';}
          }else{
            if(x==iVal){iCtr=iTotalRecordsAfterFilter;}else{iCtr=(x*iShowRowCount);}
            sTmp1+='<span class="partssearchpagingnav" id="GotoPage'+x+'" name="GotoPage'+x+'" title="Show Parts '+(((x*iShowRowCount)-iShowRowCount)+1)+'-'+iCtr+'" onclick="ShowResultsPage('+x+')">'+x+'</span>';
          }
        }
        document.getElementById('PartsNavPageOptions').innerHTML=sTmp1;
      }
      document.getElementById('freezemessage').innerHTML='Search Completed with '+iTotalRecordsAfterFilter+' Matched Records.';
      document.getElementById('tdsearchform').style.backgroundColor='white';
      document.getElementById('searchfreeze').style.visibility='hidden';
      document.getElementById('searchactive2').style.visibility='hidden';
      document.getElementById('searchedtotalmatch').innerHTML=''+iTotalRecordsAfterFilter+'';
      document.partssearch.searchfor.focus();
      if(bXmlItemFoundInList){sorttable.init();}
    }
  })();
}
function isNull(val){return(val==null);}
/*
  SortTable
  version 2
  7th April 2007
  Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
  
  Instructions:
  Download this file
  Add <script src="sorttable.js"></script> to your HTML
  Add class="sortable" to any table you'd like to make sortable
  Click on the headers to sort
  
  Thanks to many, many people for contributions and suggestions.
  Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
  This basically means: do what you want with it.
*/
var stIsIE = /*@cc_on!@*/false;
sorttable = {
  init: function() {
    if(!document.createElement || !document.getElementsByTagName) return;
    sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
    forEach(document.getElementsByTagName('table'), function(table) {
      if(table.className.search(/\bsortable\b/) != -1){sorttable.makeSortable(table);}
    });
  },
  makeSortable: function(table) {
    if(table.getElementsByTagName('thead').length==0){
      the=document.createElement('thead');
      the.appendChild(table.rows[0]);
      table.insertBefore(the,table.firstChild);
    }
    if(table.tHead==null) table.tHead = table.getElementsByTagName('thead')[0];
    if(table.tHead.rows.length!=1) return;
    sortbottomrows=[];
    for(var i=0;i<table.rows.length;i++){
      if(table.rows[i].className.search(/\bsortbottom\b/)!=-1){
        sortbottomrows[sortbottomrows.length]=table.rows[i];
      }
    }
    if(sortbottomrows){
      if(table.tFoot==null){
        tfo=document.createElement('tfoot');
        table.appendChild(tfo);
      }
      for(var i=0;i<sortbottomrows.length;i++){
        tfo.appendChild(sortbottomrows[i]);
      }
      delete sortbottomrows;
    }
    headrow=table.tHead.rows[0].cells;
    for(var i=0;i<headrow.length;i++){
      if(!headrow[i].className.match(/\bsorttable_nosort\b/)){
        mtch=headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
        if(mtch){override=mtch[1];}
          if(mtch && typeof sorttable["sort_"+override] == 'function'){
	    headrow[i].sorttable_sortfunction=sorttable["sort_"+override];
	  }else{headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);}
      headrow[i].sorttable_columnindex=i;
      headrow[i].sorttable_tbody=table.tBodies[0];
      dean_addEvent(headrow[i],"click", function(e){
        if(this.className.search(/\bsorttable_sorted\b/)!=-1){
          sorttable.reverse(this.sorttable_tbody);
          this.className=this.className.replace('sorttable_sorted','sorttable_sorted_reverse');
          this.removeChild(document.getElementById('sorttable_sortfwdind'));
          sortrevind=document.createElement('span');
          sortrevind.id="sorttable_sortrevind";
          sortrevind.innerHTML=stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
          this.appendChild(sortrevind);
          return;
        }
        if(this.className.search(/\bsorttable_sorted_reverse\b/)!=-1){
          sorttable.reverse(this.sorttable_tbody);
          this.className=this.className.replace('sorttable_sorted_reverse','sorttable_sorted');
          this.removeChild(document.getElementById('sorttable_sortrevind'));
          sortfwdind=document.createElement('span');
          sortfwdind.id="sorttable_sortfwdind";
          sortfwdind.innerHTML=stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
          this.appendChild(sortfwdind);
          return;
        }
        theadrow=this.parentNode;
        forEach(theadrow.childNodes, function(cell){
          if(cell.nodeType==1){
            cell.className=cell.className.replace('sorttable_sorted_reverse','');
            cell.className=cell.className.replace('sorttable_sorted','');
          }
        });
        sortfwdind=document.getElementById('sorttable_sortfwdind');
        if(sortfwdind){sortfwdind.parentNode.removeChild(sortfwdind);}
        sortrevind=document.getElementById('sorttable_sortrevind');
        if(sortrevind){sortrevind.parentNode.removeChild(sortrevind);}
        this.className+=' sorttable_sorted';
        sortfwdind=document.createElement('span');
        sortfwdind.id="sorttable_sortfwdind";
        sortfwdind.innerHTML= stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
        this.appendChild(sortfwdind);
	    row_array=[];
	    col=this.sorttable_columnindex;
	    rows=this.sorttable_tbody.rows;
	    for(var j=0;j<rows.length;j++){
	      row_array[row_array.length]=[sorttable.getInnerText(rows[j].cells[col]), rows[j]];
	    }
	    row_array.sort(this.sorttable_sortfunction);
	    tb=this.sorttable_tbody;
	    for(var j=0;j<row_array.length;j++){
	      tb.appendChild(row_array[j][1]);
	    }
	    delete row_array;
	  });
	  }
    }
  },
  guessType: function(table,column){
    sortfn=sorttable.sort_alpha;
    for(var i=0;i<table.tBodies[0].rows.length;i++){
      text=sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
      if(text!=''){
        if(text.match(/^-?[£$¤]?[\d,.]+%?$/)){return sorttable.sort_numeric;}
        possdate=text.match(sorttable.DATE_RE);
        if(possdate){
          first=parseInt(possdate[1]);
          second=parseInt(possdate[2]);
          if(first>12){return sorttable.sort_ddmm;}else if(second>12){return sorttable.sort_mmdd;}else{sortfn=sorttable.sort_ddmm;}
        }
      }
    }
    return sortfn;
  },
  getInnerText: function(node){
    hasInputs=(typeof node.getElementsByTagName=='function')&& node.getElementsByTagName('input').length;
    if(node.getAttribute("sorttable_customkey")!=null){return node.getAttribute("sorttable_customkey");
    }else if(typeof node.textContent!='undefined' && !hasInputs){return node.textContent.replace(/^\s+|\s+$/g, '');
    }else if(typeof node.innerText!='undefined' && !hasInputs) {return node.innerText.replace(/^\s+|\s+$/g, '');
    }else if(typeof node.text!='undefined' && !hasInputs){return node.text.replace(/^\s+|\s+$/g, '');
    }else{
      switch (node.nodeType){
        case 3:
          if(node.nodeName.toLowerCase()=='input'){return node.value.replace(/^\s+|\s+$/g,'');}
        case 4:
          return node.nodeValue.replace(/^\s+|\s+$/g, '');
          break;
        case 1:
        case 11:
          var innerText='';
          for(var i = 0;i<node.childNodes.length;i++){
            innerText+=sorttable.getInnerText(node.childNodes[i]);
          }
          return innerText.replace(/^\s+|\s+$/g, '');
          break;
        default:
          return '';
      }
    }
  },
  reverse: function(tbody){
    newrows=[];
    for(var i=0;i<tbody.rows.length;i++){newrows[newrows.length]=tbody.rows[i];}
    for(var i=newrows.length-1;i>=0;i--){tbody.appendChild(newrows[i]);}
    delete newrows;
  },
  sort_numeric: function(a,b){
    aa=parseFloat(a[0].replace(/[^0-9.-]/g,''));
    if(isNaN(aa)) aa = 0;
    bb=parseFloat(b[0].replace(/[^0-9.-]/g,'')); 
    if(isNaN(bb)) bb = 0;
    return aa-bb;
  },
  sort_alpha: function(a,b){
    if(a[0]==b[0]) return 0;
    if(a[0]<b[0]) return -1;
    return 1;
  },
  sort_ddmm: function(a,b) {
    mtch=a[0].match(sorttable.DATE_RE);
    y=mtch[3]; m=mtch[2]; d=mtch[1];
    if(m.length==1) m='0'+m;
    if(d.length==1) d='0'+d;
    dt1=y+m+d;
    mtch= b[0].match(sorttable.DATE_RE);
    y=mtch[3];m=mtch[2];d=mtch[1];
    if(m.length==1) m='0'+m;
    if(d.length==1) d='0'+d;
    dt2=y+m+d;
    if(dt1==dt2) return 0;
    if(dt1<dt2) return -1;
    return 1;
  },
  sort_mmdd: function(a,b) {
    mtch=a[0].match(sorttable.DATE_RE);
    y=mtch[3]; d=mtch[2]; m=mtch[1];
    if(m.length==1) m='0'+m;
    if(d.length==1) d='0'+d;
    dt1=y+m+d;
    mtch=b[0].match(sorttable.DATE_RE);
    y=mtch[3]; d=mtch[2]; m=mtch[1];
    if(m.length==1) m='0'+m;
    if(d.length==1) d='0'+d;
    dt2=y+m+d;
    if(dt1==dt2) return 0;
    if(dt1<dt2) return -1;
    return 1;
  },
  shaker_sort: function(list, comp_func) {
    var b=0;
    var t=list.length - 1;
    var swap=true;
    while(swap) {
      swap=false;
      for(var i = b;i<t;++i){
        if(comp_func(list[i],list[i+1])>0){
          var q=list[i]; list[i]=list[i+1]; list[i+1]=q;
          swap=true;
        }
      }
      t--;
      if(!swap) break;
      for(var i = t;i>b;--i){
        if(comp_func(list[i],list[i-1])<0){
          var q=list[i]; list[i]=list[i-1]; list[i-1]=q;
          swap=true;
        }
      }
      b++;
    }
  }  
}
function OnPageXMLDataLoaded(){
  if(document.addEventListener){document.addEventListener("DOMContentLoaded", sorttable.init, false);}
  /* for Internet Explorer */
  /*@cc_on @*/
  /*@if (@_win32)
      document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
      var script = document.getElementById("__ie_onload");
      script.onreadystatechange = function() {
          if (this.readyState == "complete") {
              sorttable.init(); // call the onload handler
          }
      };
  /*@end @*/
  /* for Safari */
  if(/WebKit/i.test(navigator.userAgent)){
    var _timer=setInterval(function(){
      if(/loaded|complete/.test(document.readyState)){sorttable.init();}
    },10);
  }
  window.onload=sorttable.init;
}
// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini
// http://dean.edwards.name/weblog/2005/10/add-event/
function dean_addEvent(element,type,handler){
  if(element.addEventListener){
    element.addEventListener(type, handler, false);
  }else{
    if(!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
    if(!element.events) element.events={};
    var handlers=element.events[type];
    if(!handlers){
      handlers=element.events[type]={};
      if(element["on" + type]){handlers[0] = element["on" + type];}
    }
    handlers[handler.$$guid]=handler;
    element["on" + type]=handleEvent;
  }
};
dean_addEvent.guid=1;
function removeEvent(element,type,handler){
  if(element.removeEventListener){element.removeEventListener(type,handler,false);}else{if(element.events && element.events[type]){delete element.events[type][handler.$$guid];}}
};
function handleEvent(event){
  var returnValue=true;
  event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
  var handlers=this.events[event.type];
  for(var i in handlers) {
    this.$$handleEvent=handlers[i];
    if (this.$$handleEvent(event)===false){returnValue=false;}
  }
  return returnValue;
};
function fixEvent(event){
  event.preventDefault=fixEvent.preventDefault;
  event.stopPropagation=fixEvent.stopPropagation;
  return event;
};
fixEvent.preventDefault = function() {this.returnValue=false;};
fixEvent.stopPropagation = function() {this.cancelBubble=true;}
// Dean's forEach: http://dean.edwards.name/base/forEach.js
/*
   forEach, version 1.0
   Copyright 2006, Dean Edwards
   License: http://www.opensource.org/licenses/mit-license.php
*/
if(!Array.forEach){
  Array.forEach= function(array, block, context) {
    for(var i=0;i<array.length;i++){block.call(context,array[i],i,array);}
  };
}
Function.prototype.forEach = function(object, block, context) {
  for (var key in object) {if(typeof this.prototype[key]=="undefined"){block.call(context, object[key], key, object);}}
};
String.forEach = function(string, block, context) {
  Array.forEach(string.split(""), function(chr, index) {block.call(context, chr, index, string);});
};
var forEach = function(object, block, context) {
  if(object){
    var resolve=Object;
    if(object instanceof Function){resolve=Function;
    }else if(object.forEach instanceof Function){object.forEach(block, context);return;
    }else if(typeof object=="string"){resolve=String;
    }else if(typeof object.length=="number") {resolve = Array;}
    resolve.forEach(object, block, context);
  }
};
