    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, "");
    };
    function MXferClass() {
        this.includeVars();
    }

    MXferClass.prototype.GotoCurrentCart = function() {
        this.SubmitMXfer(encodeURI("<Materials/>"), GetUId());
    };

    MXferClass.prototype.AddVSItemToCart = function(sku) {
    //alert('called addvsitemtocart');

        // parse query string and set value to areaid, productid and qty attribute
        // and call SubmitSingleXfer()
        // var areaId = getQueryVariable('labelid');
        // var productId = getQueryVariable('productid');
        // var qty = getQueryVariable('qty');
        var frmName = "form_" + sku;
        var frm = document.getElementById(frmName);
        if (typeof (frm) != "undefined") {
            frm = jQuery(frm);
        }
        if (frm.length == 1) {
            var areaId = frm.children("input[name='labelid']").val();
            var productId = frm.children("input[name='productid']").val();
            var qty = jQuery("form[id=" + frmName + "] * input[name='qty']").val()
            if (typeof (qty) == "undefined") {
                qty = "1";
            }
            var sMaterial = this.BuildMaterialNode(productId, areaId, qty);
            if (sMaterial != "") {
                var sXML = element("Materials", sMaterial, "");
                sXML = encodeURI(sXML);
                this.SubmitMXfer(sXML, GetUId());
            }
            else {
                alert('error building materials');
            }
        }
        else {
            alert('Fail to add item ' + sku + ' to shopping cart, please re-enter.');
        }
    };
    
    MXferClass.prototype.BuildMaterials = function(materialNodes) {
        var materials = "";
        if (materialNodes != "") {
            var materials = element("Materials", materialNodes, "");
            materials = encodeURI(materials);
        }
        return materials;
    };
        
    MXferClass.prototype.SubmitMXfer = function(MXferDoc, UId) {
        //alert('submitxfer called');
        if (MXferDoc != "") {
            var sXML = "";
            var newform = document.createElement("form");
            newform.id = "submissionform";
            var e1 = document.createElement("input");
            e1.id = "MXferDoc";
            e1.name = e1.id;
            e1.value = MXferDoc;
            newform.appendChild(e1);
            e1 = document.createElement("input");
            e1.id = "fldLang";
            //e1.value = MXferDoc;
            newform.appendChild(e1);
            e1 = document.createElement("input");
            e1.id = "productBuyUid";
            e1.name = e1.id;
            e1.value = UId;
            newform.appendChild(e1);
            e1 = document.createElement("input");
            e1.id = "forward";
            e1.name = e1.id;
            e1.value = "multipleitemtransfer";
            newform.appendChild(e1);
            e1 = document.createElement("input");
            e1.id = "destPage";
            e1.name = e1.id;
            e1.value = "product";
            newform.appendChild(e1);
            newform.style.display = "none";
            document.body.appendChild(newform);
            var PriceCode = Newport.pricecode;
            var pathEAX = Newport.eaxpath;
            newform.method = "POST";
            if (PriceCode == "US" || PriceCode === null || PriceCode=="CA") {
                //submit to SAP cart.
                newform.action = pathEAX;
                newform.submit();
            }
            else {
                //submit to SAP cart.
                newform.action = Newport.offline_cart_add_url;
                newform.submit();
            }
        }
        else {
            alert('Please add item to cart with quantity');
        }
    };

    //returns calling source url, up to first "/" past double "//"'s
    MXferClass.prototype.domainfrommatchingsrc = function(topelement, src) {
        //document.write("*");
        for (var i = 0; i < topelement.childNodes.length; i++) {
            var z = topelement.childNodes[i];
            if (z.nodeName != "SCRIPT") {
                if (z.hasChildNodes()) {
                    var test = this.domainfrommatchingsrc(z, src);
                    if (test != '') {
                        return test;
                    }
                }
            }
            else {
                var l = z.src.toLowerCase();
                //document.write(l);
                if (l.length > src.length + 1) {
                    //test if filename matches
                    if (l.substring(l.length - src.length - 1) == "/" + src.toLowerCase()) {
                        var rx = new RegExp("(\[a-zA-Z]+):(\d+)?//[^/]+/");
                        var result = z.src.match(rx);
                        if (result === null) {
                            return "/";
                        }
                        else {
                            return result[0];
                        }
                    }
                }
            }
        }
        return '';
    };

    MXferClass.prototype.includeVars = function() {
        if (typeof (Newport) == "undefined" || typeof ("Newport.application_root_url") == "undefined") {
            var rootdomain = domainfrommatchingsrc(document, "mxfer.js");
            var script_filename = rootdomain + "virtual/js-global.aspx?r=" + Math.random();
            var html_doc = document.getElementsByTagName('head').item(0);
            if (typeof (html_doc) == "undefined") {
                html_doc = document.body;
            }
            var js = document.createElement('script');
            js.setAttribute('language', 'javascript');
            js.setAttribute('type', 'text/javascript');
            js.setAttribute('src', script_filename);
            html_doc.appendChild(js);
        }
        //alert("includevars called.");
    };

    MXferClass.prototype.BuildMaterialNode = function(sItemID, areaId, qty) {
        var nodeMaterial = "";
        //var txtItem = Ext.get(eleText);
        var sElement = "";
        // build xml nodes
        //var areaId = txtItem.getAttributeNS("", "areaId");
        if (IsNumeric(qty) > 0 && qty != "0") {
            sElement += element("Name", sItemID, "") + "\n";
            sElement += element("AreaID", areaId, "") + "\n";
            sElement += element("Quantity", qty, "") + "\n";
            nodeMaterial = element("Material", sElement, "") + "\n";
            sElement = "";
        }
        return nodeMaterial;
    };


    var MXfer;

    jQuery(document).ready(function() {
        MXfer = new MXferClass;
        //alert("MXfer created.");
    }
    )

