/* Cast Metal Sign Builder by (c) 2008 Ray Yates */

var basepath = "http://www.alphabetsigns.com/sign_builder/";
var img_src = basepath + "font_image_cm.php?text=%1&font=%2&r=%3&g=%4&b=%5&size=%6&aa=%7";
var linenum = "1"
var colors = "";
var characters = new Array();
var charset = new Array();
var charcase = new Array();
var savechar = new Array();
savechar[1] = "";
savechar[2] = "";
savechar[3] = "";
var antialias = "1";
var preview_width;
var sign_width;
var preview_height;
var sign_height;
var timer1;
var timer2;
var timer3;
var timer4;
var mouseX = 370;
var mouseY = 595;
var finish_code = "";
var finish_markup = 1.0;
var finish_isBronze = false;
var color_code = "";
var save = "";


function img_update(obj,ndx){
    linenum = ndx;
    var text;
    var font;
    var sizes

    if(charcase[ndx]=='U' && savechar[ndx].length==0){
        savechar[ndx] = document.forms["sign_builder"].elements["sign_text"+ndx].value;
        document.forms["sign_builder"].elements["sign_text"+ndx].value = savechar[ndx].toUpperCase();
    } else if(charcase[ndx]=='L' && savechar[ndx].length>0){
        document.forms["sign_builder"].elements["sign_text"+ndx].value = savechar[ndx];
        savechar[ndx] = "";
    }
    document.getElementById("message").innerHTML = "&nbsp;";
    if(document.forms["sign_builder"].elements["sign_text1"].value){
        text = document.forms["sign_builder"].elements["sign_text1"].value; // text
        font = document.forms["sign_builder"].elements["font_name" + "1"].value; // font file
        sizes = document.forms["sign_builder"].elements["chr_height1"].value // font size
        document.forms["sign_builder"].elements["sign_text2"].disabled=false;

        if(document.forms["sign_builder"].elements["sign_text2"].value){
            text = text + ":" +document.forms["sign_builder"].elements["sign_text2"].value;
            font = font + ":" + document.forms["sign_builder"].elements["font_name" + "2"].value;
            sizes = sizes + ":" + document.forms["sign_builder"].elements["chr_height2"].value

            document.forms["sign_builder"].elements["sign_text3"].disabled=false;
            if(document.forms["sign_builder"].elements["sign_text3"].value){
                text = text + ":" +document.forms["sign_builder"].elements["sign_text3"].value;
                font = font + ":" + document.forms["sign_builder"].elements["font_name" + "3"].value;
                sizes = sizes + ":" + document.forms["sign_builder"].elements["chr_height3"].value
            }
        }
    }

    if(text){
        text = text.replace(/&/g,"_");
        characters = text.replace(/ /g,"").split(':',3);
        if (colors==""){
            colors = "rgb(0,0,0)";
        }
        colors = colors.replace("rgb(","").replace(")","");
        var color = new Array();
        var color = colors.split(",");

        var img_url = img_src.replace("%1",text);
        img_url = img_url.replace("%2",font);
        img_url = img_url.replace("%3",color[0]);
        img_url = img_url.replace("%4",color[1]);
        img_url = img_url.replace("%5",color[2]);
        img_url = img_url.replace("%6",sizes);
        img_url = img_url.replace("%7",antialias);

        url=img_url.replace("font_image_cm.php","font_data1.php");
        loaddata(url);

        document.getElementById("debugspan").innerHTML="<a href='" + img_url.replace("aa=-1","aa=1") + "' target='_blank'>" + img_url.replace("aa=-1","aa=1") + "</a>";
        document.getElementById("preview").src=img_url;
        summary_update();
    }
}

