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) ) ? '–.––' : this.data.categories[i].cumulativeTotal.toFixed(2); 1055 this.data.totalinput.value= isNaN( this.data.categories[i].cumulativeTotal.toFixed(2) ) ? '–.––' : this.data.categories[i].cumulativeTotal.toFixed(2); 1056 this.data.total2.innerHTML= isNaN( this.data.categories[i].cumulativeTotal.toFixed(2) ) ? '–.––' : 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)) ? '–.––' : (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 ) ? '–.––' : 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.