
var WS_SEARCH_MATS='../ws/materials/search.php';var materials=null;var columns=null;var properties=null;var materialTypes=null;var materialsTable;var lastParams=null;var matPanel=null,glossaryPanel=null;var pageNum=0;var timeoutId=null;var numDisplayCols=3;var glossaryObj=new Glossary('../');var getParams;var stateElements=['materialTypes','prop0name','prop1name','prop2name','prop0min','prop0max','prop1min','prop1max','prop2min','prop2max'];function Initialize()
{materialsTable=$('materialsTable');if(getParams['type'])
{$('materialTypes').value=getParams['type'];UpdateProperties();}
else
{if(!LoadPageState())
{UpdateProperties();}}
Search();UpdateColUnits(0);UpdateColUnits(1);UpdateColUnits(2);}
function SwitchPage(offset)
{$('pageNum').value=pageNum=pageNum+offset;Search();}
function Search()
{if(timeoutId!==null)
{window.clearTimeout(timeoutId);}
$('loading').show();ExecSearch(Form.serialize('searchForm'));}
function ExecSearch(params)
{lastParams=params;new Ajax.Request(WS_SEARCH_MATS,{method:'post',parameters:params,onSuccess:ProcessResults});}
function ResetForm()
{$('materialTypes').value=0;for(var i=0;i<numDisplayCols;i++)
{$("prop"+i+"name").value=-1;$("prop"+i+"min").value='';$("prop"+i+"max").value='';}
Search();}
function QueueSearch()
{if(timeoutId!==null)
{window.clearTimeout(timeoutId);}
timeoutId=window.setTimeout(Search,2000);}
function ProcessResults(response)
{var result=response.responseJSON;moreResults=result.moreresults;if(moreResults)
{$('nextPage').show();;}
else
{$('nextPage').hide();}
if(pageNum!=0)
{$('prevPage').show();}
else
{$('prevPage').hide();}
materials=result.materials;columns=result.columns;RefreshMaterials();}
function RefreshMaterials()
{var selects=$('prop0name','prop1name','prop2name');var fields=selects.collect(function(s){return(s.value!=-1)?columns[s.value]:-1;});var props=selects.collect(function(s){return FindProperty(s.value);});var numMaterials=materials.length;var rowOffset=(materialsTable.rows[2].cells.length==2)?4:2;for(var i=0;i<numMaterials;i++)
{var material=materials[i];var row=materialsTable.rows[i+rowOffset];var checkbox=new Element("input",{type:"checkbox",id:"chk"+i,value:material[columns["id"]]});checkbox.checked=checkbox.defaultChecked=false;var matName=material[columns["name"]];if(matName.length>39)
{var lastSpace=matName.substring(0,39).lastIndexOf(' ');matName='<span>'+matName.substring(0,lastSpace)+'</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>'+
matName.substring(lastSpace+1)+'</span>';}
else
{matName='<span>'+matName+'</span>';}
row.cells[0].innerHTML='';row.cells[0].appendChild(checkbox);row.cells[0].innerHTML+='&nbsp;<a href="javascript:ShowMaterial('+i+')">'
+matName+'</a>';for(var c=0;c<=2;c++)
{var val="-";if(fields[c]!=-1)
{val=materials[i][fields[c]];if(val===null||val===undefined)
{val="&nbsp;";}
else if(props[c].format)
{val=sprintf(props[c].format,val);}}
row.cells[c+1].innerHTML=val;}
Element.show(row);}
var numRows=materialsTable.rows.length-1;for(var i=numMaterials+rowOffset;i<numRows;i++)
{materialsTable.rows[i].cells[0].innerHTML='';Element.hide(materialsTable.rows[i]);}
$('loading').hide();}
function RefreshColumn(col)
{$('prop'+col+'min').value='';$('prop'+col+'max').value='';UpdateColUnits(col);var select=$("prop"+col+"name");var propertyIndex=(select.value!=-1)?columns[select.value]:-1;var property=FindProperty(select.value);col++;var numRows=materials.length;var rowOffset=(materialsTable.rows[2].cells.length==2)?4:2;for(var r=0;r<numRows;r++)
{var val="-";if(propertyIndex!=-1)
{val=materials[r][propertyIndex];if(val===null||val===undefined)
{val="&nbsp;";}
else if(property.format)
{val=sprintf(property.format,val);}}
materialsTable.rows[r+rowOffset].cells[col].innerHTML=val;}}
function UpdateColUnits(col)
{var selectValue=$("prop"+col+"name").value;var units="";if(selectValue!=-1)
{var property=FindProperty(selectValue);units=property["units"];}
$("prop"+col+"units").innerHTML=units;}
function FindProperty(name)
{for(var i=0;i<properties.length;i++)
{if(properties[i]["name"]==name)
return properties[i];}
return null;}
function UpdateProperties()
{$('pageNum').value=pageNum=0;var numProperties=properties.length;var matType=$('materialTypes').value;var typeParents=[matType];while(matType!=0)
{matType=materialTypes[matType]["parentid"]
typeParents.push(matType);}
var selects=$('prop0name','prop1name','prop2name');var selected=selects.collect(function(s){return(s.selectedIndex!=-1)?s.options[s.selectedIndex].value:null;});selects.each(function(s){s.options.length=0;s.options.add(new Option("Select a Property","-1"));});for(var i=0;i<numProperties;i++)
{if(properties[i]["typeid"]==0||typeParents.member(properties[i]["typeid"]))
{for(var s=0;s<selects.length;s++)
{var option=new Option(properties[i]["displayname"],properties[i]["name"]);if(selected[s]==properties[i]["name"])
option.selected=true;selects[s].options.add(option);}}}}
function ShowMaterial(matNum)
{if(matPanel!==null)
{matPanel.destroy();matPanel=null;}
var material=materials[matNum];var position=YAHOO.util.Dom.getXY(materialsTable.rows[matNum]);matPanel=new YAHOO.widget.Panel("materialPanel",{width:"400px",x:position[0]+100,y:position[1]+15,visible:true,draggable:true,close:true});var name=material[columns["name"]];matPanel.setHeader("<div class='tl'></div><span>Material Details</span><div class='tr'></div>");var bodyHtml='<div class="matProps"><div id="materialPanelName">'+name+'</div><table>';var select=$('prop0name');var numProperties=select.options.length;var r=0;for(var i=0;i<numProperties;i++)
{var propName=select.options[i].value;var val=material[columns[propName]];if(val!==null&&val!==undefined)
{var prop=FindProperty(propName);if(prop.format)
{val=sprintf(prop.format,val);}
bodyHtml+='<tr class="r'+(r%2)+'">';bodyHtml+="<th>"+select.options[i].innerHTML+"</th>";bodyHtml+="<td>"+val+'&nbsp;'+(prop.units?prop.units:'')+"</td>";bodyHtml+="</tr>";r++;}}
bodyHtml+='</table></div>';matPanel.setBody(bodyHtml);matPanel.setFooter('<div class="bl"></div><span></span><div class="br"></div>');matPanel.render(document.body);}
function CompareMaterials()
{var checkboxes=Form.getInputs('searchForm','checkbox');var numCheckboxes=checkboxes.length;var materials=[];for(var i=0;i<checkboxes.length;i++)
{if(checkboxes[i].checked)
materials.push(checkboxes[i].value);}
if(materials.length<=0)
{alert("Please select 1 or more materials to compare.");return;}
var params='m='+materials[0];for(var i=1;i<materials.length;i++)
{params+=','+materials[i];}
params+="&t="+$("materialTypes").value;SavePageState();window.location="../materialcompare?"+params;}
function glossary(element)
{var value=$F(element);var panelWidth=293;var glossaryId=null,panelX;var region=YAHOO.util.Dom.getRegion(element);if(element.substring(0,4)=='prop')
{if(value==-1)
{return;}
var prop=FindProperty(value);glossaryId=prop.glossaryid;panelX=region.left-((panelWidth-(region.right-region.left))/2);}
else if(element=='materialTypes')
{if(value==0)
{return;}
glossaryId=materialTypes[value].glossaryid;panelX=region.left;}
if(glossaryId!==null&&typeof(glossaryId)!='undefined')
{glossaryObj.show({'id':glossaryId},panelX,region.bottom+2,panelWidth);}}
function SavePageState()
{var state={};for(var i=0;i<stateElements.length;i++)
state[stateElements[i]]=$F(stateElements[i]);Cookie.set('materials.php',Object.toJSON(state),1);}
function LoadPageState()
{var stateJson=Cookie.get('materials.php');if(stateJson==null)
{return false;}
var state=stateJson.evalJSON();$('materialTypes').value=state['materialTypes'];UpdateProperties();for(var i=1;i<stateElements.length;i++)
{$(stateElements[i]).value=state[stateElements[i]];}
return true;}