function summary_update(){
var ln = 0;
var char_count = 0;
var sum_char_count = 0;
var punct_count = 0;
var lcase_count = 0;
var ucase_count = 0;
var priceunit = 0;
var priceprod = 0.00;
var priceoptn = 0.00;
var price = 0.00;
var total = 0.00;

    summary_clear();
    summary_caption();

    for (ndx=1; ndx<=3; ndx++){
        // characters[] is the array that holds each line of text
        if(ndx<=characters.length){
            if(characters[ndx-1].length>0){

               //alert(ndx-1 + " : " +characters[ndx-1].length);

                basketDB[ndx-1].phrase = document.forms["sign_builder"].elements["sign_text"+ndx].value;
                // Print the phrase
                //document.getElementById("sum_"+ndx+"1").innerHTML=basketDB[ndx-1].phrase;

                var fontsel = document.forms["sign_builder"].elements["font_name" + ndx];
                basketDB[ndx-1].fontcode = fontsel.value;
                var fontName = fontsel.options[fontsel.selectedIndex].text;
                // Print the Font Name
                //document.getElementById("sum_"+ndx+"2").innerHTML=fontName;

                var sizesel = document.forms["sign_builder"].elements["chr_height" + ndx]
                basketDB[ndx-1].prodcode = sizesel.value;

                var fontSize = sizesel.options[sizesel.selectedIndex].text;
                // Print the Font size
                //document.getElementById("sum_"+ndx+"3").innerHTML=fontSize;

                // Legacy code: counts each character type.
                ln = characters[ndx-1].length;
                punct_count = ln - characters[ndx-1].replace(/[,.-]/g, '').length;
                lcase_count = ln - characters[ndx-1].replace(/[a-z]/g, '').length;
                ucase_count = ln - lcase_count - punct_count;
                char_count = punct_count + lcase_count + ucase_count;
                sum_char_count = sum_char_count + char_count;
                
                        if(finish_isBronze) {
                            unit_price = (+fontsDB[i].altprice) * finish_markup;
                            if(unit_price==0) { alert('The Bronze price for this font size has not been configured. Please contact the site administer') }
                        } else {
                            unit_price = (+fontsDB[i].price) * finish_markup;
                        }
                
                //lookup from prodDB Where basketDB[].prodcode = prodDB[].prodcode and thickness_code = prodDB[].options[].code
                //prodDB[] :  catcode, material, prodcode, height, option Array;
                for(i=0; i<prodDB.length; i++){
                    if(basketDB[ndx-1].prodcode==prodDB[i].prodcode) {
                        // Lookup the option price
                        for (j=0; j<prodDB[i].option.length; j++){
                            if(thickness_code==prodDB[i].option[j].code){
                                priceoptn = +prodDB[i].option[j].price;
                                priceprod = +prodDB[i].price;
                                priceunit = priceprod + priceoptn;
                                break;
                }   }   }   }
                
                punct_price =  unit_price * punct_count / 3;
                lcase_price =  unit_price * lcase_count * 0.9;
                ucase_price =  unit_price * ucase_count;
                price = punct_price + lcase_price + ucase_price;
                total = total + price;
                basketDB[ndx-1].char_count = char_count;
                basketDB[ndx-1].price = price;  
                document.getElementById("sum").innerHTML="$" + total.toFixed(2);
                      }
                }
            }
        } else {
            basketDB[ndx].total = 0;
        }
    }
    if(document.getElementById("mount_pattern").checked){
        mount_pattern_total = char_count * mount_pattern_price;
        total = total + mount_pattern_total;
        document.getElementById("pattern").innerHTML="$" + mount_pattern_total.toFixed(2);
        document.getElementById("sum").innerHTML="$" + total.toFixed(2);
    } else {
        document.getElementById("pattern").innerHTML = "$0.00";
    }
}              
                


function summary_clear(){
var row = 0;
    for (row=1; row<=3; row++){
            document.getElementById("sum_"+row+"6").innerHTML="&nbsp;";
    }
    document.getElementById("sum").innerHTML="$0.00";
}

function summary_caption(){
    document.getElementById("summary_txt").innerHTML = "&nbsp;";
    var caption = material_name;
    if(thickness_prompt.length>0){ caption = caption + " " + thickness_prompt; }
    if(finish_prompt.length>0){ caption = caption + ", Finish: " + finish_prompt; }
    if(color_prompt.length>0){ caption = caption + ", Color: " + color_prompt; }
    document.getElementById("summary_txt").innerHTML = caption;
}


function bg_update(){
    var bg = document.forms["sign_builder"].elements["tdbackground"].value;
    document.getElementById("preview_bg").style.backgroundImage = 'url("' + basepath + "tiles/" + bg + '")';
    if(bg) {
        antialias = "-1";
    } else {
        antialias = "1";
    }
    img_update('',1)
}

function loaddata(url){
   var head= document.getElementsByTagName('head')[0];
   var script= document.createElement('script');
   script.type= 'text/javascript';
   script.src= url;
   head.appendChild(script);
   timer1=setTimeout("show_data()",500);
   timer2=setTimeout("show_data()",2500);
}

function show_data(){
    try {
        //get preview_width and preview_height in pixels
        get_font_data();
        msg = document.getElementById("preview_msg");
        /* Per Dan, multiply width by a factor of 1.5 10/2/2008 */
        var sw = sign_width * 1.5;
        msg.innerHTML = "<b><font color='red'>Approximate</font> Sign Dimensions = " + sw.toFixed(2) + " in. wide x " + sign_height + " in. high (call for exact)</b>";
        document.getElementById("preview_bg").style.height = preview_height+12+"px";
        clearTimeout(timer2);
        clearTimeout(timer1);
    } catch(err) {
        clearTimeout(timer1);
    }
}

