PageSourceSearch

https://www.herronprinting.com/system/2011/instantPricing/instantPricing2.js?v=3.76

js herronprinting.com collected 2026-10-06 21:31:31 UTC 56,638 bytes, 1,211 lines download raw bytes

1var SHOW_PRICING_EDITOR=false;
2var InstantPricingList=new Array();
3function CreateInstantPricing(reftype,refid,container,form,id,precision,multiplierQuestion){
4  var i=InstantPricingList.length;
5  InstantPricingList[i]=new InstantPricing(reftype,refid,container,form,precision,multiplierQuestion);
6  InstantPricingList[i].id=id;  
7}
8function GetInstantPricing(id){
9  for(var i=0; i<InstantPricingList.length; i++){
10    if(InstantPricingList[i].id==id)return InstantPricingList[i];
11  }
12  return null;
13}
14function InstantPricingFormEditMode(on){
15  for(var i=0; i<InstantPricingList.length; i++){
16      if(on){ 
17        InstantPricingList[i].closeQuickQuote();
18      }else{
19        InstantPricingList[i].processQuickQuote();
20      }
21  }
22}
23function InstantPricing(reftype,refid,container,form,precision,multiplierQuestion){
24  this.quoteForm=form;
25  this.pricingInfoAvailable=false;
26  this.content=container; 
27  this.editMode=false;
28  this.refType=reftype;
29  this.refID=refid;  
30  this.floating=null;
31  this.unitPricePrecision=2;
32  if(precision&&precision>0) this.unitPricePrecision=precision;
33  if(multiplierQuestion&&multiplierQuestion>0) this.multiplierQuestion=multiplierQuestion;
34//  this.selectedOptions= new Array();
35//  this.selectedCategories= new Array();
36//  this.priceFormList= new Array();
37  this.data=null;
38//  this.openedOptions = new Array();
39  this.res=null;
40  this.usedElements=new Array();
41  this.showQuote();
42  this.setupForm();  
43}
44
45
46InstantPricing.prototype.processXML=function(xml){  
47  var x, y, z, zz;
48  var i, j, k, kk;
49  var rowIndex;
50//  this.res.editor[0].pricingForm[0].refID[0].node.value=this.refID;
51//  this.res.editor[0].pricingForm[0].refType[0].node.value=this.refType;        
52  this.data=new Object();
53  this.data.minQty=getTagValue(xml,'min_qty');
54  this.DEBUG=(getTagValue(xml,'debug')=="1"?true:false);
55  this.HIDEARROW=(getTagValue(xml,'hidearrow')=="1"?true:false);
56  this.HIDEPANEL=(getTagValue(xml,'hidepanel')=="1"?true:false);
57  
58  if(getTagValue(xml,'pricingmethod')=="marginal")  this.data.marginal=true; else this.data.marginal=false;
59
60  this.data.pricing=new Array();
61  this.data.categories=new Array();
62  x=xml.getElementsByTagName('category');
63  for(i=0;i<x.length;i++){
64    this.data.categories[i]=new Object();
65    this.data.categories[i].id=x[i].getAttribute('id');
66    this.data.categories[i].cumulativeTotal=0;
67    this.data.categories[i].title=getTagValue(x[i],'title');
68    this.data.categories[i].type=getTagValue(x[i],'type'); // "header" or "sub group"
69    var sort1=parseInt(getTagValue(x[i],'sort1'));
70    var sort2=parseInt(getTagValue(x[i],'sort2'));
71    var sort3=parseInt(getTagValue(x[i],'sort3'));
72    var sort=0;
73    this.data.categories[i].question=new Array();    
74    y=x[i].getElementsByTagName('question');
75    if( y.length ) {
76      var quest1 = parseInt( y[0].getAttribute('qid1') );
77      var quest2 = parseInt( y[0].getAttribute('qid2') );
78      var quest3 = parseInt( y[0].getAttribute('qid3') );
79      if( quest1 === this.multiplierQuestion ) sort1 = "N/A";
80      else if( $(':input[data-element_id='+quest1+'][isQty]').length ) sort1 = "N/A";
81      if( isNaN( quest2 ) || quest2 === this.multiplierQuestion ) sort2 = "N/A";
82      else if( $(':input[data-element_id='+quest2+'][isQty]').length ) sort2 = "N/A";
83      if( isNaN( quest3 ) || quest3 === this.multiplierQuestion ) sort3 = "N/A";
84      else if( $(':input[data-element_id='+quest3+'][isQty]').length ) sort3 = "N/A";
85    }
86    if( ! isNaN( sort1 ) ) sort = sort1;
87    if( ! isNaN( sort2 ) ) {
88      if( isNaN( sort1 ) || sort2 < sort ) sort = sort2;
89    }
90    if( ! isNaN( sort3 ) ) {
91      if( ( isNaN( sort1 ) && isNaN( sort2 ) ) || sort3 < sort ) sort = sort3;
92    }
93    this.data.categories[i].sort=sort;
94    for(j=0;j<y.length;j++){
95      this.data.categories[i].question[j]=new Object();
96      this.data.categories[i].question[j].id1=y[j].getAttribute('qid1');
97      this.data.categories[i].question[j].id2=y[j].getAttribute('qid2');
98      this.data.categories[i].question[j].id3=y[j].getAttribute('qid3');
99			this.data.categories[i].question[j].dimen1=y[j].getAttribute('dimen1');
100			this.data.categories[i].question[j].dimen2=y[j].getAttribute('dimen2');
101			this.data.categories[i].question[j].dimen3=y[j].getAttribute('dimen3');
102      this.data.categories[i].question[j].pricing=new Array();
103      z=y[j].getElementsByTagName('pricing');
104      if(z.length>0){
105        this.pricingInfoAvailable=true;
106        this.data.categories[i].pricingInfoAvailable=true;
107      }
108      for(k=0;k<z.length;k++){        
109        this.data.categories[i].question[j].pricing[k]=new Object();
110        this.data.categories[i].question[j].pricing[k].id=z[k].getAttribute('id');
111        this.data.categories[i].question[j].pricing[k].choice1=getTagValue(z[k],'choice1');
112        this.data.categories[i].question[j].pricing[k].choice2=getTagValue(z[k],'choice2');
113        this.data.categories[i].question[j].pricing[k].choice3=getTagValue(z[k],'choice3');
114        this.data.categories[i].question[j].pricing[k].option1=getTagValue(z[k],'option1');
115        this.data.categories[i].question[j].pricing[k].option2=getTagValue(z[k],'option2');
116        this.data.categories[i].question[j].pricing[k].option3=getTagValue(z[k],'option3');
117        this.data.categories[i].question[j].pricing[k].setupCharge=Number(getTagValue(z[k],'setup_charge'));
118        this.data.categories[i].question[j].pricing[k].setupPercent=Number(getTagValue(z[k],'setup_percent'));     
119        this.data.categories[i].question[j].pricing[k].piecesMultiplier=Number(getTagValue(z[k],'pieces_multiplier'));
120        this.data.categories[i].question[j].pricing[k].piecesQuestion=Number(getTagValue(z[k],'pieces_question'));
121        this.data.categories[i].question[j].pricing[k].subPricePerItem=Number(getTagValue(z[k],'sub_price_per_item'));      
122        this.data.categories[i].question[j].pricing[k].breaks=new Array();
123        zz=z[k].getElementsByTagName('break');
124        for(kk=0;kk<zz.length;kk++){
125          this.data.categories[i].question[j].pricing[k].breaks[kk]=new Object();
126          this.data.categories[i].question[j].pricing[k].breaks[kk].qty=Number(zz[kk].getAttribute('qty'));
127          this.data.categories[i].question[j].pricing[k].breaks[kk].value=Number(zz[kk].firstChild.nodeValue);    
128        }
129      }
130    }
131		this.data.colors=new Array();
132  }
133	x=xml.getElementsByTagName('inkcolors');
134	var inkCt=0;
135	for(j=0;j<x.length;j++) {
136		var y=x[j].getElementsByTagName('question');
137		for(k=0;k<y.length;k++) {
138			var z=y[k].getElementsByTagName('color');
139			for(l=0;l<z.length;l++) {
140				this.data.colors[inkCt]=new Object();
141				this.data.colors[inkCt].id=y[k].getAttribute('qid1');
142				this.data.colors[inkCt].element=y[k].getAttribute('qid2');
143				this.data.colors[inkCt].option=getTagValue(z[l],'option');
144				this.data.colors[inkCt].custom=getTagValue(z[l],'custom');
145				this.data.colors[inkCt].setup_charge=getTagValue(z[l],'setup_charge');
146				inkCt++;
147			}
148		}
149	}
150	if(this.data.colors&&this.data.colors.length>0) {
151		this.data.categories[i]={id:"",cumulativeTotal:0,title:"Ink Colors",sort:100,type:"Header",pricingInfoAvailable:true,question:[{id1:"INKS",id2:"",id3:"",dimen1:"",dimen2:"",dimen3:"",pricing:[{id:"",choice1:"",choice2:"",choice3:"",option1:"",option2:"",option3:"",setupCharge:0,setupPercent:0,piecesMultiplier:"",piecesQuestion:"",subPricePerItem:"",breaks:[]}]}]};
152		i++;
153	}
154	if($('input[name=TEMPLATE_Price]').length==1&&$('input[name=TEMPLATE_Price]').val()!=""&&!isNaN($('input[name=TEMPLATE_Price]').val())) { // add template charge for DesignEdit
155		this.pricingInfoAvailable=true;
156		this.data.categories[i]={id:"",cumulativeTotal:0,title:"Design Template",sort:101,type:"Header",pricingInfoAvailable:true,question:[{id1:"",id2:"",id3:"",dimen1:"",dimen2:"",dimen3:"",pricing:[{id:"",choice1:"",choice2:"",choice3:"",option1:"",option2:"",option3:"",setupCharge:($('input[name=TEMPLATE_Price]').val()*1),setupPercent:0,piecesMultiplier:"",piecesQuestion:"",subPricePerItem:"",breaks:[]}]}]};
157		i++;
158	}
159	if($('input[name=TEMPLATE_Images]').length==1&&$('input[name=TEMPLATE_Images]').val()!=""&&!isNaN($('input[name=TEMPLATE_Images]').val())) { // add stock image charge for DesignEdit
160		this.pricingInfoAvailable=true;
161		this.data.categories[i]={id:"",cumulativeTotal:0,className:"DE_Image_Fee",title:"Stock Images",sort:102,type:"Header",pricingInfoAvailable:true,question:[{id1:"",id2:"",id3:"",dimen1:"",dimen2:"",dimen3:"",pricing:[{id:"",choice1:"",choice2:"",choice3:"",option1:"",option2:"",option3:"",setupCharge:($('input[name=TEMPLATE_Images]').val()*1),setupPercent:0,piecesMultiplier:"",piecesQuestion:"",subPricePerItem:"",breaks:[]}]}]};
162	}
163  if( PREFS && PREFS.Show_Job_Ticket_Subtotals ) {
164    this.data.categories.sort( function( a, b ) {
165      if( a.sort > b.sort ) return 1;
166      if( a.sort < b.sort ) return -1;
167      if( a.title > b.title ) return 1;
168      if( a.title < b.title ) return -1;
169      return 0;
170    });
171  }
172  if(this.editMode||SHOW_PRICING_EDITOR){ this.showForm(); SHOW_PRICING_EDITOR=false;}
173  else this.processQuote();
174  $('.wait_for_instant_pricing').removeClass('wait_for_instant_pricing');
175}  
176
177InstantPricing.prototype.showQuote=function(){
178  var instance=this;
179  this.editMode=false;
180  var params=new AjaxFormContent();
181  params.addNameValue("DEBUG",1);
182  params.addNameValue("Ref_Type",this.refType);
183  params.addNameValue("Ref_ID",this.refID);
184  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/product.aj");  
185  if(PREFS.cXML_ID&&PREFS.cXML_ID>0) params.addNameValue('cXML_ID',PREFS.cXML_ID);
186  ajaxPostFunction(params,function(sc,st,rt,rxml){    
187//    ajaxCallFunction("ajax.iml?mdl=instantPricing/product.aj&Ref_Type="+this.refType+"&Ref_ID="+this.refID+"&"+Date(),function(sc,st,rt,rxml){
188        instance.res=new HTMLParse(getTagValue(rxml,'resource'));      
189        instance.processXML(rxml.getElementsByTagName('product')[0]);
190      },
191   "ajax.iml");
192}
193
194InstantPricing.prototype.showQuoteDetail=function(obj){
195  window.scrollTo(0,Geometry.upperLeftOffset(this.content).y);
196}
197
198InstantPricing.prototype.processQuote=function(){
199  var x, y, z;
200  var i, j, k;
201  var rowIndex;
202  var instance=this;
203  this.content.setAttribute("id","quote");  
204  if(this.HIDEPANEL) this.content.style["display"]="none";
205  this.content.innerHTML="";
206  if(this.pricingInfoAvailable){
207    var ct=new HTMLParse(this.content);
208    ct.appendObject(this.res.quote[0],true); 
209    this.data.quantity=ct.quote[0].quantity[0].node; Evt.addEventListener(this.data.quantity,"change",function(event){var ev=new Evt(event);instance.setQuantity(ev.source);},false);
210    Evt.addEventListener(this.data.quantity,"keyup",function(event){var ev=new Evt(event);instance.setQuantity(ev.source);},false);
211    this.data.total=ct.quote[0].total[0].node; Evt.addEventListener(this.data.total,"change",function(){instance.recalculateForm();},false);
212    this.data.totalinput=ct.quote[0].total[1].node;
213    this.data.totalEach=ct.quote[0].totalEach[0].node; Evt.addEventListener(this.data.totalEach,"change",function(){instance.recalculateForm();},false);
214    for(i=0;i<this.data.categories.length; i++){
215      if(this.data.categories[i].pricingInfoAvailable){
216        var catTitle = this.getCategoryName(this.data.categories[i]);
217        var catEl = null;
218        if( catTitle && typeof catTitle === "object" && catTitle.length ) {
219          var ret = [];
220          for( var j = 0; j < catTitle.length; j++ ) {
221            if( ! catEl ) catEl = catTitle[j].id;
222            ret.push( catTitle[j].value.trim() );
223          }
224          catTitle = ret.join( "<br>" );
225        }
226        ct.quote[0].breakdown[0].appendObject(this.res.quoteline[(this.data.categories[i].type=="Header"?0:1)],true);
227        rowIndex=ct.quote[0].breakdown[0].quoteline.length-1;
228        if(this.data.categories[i].type=="Header")  ct.quote[0].breakdown[0].quoteline[rowIndex].title[0].node.innerHTML=catTitle;
229        else ct.quote[0].breakdown[0].quoteline[rowIndex].title[0].node.innerHTML="+ "+this.data.categories[i].title;
230		if(this.data.categories[i].className) ct.quote[0].breakdown[0].quoteline[rowIndex].node.className = this.data.categories[i].className;
231        this.data.categories[i].catTotal=ct.quote[0].breakdown[0].quoteline[rowIndex].value[0].node;
232        this.data.categories[i].catTotal.innerHTML="0";
233        this.data.categories[i].catTotal.removeAttribute( 'data-sub_eid' );
234        if( catEl ) this.data.categories[i].catTotal.setAttribute( 'data-sub_eid', catEl );
235        Evt.addEventListener(this.data.categories[i].catTotal,"change",function(){instance.recalculateForm();},false);
236      }else{
237        this.data.categories[i].catTotal=new Object();
238      }
239    }
240
241    this.processQuickQuote();
242    if(this.quoteForm) this.recalculateForm();
243    this.floating.div.style["display"]="none";  
244  }
245  if(this.floating) this.floating.scroll();    
246}
247
248InstantPricing.prototype.processQuickQuote=function(){
249  if(this.pricingInfoAvailable){
250    var ct=new HTMLParse(this.content);
251    var instance=this;
252    ct.appendObject(this.res.quickquote[0],true);
253    this.quickQuoteDragger=new DragObject(ct.quickquote[0].node);
254    this.data.total2=ct.quickquote[0].total[0].node; Evt.addEventListener(this.data.total2,"change",function(){instance.recalculateForm();},false);
255    ct.quickquote[0].bump[0].node.onclick=function(){instance.showQuoteDetail(this);};
256    var coord=Geometry.upperLeftOffset(ct.quote[0].node);
257    this.floating=new floatingObject(ct.quickquote[0].node, parseInt(coord.x)-300, parseInt(coord.y)-30);
258    this.floating.div.style["display"]="none";  
259  }
260}
261InstantPricing.prototype.closeQuickQuote=function(){
262  if(this.floating){
263    var div=this.floating.div;
264    div.parentNode.removeChild(div);
265  }
266  this.floating=null;
267}
268
269
270InstantPricing.prototype.open=function(evt){
271  this.editMode=true;
272  this.showForm(); 
273}
274
275
276InstantPricing.prototype.loading=function(htmlobj){
277//  for(var i=0; i<this.priceFormList.length; i++){
278//    if(this.priceFormList[i].parent){
279//      this.priceFormList[i].parent.removeChild(this.priceFormList[i]);      
280//    }      
281//  }
282//  this.priceFormList= new Array();
283  htmlobj.node.innerHTML="";
284  htmlobj.appendObject(this.res.loading[0],true);
285   
286//  editor.appendObject(this.res.editor[0].loading[0],true);
287}
288
289InstantPricing.prototype.repositionQuickTotal=function(obj){
290  if(this.floating){ 
291    if(this.HIDEARROW){
292	  this.floating.div.style["display"]="none";
293    }else{
294      if(!obj) obj=this.quoteForm;
295      var coord=Geometry.upperLeftOffset(obj);
296      this.floating.setPos(parseInt(coord.x)-500,parseInt(coord.y)-30); 
297      this.floating.div.style["display"]="";
298	}
299  }
300}
301
302
303InstantPricing.prototype.setupForm=function(form){
304  var instance=this;
305  if(!form) form=this.quoteForm;
306  var i;
307  var inputs=form.getElementsByTagName('input');
308  for(i=0; i<inputs.length; i++){
309    if(inputs[i].getAttribute('Question_ID')>0||inputs[i].getAttribute('isQty')>0){
310      if(inputs[i].type.toLowerCase()=="text")  Evt.addEventListener(inputs[i],"change",function(event){var ev=new Evt(event);instance.recalculateForm(ev.source);},false);
311      else  Evt.addEventListener(inputs[i],"click",function(event){var ev=new Evt(event); instance.recalculateForm(ev.source);},false);
312    }
313    Evt.addEventListener(inputs[i],"focus",function(event){var ev=new Evt(event);instance.repositionQuickTotal(ev.source);},false);
314  }    
315  inputs=form.getElementsByTagName('select');
316  for(i=0; i<inputs.length; i++){
317    if(inputs[i].getAttribute('Question_ID')>0||inputs[i].getAttribute('isQty')>0){
318      Evt.addEventListener(inputs[i],"change",function(event){var ev=new Evt(event);instance.recalculateForm(ev.source);},false);
319    }
320    Evt.addEventListener(inputs[i],"focus",function(event){var ev=new Evt(event);instance.repositionQuickTotal(ev.source);},false);
321  }    
322}
323
324
325
326/******************  Pricing Editor  ***********************/
327
328InstantPricing.prototype.showForm=function(){
329  this.content.setAttribute("id","instantpricingform");
330  this.editMode=true;
331  if(!this.data){
332    return;
333  }  
334  var category,row, i,j,k,x;
335  var pricingOptions;
336  var optionTitle, choiceTitle, oldOptionTitle;
337  var instance=this;
338  var editor=new HTMLParse(this.content);  
339  this.loading(editor);
340  var params=new AjaxFormContent();  
341  params.addNameValue("DEBUG",1);
342  params.addNameValue("Ref_Type",this.refType);
343  params.addNameValue("Ref_ID",this.refID);
344  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/listCategories.aj");  
345  ajaxPostFunction(params,function(sc,st,rt,rxml){    
346    instance.content.innerHTML=rt; editor=new HTMLParse(instance.content);    
347    if(editor.instantPricingCategories[0].instantPricingLine){
348      for(var i=0;i<editor.instantPricingCategories[0].instantPricingLine.length;i++){
349        instance.setupCategory(editor.instantPricingCategories[0].instantPricingLine[i]);
350      }
351      instance.dragger=new DragDropListObject(editor.instantPricingCategories[0].node,function(){instance.sortCategories();});
352    }
353    instance.setupHeader(editor.header[0]);    
354    cat=editor.newInstantPricingLine[0];
355    cat.button[0].node.onclick=function(){instance.addCategory();};
356    cat.title[0].node.onkeypress=function(evt){t=new Evt(evt); if(t.key==13)instance.addCategory();};
357     
358    },
359    "ajax.iml" );
360     
361}
362
363InstantPricing.prototype.setupHeader=function(header){
364  var instance=this;
365  if(header.testmode[0].node.type=="button"){
366      header.testmode[0].node.onclick=function(){instance.changeTestMode()};
367  }
368  if(header.precision){
369      header.precision[0].node.onchange=function(){instance.changePrecision(this.options[this.selectedIndex].value)};    
370  }
371  if(header.pieces_multiplier){
372      header.pieces_multiplier[0].node.onchange=function(){instance.changeMultiplier(this.options[this.selectedIndex].value)};    
373  }
374  if(header.pricing_method){
375      header.pricing_method[0].node.onchange=function(){instance.changePricingMethod(this.options[this.selectedIndex].value)};    
376  }
377}
378
379InstantPricing.prototype.changeTestMode=function(){
380  var params=new AjaxFormContent();
381  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/changeSettings.aj");
382  params.addNameValue("ChangeTestMode",'1');
383  params.addNameValue("Ref_Type",this.refType);
384  params.addNameValue("Ref_ID",this.refID);
385  params.addNameValue("DEBUG",1);
386  var instance=this;
387  ajaxPostFunction(params,function(sc,st,rt,rxml){
388      var editor=new HTMLParse(instance.content);  
389      editor.header[0].node.innerHTML=rt;
390      editor=new HTMLParse(instance.content);  
391      instance.setupHeader(editor.header[0]);
392  },"ajax.iml");
393}
394InstantPricing.prototype.changePrecision=function(set){
395  this.unitPricePrecision=set;
396  var params=new AjaxFormContent();
397  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/changeSettings.aj");
398  params.addNameValue("ChangePrecision",'1');
399  params.addNameValue("IP_Unit_Price_Precision",set);
400  params.addNameValue("Ref_Type",this.refType);
401  params.addNameValue("Ref_ID",this.refID);
402  params.addNameValue("DEBUG",1);
403  var instance=this;
404  ajaxPostFunction(params,function(sc,st,rt,rxml){
405      var editor=new HTMLParse(instance.content);  
406      editor.header[0].node.innerHTML=rt;
407      editor=new HTMLParse(instance.content);  
408      instance.setupHeader(editor.header[0]);
409  },"ajax.iml");
410}
411InstantPricing.prototype.changeMultiplier=function(set){
412  this.multiplierQuestion=set;
413  var params=new AjaxFormContent();
414  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/changeSettings.aj");
415  params.addNameValue("ChangeMultiplier",'1');
416  params.addNameValue("IP_Pieces_Multiplier",set);
417  params.addNameValue("Ref_Type",this.refType);
418  params.addNameValue("Ref_ID",this.refID);
419  params.addNameValue("DEBUG",1);
420  var instance=this;
421  ajaxPostFunction(params,function(sc,st,rt,rxml){
422      var editor=new HTMLParse(instance.content);  
423      editor.header[0].node.innerHTML=rt;
424      editor=new HTMLParse(instance.content);  
425      instance.setupHeader(editor.header[0]);
426  },"ajax.iml");
427}
428InstantPricing.prototype.changePricingMethod=function(set){
429  var params=new AjaxFormContent();
430  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/changeSettings.aj");
431  params.addNameValue("ChangeBreakMethod",'1');
432  params.addNameValue("Ref_Type",this.refType);
433  params.addNameValue("Ref_ID",this.refID);
434  params.addNameValue("IP_Simple_Method",set);  
435  params.addNameValue("DEBUG",1);
436  var instance=this;
437  ajaxPostFunction(params,function(sc,st,rt,rxml){
438      var editor=new HTMLParse(instance.content);  
439      editor.header[0].node.innerHTML=rt;
440      editor=new HTMLParse(instance.content);  
441      instance.setupHeader(editor.header[0]);
442  },"ajax.iml");
443}
444
445
446InstantPricing.prototype.getCategoryBlockByID=function(id){
447  var editor=new HTMLParse(this.content);
448  if(!editor.instantPricingCategories) return null;
449  if(!editor.instantPricingCategories[0].instantPricingLine) return null;
450  for(var i=0; i<editor.instantPricingCategories[0].instantPricingLine.length; i++){
451    if(editor.instantPricingCategories[0].instantPricingLine[i].node.getAttribute('Cat_ID')==id){ 
452         return new HTMLParse(editor.instantPricingCategories[0].instantPricingLine[i].node);
453    }
454  }
455  return null;
456}
457InstantPricing.prototype.getQuestionBlockByID=function(qid){
458  var sp=qid.split(':');
459  var cat=this.getCategoryBlockByID(sp[0]);
460  if(!cat) return null;
461  for(var i=0;i<cat.content[0].questionlist[0].instantPricingQuestion.length;i++){
462    if(cat.content[0].questionlist[0].instantPricingQuestion[i].node.getAttribute('Question_ID')==qid){
463      return new HTMLParse(cat.content[0].questionlist[0].instantPricingQuestion[i].node);
464    }
465  }
466  return null;
467}
468InstantPricing.prototype.getOptionBlockByID=function(vid){
469  var sp=vid.split(':');
470  var question=this.getQuestionBlockByID(sp[0]+":"+sp[1]+":"+sp[2]+":"+sp[3]);
471  if(!question) return null;
472  for(var j=0;j<question.content[0].instantPricingOption.length;j++){
473    if(question.content[0].instantPricingOption[j].node.getAttribute('Value_ID')==vid){
474      return new HTMLParse(question.content[0].instantPricingOption[j].node);
475    }
476  }
477  return null;
478}
479
480InstantPricing.prototype.setupCategory=function(htmlobj,isopen){
481  var instance=this;
482  if(isopen){
483    htmlobj.bump[0].node.onclick=function(){instance.collapseCategory(this.getAttribute('Cat_ID'));};
484    htmlobj.node.className="selectedline";
485  }else{
486    htmlobj.bump[0].node.onclick=function(){instance.expandCategory(this.getAttribute('Cat_ID'));};
487    htmlobj.node.className="unselectedline";
488  }
489  htmlobj.title[0].node.onclick=function(){instance.editCategoryName(this);};
490  htmlobj.button[0].node.onclick=function(){instance.deleteCategory(this.getAttribute('Cat_ID'));};
491}
492InstantPricing.prototype.editCategoryName=function(obj){
493  if(obj.getAttribute('isEditing')!=1){
494    var old=obj.innerHTML;
495    var input=ce('input');
496    input.type="text";
497    input.style["width"]="300px";
498    input.setAttribute("oldValue",old);
499    input.value=old;
500    obj.innerHTML=""; obj.appendChild(input);
501    obj.setAttribute('isEditing',1);
502    input.focus();
503    var instance=this;
504    input.onblur=function(){instance.saveCategoryName(this);};
505  }
506}
507InstantPricing.prototype.saveCategoryName=function(obj){
508  var old=obj.getAttribute("oldValue");
509  var newName=obj.value;
510  var cat=this.getCategoryBlockByID(obj.parentNode.getAttribute('Cat_ID'));
511  obj.parentNode.setAttribute('isEditing',0);
512  obj.parentNode.innerHTML=newName;
513  var instance=this;
514  var params=new AjaxFormContent();  
515  params.addNameValue("DEBUG",1);  
516  params.addNameValue("Ref_Type",this.refType);
517  params.addNameValue("Ref_ID",this.refID);
518  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/changeCategory.aj");  
519  params.addNameValue('OLD_Category',old);
520  params.addNameValue('NEW_Category',newName);
521  ajaxPostFunction(params,function(sc,st,rt,rxml){   },"ajax.iml");
522}
523InstantPricing.prototype.getCategoryName=function(cat){
524  if( ! PREFS || ! PREFS.Show_Job_Ticket_Subtotals || typeof getAnswer !== "function" ) { // function getAnswer is defined in system/2011/js/printing-product.js
525    return cat.title;
526  }
527  var answers = [];
528  if( cat.question.length ) {
529    var q = cat.question[0];
530    for( var i = 1; i < 4; i++ ) {
531      var id = parseInt( q['id'+i] );
532      if( ! isNaN( id ) && id > 0 ) {
533        if( id === parseInt( this.multiplierQuestion ) ) continue; // ignore qty multiplier 
534        if( $(':input[data-element_id="'+id+'"][isQty]').length ) continue; // ignore qty question 
535        var answer = getAnswer( id );
536        if( answer && answer.label ) {
537          if( answer.value && answer.value !== "" ) answers.push( { id: id, value: answer.value, sort: answer.sort } );
538          else if( answer.label !== "" ) answers.push( { id: id, value: answer.label, sort: answer.sort } );
539        }
540      }
541    }
542  }
543  var ret = [];
544  if( answers.length ) {
545    answers.sort( function( a, b ) {
546      if( a.sort > b.sort ) return 1;
547      if( a.sort < b.sort ) return -1;
548      return 0;
549    });
550    for( var i = 0; i < answers.length; i++ ) {
551      if( answers.length === 1 || $.inArray( answers[i].id, this.usedElements ) < 0 ) {
552        this.usedElements.push( answers[i].id );
553        ret.push( answers[i] );
554      }
555    }
556  }
557  if( ret.length ) return ret;
558  else return cat.title;
559}
560InstantPricing.prototype.sortCategories=function(){
561  var editor=new HTMLParse(this.content);
562  var params=new AjaxFormContent();
563  params.addNameValue("DEBUG",1);  
564  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/sortCategories.aj");
565  params.addNameValue("Ref_Type",this.refType);
566  params.addNameValue("Ref_ID",this.refID);  
567  for(var i=0;i<editor.instantPricingCategories[0].instantPricingLine.length;i++){
568    params.addNameValue("CAT_LIST",editor.instantPricingCategories[0].instantPricingLine[i].bump[0].node.getAttribute('Cat_ID'));
569  }
570  ajaxPostFunction(params,function(sc,st,rt,rxml){},"ajax.iml");
571}
572InstantPricing.prototype.addCategory=function(){
573  var instance=this;
574  var params=new AjaxFormContent();
575  var editor=new HTMLParse(this.content);   
576  params.addNameValue("DEBUG",1);  
577  params.addNameValue("Ref_Type",this.refType);
578  params.addNameValue("Ref_ID",this.refID);
579  params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/addCategory.aj");  
580  params.addContent(editor.newInstantPricingLine[0].title[0].node);
581  ajaxPostFunction(params,function(sc,st,rt,rxml){  
582       var newLine=new HTMLParse(rt);
583       instance.setupCategory(newLine.instantPricingLine[0]);
584       editor.newInstantPricingLine[0].title[0].node.value="";
585       editor.instantPricingCategories[0].appendObject(newLine.instantPricingLine[0]);
586       instance.dragger=new DragDropListObject(editor.instantPricingCategories[0].node,function(){instance.sortCategories();});
587    }
588  ,"ajax.iml");
589}
590InstantPricing.prototype.expandCategory=function(cid){
591  var instance=this;
592  var cat=this.getCategoryBlockByID(cid);
593  this.loading(cat.content[0]);    
594  this.setupCategory(cat,true);
595  if(cat){
596    var params=new AjaxFormContent();
597    params.addNameValue("DEBUG",1);  
598    params.addNameValue("Ref_Type",this.refType);
599    params.addNameValue("Ref_ID",this.refID);
600    params.addNameValue("Cat_ID",cid);
601    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/listQuestions.aj");  
602    ajaxPostFunction(params,function(sc,st,rt,rxml){  
603      cat.content[0].node.innerHTML=rt; var editor=new HTMLParse(cat.content[0].node);    
604      if(editor.questionlist[0].instantPricingQuestion){
605        for(var i=0;i<editor.questionlist[0].instantPricingQuestion.length;i++){
606          instance.setupQuestion(editor.questionlist[0].instantPricingQuestion[i])
607        }
608      }
609      editor.newInstantPricingQuestion[0].button[0].node.onclick=function(){instance.addQuestion(this.getAttribute('Cat_ID'));};
610    }
611  ,"ajax.iml");
612  
613  }  
614}
615InstantPricing.prototype.collapseCategory=function(cid){
616  var cat=this.getCategoryBlockByID(cid);
617  if(cat) this.setupCategory(cat);
618}
619
620InstantPricing.prototype.deleteCategory=function(cid){
621  var instance=this;
622  var cat=this.getCategoryBlockByID(cid);
623  if(cat&&confirm("You are about to delete a subtotal group. This action cannot be undone.  Do you want to continue?")){
624    var params=new AjaxFormContent();
625    params.addNameValue("DEBUG",1);  
626    params.addNameValue("Ref_Type",this.refType);
627    params.addNameValue("Ref_ID",this.refID);
628    params.addNameValue("Cat_ID",cid);
629    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/deleteCategory.aj");  
630    ajaxPostFunction(params,function(sc,st,rt,rxml){ 
631         cat.node.parentNode.removeChild(cat.node);
632     }
633    ,'ajax.iml');  
634  }
635}
636
637InstantPricing.prototype.setupQuestion=function(htmlobj,isopen){
638  var instance=this;
639  if(isopen){
640    htmlobj.bump[0].node.onclick=function(){instance.collapseQuestion(this.getAttribute('Question_ID'));};
641    htmlobj.node.className="selectedline";
642  }else{
643    htmlobj.bump[0].node.onclick=function(){instance.expandQuestion(this.getAttribute('Question_ID'));};
644    htmlobj.node.className="unselectedline";
645  }
646  htmlobj.button[0].node.onclick=function(){instance.deleteQuestion(this.getAttribute('Question_ID'));};
647}
648InstantPricing.prototype.addQuestion=function(cid){
649  var instance=this;
650  var cat=this.getCategoryBlockByID(cid);
651  if(cat){
652    var input=cat.content[0].newInstantPricingQuestion[0].title[0].node;
653    var val=input.options[input.selectedIndex].value.split(":");
654    input.removeChild(input.options[input.selectedIndex]);
655    input.selectedIndex=0;
656    var params=new AjaxFormContent();
657    params.addNameValue("DEBUG",1);
658    params.addNameValue("Ref_Type",this.refType);
659    params.addNameValue("Ref_ID",this.refID);
660    params.addNameValue("Cat_ID",cid);    
661    params.addNameValue("Q1_ID",val[0]?val[0]:"");    
662    params.addNameValue("Q2_ID",val[1]?val[1]:"");    
663    params.addNameValue("Q3_ID",val[2]?val[2]:"");            
664    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/addQuestion.aj");  
665    ajaxPostFunction(params,function(sc,st,rt,rxml){ 
666         var question=new HTMLParse(rt);
667         cat.content[0].questionlist[0].appendObject(question.instantPricingQuestion[0]);
668         instance.setupQuestion(question.instantPricingQuestion[0],true);
669         var quest=question.instantPricingQuestion[0].content[0];
670         for(var i=0;i<quest.instantPricingOption.length;i++){
671           instance.setupOption(quest.instantPricingOption[i]);
672         }
673         if(quest.instantPricingOption.length==1) instance.expandOption(quest.instantPricingOption[0].node.getAttribute("Value_ID"));
674       }
675    ,"ajax.iml");   
676  }
677}
678InstantPricing.prototype.expandQuestion=function(qid){
679  var instance=this;
680  var val=qid.split(":");
681  var quest=this.getQuestionBlockByID(qid);
682  this.loading(quest.content[0]);
683  this.setupQuestion(quest,true);
684  if(quest){
685    var params=new AjaxFormContent();
686    params.addNameValue("DEBUG",1);  
687    params.addNameValue("Ref_Type",this.refType);
688    params.addNameValue("Ref_ID",this.refID);
689    params.addNameValue("Cat_ID",val[0]?val[0]:"");    
690    params.addNameValue("Q1_ID",val[1]?val[1]:"");    
691    params.addNameValue("Q2_ID",val[2]?val[2]:"");    
692    params.addNameValue("Q3_ID",val[3]?val[3]:"");            
693    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/listOptions.aj");  
694    ajaxPostFunction(params,function(sc,st,rt,rxml){  
695      quest.content[0].node.innerHTML=rt; var editor=new HTMLParse(quest.content[0].node);    
696      if(editor.instantPricingOption){
697        for(var i=0;i<editor.instantPricingOption.length;i++){
698          instance.setupOption(editor.instantPricingOption[i])
699        }
700        if(editor.instantPricingOption.length==1) instance.expandOption(editor.instantPricingOption[0].node.getAttribute("Value_ID"));
701      }
702    }
703    ,"ajax.iml");  
704  }      
705}
706InstantPricing.prototype.collapseQuestion=function(qid){  
707  var quest=this.getQuestionBlockByID(qid);  
708  this.setupQuestion(quest);
709}
710InstantPricing.prototype.deleteQuestion=function(qid){
711  var instance=this;
712  var val=qid.split(":");
713  var quest=$('[dataname=instantPricingQuestion][Question_ID='+qid+']');
714  if(quest.size()>0&&confirm("You are about to delete pricing information. This action cannot be undone.  Do you want to continue?")){
715    var params=new AjaxFormContent();
716    params.addNameValue("DEBUG",1);  
717    params.addNameValue("Ref_Type",this.refType);
718    params.addNameValue("Ref_ID",this.refID);
719    params.addNameValue("Cat_ID",val[0]?val[0]:"");    
720    params.addNameValue("Q1_ID",val[1]?val[1]:"");    
721    params.addNameValue("Q2_ID",val[2]?val[2]:"");    
722    params.addNameValue("Q3_ID",val[3]?val[3]:"");            
723    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/deleteQuestion.aj");  
724    ajaxPostFunction(params,function(sc,st,rt,rxml){ 
725	     if(!val[0])val[0]='';
726	     if(!val[1])val[2]='';
727	     if(!val[2])val[2]='';
728	     if(!val[3])val[3]='';
729	     $('[dataname=newInstantPricingQuestion][cat_id='+val[0]+'] select[name=IP_Question]')
730		 .append($('<option value="'+val[1]+':'+val[2]+':'+val[3]+'">'+quest.find('[dataname=title]').html()+'</option>'));
731         quest.remove();
732     }
733    ,'ajax.iml');  
734  }
735}
736
737
738InstantPricing.prototype.setupOption=function(htmlobj,isopen){
739  var instance=this;
740  if(isopen){
741    htmlobj.bump[0].node.onclick=function(){instance.collapseOption(this.getAttribute('Value_ID'))};
742    if(htmlobj.title[0].morelink)  htmlobj.title[0].morelink[0].node.onclick=function(){instance.collapseOption(this.getAttribute('Value_ID'));return false;};    
743    htmlobj.node.className="selectedline";
744  }else{  
745    htmlobj.bump[0].node.onclick=function(){instance.expandOption(this.getAttribute('Value_ID'))};
746    if(htmlobj.title[0].morelink)  htmlobj.title[0].morelink[0].node.onclick=function(){instance.expandOption(this.getAttribute('Value_ID'));return false;};
747    htmlobj.node.className="unselectedline";
748  }
749}
750InstantPricing.prototype.expandOption=function(vid){
751  var instance=this;
752  var option=this.getOptionBlockByID(vid);
753  if(option){
754    this.setupOption(option,true);
755    var val=vid.split(":");
756    var val_list=option.node.getAttribute('Value_List').split(":|:");
757    this.loading(option.content[0]);
758    var params=new AjaxFormContent();
759    params.addNameValue("DEBUG",1);  
760    params.addNameValue("Ref_Type",this.refType);
761    params.addNameValue("Ref_ID",this.refID);
762    params.addNameValue("Cat_ID",val[0]?val[0]:"");    
763    params.addNameValue("Q1_ID",val[1]?val[1]:"");    
764    params.addNameValue("Q2_ID",val[2]?val[2]:"");    
765    params.addNameValue("Q3_ID",val[3]?val[3]:"");            
766    params.addNameValue("value1",val_list[0]?val_list[0]:"");            
767    params.addNameValue("value2",val_list[1]?val_list[1]:"");            
768    params.addNameValue("value3",val_list[2]?val_list[2]:"");          
769    params.addNameValue("Value_ID",vid);  
770    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/pricingForm.aj");  
771    ajaxPostFunction(params,function(sc,st,rt,rxml){  
772      option.content[0].node.innerHTML=rt; var editor=new HTMLParse(option.content[0].node);    
773      instance.setupPricing(editor);
774     }
775     ,"ajax.iml");  
776  }      
777}
778InstantPricing.prototype.collapseOption=function(vid){
779  var option=this.getOptionBlockByID(vid);
780  this.setupOption(option);
781}
782
783InstantPricing.prototype.sortPricing=function(htmlobj){
784  var instance=this;
785  for(i=htmlobj.pricingGrid[0].pricingRow.length-2;i>=1; i--){
786     if(htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.value*1==NaN||htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.value=="") htmlobj.pricingGrid[0].removeObject(htmlobj.pricingGrid[0].pricingRow,i);
787  }
788  var br=new Array();
789  var i=htmlobj.pricingGrid[0].pricingRow.length-1;
790  if(htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.value!=""){
791    htmlobj.pricingGrid[0].appendObject(htmlobj.pricingGrid[0].pricingRow[i],true);
792  }
793  br[0]=new Object();
794  br[0].qty=htmlobj.pricingGrid[0].pricingRow[0].startqty[0].node.innerHTML*1;
795  br[0].price=htmlobj.pricingGrid[0].pricingRow[0].priceperitem[0].node.value*1;
796  for(i=1;i<htmlobj.pricingGrid[0].pricingRow.length-1; i++){
797    br[i]=new Object();
798    br[i].qty=htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.value*1;
799    br[i].price=htmlobj.pricingGrid[0].pricingRow[i].priceperitem[0].node.value*1; 
800    htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.onchange=function(){instance.updateQtyBreak(this.getAttribute("Value_ID"));};         
801  }
802  i=htmlobj.pricingGrid[0].pricingRow.length-1;
803  htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.onchange=function(){instance.updateQtyBreak(this.getAttribute("Value_ID"));};         
804  htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.value="";
805  htmlobj.pricingGrid[0].pricingRow[i].endqty[0].node.innerHTML="";  
806  br.sort(function(a,b){return a.qty-b.qty;});  
807  htmlobj.pricingGrid[0].pricingRow[0].startqty[0].node.innerHTML=br[0].qty;
808  htmlobj.pricingGrid[0].pricingRow[0].endqty[0].node.innerHTML="and up";
809  htmlobj.pricingGrid[0].pricingRow[0].priceperitem[0].node.value=Number(br[0].price).minPrecision(2);
810  for(i=1;i<br.length;i++){
811    htmlobj.pricingGrid[0].pricingRow[i].startqty[0].node.value=br[i].qty;
812    htmlobj.pricingGrid[0].pricingRow[i].endqty[0].node.innerHTML="and up";
813    htmlobj.pricingGrid[0].pricingRow[i-1].endqty[0].node.innerHTML="to "+(br[i].qty-1);
814    htmlobj.pricingGrid[0].pricingRow[i].priceperitem[0].node.value=Number(br[i].price).minPrecision(2);    
815  }  
816}
817InstantPricing.prototype.setupPricing=function(htmlobj){
818  var instance=this;
819  if(htmlobj.prPiecesMultiplier)
820    htmlobj.prPiecesMultiplier[0].node.onchange=function(){instance.updateMultiplier(this.getAttribute("Value_ID"),this.options[this.selectedIndex].innerHTML);};
821  htmlobj.button[0].node.onclick=function(){instance.updatePricing(this.getAttribute("Value_ID"));};
822  htmlobj.button[1].node.onclick=function(){instance.clearPricing(this.getAttribute("Value_ID"));};
823  this.sortPricing(htmlobj);
824}
825InstantPricing.prototype.updateQtyBreak=function(vid){
826  var option=this.getOptionBlockByID(vid);
827  this.sortPricing(option.content[0]);
828}
829InstantPricing.prototype.updateMultiplier=function(vid,label){
830  var option=this.getOptionBlockByID(vid);
831  if(option){
832    for(var i=0; i<option.content[0].pricingGrid[0].pricingRow.length; i++){
833      option.content[0].pricingGrid[0].pricingRow[i].qtylabel[0].node.innerHTML=label;
834    }
835  }      
836}
837
838InstantPricing.prototype.updatePricing=function(vid){
839  var option=this.getOptionBlockByID(vid);
840  var instance=this;
841  if(option){
842    var val=vid.split(":");
843    var val_list=option.node.getAttribute('Value_List').split(":|:");    
844    var params=new AjaxFormContent();
845    params.addNameValue("DEBUG",1);  
846    params.addNameValue("Ref_Type",this.refType);
847    params.addNameValue("Ref_ID",this.refID);
848    params.addNameValue("Cat_ID",val[0]?val[0]:"");    
849    params.addNameValue("Q1_ID",val[1]?val[1]:"");    
850    params.addNameValue("Q2_ID",val[2]?val[2]:"");    
851    params.addNameValue("Q3_ID",val[3]?val[3]:"");            
852    params.addNameValue("value1",val_list[0]?val_list[0]:"");            
853    params.addNameValue("value2",val_list[1]?val_list[1]:"");            
854    params.addNameValue("value3",val_list[2]?val_list[2]:"");          
855    params.addNameValue("Value_ID",vid);  
856    params.addContent(option.content[0].prSetupCharge[0].node);
857    params.addContent(option.content[0].prSetupPercent[0].node);
858    if(option.content[0].prPiecesMultiplier) params.addContent(option.content[0].prPiecesMultiplier[0].node);
859    params.addContent(option.content[0].pricingGrid[0].pricingRow[0].priceperitem[0].node); 
860    for(var i=1; i<option.content[0].pricingGrid[0].pricingRow.length-1; i++){
861      params.addNameValue("QTY_BREAK",option.content[0].pricingGrid[0].pricingRow[i].startqty[0].node.value+":"+option.content[0].pricingGrid[0].pricingRow[i].priceperitem[0].node.value);  
862    }
863    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/updatePricing.aj");  
864    this.loading(option.content[0]);
865    ajaxPostFunction(params,function(sc,st,rt,rxml){  
866      option.title[0].morelink[0].status_icon[0].node.src=PREFS.OPC_Version_Path+"instantPricing/images/defined.gif";    
867      option.content[0].node.innerHTML=rt; var editor=new HTMLParse(option.content[0].node);    
868      instance.setupPricing(editor);
869     }
870     ,"ajax.iml");  
871  }      
872}
873InstantPricing.prototype.clearPricing=function(vid){
874  var option=this.getOptionBlockByID(vid);
875  var instance=this;
876  if(option){
877    var val=vid.split(":");
878    var val_list=option.node.getAttribute('Value_List').split(":|:");    
879    var params=new AjaxFormContent();
880    params.addNameValue("DEBUG",1);  
881    params.addNameValue("Ref_Type",this.refType);
882    params.addNameValue("Ref_ID",this.refID);
883    params.addNameValue("Cat_ID",val[0]?val[0]:"");    
884    params.addNameValue("Q1_ID",val[1]?val[1]:"");    
885    params.addNameValue("Q2_ID",val[2]?val[2]:"");    
886    params.addNameValue("Q3_ID",val[3]?val[3]:"");            
887    params.addNameValue("value1",val_list[0]?val_list[0]:"");            
888    params.addNameValue("value2",val_list[1]?val_list[1]:"");            
889    params.addNameValue("value3",val_list[2]?val_list[2]:"");          
890    params.addNameValue("Value_ID",vid);  
891    params.addNameValue("mdl",PREFS.OPC_Version_Path+"instantPricing/updatePricing.aj");  
892    this.loading(option.content[0]);
893    ajaxPostFunction(params,function(s
893c,st,rt,rxml){  
894      option.content[0].node.innerHTML=rt; var editor=new HTMLParse(option.content[0].node);    
895      instance.setupPricing(editor);
896     }
897     ,"ajax.iml");  
898  }      
899}
900
901
902/******************  Calculate Price  ***********************/
903InstantPricing.prototype.setQuantity=function(obj){
904  var form=this.quoteForm;
905  var i,j;
906  var qty=(this.data.quantity.nodeName.toLowerCase()==="span")?Number(this.data.quantity.innerHTML):Number(this.data.quantity.value);
907  if(!(qty>0))qty="";
908  var inputs=form.getElementsByTagName('input');
909	
910  for(i=0; i<inputs.length; i++){
911    if(inputs[i].getAttribute('isQty')>0&&inputs[i].className!="hidden_input"&&$(inputs[i]).is(':visible')){
912      if(inputs[i].type.toLowerCase()=="text") inputs[i].value=qty;
913			else if(inputs[i].value==qty) inputs[i].click();
914    }
915  }    
916  inputs=form.getElementsByTagName('select');
917
918	for(i=0; i<inputs.length; i++){
919    if(inputs[i].getAttribute('isQty')>0&&inputs[i].className!="hidden_input"){
920      for(j=0; j<inputs[i].options.length; j++){
921        if(inputs[i].options[j].value==qty) inputs[i].selectedIndex=j;
922      }
923    }
924  }    
925  this.recalculateForm(obj);
926  if(typeof WeightCalcObj !=='undefined')WeightCalcObj.recalculateForm();
927}
928
929InstantPricing.prototype.getQuestionValue=function(id,def){
930  var val=def;  
931  var found=false;
932  var inputs=this.quoteForm.getElementsByTagName('input');
933	
934  for(i=0; i<inputs.length; i++){
935    if(inputs[i].getAttribute('Question_ID')>0&&inputs[i].getAttribute('Question_ID')==id&&inputs[i].className!="hidden_input"){
936      val=Number(inputs[i].value)*1;      
937      found=true;
938    }    
939  }    
940  if(!found){
941    inputs=this.quoteForm.getElementsByTagName('select');
942		
943    for(i=0; i<inputs.length; i++){
944      if(inputs[i].getAttribute('Question_ID')>0&&inputs[i].getAttribute('Question_ID')==id&&inputs[i].className!="hidden_input"){
945        val=Number(inputs[i].options[inputs[i].selectedIndex].value)*1;      
946        found=true;
947      }            
948    }
949  }    
950  return val;
951}
952
953InstantPricing.prototype.recalculateForm=function(obj){
954  var form=this.quoteForm;
955  this.repositionQuickTotal(obj);
956  var options=new Array();
957  var qty=0;
958	var QTY_FOUND=false;
959  var multiplier=1;  
960  var index=0;
961  var i;
962  var inputs=form.getElementsByTagName('input');
963
964  for(i=0; i<inputs.length; i++){
965    if(inputs[i].getAttribute('Question_ID')>0&&(inputs[i].checked||inputs[i].type.toLowerCase()=="hidden")&&inputs[i].className!="hidden_input"){
966      options[index]=new Object();
967      options[index].id=inputs[i].getAttribute('Question_ID');
968			options[index].option=inputs[i].getAttribute('data-option_id');
969      options[index].choice=inputs[i].value.replace(/\s*$/,'');
970      options[index].type=inputs[i].type.toLowerCase();
971      options[index].type_id=inputs[i].getAttribute('data-type');
972			options[index].override=($(inputs[i].parentNode).find('input.dimension_field:checked').length>0||($(inputs[i].parentNode).find('select.dimension_select').length>0&&$(inputs[i].parentNode).find('select.dimension_select')[0].selectedIndex!=$(inputs[i].parentNode).find('select.dimension_select').find('option').length-1))?0:1;
973			options[index].numeric=(inputs[i].getAttribute('isNumeric')>0)?1:0;
974      index++;
975    } else if(inputs[i].getAttribute('Question_ID')>0&&inputs[i].getAttribute('isNumeric')>0){
976      options[index]=new Object();
977      options[index].id=inputs[i].getAttribute('Question_ID');
978      options[index].option=inputs[i].getAttribute('data-option_id');
979      options[index].choice=inputs[i].value.replace(/\s*$/,'');
980      options[index].type=inputs[i].type.toLowerCase();
981      options[index].type_id=inputs[i].getAttribute('data-type');
982			options[index].override=0;
983			options[index].numeric=1;
984      index++;    
985    }
986    if(inputs[i].getAttribute('isQty')>0&&!QTY_FOUND&&inputs[i].className!="hidden_input"&&$(inputs[i]).is(':visible')){
987      if(inputs[i].type.toLowerCase()!="radio"||inputs[i].checked) {
988				if(!isNaN(Number(inputs[i].value)&&Number(inputs[i].value)!=0)) {
989					qty=Number(inputs[i].value);
990					QTY_FOUND=true;
991				}
992			}
993    }
994    if(inputs[i].getAttribute('Question_ID')>0&&inputs[i].getAttribute('Question_ID')==this.multiplierQuestion){
995      multiplier=Number(inputs[i].value)*1;      
996    }    
997  }    
998  inputs=form.getElementsByTagName('select');
999	
1000  for(i=0; i<inputs.length; i++){
1001    if( inputs[i].getAttribute('Question_ID')>0 && inputs[i].className != "hidden_input" ){
1002      options[index]=new Object();
1003      options[index].id=inputs[i].getAttribute('Question_ID');
1004			options[index].element=inputs[i].options[inputs[i].selectedIndex]&&inputs[i].options[inputs[i].selectedIndex].getAttribute('data-element_id')>0?inputs[i].options[inputs[i].selectedIndex].getAttribute('data-element_id'):'';
1005      options[index].option=inputs[i].options[inputs[i].selectedIndex].getAttribute('data-option_id');
1006      options[index].choice=inputs[i].value.replace(/\s*$/,'');
1007      options[index].type='select'; 
1008      options[index].type_id=inputs[i].getAttribute('data-type');
1009			options[index].override=0;
1010			options[index].numeric=0;
1011      index++;
1012    }
1013    if(inputs[i].getAttribute('isQty')>0&&!QTY_FOUND/*&&(typeof obj=="undefined"||inputs[i]==obj)*/){
1014			if(inputs[i].options[inputs[i].selectedIndex] && !isNaN(Number(inputs[i].options[inputs[i].selectedIndex].value))) {
1015				qty=Number(inputs[i].options[inputs[i].selectedIndex].value);
1016				if($('select[name=Qty]').length>0) $('select[name=Qty]')[0].selectedIndex=inputs[i].selectedIndex;
1017				QTY_FOUND=true;
1018			}
1019    }
1020    if(inputs[i].getAttribute('Question_ID')>0&&inputs[i].getAttribute('Question_ID')==this.multiplierQuestion){
1021      multiplier=Number(inputs[i].options[inputs[i].selectedIndex].value)*1;      
1022    }            
1023  }
1024	if(qty==0) {
1025		if($('span[dataname=quantity]').length==1) {
1026			qty=Number($('span[dataname=quantity]').text());
1027		}
1028	}
1029  if(multiplier<1) multiplier=1; 
1030  this.calculatePricing(qty,options,multiplier);
1031}
1032
1033InstantPricing.prototype.calculatePricing=function(qty,options,multiplier){
1034  if(!multiplier||multiplier<1) multiplier=1;
1035  var subTotal;
1036	if(this.data) {
1037		if(this.data.quantity) this.data.quantity.value= isNaN(qty) ? '' : qty;
1038		if( this.data.total ) this.data.total.innerHTML=0;
1039		if( this.data.total2 ) this.data.total2.innerHTML=0;
1040		if( this.data.totalinput ) this.data.totalinput.value=0;
1041		if( this.data.totalEach ) this.data.totalEach.innerHTML=0;
1042		var i, j, k,x,  breaks;
1043		for(i=0; i<this.data.categories.length; i++){
1044			if(i>0){
1045				 this.data.categories[i].cumulativeTotal=this.data.categories[i-1].cumulativeTotal;    
1046			} else {
1047				this.data.categories[i].cumulativeTotal=0;
1048			}
1049			this.data.categories[i].catTotal.innerHTML=0;
1050			for(j=0; j<this.data.categories[i].question.length; j++){
1051				this.getPricing(this.data.categories[i].question[j],options,i,qty*multiplier);
1052			}
1053			this.data.categories[i].cumulativeTotal+=Number(this.data.categories[i].catTotal.innerHTML);
1054			this.data.total.innerHTML= isNaN( this.data.categories[i].cumulativeTotal.toFixed(2) ) ? '&ndash;.&ndash;&ndash;' : this.data.categories[i].cumulativeTotal.toFixed(2);
1055			this.data.totalinput.value= isNaN( this.data.categories[i].cumulativeTotal.toFixed(2) ) ? '&ndash;.&ndash;&ndash;' : this.data.categories[i].cumulativeTotal.toFixed(2);
1056			this.data.total2.innerHTML= isNaN( this.data.categories[i].cumulativeTotal.toFixed(2) ) ? '&ndash;.&ndash;&ndash;' : this.data.categories[i].cumulativeTotal.toFixed(2);
1057			if(!isNaN(this.data.categories[i].cumulativeTotal.toFixed(2)) && !(PREFS.user_Printshop_Admin || PREFS.user_Printshop_Employee)) $('.quote_action, .actions_gap').css('display','none').addClass('pricingNAhidden');
1058			else $('.pricingNAhidden').css('display','inline').removeClass('pricingNAhidden');
1059		}  
1060		if(qty>0&&this.data.totalEach) this.data.totalEach.innerHTML= isNaN(this.data.total.innerHTML/(qty*multiplier)) ? '&ndash;.&ndash;&ndash;' : (this.data.total.innerHTML/(qty*multiplier)).toFixed(this.unitPricePrecision);
1061		else if( this.data.totalEach ) this.data.totalEach.innerHTML=Number(0).toFixed(this.unitPricePrecision);
1062	}
1063}
1064
1065InstantPricing.prototype.marginalPricing=function(qty,pricing,mult){
1066   var total=0;
1067   var previousBreak=0;
1068   var previousPrice=pricing.subPricePerItem;
1069   total=pricing.subPricePerItem*this.data.minQty*mult;
1070   previousBreak=this.data.minQty;
1071   for(x=0;x<pricing.breaks.length&&qty-previousBreak>0;x++){
1072      if(qty>=pricing.breaks[x].qty){
1073        total+=previousPrice*(pricing.breaks[x].qty-previousBreak-1)*mult;
1074        previousBreak=pricing.breaks[x].qty-1
1075      }else{         
1076        total+=previousPrice*(qty-previousBreak)*mult;
1077        previousBreak=qty;
1078        break;
1079      }
1080      previousPrice=pricing.breaks[x].value; 
1081   }
1082   total+=previousPrice*(qty-previousBreak)*mult;
1083   return total;
1084}
1085
1086InstantPricing.prototype.simplePricing=function(qty,pricing,mult){
1087   var unitPrice=pricing.subPricePerItem;
1088   for(x=0;x<pricing.breaks.length;x++){
1089      if(qty>=pricing.breaks[x].qty) unitPrice=pricing.breaks[x].value; 
1090   }
1091   return qty*unitPrice*mult;
1092}
1093
1094
1095InstantPricing.prototype.getPricing=function(question,options,cindex,qty){
1096  var multiplier, qty1;
1097  var value1=""; var value2=""; var value3="";
1098  var i,j,process,match,numericPricingValue;
1099  var pricing=null;
1100	var colorCharge=0;
1101  var subTotal=Number(this.data.categories[cindex].catTotal.innerHTML);
1102  for(i=0; i<question.pricing.length; i++){
1103     numericPricingValue=1;
1104     pricing=question.pricing[i];
1105     process=true;
1106     if(question.id1>0||pricing.option1!=""||pricing.choice1!=""){
1107       match=false;
1108       for(j=0;j<options.length;j++){
1109         if(options[j].id==question.id1&&options[j].numeric!=1&&((pricing.option1!=""&&pricing.option1==options[j].option)||pricing.choice1==options[j].choice.replace(/\s*$/,''))){
1110					 match=true; 
1111					 break; 
1112				 }
1113         if(options[j].id==question.id1&&(pricing.choice1=="Custom"||pricing.choice1=="Custom Dimensions"||pricing.choice1=="")&&(options[j].type=="text"||(options[j].type=="hidden"&&options[j].numeric==1))){
1114					 if(options[j].type_id!=19||question.dimen1=="square"||options[j].override==1) {
1115						 match=true; 
1116						 numericPricingValue=Number(options[j].choice); 
1117						 break;
1118					 }
1119				 }
1120            // match numeric input fields
1121       }
1122       if(!match) process=false;
1123     }
1124     if(process&&(question.id2>0||pricing.option2!=""||pricing.choice2!="")){
1125       match=false;
1126       for(j=0;j<options.length;j++){
1127         if(options[j].id==question.id2&&options[j].numeric!=1&&((pricing.option2!=""&&pricing.option2==options[j].option)||pricing.choice2==options[j].choice.replace(/\s*$/,''))){
1128					 match=true; 
1129					 break; 
1130				 }
1131         if(options[j].id==question.id2&&(pricing.choice2=="Custom"||pricing.choice2=="Custom Dimensions"||pricing.choice2=="")&&(options[j].type=="text"||(options[j].type=="hidden"&&options[j].numeric==1))){
1132					 var cont=true;
1133					 if(options[j].type_id!=19||question.dimen2=="square"||options[j].override==1) {
1134						 match=true; 
1135						 numericPricingValue=numericPricingValue*Number(options[j].choice); 
1136						 break;
1137					 }
1138				 }
1139       }
1140       if(!match) process=false;
1141     }
1142     if(process&&(question.id3>0||pricing.option3!=""||pricing.choice3!="")){
1143       match=false;
1144       for(j=0;j<options.length;j++){
1145         if(options[j].id==question.id3&&options[j].numeric!=1&&((pricing.option3!=""&&pricing.option3==options[j].option)||pricing.choice3==options[j].choice.replace(/\s*$/,''))){
1146					 match=true; 
1147					 break; 
1148				 }
1149         if(options[j].id==question.id3&&(pricing.choice3=="Custom"||pricing.choice3=="Custom Dimensions"||pricing.choice3=="")&&(options[j].type=="text"||(options[j].type=="hidden"&&options[j].numeric==1))){
1150					 if(options[j].type_id!=19||question.dimen3=="square"||options[j].override==1) {
1151						 match=true; 
1152						 numericPricingValue=numericPricingValue*Number(options[j].choice); 
1153						 break;
1154					 }
1155				 }
1156
1157       }
1158       if(!match) process=false;
1159     }
1160			if(process&&this.data.colors.length>0&&question.id1=="INKS") {
1161				for(j=0;j<options.length;j++) {
1162					for(k=0;k<this.data.colors.length;k++) {
1163						if(options[j].id==this.data.colors[k].id&&options[j].hasOwnProperty('element')&&options[j].element==this.data.colors[k].element&&(options[j].hasOwnProperty('option')&&options[j].option!=""&&(options[j].option==this.data.colors[k].option||(this.data.colors[k].option==0&&options[j].option!=this.data.colors[k].custom)))) {
1164							colorCharge+=parseFloat(this.data.colors[k].setup_charge*1);
1165						}
1166					}
1167				}
1168				if(colorCharge==0) $(this.data.categories[cindex].catTotal).closest('tr').addClass('empty-subtotal').hide();
1169				else $(this.data.categories[cindex].catTotal).closest('tr').removeClass('empty-subtotal').css({"display":"table-row"});
1170			}
1171     if(process){
1172          multiplier=1;
1173          qty1=qty;
1174          if(pricing.piecesMultiplier>0){ multiplier=this.getQuestionValue(pricing.piecesMultiplier,1); }
1175          if(pricing.piecesQuestion>0){ qty1=this.getQuestionValue(pricing.piecesQuestion,0); }
1176          subTotal=subTotal+pricing.setupCharge;
1177					subTotal=subTotal+colorCharge;
1178          subTotal=subTotal+pricing.setupPercent*this.data.categories[cindex].cumulativeTotal/100;
1179          if(this.data.marginal)  subTotal=subTotal+this.marginalPricing(qty1*multiplier,pricing,numericPricingValue);
1180          else subTotal=subTotal+this.simplePricing(qty1*multiplier,pricing,numericPricingValue);
1181     }
1182  }
1183	this.data.categories[cindex].catTotal.innerHTML= isNaN( subTotal ) ? '&ndash;.&ndash;&ndash;' : subTotal.toFixed(2);
1184  if( isNaN( subTotal ) || subTotal === 0 ) $(this.data.categories[cindex].catTotal).closest('tr').addClass('empty-subtotal');
1185  else $(this.data.categories[cindex].catTotal).closest('tr').removeClass('empty-subtotal');
1186}
1187
1188/* added by Carl 8/14/13 - needed so qty dropdowns work in tandem with the corresponding qty dropdown in the quote box - 
1189	 This had been handled elsewhere but was causing people to have to reselect a quantity every time they changed another field.
1190	 See the commented out portion of line 868 above. The line starts "if(inputs[i].getAttribute('isQty')>0..."  */
1191	 
1192$(document).ready(function() {
1193	$(document)
1194		.on('change','select[isQty=1]',function(e) {
1195			if( ! e.triggered ) {
1196				var index=$(this).prop('selectedIndex');
1197				var isIPBox=$(this).closest('#quote').length==1;
1198				$('select[isQty=1]').each(function() {
1199					$(this).prop('selectedIndex',index);
1200					if(($(this).closest('#quote').length==1&&!isIPBox)||($(this).closest('#quote').length==0&&isIPBox)) {
1201						for(var i=0; i<InstantPricingList.length; i++){
1202							InstantPricingList[i].recalculateForm($(this));
1203						}
1204					}
1205					if( isIPBox && $(this).is( '[data-dependencies]' ) ) {
1206						$(this).trigger( $.Event( 'change', { triggered: true } ) );
1207					}
1208				});
1209			}
1210  });
1211});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.