/* 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 ch = "";
var ln = 0;
char_count = 0;
var punct_count = 0;
var lcase_count = 0;
var ucase_count = 0;
var unit_price = 0
var price = 0;
var total = 0;
    summary_clear();

    for (ndx=1; ndx<=3; ndx++){
        if(ndx<=characters.length){
            var fontsel = document.forms["sign_builder"].elements["font_name" + ndx]
            var fontName = fontsel.options[fontsel.selectedIndex].text;
            // document.getElementById("sum_"+ndx+"1").innerHTML=fontName;
            var fontSize = document.forms["sign_builder"].elements["chr_height" + ndx].value;
            var fontId=-1;
            for (i=0; i<fontNames.length; i++) {
                if(fontNames[i]==fontName){
                    fontId=i;
                    break;
                }
            }

            for (i=0; i<fontsDB.length; i++){
                if (fontsDB[i].id==fontId){
                    if (fontsDB[i].uc==fontSize) {
                        // document.getElementById("sum_"+ndx+"2").innerHTML=fontsDB[i].uc + '"';
                        // document.getElementById("sum_"+ndx+"3").innerHTML=fontsDB[i].lc + '"';
                        // document.getElementById("sum_"+ndx+"4").innerHTML=fontsDB[i].depth + '"';

                        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 = char_count + punct_count + lcase_count + ucase_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;
                        }
                        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;

                        // document.getElementById("sum_"+ndx+"5").innerHTML=ucase_count ;
                        // document.getElementById("sum_"+ndx+"6").innerHTML=lcase_count + punct_count;
                        document.getElementById("sum_"+ndx+"7").innerHTML="$" + price.toFixed(2) ;
                        document.getElementById("sum").innerHTML="$" + total.toFixed(2);

                        basketDB[ndx].i = i;
                        basketDB[ndx].lcase_count = lcase_count;
                        basketDB[ndx].ucase_count = ucase_count;
                        basketDB[ndx].total = price;
                        break;
                    }
                }
            }
        } 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+"7").innerHTML="&nbsp;";
    }
    document.getElementById("sum").innerHTML="$0.00";
}

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>For Font Style Preview Only, Sign Dimensions Are Not Exact<br><font color='red'>Approximate</font> = " + sw.toFixed(2) + " in. wide x " + sign_height + " in. high</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){
    var newImg = "u";
    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;
        }
        /* //Changed so that the popup layer now opens in a fixed position set in css
        document.onmousemove = getMouse;
        document.getElementById("xposn").value=mouseX; // to debug, change type="hidden" to type="text"
        document.getElementById("yposn").value=mouseY;
        imgWrapper.style.left=mouseX -100 + 'px';
        */
        imgWrapper.style.display = "block";

    } else {
        imgWrapper.style.display = "none";
        imgObject.src = "";
    }
}

function showBakedColor(obj_link, code){
    var newImg = "u";
    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;
        }
        /* //Changed so that the popup layer now opens in a fixed position set in css
        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 -50 + '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);
}