function isEmpty(){
    if(document.forms["sign_builder"].elements["sign_text1"].value == "") {
        document.forms["sign_builder"].elements["sign_text2"].value = "";
        document.forms["sign_builder"].elements["sign_text2"].disabled=true;
        document.forms["sign_builder"].elements["sign_text3"].value = "";
        document.forms["sign_builder"].elements["sign_text3"].disabled=true;
        basketDB[1].total = 0;
        summary_clear();
        document.getElementById("preview").src="/sign_builder/font_image_cm.php?text=Enter%20your%20text%20above&font=GT-Helvetica.ttf&r=0&g=0&b=0&size=2&aa=1";

    } else if(document.forms["sign_builder"].elements["sign_text2"].value == "") {
        document.forms["sign_builder"].elements["sign_text3"].value = "";
        document.forms["sign_builder"].elements["sign_text3"].disabled=true;
    }
}

function validkey(e, row){
    var keynum;
    var keyboardchars = /[\x00\x08]/;
    var validchars = new RegExp(charset[row]);
    if(window.event){
      // IE
        keynum = e.keyCode;
    } else if(e.which) {
      // Netscape/Firefox/Opera
        keynum = e.which;
    }
    if(charcase[row]=="U"){
      var keychar = String.fromCharCode(keynum).toUpperCase();
      savechar[row] = "";
    } else {
      var keychar = String.fromCharCode(keynum);
  }
    if (!validchars.test(keychar) && !keyboardchars.test(keychar)){
        return false
    } else {
      if(window.event){
          e.keyCode = keychar.charCodeAt(0);
      } else if(e.which) {
          e.which = keychar.charCodeAt(0);
      }
        return true;
    }
}

function size_select_update(obj_font,row){
var fontId = -1;
    //loop through fontNames[]
    var fontName = obj_font.options[obj_font.selectedIndex].text;
    for (i=0; i<fontNames.length; i++) {
        if(fontNames[i]==fontName){
            var fontId=i;
            break;
        }
    }
    if(fontId > -1) {
        charset[row] = fontCharset[fontId];
        charcase[row] = fontCase[fontId];
         document.getElementById('charset'+row).innerHTML=print_charset(fontCharset[fontId]);
        sel=document.forms["sign_builder"].elements["chr_height"+row]
        sel.length = 0;
        for (i=0; i<fontsDB.length; i++){
            if (fontsDB[i].id==fontId){
                sel.options[sel.length] = new Option(fontsDB[i].uc+'"', fontsDB[i].uc);
            }
        }
        sel.options[0].selected = true;
    }
}

function print_charset(set){
  return 'Character Set: ' + set.replace(/Z/,'Z ').replace(/z/,'z ').replace(/9/,'9 ').replace('[','').replace(']','');
}

function setFinish(obj_link, code, markup){
    finish_markup = markup;
    if(obj_link.title.indexOf("Aluminum") < 0){
        finish_isBronze = true;
    } else {
        finish_isBronze = false;
    }
    colors = obj_link.parentNode.style.backgroundColor;
    img_update(obj_link,linenum);
    finish_code = code;
    color_code = "";
    document.getElementById("finish_txt").innerHTML = "Finish: " + obj_link.title;
    document.getElementById("color_txt").innerHTML = "";
    summary_update();
}

function setColor(obj_link, code){
    finish_markup = 1.0;
    finish_isBronze = false;
    colors = obj_link.parentNode.style.backgroundColor;
    img_update(obj_link,linenum);
    finish_code = "CM_NSA";
    color_code = code;
    document.getElementById("finish_txt").innerHTML = "Finish: Natural Satin Aluminum";
    document.getElementById("color_txt").innerHTML = ", Color: " + obj_link.title;
    summary_update();
}

function showColor(obj_link, code){
    imgWrapper = document.getElementById("metal_preview");
    imgObject = document.getElementById("metal_img");
    imgText = document.getElementById("metal_txt");
    if(code){
        var newImg = "graphics/00000001/" + code;
        if(imgObject.src!=newImg){
            imgObject.src = newImg;
            imgText.innerHTML = obj_link.title;
        }
        document.onmousemove = getMouse;
        document.getElementById("xposn").value=mouseX; // to debug, change type="hidden" to type="text"
        document.getElementById("yposn").value=mouseY;
        //imgWrapper.style.top=mouseY - 175 + 'px';
        imgWrapper.style.left=mouseX -200 + 'px';
        imgWrapper.style.display = "block";

    } else {
        imgWrapper.style.display = "none";
        imgObject.src = "";
    }
}

