Quote.prototype.romcalc = function(){
    //alert('dbg: romcalc');
    if (this.checkinputs() === false) {
        return;
    }
    if (this.M_drop === 0 || this.M_width === 0 || this.M_fabric <= 0) {
        M_quote = 0;
        return 0;
    }
    var widthft = sceiling(this.M_width / 30, 0.5);
    var dropft = sceiling(this.M_drop / 30, 0.5);
    var sqft = widthft * dropft;
    this.M_labourprice = sqft * 5.50;
    this.M_labourprice = this.M_labourprice * 1.10 * 1.10 * 1.10 * 1.15;// this is where you set the labour price ,updated feb08
    this.M_labourprice=this.M_labourprice*1.05;//july09
    if (this.M_style == 62) {
        this.M_labourprice = this.M_labourprice * 1;//10% premium removed oct07
    }
    if (this.M_interlining == 1) {
        this.M_labourprice = this.M_labourprice + 3 * sqft;
        interliningcost = 4;
    }
    else {
        interliningcost = 0;
    }
    verticalrepeat = vertrep(this.M_fabric);
    if (this.M_family === 0 && verticalrepeat > 0) {
        this.M_patterndrop = Math.round(this.M_drop / verticalrepeat + 0.5) * verticalrepeat;
    }
    else {
        this.M_patterndrop = this.M_drop;
    }
    if (this.M_width > 265) {
        this.M_fabriclength = this.M_patterndrop * 3;
        numwidths = 3;
    }
    else 
        if (this.M_width > 128) {
            this.M_fabriclength = this.M_patterndrop * 2;
            numwidths = 2;
        }
        else {
            this.M_fabriclength = this.M_patterndrop;
            numwidths = 1;
        }
    this.M_fabriclength = Math.max(sceiling(this.M_fabriclength, 10), 50);
    var fabriccost = fabcost(this.M_fabric);
    this.M_fabriclength = this.M_fabriclength + 20 * numwidths;
    this.M_lininglength = sceiling(this.M_drop * numwidths, 10);
    var pocketallowance = 0.1;
    switch (this.M_lining) {
        case 1:
            liningcost = 3.50;
            this.M_lininglength = this.M_lininglength * (1 + pocketallowance);
            break;
        case 2:
            liningcost = 5.50;
            this.M_lininglength = this.M_lininglength * (1 + pocketallowance);
            break;
        case 3:
            liningcost = 0;
            this.M_fabriclength = this.M_fabriclength * (1 + pocketallowance);
            break;
    }
    this.M_fabricprice = this.M_fabriclength * fabriccost / 100;
    //Add'l Features
    switch (this.M_feature) {
        case 1:
            this.M_labourprice = this.M_labourprice + widthft * 6;
            break;//Shaped Bottom
        case 2:
            this.M_labourprice = this.M_labourprice + widthft * 6;
            break;//Bottom Eyelet Punched Bottom
        case 3:
            break;//Tab Top
        case 11:
            fablen = 0.5 * numwidths;
            if ((this.M_featurefabric != this.M_fabric) && (this.M_featurefabric > 0)) {
                this.M_labourprice = this.M_labourprice + widthft * 7;
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_featurefabric);
            }
            else {
                this.M_labourprice = this.M_labourprice + widthft * 6;
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_fabric);
            }
            break;
        case 21:
            this.M_labourprice = this.M_labourprice + 1.5 * sceiling(this.M_width, 10) / 30;
            fablen = (Math.max(sceiling(this.M_featuresize + 10, 10), 50) * numwidths) / 100;
            if ((this.M_featurefabric != this.M_fabric) && (this.M_featurefabric > 0)) {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_featurefabric);
            }
            else {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_fabric);
            }
            break;//Border (bottom only)
        case 22:
            this.M_labourprice = this.M_labourprice + 1.5 * (sceiling(this.M_drop, 10) / 30 * 2 * (1 + pocketallowance) + sceiling(this.M_width, 10) / 30) + 8;
            fablen = (this.M_drop + 10 + (this.M_featuresize + 10) * numwidths) / 100;
            if (this.M_featurefabric != this.M_fabric && this.M_featurefabric > 0) {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_featurefabric);
            }
            else {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_fabric);
            }
            break;//Border (sides and bottom)
        case 23:
            this.M_labourprice = this.M_labourprice + 1.5 * (sceiling(this.M_drop, 10) / 30 * 2 * (1 + pocketallowance));
            fablen = (this.M_drop + 10) / 100;
            if (this.M_featurefabric != this.M_fabric && this.M_featurefabric > 0) {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_featurefabric);
            }
            else {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_fabric);
            }
            break; //Border (Sides Only)
        case 24:
            this.M_labourprice = this.M_labourprice + 1.5 * sceiling(this.M_width, 10) / 30;
            fablen = ((this.M_featuresize + 10) * numwidths) / 100;
            if (this.M_featurefabric != this.M_fabric && this.M_featurefabric > 0) {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_featurefabric);
            }
            else {
                this.M_fabricprice = this.M_fabricprice + fablen * fabcost(this.M_fabric);
            }
            break; //Horizontal Band
    }
    this.M_labourprice = this.M_labourprice;
    //lining
    this.M_lininglength = this.M_lininglength + 10;
    this.M_liningprice = this.M_lininglength * liningcost / 100;
    this.M_interlininglength = this.M_lininglength;
    this.M_interliningprice = this.M_interlininglength * interliningcost / 100;
    //final calcs
    this.M_quote = sround(this.M_labourprice + this.M_liningprice + this.M_interliningprice + this.M_fabricprice + this.setupcharge, 0.01);
    this.M_vat = sround(this.vatrate * (this.M_quote), 0.01);
    this.M_quote = this.M_quote + this.M_vat;
    this.M_quote = sround(this.M_quote, 0.01);
    this.M_calc = 'PARAMETERS\nFabric Length  ' + numstr(this.M_fabriclength);
    this.M_calc = this.M_calc + '\nLining Length  ' + numstr(this.M_lininglength);
    this.M_calc = this.M_calc + '\nPRICE BREAKDOWN:';
    this.M_calc = this.M_calc + '\nLabour         ' + numstr(this.M_labourprice) + '  (' + numstr(sqft) + ' sqft x ' + numstr(this.labourrate) + ' x ( 1 + ' + numstr(this.M_pocktype) + ' x ' + numstr(this.cascadepremium) + ') )';
    this.M_calc = this.M_calc + '\nLining Fabric  ' + numstr(this.M_liningprice);
    this.M_calc = this.M_calc + '\nInterLining Fabric' + numstr(this.M_interliningprice);
    this.M_calc = this.M_calc + '\nMain Fabric    ' + numstr(this.M_fabricprice) + '  (' + numstr(this.M_fabriclength / 100) + 'm x ' + numstr(fabriccost) + ')';
    this.M_calc = this.M_calc + '\nSetup          ' + numstr(this.setupcharge);
    if (this.M_vat > 0) {
        this.M_calc = this.M_calc + '\nVAT            ' + numstr(this.M_vat);
    }
    this.M_calc = this.M_calc + '\nTOTAL BLIND    ' + numstr(this.M_quote) + '\n';
    //alert('dbg: romcalc completed successfully');
    return this.M_quote;
};
Quote.prototype.updateromform = function(form){
    //alert ('dbg:updateromform');
    form.M_prodtype.value = this.M_prodtype;
    updatefabricfields(form, this.M_fabric);
    updatefabricthumb(form, this.M_fabric);
    form.M_fabric.value = this.M_fabric;
    form.M_width.value = numstr(this.M_width, false);
    form.M_drop.value = numstr(this.M_drop, false);
    form.M_style.value = this.M_style;
    form.M_config.value = this.M_config;
    form.M_family.value = this.M_family;
    form.M_lining.value = this.M_lining;
    form.M_interlining.value = this.M_interlining;
    form.M_fitting.value = this.M_fitting;
    this.M_feature = parseInt(this.M_feature, 10);
    if (form.M_feature !== undefined) {
        form.M_feature.value = this.M_feature;
    }
    if (this.M_style == 62) {
        form.stylegif.src = "cascade.GIF";
    }
    else {
        form.stylegif.src = "regular.GIF";
    }
    switch (this.M_feature) {
        case 1:
            form.featgif.src = 'shaped.GIF';
            break;
        case 2:
            form.featgif.src = 'eyelet.GIF';
            break;
        case 3:
            form.featgif.src = 'tabtop.GIF';
            break;
        case 11:
            form.featgif.src = 'zigzag.GIF';
            break;
        case 21:
            form.featgif.src = 'bot.GIF';
            break;
        case 22:
            form.featgif.src = 'botsides.GIF';
            break;
        case 23:
            form.featgif.src = 'sides.GIF';
            break;
        case 24:
            form.featgif.src = 'band.GIF';
            break;
        case 0:
            form.featgif.src = 'featblank.GIF';
            break;
        default:
            form.featgif.src = 'featblank.GIF';
            break;
    }
    if (vertrep(this.M_fabric) > 0) {
        reveal(form.M_family, 1);
    }
    else {
        hide(form.M_family, 1);
    }
    if (form.M_featurefabric !== undefined && form.M_feature !== undefined) {
        form.M_featurefabric.value = this.M_featurefabric;
        form.M_featuresize.value = numstr(this.M_featuresize, false);
        updatefeaturefabricfields(form, this.M_featurefabric);
        updatefeaturefabricthumb(form, this.M_featurefabric);
        switch (this.M_feature) {
            case 11:
                form.featurefabriclabel.value = "Bottom Fabric:";
                break;
            case 21:
            case 22:
            case 23:
                form.featuresizelabel.value = "Border Width (cm):";
                form.featurefabriclabel.value = "Border Fabric:";
                break;
            case 24:
                form.featuresizelabel.value = "Horiz Band width (cm):";
                form.featurefabriclabel.value = "Band Fabric:";
                break;
            default:
                form.featuresizelabel.value = "Feature Width (cm):";
                form.featurefabriclabel.value = "Feature Fabric:";
        }
        //alert ('dbg:updateromform - setting feature hide and reveals'+this.M_feature);
        if (this.M_feature > 10 && this.M_feature < 30) {
            reveal(form.M_featurefabric, 1);
            reveal(form.featurefabricrange, 1);
            if (this.M_featurefabric > 0) {
                reveal(form.featurefabricthumb, 1);
            }
            reveal(form.featureshortbox, 1);
            reveal(form.featurefabriclabel, 1);
            if (this.M_feature != 11) {
                reveal(form.M_featuresize, 1);
                reveal(form.featuresizelabel, 1);
            }
        }
        else {
            hide(form.M_featurefabric, 1);
            hide(form.featurefabricrange, 1);
            hide(form.featurefabricthumb, 1);
            hide(form.featureshortbox, 1);
            hide(form.featurefabriclabel, 1);
            if (this.M_feature != 11) {
                hide(form.M_featuresize, 1);
                hide(form.featuresizelabel, 1);
            }
        }
    }
    //alert ('dbg:updateromform - going to calculate');
    this.romcalc();
    form.M_quote.value = numstr(this.M_quote, true);
    //alert ('dbg:updateromform completed successfully');
};
Quote.prototype.setromlining = function(lining, form){
    this.M_lining = parseInt(lining, 10);
    this.updateromform(form);
};
Quote.prototype.setrominterlining = function(interlining, form){
    this.M_interlining = parseInt(interlining, 10);
    this.updateromform(form);
};
Quote.prototype.setromconfig = function(config, form){
    this.M_config = parseInt(config, 10);
    this.updateromform(form);
};

