var defaultproperties = eval({"Component Type":null,"Waveguide Size":null,"Dash 1":null,"Port 1 Flange":null,"Port 2 Flange":null,"Port 3 Flange":null,"Port 4 Flange":null,"Alloy":null,"Length 1":null,"Dash 2":null,"Length 2":null,"Dash 3":null,"Angle":null,"Jacket":null,"Dash 4":null,"Number Value 1":null,"Dash 5":null,"Number Value 2":null,"Dash 6":null,"Plating":null,"Paint":null}); var defaultnotes = eval({"Alloy_Notes":"","Angle_Notes":"","Component_Notes":"","Jacket_Notes":"","Length_Notes":"","Number_Notes":"","Paint_Notes":"","Plating_Notes":"","Flange_Notes":"","Waveguide_Notes":""}); var datatypes = eval({"Alloy":"alloy","Angle":"angle","Component Type":"component","Jacket":"jacket","Length 1":"length","Length 2":"length","Number Value 1":"number","Number Value 2":"number","Paint":"paint","Plating":"plating","Port 1 Flange":"flange","Port 2 Flange":"flange","Port 3 Flange":"flange","Port 4 Flange":"flange","Waveguide Size":"waveguide"}); function Model(partnumber) { if(!partnumber) this.reset(); else this.loadSaved(partnumber); } Model.prototype.reset = function() { this.properties = new Clone(defaultproperties); this.requirements = new Clone(defaultproperties); for(property in this.requirements) this.requirements[property] = 'NA'; this.requirements['Component Type'] = 'R'; this.propertydescriptions = new Object(); this.propertynotes = new Clone(defaultnotes); this.quantity = 1; } Model.prototype.getPartNumber = function() { partnumber = ''; //loop through requirements for(field in this.requirements) { switch(this.requirements[field]) { case 'R': if(!this.properties[field]) //is the value null partnumber += '_'; else partnumber += this.properties[field]; break; case 'O': if(this.properties[field] == '-') //is this optional a dash { if(this.assessDash(field)) partnumber += this.properties[field]; } else if(this.properties[field]) { //is the optional value set partnumber += this.properties[field]; } case 'NA': break; } } return partnumber; } Model.prototype.assessDash = function(dashname) { switch (dashname) { case 'Dash 2': if(this.properties['Length 1'] && this.properties['Length 2']) return true; break; case 'Dash 3': if(this.properties['Angle']) return true; break; case 'Dash 6': if(this.properties['Plating'] || this.properties['Paint']) return true; break; } return false; } Model.prototype.setRequirements = function(requirements) { this.requirements = requirements; //set the component type value this.setProperty('Component Type',this.requirements['Component Type']); //enable/disable required/optional/NA fields and tabs for(field in this.requirements) { switch(this.requirements[field]) { case 'R': if(field.indexOf('Dash') !== -1) this.setProperty(field,'-'); else enableField(field); break; case 'O': if(field.indexOf('Dash') !== -1) this.setProperty(field,'-'); else enableField(field); break; case 'NA': if(field.indexOf('Dash') !== -1) { this.setProperty(field,null); disableField(field); } break; //set property value to null and disable default: this.requirements[field] = 'R'; break; //case for Component Type: associate as a required field } } } Model.prototype.isRequiredField = function(property) { //check field requirements based on field value if(this.requirements[property] == 'R') return true; return false; } Model.prototype.setPlatingPaintRequirements = function() { //Plating and Paint are not mutually exclusive //as a pair the fields are optional or required this.requirements['Plating'] = 'R'; this.requirements['Paint'] = 'R'; } Model.prototype.removePlatingPaintRequirements = function() { //Plating and Paint are not mutually exclusive //as a pair the fields are optional or required this.requirements['Plating'] = 'O'; this.requirements['Paint'] = 'O'; } Model.prototype.isOptionalField = function(property) { //check field requirements based on field value if(this.requirements[property] == 'O') return true; return false; } Model.prototype.setProperty = function(property,value) { this.properties[property] = value; } Model.prototype.getProperty = function(property) { return this.properties[property]; } Model.prototype.setNote = function(property,value) { this.propertynotes[property] = value.trim(); } Model.prototype.getNote = function(property) { return this.propertynotes[property]; } Model.prototype.clearNote = function(property) { this.propertynotes[property] = ''; } Model.prototype.getQuantity = function() { if(this.quantity) return this.quantity; return 1; } Model.prototype.setQuantity = function(qty) { this.quantity = qty; } //Object to wrap display of model properties function ModelDescriptions(container) { this.container = container; } ModelDescriptions.prototype.display = function(model) { //clear display container if(this.container.childNodes.length > 0) removeAllElementNodes(this.container); //loop through the model property descriptions and display for(property in model.propertydescriptions) { //if it is empty continue if(!model.propertydescriptions[property]) continue; h3 = document.createElement('h3'); h3.appendChild(document.createTextNode(property + ':')); p = document.createElement('p'); p.appendChild(document.createTextNode(model.propertydescriptions[property])); this.container.appendChild(h3); this.container.appendChild(p); } } ModelDescriptions.prototype.clear = function() { //clear display container if(this.container.childNodes.length > 0) removeAllElementNodes(this.container); } //should couple with ModelDescriptions object function displayPartNumber(partnumber) { partnumbertext.nodeValue = partnumber; } /* Dynamic Actions on Model objects */ function initModelRequirements(componentcode,model,text) { if(componentcode == '-') { alert('Component Type is a Required Field'); document.getElementById('Component Type').focus(); resetBuildForm(model,false); return false; } xmlHttp=GetXmlHttpObject() if(xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { requirements = eval('('+xmlHttp.responseText+')'); if(requirements !== null) { //reset object and fields resetBuildForm(model,false); //flag required values model.setRequirements(requirements); model.propertydescriptions['Component Type'] = text; setTabRequirements(model); displayPartNumber(model.getPartNumber()); swapPropertyImage('Component Type',componentcode,'component'); currentproperties.display(model); promptField(model); quotelist.display(); } } } xmlHttp.open("GET",'includes/requirements.php?code='+componentcode,true); xmlHttp.send(null); } function removeModel(partnumber,partindex) { if(!confirm('Are You Sure you want to remove Model#'+partnumber+' from your quote?')) return; xmlHttp=GetXmlHttpObject(); if(xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { result = eval('('+xmlHttp.responseText+')'); if(!result) { alert('could not remove ' + partnumber); return false; } buildlist = new ListIterator(); quotelist = new QuoteList(buildlist,document.getElementById('quotelist')); loadBuildList(true); document.getElementById('Save').firstChild.data = 'Add to Quote'; document.getElementById('Save').style.backgroundImage = 'url(images/buildimages/btn_add_to_quote.gif)'; return true; } } xmlHttp.open("GET",'includes/remove.php?partnumber=index_'+partindex,true); xmlHttp.send(null); } function editModel(partindex) { buildlist.setCurrent(partindex); loadModelFields(buildlist.getCurrent()); displayPartNumber(buildlist.getCurrent().getPartNumber()); currentproperties.display(buildlist.getCurrent()); setTabRequirements(buildlist.getCurrent()); document.getElementById('Save').firstChild.data = 'Save Changes'; document.getElementById('Save').style.backgroundImage = 'url(images/buildimages/btn_save_changes.gif)'; } function newModel() { if(buildlist.current.completedSave && ( buildlist.current.revertData != buildlist.getCurrent().getPartNumber() || buildlist.current.altered )) { //current model is not in its saved state if(confirm('Would you like to save the current Model#' + buildlist.getCurrent().getPartNumber() + ' into your quote list?')) { saveModel(true); return true; } } if(buildlist.current.completedSave) { //set index to end for insert buildlist.setCurrent(buildlist.length - 1); if(buildlist.current.completedSave) buildlist.insert(new Model()); } else { if(confirm('Would you like to add this new Model number into your quote list?')) { saveModel(true); return true; } } resetBuildForm(buildlist.getCurrent(),true); document.getElementById('Save').firstChild.data = 'Add to Quote'; document.getElementById('Save').style.backgroundImage = 'url(images/buildimages/btn_add_to_quote.gif)'; return true; } function resetModel() { if(!buildlist.current.completedSave) { resetBuildForm(buildlist.getCurrent(),true); } else { c_index = buildlist.index(); buildlist = new ListIterator(); quotelist = new QuoteList(buildlist,document.getElementById('quotelist')); loadBuildList(false,c_index); } } function overwriteModel(createanother,set_index) { var xmlHttp=GetXmlHttpObject(); if(xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { var result = eval('('+xmlHttp.responseText+')'); if(!result) { alert('There was a problem saving your component information. We are sorry for the inconvenience.'); return false; } buildlist = new ListIterator(); quotelist = new QuoteList(buildlist,document.getElementById('quotelist')); loadBuildList(createanother,set_index); if(createanother) { document.getElementById('Save').firstChild.data = 'Add to Quote'; document.getElementById('Save').style.backgroundImage = 'url(images/buildimages/btn_add_to_quote.gif)'; } return true; } } xmlHttp.open("GET",'includes/overwrite.php?model='+encodeURI(json_encode(buildlist.getCurrent()))+'&partnumber=index_'+buildlist.index(),true); xmlHttp.send(null); } function setModelQuantity(set_index) { var xmlHttp=GetXmlHttpObject(); if(xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { var result = eval('('+xmlHttp.responseText+')'); if(!result) { alert('There was a problem saving your component information. We are sorry for the inconvenience.'); return false; } return true; } } xmlHttp.open("GET",'includes/overwrite.php?model='+encodeURI(json_encode(buildlist.getCurrent()))+'&partnumber=index_'+buildlist.index(),true); xmlHttp.send(null); } function saveModel(createanother) { if(!validateModel(buildlist.getCurrent())) return false; //check if we want to overwrite the current model if it has been saved if(buildlist.current.completedSave) { if(buildlist.getCurrent().getPartNumber() == buildlist.current.revertData && !buildlist.current.altered) { alert(buildlist.getCurrent().getPartNumber() + ' has already been saved'); return false; } if(confirm('Are your sure you want to Save Changes to '+ buildlist.current.revertData + '?')) { //overwright the partnumber from the session overwriteModel(createanother,buildlist.index()); return true; } else { //reload buildlist from session c_index = buildlist.index(); buildlist = new ListIterator(); quotelist = new QuoteList(buildlist,document.getElementById('quotelist')); if(!createanother) loadBuildList(false,c_index); else loadBuildList(true); return false; } } var xmlHttp=GetXmlHttpObject(); if(xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; } xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { var result = eval('('+xmlHttp.responseText+')'); if(!result) { alert('There was a problem saving your component information. We are sorry for the inconvenience.'); return false; } if(!createanother) createanother = true; // createanother = confirm('Component Sucessfully added to your quote. Would You like to create another component?'); if(!createanother) { //Should be placed in an object and accessed through view interface document.getElementById('Save').firstChild.data = 'Save Changes'; document.getElementById('Save').style.backgroundImage = 'url(images/buildimages/btn_save_changes.gif)'; } else { document.getElementById('Save').firstChild.data = 'Add to Quote'; document.getElementById('Save').style.backgroundImage = 'url(images/buildimages/btn_add_to_quote.gif)'; } buildlist = new ListIterator(); quotelist = new QuoteList(buildlist,document.getElementById('quotelist')); loadBuildList(createanother); return true; } } xmlHttp.open("GET",'includes/save.php?model='+encodeURI(json_encode(buildlist.getCurrent()))+'&partnumber=index_'+buildlist.index(),true); xmlHttp.send(null); } function validateModel(model) { //make sure all required fields are set for(field in model.requirements) { if(model.isRequiredField(field)) if(!model.properties[field]) { alert(field + ' is a Required Field'); tabgroup.showTab(document.getElementById(field).tab); document.getElementById(field).focus(); return false; } } return true; }