function showBakedColor(obj_link, code){
    imgWrapper = document.getElementById("baked_preview");
    imgObject = document.getElementById("baked_img");
    imgText = document.getElementById("baked_txt");
    if(code){
        var newImg = "graphics/00000001/" + code;
        if(imgObject.src!=newImg){
            imgObject.src = newImg;
            imgText.innerHTML = obj_link.title;
        }
        document.onmousemove = getMouse;
        document.getElementById("xposn").value=mouseX; // to debug, change type="hidden" to type="text"
        document.getElementById("yposn").value=mouseY;

        //imgWrapper.style.top=mouseY - 150 + 'px';
        imgWrapper.style.left=mouseX -200 + 'px';
        imgWrapper.style.display = "block";

    } else {
        imgWrapper.style.display = "none";
        imgObject.src = "";
    }
}

function getMouse(e) {
    if (!e) var e = window.event;
    if (e.pageX || e.pageY)     {
        mouseX = e.pageX;
        mouseY = e.pageY;
    }
    else if (e.clientX || e.clientY)    {
        mouseX = e.clientX + document.body.scrollLeft
            + document.documentElement.scrollLeft;
        mouseY = e.clientY + document.body.scrollTop
            + document.documentElement.scrollTop;
    }
    // mouseX and mouseY contain the mouse position relative to the document
    // Do something with this information
}

var basketDB = new Array();

function BasketRec() {
    basketDB.i = 0;
    basketDB.lcase_count = 0;
    basketDB.ucase_count = 0;
    basketDB.total = 0;
}

function start_SignBuilder(){
    AddFonts();
    basketDB[basketDB.length] = new BasketRec();
    basketDB[basketDB.length] = new BasketRec();
    basketDB[basketDB.length] = new BasketRec();
    basketDB[basketDB.length] = new BasketRec();
    for (var row=1; row<=3; row++){
        sel_font = document.forms["sign_builder"].elements["font_name" + row]
        size_select_update(sel_font,row);
    }
    bg_update();
}

function iform_update(row, i, lcase_count, ucase_count, price){
    document.getElementById("Product_Code").value=fontsDB[i].code;
    //document.getElementById("textvalue").value=characters[row-1];
    document.getElementById("textvalue").value=document.forms["sign_builder"].elements["sign_text" + row].value;
    //document.getElementById("textvalue1").value=characters[row-1];
    document.getElementById("textvalue1").value=document.forms["sign_builder"].elements["sign_text" + row].value;
    document.getElementById("finishvalue").value=finish_code;
    document.getElementById("finishvalue1").value=finish_code;
    document.getElementById("colorvalue").value=color_code;
    document.getElementById("colorvalue1").value=color_code;
    document.getElementById("Product_Price").value=price.toFixed(2);
}

function addprod_validate(frm){
    if (basketDB[1].total==0){
        alert('Please enter some text.');
        return false;
    }
    if(finish_code==""){
        alert('Please select a finish.');
        return false;
    }
    document.getElementById("message").innerHTML = "<br /><img src='/sign_builder/animated.gif'>";
    document.getElementById("button").style.display="none";
    submit_data(1);
    var t = 750;
    timer1=setTimeout("submit_data(2)",t);
    timer2=setTimeout("submit_data(3)",t*2);
    timer3=setTimeout("submit_data(4)",t*3);
    timer4=setTimeout("done()",t*4);
    return false;
}

function submit_data(row){
    if (row==4){
        var txt = "";
        if(document.getElementById("mount_pattern").checked){
            for (i=1; i<=3; i++){
                txt = txt + document.forms["sign_builder"].elements["sign_text" + i].value + "~";
            }
            document.getElementById("pattern_txt").value = txt.replace(/~/g, "\n");
            frm = document.getElementById("iform4");
            frm.submit();
        }
    } else {
        if (basketDB[row].total >  0) {
            iform_update(row, basketDB[row].i , basketDB[row].lcase_count , basketDB[row].ucase_count, basketDB[row].total)
            frm = document.getElementById("iform");
            frm.target="RSIFrame" + row;
            frm.submit();
        }
    }
    if (row==2){
        clearTimeout(timer1);
    }
    if (row==3){
        clearTimeout(timer2);
    }
    if (row==4){
        clearTimeout(timer3);
    }
}

function done(){
     document.getElementById("message").innerHTML = "Your sign has been added to the basket.";
     document.getElementById("button").style.display="block";
     clearTimeout(timer3);
}