Quote.prototype.setromfeature = function(feature, form){
    //alert('dbg: setromfeature');
    if (this.checkstylefeature(this.M_style, feature) === true) {
        this.M_feature = parseInt(feature, 10);
    }
    this.updateromform(form);
};
Quote.prototype.setromstyle = function(style, form){
    if (this.checkstylefeature(style, this.M_feature) === true) {
        this.M_style = parseInt(style, 10);
    }
    this.updateromform(form);
};
Quote.prototype.setromfabric = function(fabric, form){
    //alert ('setromfabric');
    this.M_fabric = parseInt(fabric, 10);
    this.updateromform(form);
};
Quote.prototype.setromfeaturefabric = function(featurefabric, form){
    //alert('dbg:setromfeaturefabric');
    this.M_featurefabric = parseInt(featurefabric, 10);
    this.updateromform(form);
};
Quote.prototype.setromfeaturesize = function(featuresize, form){
    //alert('dbg:setromfeaturesize '+featuresize);
    if (parseFloat(featuresize) > 20) {
        alert('Feature size must not exceed 20cm, check your inputs');
    }
    else {
        this.M_featuresize = parseFloat(featuresize);
    }
    this.updateromform(form);
};
Quote.prototype.setromwidth = function(width, form){
    if (form === null) {
        alert('Error: Null form in setwidth');
    }
    width = parseFloat(width);
    if (isNaN(width)) {
        width = 0;
    }
    if (this.checkwidth(width) === true) {
        this.M_width = width;
    }
    this.updateromform(form);
};
Quote.prototype.setromdrop = function(drop, form){
    if (form === null) {
        alert('Error: Null form in setdrop');
    }
    drop = parseFloat(drop);
    if (isNaN(drop)) {
        drop = 0;
    }
    if (this.checkdrop(drop) === true) {
        this.M_drop = drop;
    }
    this.updateromform(form);
};
Quote.prototype.setromfamily = function(family, form){
    this.M_family = parseInt(family, 10);
    this.updateromform(form);
};
Quote.prototype.setromfitting = function(fitting, form){
    this.M_fitting = parseInt(fitting, 10);
    this.updateromform(form);
};
