function getObj(f) {
        this.oForm = f;
        this.oUppht = f.upperheight;
        this.oFont = f.font;
        this.oUpPrice = f.price1;
        this.oLoPrice = f.price2;
        this.oLoSize = f.lc;
        this.oDepth = f.depth;
        this.oPhrase = f.phrase;
        this.oPgTotal = f.sTotal;
        this.oTotal = f.pgTotal;
        this.oFin = f.finish;
        this.oTempl = f.template;
        this.di = document.images;
        return this, data(), doSize();
    };


    function data() {
        var depth, ucpr1, lcpr1, mold1;
        var siz = oUppht.selectedIndex;
        siz = siz == -1 ? 0 : siz;
        this.dStr = dArr[0][siz];
        if (oForm.face.selectedIndex == 0) {
            oUpPrice.value = ucpr1 = fixP(dStr[2]);
            oLoPrice.value = lcpr1 = fixP(ucpr1 * 90 / 100);
        } else {
            oUpPrice.value = ucpr1 = fixP(dStr[3]);
            oLoPrice.value = lcpr1 = fixP(ucpr1 * 90 / 100);
        };
        oDepth.value = depth = dStr[1];
        oDepth.value += "\"";
        oForm.faceImg.src = oForm.face[oForm.face.selectedIndex].value;
    };


    function analysis() {
        oPgTotal.value = "0.00";
        var inPut = oPhrase.value;
        var outPut = "";
        var pStart = 0;
        if (oPhrase.selectionStart) {
            pStart = oPhrase.selectionStart;
        };
        var pEnd = 0;
        if (oPhrase.selectionEnd) {
            pEnd = oPhrase.selectionEnd;
        };
        var pLen = oPhrase.value.length;
        oPhrase.value = "";
        for (var i = 0; i < pLen; i++) {
            var x = inPut.charAt(i);
            outPut += 
				x.match(/[A-Z]/) ? updatePrice(x, "upper_case") : 
				x.match(/[0-9]/) ? updatePrice(x, "nums") : 
				x.match(/[\-\.,~']/) ? updatePrice(x, "sm_punc") : 
				x.match(/[\/&\!@#$%\(\)?<>\+\*\\]/) ? updatePrice(x, "lg_punc") :
				x.match(/[;:="]/) ? updatePrice(x, "colo_chars") : 
				x.match(/[a-z]/) ? updatePrice(x, "lower_case") : " ";
        };
        oPhrase.value = outPut;
        if (oPhrase.selectionStart) {
            oPhrase.selectionStart = pStart;
            oPhrase.selectionEnd = pEnd;
        };
        var paint = oFin[0].checked ? 0 : parseFloat(oPgTotal.value) * 130 / 100;
        oTotal.value = oFin[0].checked ? fixP(parseFloat(oPgTotal.value)) : fixP(paint);
        if (oTempl.checked) {
            template();
        };
        oForm.totalChar.value = oPhrase.value.replace(/\s/g, "").length;
    };


    function template() {
        var tLtrs = oPhrase.value.replace(/\s/g, "").length;
        var addon = patternPrice;
        oTotal.value = fixP(parseFloat(oTotal.value) + tLtrs * addon);
    };


    function updatePrice(x, kind) {
        var subT = oPgTotal.value - 0;
        var upcP = oUpPrice.value - 0;
        var locP = oLoPrice.value - 0;
        oPgTotal.value = 
				kind == "upper_case" ? fixP(subT + upcP) : 
				kind == "nums" ? fixP(subT + upcP) : 
				kind == "sm_punc" ? fixP(subT + (upcP - 0) / 3) : 
				kind == "lg_punc" ? fixP(subT + (upcP - 0)) : 
				kind == "colo_chars" ? fixP(subT + (upcP - 0) / 3 * 2) : 
				kind == "extra_chars" ? fixP(subT + upcP) : 
				kind == "lower_case" && locP == 0 ? (x = x.toUpperCase(), fixP(subT + upcP)) : fixP(subT + locP);
        return x;
    };

    function doSize() {
        var daLen = dArr[0].length;
        for (var j = oUppht.options.length - 1; j > 0; j--) {
            oUppht.options[j] = null;
        };
        for (var k = 0; k < daLen; k++) {
            oUppht.options[k] = new Option(dArr[0][k][0] + "\"", dArr[0][k][0]);
        };
        oUppht.selectedIndex = 0;
    };


