// CONFIGURABLE

var signSizes =             new Array();
var signPreviews =          new Array();
signPrices =                new Array(255, 370, 480, 595, 685);
signSizes['mm'] =           new Array();

signSizes['mm']['circle'] = new Array( new Array ( 320, 320 ),
                                new Array (390, 390),
                                new Array (450,450),
                                new Array (500,500),
                                new Array (550,550));

signSizes['mm']['other'] =  new Array( new Array ( 410, 245 ),
                                new Array ( 500, 300 ),
                                new Array ( 580, 345 ),
                                new Array ( 650, 390 ),
                                new Array ( 710, 425));

signSizes['mm']['longrectangle'] = [
	[560, 180],
	[680, 220],
	[790, 255],
	[880, 280],
	[965, 310]
];

signPreviews['circle'] =    new Array(new Array(82, 61),
                                new Array ( 101, 75 ),
                                new Array ( 116, 86 ),
                                new Array ( 130, 97 ),
                                new Array ( 142, 106));

signPreviews['other'] =     new Array( new Array ( 81, 61 ),
                                new Array ( 100, 75 ),
                                new Array ( 115, 86 ),
                                new Array ( 129, 97 ),
                                new Array ( 141, 106));

signPreviews['longrectangle'] =     new Array( new Array ( 81, 61 ),
                                new Array ( 100, 75 ),
                                new Array ( 115, 86 ),
                                new Array ( 129, 97 ),
                                new Array ( 141, 106));

// Custom artowork design charge
var design_fee_artwork_charge = 50;


// Viewer image nems - from CSS sprites


var viewerSteps = new Array();
viewerSteps['shapes_shape_vp'] = new Array();
viewerSteps['shapes_corner_vp'] = new Array();
viewerSteps['shapes_edge_vp'] = new Array();
viewerSteps['fonts_text_vp'] = new Array();
viewerSteps['fonts_primary_vp'] = new Array();
viewerSteps['colours_background_vp'] = new Array();
viewerSteps['colours_edge_vp'] = new Array();
viewerSteps['colours_text_vp'] = new Array();
viewerSteps['artworks_artwork_vp'] = new Array();
viewerSteps['artworks_upload_vp'] = new Array();
viewerSteps['sizes_size_vp'] = new Array();


viewerSteps['shapes_shape_vp']['sprite'] = 			'picker-shapes.png';
viewerSteps['shapes_corner_vp']['sprite'] = 		'picker-corners-edges.png';
viewerSteps['shapes_edge_vp']['sprite'] = 			'picker-corners-edges.png';
viewerSteps['fonts_text_vp']['sprite'] = 			false;
viewerSteps['fonts_primary_vp']['sprite'] = 		'picker-lettering.png';
viewerSteps['colours_background_vp']['sprite'] = 	'picker-colours.png';
viewerSteps['colours_edge_vp']['sprite'] = 			'picker-colours.png';
viewerSteps['colours_text_vp']['sprite'] = 			'picker-colours.png';
viewerSteps['artworks_artwork_vp']['sprite'] = 		'picker-artwork.png';
viewerSteps['artworks_upload_vp']['sprite'] = 		false;
viewerSteps['sizes_size_vp']['sprite'] = 			'picker-shapes.png';


viewerSteps['shapes_shape_vp']['segments'] = 		new Array('bottombump','bottomcurve','bottomstepcurve','circle','longrectangle','oval','rectangle','topbump','topcurve','topstepcurve');
viewerSteps['shapes_corner_vp']['segments'] = 		new Array('inverse','round','square');
viewerSteps['shapes_edge_vp']['segments'] = 		new Array('cove','groove','plain');
viewerSteps['fonts_primary_vp']['segments'] = 		new Array('albertus','blackletter','essendean','frutiger','lithos','minion');

viewerSteps['artworks_artwork_vp']['segments'] = 	new Array('acorns', 'anchor2', 'anchor', 'apple-blossom', 'apples', 'blackolives', 'bluejay', 'butterfly2', 'chickadee', 'chipmunk', 'dogwood',
                                                    'fish1', 'fish2', 'fish3', 'flag', 'fox', 'frangipani', 'grapes1', 'hummer', 'leaves1', 'leaves', 'lotus', 'pansies', 'pineapple2', 'pinecones',
                                                    'rooster', 'shell1', 'shell2', 'star', 'sunflowers', 'thistle', 'tigerlillies', 'tree', 'woodduck', 'z_custom', 'z_none');

viewerSteps['colours_background_vp']['segments'] =	new Array('000000', '102A80', '111F59', '114201', '1C3314', '207A11', '27678F', '2C8C80', '382112', '540A04', '563270', '6A95EB', '825022',
                                                    '9B1916', 'A9B1C9', 'BEBF9D', 'D92121', 'E05124', 'E3D8B6', 'FFEB3B', 'FFFFFF');

viewerSteps['colours_edge_vp']['segments'] =		new Array('000000', '102A80', '111F59', '114201', '1C3314', '207A11', '27678F', '2C8C80', '382112', '540A04', '563270', '6A95EB', '825022',
                                                    '9B1916', 'A9B1C9', 'BEBF9D', 'D92121', 'E05124', 'E3D8B6', 'FFEB3B', 'FFFFFF');

viewerSteps['colours_text_vp']['segments'] =		new Array('000000', '102A80', '111F59', '114201', '1C3314', '207A11', '27678F', '2C8C80', '382112', '540A04', '563270', '6A95EB', '825022',
                                                    '9B1916', 'A9B1C9', 'BEBF9D', 'D92121', 'E05124', 'E3D8B6', 'FFEB3B', 'FFFFFF', 'FFFFFE');

var viewerColours = new Array();
viewerColours['000000'] = 'Black';
viewerColours['102A80'] = 'Passionate Blue';
viewerColours['111F59'] = 'Blue Lobelia';
viewerColours['114201'] = 'Deep Brunswick Green';
viewerColours['1C3314'] = 'Nimrod';
viewerColours['207A11'] = 'Holly Bush';
viewerColours['27678F'] = 'Pirates Haven';
viewerColours['2C8C80'] = 'Go Alpha';
viewerColours['382112'] = 'Deep Leather';
viewerColours['540A04'] = 'Indian Red';
viewerColours['563270'] = 'Cadbury Silk';
viewerColours['6A95EB'] = 'Water Raceway';
viewerColours['825022'] = 'Beagle Brown';
viewerColours['9B1916'] = 'Red Box';
viewerColours['A9B1C9'] = 'Blue Oar';
viewerColours['BEBF9D'] = 'Antique';
viewerColours['D92121'] = 'Hot Lips';
viewerColours['E05124'] = 'Sunlounge';
viewerColours['E3D8B6'] = 'Coffee Cream';
viewerColours['FFEB3B'] = 'Jubilation';
viewerColours['FFFFFF'] = 'Vivid White';
viewerColours['FFFFFE'] = '23kt Gold';

// END CONFIGURABLE ITEMS






//Setup GLOBAL variables
var currentSliderPosition;
var tabs;
var designSteps = new Array('shapes_shape', 'shapes_corner', 'shapes_edge', 'fonts_text', 'fonts_primary', 'colours_background', 'colours_edge', 'colours_text', 'artworks_artwork', 'sizes_size' );
var currentStep = 0;
var selectedImages = new Array();
var accordions = new Array();
var panels = new Array();
var designLoaded = true; // defer images preloading if false - setFormFieldAndSubmit changes this to true when finished
var preLoaded = true; // true when preloadImages is finished
var panelLoaded = new Array(); // stores whether panel is preLoaded

var lastTab = '';
var prevAcc = -1;

var accHistory = [];
var tabHistory = [];

/*
 * Tab toggler
 * Hide other tabs and show the current tab when clicked on
 */
function showTab(key, makeacc, dontStore) {

    // info for for back button
    var seld = getCurrentTab();
    lastTab = $(seld).getProperty('id').replace('Tab', 'Block');
    
    for (k=0; k<tabs.length; k++) {
        $(tabs[k]).className = 'hide';
        $(tabs[k].replace('Block', 'Tab')).className = 'tabs';
    }

    $(key).className = 'show';
    $(key.replace('Block', 'Tab')).className = 'selected_tab tabs';

    if (makeacc) {
        makeAccordion(key.replace('Block', 'Accordion'), true);
    }

    $('back-normal').setStyle('display','block');

    tracktab(key);

    if (lastTab != key && !dontStore) {
        accHistory = [];
        prevAcc = 0;
        tabHistory.push(lastTab);  
    }     
}



function goBack() {
    if (accHistory.length) {
        var accordionName = getCurrentTab().getProperty('id').replace('Tab', 'Accordion');
        accordions[accordionName].display(accHistory.pop());
        accHistory.pop();
    } else if (tabHistory.length) {
        showTab(tabHistory.pop(), true, true); 
    }
    if(accHistory.length == 0 && tabHistory.length == 0) {
        $('back-normal').setStyle('display', 'none');
    } 
    
    open = false;
}


/*
 * Uses ajax to load a static html page into a any element
 */
function loadStaticPage(page, target_id) {
    new Ajax("static/" + page + ".html", {
        method: "get",
        onSuccess: function(msg) {$(target_id).innerHTML = msg;}
    }).request();
}


/*
 * Get the value of something in the $_GET array
 */
function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");

    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) return pair[1];
    }

    return '';
}


/*
 * Returns a DOM element that is the currently selected tab. Already has the mootools Element object instantiated.
 */
function getCurrentTab() {
    return $$('.selected_tab')[0];
}


function getCheckedValue(radioObj) {
    if(!radioObj)
        return "";
    var radioLength = radioObj.length;

    if(radioLength == undefined)
        if(radioObj.checked)
            return radioObj.value;
        else
            return "";
    for(var i = 0; i < radioLength; i++) {
        if(radioObj[i].checked) {
	    return radioObj[i].value;
        }
    }
    return "";
}


/*
 * Move to the next step in the design process Opens next accordion slide, and/or next tab where necessary
 */
 var open = false;
function nextStep() {

    // currentStep++;
    // var thisStep = designSteps[currentStep];  //shapes_corner
    // var stepParts = thisStep.split('_');      //shapes, corner

    var completedSteps = getCompletedSteps();
    var thisTab = getCurrentTab();               //shapeTab

    // Get the next expected design step by iterating over the completed ones and comparing against the total steps

    var nextExpectedStep = 0;

    for (i=0; i<designSteps.length; i++) {

        if (completedSteps.indexOf(designSteps[i]) == -1) {

            if ($('shapes_shape').value == 'shapes_shape=circle' || $('shapes_shape').value == 'shapes_shape=oval'){
                if (designSteps[i] == 'shapes_corner'){
                    $('shapes_corner').value = 'shapes_corner=round';
                    i++;
                }

                nextExpectedStep = designSteps[i];
                currentStep = i;
            } else {
                nextExpectedStep = designSteps[i];
                currentStep = i;
            }

            if (nextExpectedStep == 'colours_edge'){
                if ($('shapes_edge').value == 'shapes_edge=plain') {
                    $('colours_edge').value = 'colours_edge=E3D8B6';
                    nextExpectedStep = designSteps[i + 1];
                    currentStep = i + 1;
                }
            }

            break;
        }
    }

    var thisStep = nextExpectedStep;

    if(thisStep == 'shapes_corner' || thisStep == 'shapes_edge'){
        setDimensions(2);
    }

    if (thisStep != 0) {
        var stepParts = thisStep.split('_');

        //The zeroth element determines the tab
        var stepTab = stepParts[0].substr(0, stepParts[0].length-1) + 'Tab';    //shape
        //stepTab will NEVER == thisTab as thisTab is a DOM element
        if (stepTab != thisTab) {            
            showTab(stepTab.replace('Tab', 'Block'), true);
        }

        //The accordion part to show
        var accordionParts = new Array();
        for (i=0; i<designSteps.length; i++) {
            var splits = designSteps[i].split('_'); //shapes, corner
            if (splits[0] == stepParts[0]) {
                accordionParts.push(designSteps[i])
            }
        }
        var accordionIndex = 0;
        for (x=0; x<accordionParts.length; x++) {
            if (accordionParts[x] == thisStep) {
                accordionIndex = x;
            }
        }

        //Get the accordion name
        //replaced 'thisTab' with 'getCurrentTab()' else accordionName points to originating tab ***************************************
        var accordionName = getCurrentTab().getProperty('id').replace('Tab', 'Accordion');
        
        //Show the accordion part                

        accordions[accordionName].display(accordionIndex);

    }

    //Change the button to the Buy Now link and add the onclick event
    if (currentStep >= designSteps.length-1) {
	setNextBuyButtons();
    	
    	if (open) {
    		alert('Please select a size and number of sides.');
    	}
    	
    	open = false;
    	
    }
    
    
    
}



function changeToBuyNow(){

    var completedSteps = getCompletedSteps();
    var thisTab = getCurrentTab(); //shapeTab
    var nextExpectedStep = 0;

    for (i = 0; i < designSteps.length; i++) {
        if (completedSteps.indexOf(designSteps[i]) == -1) {
            nextExpectedStep = designSteps[i];
            currentStep = i;
            break;
        }
    }

    var thisStep = nextExpectedStep;

    $('next-normal').onclick = '';
    $('next-normal').removeEvents();

    if (currentStep >= designSteps.length - 1 || thisStep == 0) {
        setNextBuyButtons();
    } else {
        $('next-normal').addEvent('click', function(){
            nextStep();
        });
    }

}

function setNextBuyButtons() {
    if (getCheckedValue(document.signBuilder.sign_size) != '' && getCheckedValue(document.signBuilder.sign_side) != '') {
        $('next-normal').setStyle('display', 'none');
        $('sign-ready').setStyle('display', 'block');
	$$('.purchase-warning').setStyle('display','none');
	$$('.action-purchase').setStyle('display','block');
        // $('action-buynow').setStyle('display', 'block');
		// $$('.action-purchase-price').setStyle('visibility','visible');

        $('action-buynow').addEvent('click', function() {
            if (document.getElementById('sign_id').value != '') {
                document.getElementById('load_save_design_value').value = document.getElementById('sign_id').value;
            } else {
                document.getElementById('load_save_design_value').value = ' ';
            }

            tracktab('docheckout');

            $('signBuilderForm').submit();
        });

    }
}



// For IE, skip the first testing so that the alert does not execute on size page load
var _testing = false;
var browser = navigator.appName;


if(browser == "Netscape"){
    _testing = true;
}


function _alertSizeSide () {
    nextStep();
    if(_testing) {
        alert("Please select the size and side");
    }
    _testing = true;
}

function getCompletedSteps() {
    var params = $$('.requestString');
    var completed = new Array();

    for (i=0; i<params.length; i++) {
        if (params[i].value != '') {
            if(params[i].value.toLowerCase() != 'fonts_text=text here'){
		// Check text validity - Vincent - webdynamic - 14/10/09
		if(params[i].id == 'fonts_text' || params[i].id == 'fonts_secondary') {
		    var text = decodeURIComponent(params[i].value.replace(params[i].id + "=", ''));
		    if (isValidText(text)) {
		        completed.push(params[i].id);
		    } 
		} else {
            	    completed.push(params[i].id);
		}
            }
        }
    }

    return completed;
}



/*
 * Build the accordion for each tab
 */
function makeAccordion(tab_name, loadimages) {

    if (accordions[tab_name]) {
        return;
    }

    if (typeof loadimages == 'undefined') {
        loadimages = false;
    }

    accordions[tab_name] = new Accordion('div.img_' + tab_name, 'div.' + tab_name, {
        opacity: false,
        fixedHeight: 430 - ($$('.img_' + tab_name).length * 34), // keep bottom at same pos for any number of togglers:
        duration: 300,
        onActive: function(toggler, element) {
            if (prevAcc >= 0) {
                accHistory.push(prevAcc);    
            }
            $('back-normal').setStyle('display', 'block');
                    
            var defaultClass = $(toggler).getProperty('class');
            $(toggler).setProperty('class', defaultClass+' open');
            if (loadimages) {
                loadPanelImages(element.id);
            }
            setTimeout(function(){$(element).setStyle('overflow-y','auto');},300); // allow scrollbar only after element has expanded
            prevAcc = this.previous;
        },
        onBackground: function(toggler, element) {
            $(toggler).className = $(toggler).getProperty('class').replace(' open','');
            $(element).setStyle('overflow-y','hidden'); // so a scrollbar won't appear when element starts to shrink
        }
    }, $(tab_name));

    accordions[tab_name].display(0);
}



function toggleItemActive(currItem, parentElement) {
    var nClass = null;

    // Clear current occurances of 'active' class within this viewer
    var elems = $(parentElement).getElements('div.active');
    if (elems.length > -1) {
        for (var d = 0; elems.length > d; d++) {
            nClass = $(elems[d]).getProperty('class').replace(' active', '');
			$(elems[d]).className = nClass;
        }
    }

    // Set 'active' class on current selection
    nClass = $(currItem).getProperty('class') + ' active';
	$(currItem).className = nClass;
}



function toggleItemHover(currItem) {
    var cClass = $(currItem).getProperty('class');
    var nClass = (cClass.indexOf(' over') > -1) ? cClass.replace(' over', '') : cClass + ' over';
    $(currItem).className = nClass;
}



/*
 * Load image elements into the correct panel viewer
 */
function loadPanelImages(element) {

	var currSegment = '';
	var titleCaption = '';
	var classIdent = '';

    if (panels[element] == true || element == 'fonts_text_vp' || element == 'sizes_size_vp' || element == 'artworks_upload_vp') return;

    $(element).setStyle('background-image', 'url(images/throbber-black.gif)');
    //$(element).setStyles({'width': '400px'});


    for (i=0; i<viewerSteps[element]['segments'].length; i++) {

        var currSegment = viewerSteps[element]['segments'][i];
        var titleCaption = (element.indexOf('colours') > -1) ? viewerColours[currSegment] : false;
        var classIdent = (element.indexOf('colours') > -1) ? 'col_'+currSegment : currSegment;

        var new_elem = new Element('div', {
            'class': 'selectable_image ' + classIdent + ' ' + (titleCaption ? 'capTip' : ''),
            'title':(titleCaption ? titleCaption : ''),
            'id': makeItemId(element, currSegment),
            'events': {
                'click': function() {
                    setFormFieldAndSubmit(this.id);
                    toggleItemActive(this, element);
                    // Handle custom artwork choice
					if (this.id.split('|')[1] == 'z_custom') setCustomArtwork();
                    else setArtworkCharge(false);
                },
                'mouseover': function() {
                    toggleItemHover(this);
                },
                'mouseout': function() {
                    toggleItemHover(this);
                }
            }
        });

        var innerElem = new Element('div', {'class': 'picker-item'});

        $(element).adopt(new_elem.adopt(innerElem)); //viewer -> element
    }

    $(element).setStyle('background-image','none');
    $(element).setStyle('overflow-y', 'auto');

    // initialise tips for this element
    var tipElems = $$('#' + element + ' .capTip');

    if (tipElems.length > 0) {
        var capTips = new Tips(tipElems, {className:'capTip'});
    }

    panels[element] = true;
    return panels[element];
}



/*
 * Return a unique id for the image elements
 */
function makeItemId(item, str) {
    var theId = item + '|' + str;
    theId = theId.replace('_normal.png', '').replace('_active.png', '');
    return theId;
}


function fracFormat($num) {
    var $whole = parseInt($num);
    var $dec = $num - $whole;
    var $frac = parseInt($dec * 4);
    if ($frac == 0)
        return $whole;
    else if ($frac == 2)
        return $whole + '-1/2';
    return $whole + '-' + $frac + '/4';
}

function get_html_translation_table (table, quote_style) {
    
    var entities = {}, hash_map = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';

    useTable       = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';

    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw new Error("Table: "+useTable+' not supported');
    }

    entities['38'] = '&amp;';
    if (useTable === 'HTML_ENTITIES') {
        entities['160'] = '&nbsp;';
        entities['161'] = '&iexcl;';
        entities['162'] = '&cent;';
        entities['163'] = '&pound;';
        entities['164'] = '&curren;';
        entities['165'] = '&yen;';
        entities['166'] = '&brvbar;';
        entities['167'] = '&sect;';
        entities['168'] = '&uml;';
        entities['169'] = '&copy;';
        entities['170'] = '&ordf;';
        entities['171'] = '&laquo;';
        entities['172'] = '&not;';
        entities['173'] = '&shy;';
        entities['174'] = '&reg;';
        entities['175'] = '&macr;';
        entities['176'] = '&deg;';
        entities['177'] = '&plusmn;';
        entities['178'] = '&sup2;';
        entities['179'] = '&sup3;';
        entities['180'] = '&acute;';
        entities['181'] = '&micro;';
        entities['182'] = '&para;';
        entities['183'] = '&middot;';
        entities['184'] = '&cedil;';
        entities['185'] = '&sup1;';
        entities['186'] = '&ordm;';
        entities['187'] = '&raquo;';
        entities['188'] = '&frac14;';
        entities['189'] = '&frac12;';
        entities['190'] = '&frac34;';
        entities['191'] = '&iquest;';
        entities['192'] = '&Agrave;';
        entities['193'] = '&Aacute;';
        entities['194'] = '&Acirc;';
        entities['195'] = '&Atilde;';
        entities['196'] = '&Auml;';
        entities['197'] = '&Aring;';
        entities['198'] = '&AElig;';
        entities['199'] = '&Ccedil;';
        entities['200'] = '&Egrave;';
        entities['201'] = '&Eacute;';
        entities['202'] = '&Ecirc;';
        entities['203'] = '&Euml;';
        entities['204'] = '&Igrave;';
        entities['205'] = '&Iacute;';
        entities['206'] = '&Icirc;';
        entities['207'] = '&Iuml;';
        entities['208'] = '&ETH;';
        entities['209'] = '&Ntilde;';
        entities['210'] = '&Ograve;';
        entities['211'] = '&Oacute;';
        entities['212'] = '&Ocirc;';
        entities['213'] = '&Otilde;';
        entities['214'] = '&Ouml;';
        entities['215'] = '&times;';
        entities['216'] = '&Oslash;';
        entities['217'] = '&Ugrave;';
        entities['218'] = '&Uacute;';
        entities['219'] = '&Ucirc;';
        entities['220'] = '&Uuml;';
        entities['221'] = '&Yacute;';
        entities['222'] = '&THORN;';
        entities['223'] = '&szlig;';
        entities['224'] = '&agrave;';
        entities['225'] = '&aacute;';
        entities['226'] = '&acirc;';
        entities['227'] = '&atilde;';
        entities['228'] = '&auml;';
        entities['229'] = '&aring;';
        entities['230'] = '&aelig;';
        entities['231'] = '&ccedil;';
        entities['232'] = '&egrave;';
        entities['233'] = '&eacute;';
        entities['234'] = '&ecirc;';
        entities['235'] = '&euml;';
        entities['236'] = '&igrave;';
        entities['237'] = '&iacute;';
        entities['238'] = '&icirc;';
        entities['239'] = '&iuml;';
        entities['240'] = '&eth;';
        entities['241'] = '&ntilde;';
        entities['242'] = '&ograve;';
        entities['243'] = '&oacute;';
        entities['244'] = '&ocirc;';
        entities['245'] = '&otilde;';
        entities['246'] = '&ouml;';
        entities['247'] = '&divide;';
        entities['248'] = '&oslash;';
        entities['249'] = '&ugrave;';
        entities['250'] = '&uacute;';
        entities['251'] = '&ucirc;';
        entities['252'] = '&uuml;';
        entities['253'] = '&yacute;';
        entities['254'] = '&thorn;';
        entities['255'] = '&yuml;';
    }

    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';
    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#39;';
    }
    entities['60'] = '&lt;';
    entities['62'] = '&gt;';

    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        hash_map[symbol] = entities[decimal];
    }
    
    return hash_map;
}


function html_entity_decode (str, quote_style) {
    var hash_map = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = str.toString();
    
    if (false === (hash_map = get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }

    for (symbol in hash_map) {
        entity = hash_map[symbol];
        tmp_str = tmp_str.split(entity).join(symbol);
    }
    tmp_str = tmp_str.split('&#039;').join("'");
    
    return tmp_str;
}

/*
function setDimensions(index) {
    tu = 'mm';
    currShape = $('shapes_shape').value.replace('shapes_shape=', '');

    if (currShape == 'circle') {
        sizeKey = 'circle';
    } else {
        sizeKey = 'other';
    }

    var $inches = 0.0393700787;
    var $width = signSizes[tu][sizeKey][index][0] * $inches;
    var $height = signSizes[tu][sizeKey][index][1] * $inches;

    $('sizes_size_text').setHTML ( fracFormat($width) + ' x ' +  fracFormat($height) + ' inches');
    $('width_form').value = signSizes[tu][sizeKey][index][0];
    $('height_form').value = signSizes[tu][sizeKey][index][1];
    updateSignPreview( index );
    updatePrice( index );
}
*/

/*
function updateSignPreview(index) {
    currShape = $('shapes_shape').value.replace('shapes_shape=','');
    if(currShape != ''){
        $('preview_image').src = "images/shapes/picker/shape/" + currShape + "_normal.png";
    } else {
        $('preview_image').src = "images/thankyou/spacer.gif";
    }
    if (currShape == 'circle') {
        prevKey = 'circle';
    } else {
        prevKey = 'other';
    }
    $('preview_image').width = signPreviews[prevKey][index][0];
    $('preview_image').height = signPreviews[prevKey][index][1];
}
*/


function setDimensions(index) {
    tu = 'mm';
    currShape = $('shapes_shape').value.replace('shapes_shape=', '');

	var sizeKey = currShape;
	if (typeof(signSizes[tu][currShape]) == "undefined") {
		sizeKey = "other";
	}

    var $inches = 0.0393700787;
    var $width = signSizes[tu][sizeKey][index][0] * $inches;
    var $height = signSizes[tu][sizeKey][index][1] * $inches;

    var w = signSizes[tu][sizeKey][index][0];
    var h = signSizes[tu][sizeKey][index][1];

    $('sizes_size_text').setHTML ( fracFormat($width) + ' x ' +  fracFormat($height) + ' inches<br />'+w+'mm x '+h+'mm');
    $('width_form').value = signSizes[tu][sizeKey][index][0];
    $('height_form').value = signSizes[tu][sizeKey][index][1];

    updateSignPreview(index);
    updatePrice(index);
}


function updateSignPreview(index) {
    currShape = $('shapes_shape').value.replace('shapes_shape=','');
    if (currShape != '') {
        //$('sign-preview-small').setAttribute('class', currShape);
        //$('sign-preview-small').getElement('span').setAttribute('class', 'size'+index);
        $('sign-preview-small').className = currShape;
        $('sign-preview-small').getElement('span').className = 'size'+index;
    }
    prevKey = (currShape == 'circle') ? 'circle' : 'other';
}



function roundToNearest(number, nearest) {
    number = Math.round(number);
    if (nearest >number || nearest <= 0) return number;
    var temp = (number%nearest);
    ret = (temp<(nearest/2)) ? number - temp : number + (nearest - temp);
    return ret;
}


function getSelectedCheckbox(buttonGroup) {
   // Go through all the check boxes. return an array of all the ones that are selected (their position numbers). if no boxes were checked, returned array will be empty (length will be zero)
   var retArr = new Array();
   var lastElement = 0;
   if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            retArr.length = lastElement;
            retArr[lastElement] = i;
            lastElement++;
         }
      }
   } else { // There is only one check box (it's not an array)
      if (buttonGroup.checked) { // if the one check box is checked
         retArr.length = lastElement;
         retArr[lastElement] = 0; // return zero as the only array value
      }
   }
   return retArr;
}


function getSelectedCheckboxValue(buttonGroup) {
   // return an array of values selected in the check box group. if no boxes were checked, returned array will be empty (length will be zero)
   var retArr = new Array(); // set up empty array for the return values
   var selectedItems = getSelectedCheckbox(buttonGroup);
   if (selectedItems.length != 0) { // if there was something selected
      retArr.length = selectedItems.length;
      for (var i=0; i<selectedItems.length; i++) {
         if (buttonGroup[selectedItems[i]]) { // Make sure it's an array
            retArr[i] = buttonGroup[selectedItems[i]].value;
         } else { // It's not an array (there's just one check box and it's selected)
            retArr[i] = buttonGroup.value;// return that value
         }
      }
   }
   return retArr;
}


/*
 * Calculate price for sign
 * Determines by size, shape and number of sides
 */
function updatePrice( index ) {

    if (index == null) {
        if (getSelectedCheckboxValue(document.signBuilder.sign_size) != ''){
            index = getSelectedCheckboxValue(document.signBuilder.sign_size) - 1;
        } else {
            index = 0;
        }
    }

    var isDouble = getSelectedCheckboxValue(document.signBuilder.sign_side);
    var multiplier = 1;

    if (isDouble == '2') {
        multiplier = 1.5;
    }

    // get discount
    var discount = parseFloat($('discount_amount').value) * 1;

    if (isNaN(discount)) {
        discount = 0;
    }

    // Artwork charge
    var artwork_charge = parseFloat($('artwork_charge').value.split('=')[1]);

    if (isNaN(artwork_charge)) {
        artwork_charge = 0;
    }

    var selectedCurrency = $('currency-selector').value;

    var dummy_price = (((countries[selectedCurrency]['signPrices'][index] * multiplier) - (discount)) + artwork_charge).toFixed(2);
    var price = ((countries[selectedCurrency]['signPrices'][index] * multiplier));

    price = roundToNearest(price.toFixed(2), 1);
    var displayPrice = roundToNearest(parseFloat(dummy_price).toFixed(2), 1);

    $('sizes_price').setHTML("AUD$"+displayPrice);
    $('total_amount').setProperty('value', price);

    $$('.currency-aud .price').setHTML(displayPrice);
    $$('.currency-aud .currency-sign').setHTML(countries[selectedCurrency]['symbol']);
}

/**
 * Check the validity of the text
 *
 */
function isValidText(str)
{
    for(var i = 0; i<str.length; i++) {
    	var charCode = parseInt(str.charCodeAt(i));
        if(charCode<0 || charCode>127) {
	    return false;
	}
    }
    return true;
    
}


/*
 * Send the request to ImageMerger.php to build the new image
 * This is done by updating the src of the main sign image
 */
function setFormFieldAndSubmit(item_id) {
    designLoaded = false;

    if (item_id != null) {
        var data = item_id.split('|');
        if ( data != null && data[0] != null && data[0] != '' ) $(data[0].replace('_vp', '')).value = data[0].replace('_vp', '') + "=" + data[1];
    }

    var shape = $('shapes_shape').value;
    var corner = $('shapes_corner').value;
    var edge = $('shapes_edge').value;

    if (shape == '' ) return;

    var img_url_arr = $$('.requestString');
    var url_arr = new Array();

    for (i=0; i<img_url_arr.length; i++) {
        url_arr.push(mergerField(img_url_arr[i].id) + "=" + img_url_arr[i].value.replace(img_url_arr[i].id + "=", ''));
    }

    var myDate = new Date();
    url_arr.push('timestamp=' + myDate.getTime());
    var img_src = url_arr.join('&');
    
    //Check validity for main text and secondary text
    var mainText = decodeURIComponent(img_url_arr[3].value.replace(img_url_arr[3].id + "=", ''));
    var secondaryText = decodeURIComponent(img_url_arr[4].value.replace(img_url_arr[4].id + "=", ''));

    if (!isValidText(mainText) || !isValidText(secondaryText)) {
	$$('.action-purchase').setStyle('display','none');
	$('next-normal').setStyle('display', 'block');
	$('next-normal').addEvent('click', function(){
            nextStep();
        });
	$('sign-ready').setStyle('display', 'none');
        $('text_error').innerHTML = "Oops - you've entered characters that are not available to the Sign Designer. Please email us and let us know exactly what you want your sign to say, we can probably make it work for you.";
    } else {
	$('text_error').innerHTML = '';
    }
    //display loading when loading 
    $('main_img').setProperty('src', 'lib/ImageMerger.php?' + img_src);

    designLoaded = true;
    $('main_img').$tmp.myText = false;
    $('main_img').$tmp.myTitle = false;

    var selected_size = getCheckedValue(document.signBuilder.sign_size);

    if(selected_size != ''){
        setDimensions(selected_size-1);//added -1 to fix size bug
    }
}

/*
 * Map fields used in HTML to fields used in the ImageMerger.php script
 */
function mergerField(field) {
    switch (field) {
        case 'shapes_shape':
            return 'shape';
            break;
        case 'shapes_edge':
            return 'edge';
            break;
        case 'shapes_corner':
            return 'corner';
            break;
        case 'colours_background':
            return 'bgcolour';
            break;
        case 'colours_edge':
            return 'edge_colour';
            break;
        case 'colours_text':
            return 'font_colour';
            break;
        case 'artworks_artwork':
            return 'overlap';
            break;
        case 'fonts_primary':
            return 'font';
            break;
        case 'fonts_text':
            return 'text';
            break;
        case 'fonts_secondary':
            return 'font2';
            break;
        default:
            return field;
            break;
    }
}


function getWinWidth(){
        var x = 0;
        if(self.innerWidth)
        {
                x = self.innerWidth;
        } else if(document.documentElement && document.documentElement.clientWidth){
                x = document.documentElement.clientWidth;
        } else if(document.body){
                x = document.body.clientWidth;
        }
        return x;
}


function getWinHeight(){
        var x = 0;
        if(self.innerHeight)
        {
                x = self.innerHeight;
        } else if(document.documentElement && document.documentElement.clientHeight){
                x = document.documentElement.clientHeight;
        } else if(document.body){
                x = document.body.clientHeight;
        }
        return x;
}


/*
 * Custom Prompt Box
 */
function promptCustom(prompttitle, message, sendto, ftype){
        promptbox = document.createElement('div');
        promptbox.setAttribute ('id' , 'prompt');
        document.getElementsByTagName('body')[0].appendChild(promptbox);
        promptbox = eval("document.getElementById('prompt').style");
        promptbox.position = 'absolute';
        var pos_top = (getWinHeight() / 2) - 200;
        var pos_left = (getWinWidth() / 2) - 350;
        promptbox.top = pos_top + 'px';
        promptbox.left = pos_left + 'px';
        promptbox.width = '210px';
        document.getElementById('prompt').innerHTML = "<table cellspacing='0' cellpadding='0' border='0' width='210'><tr valign='middle'><td align='center' class='titlebar'>" + prompttitle + "</td></tr></table>";
        document.getElementById('prompt').innerHTML = document.getElementById('prompt').innerHTML + "<table cellspacing='0' cellpadding='0' border='0' width='210' class='promptbox'><tr><td width='5%'>&nbsp;</td><td>" + message + "</td></tr><tr><td width='5%'>&nbsp;</td><td><input type='text' id='promptbox' onblur='this.focus()' class='promptbox'></td></tr><tr><td width='5%'>&nbsp;</td><td align='right'><br><input type='button' class='prompt' value='OK' onMouseOver='this.style.border=\"1 outset #dddddd\"' onMouseOut='this.style.border=\"1 solid transparent\"' onClick='" + sendto + "(document.getElementById(\"promptbox\").value,\"" + ftype + "\"); document.getElementsByTagName(\"body\")[0].removeChild(document.getElementById(\"prompt\"))'> <input type='button' class='prompt' value='Cancel' onMouseOver='this.style.border=\"1 outset transparent\"' onMouseOut='this.style.border=\"1 solid transparent\"' onClick='" + sendto + "(\"\",\"" + ftype + "\"); document.getElementsByTagName(\"body\")[0].removeChild(document.getElementById(\"prompt\"))'></td></tr></table>";
        document.getElementById("promptbox").focus();
}

function transferValue(value, ftype){
        document.getElementById('load_save_design_value').value = value;
        if(ftype == 'load'){
                loadDesign();
        } else if(ftype == 'save'){
                saveDesign();
        }
}

/*
 * Send an AJAX request to save the current configuration of the sign
 * Saves the info in a text file in saves/
 */
function saveDesign(key) {
    var email;
    if(key == null){
        email = document.getElementById('load_save_design_value').value;
            document.getElementById('load_save_design_value').value = 'nil';
            if(email == 'nil'){
                    promptCustom('Save Design', 'Please enter your email address', 'transferValue', 'save');
                    email = '';
            }
    } else {
        email = key;
    }

    if (!email) return;

    $('sign_id').setProperty('value', email);
    var theParams = $$('.requestString');
    var theData = new Array();
    for (i=0; i<theParams.length; i++) {
        theData.push(theParams[i].value);
    }

    theData.push('email=' + email);

    new Ajax("saveDesign.php", {
        method: "POST",
        data: theData.join('&')
    }).request();
}


/*
 * Send an AJAX request to save the current configuration of the sign
 * Saves the info in a text file in saves/
 */
function emailDesign(form) {
    var theData = new Array();
    var email = email = form.your_email.value;

    theData.push('email=' + form.your_email.value);
    theData.push('name=' + form.your_name.value);
    theData.push('otherName=' + form.friend_1_name.value);
    theData.push('otherEmail=' + form.friend_1_email.value);
    theData.push('message=' + form.message.value);

    if ($('sign_id')) {
        $('sign_id').setProperty('value', email);
    }
    var theParams = $$('.requestString');

    for (i=0; i<theParams.length; i++) {
        theData.push(theParams[i].value);
    }

    new Ajax("saveDesign.php", {
        method: "POST",
        data: theData.join('&')
    }).request();
}


/*
 * Load an existing sign
 * User is prompted to enter their Sign ID
 *
 * THIS WILL NEED TO BE CHANGED TO ACCEPT AN EMAIL ADDRESS
 */
function loadDesign(key) {
    
    var sign_id = '';
    var designLoaded;
    if (key == null) {
        //var sign_id = prompt('Please enter your email address', $('sign_id').value);
        /*var sign_id = document.getElementById('load_save_design_value').value;
                document.getElementById('load_save_design_value').value = 'nil';
                if(sign_id == 'nil'){
                        promptCustom('Load Design', 'Please enter your email address', 'transferValue','load');
                        sign_id = '';
                }
        if (!sign_id || sign_id == 'undefined') {
            return;
        }*/
    } else {
        designLoaded = false;
        sign_id = decodeURIComponent(key);
        
    }
    var conf = false;
    var pars = sign_id.split('&');
    for(i = 0; i<pars.length; i++){
        var dat = pars[i].split('=');
        if(dat[0] == 'load_config'){
            if(dat[1] == 'true'){
                conf = true;
                break;
            }
        }
    }

    if(conf){	
        var eles = $$('.requestString');
        for (x=0; x<eles.length; x++) {
            eles[x].value = '';
        }
        for(i = 0; i<pars.length; i++){
            dat = pars[i].split('=');
            
            if(dat[0] != 'load_config' && dat[0] != '_method' && dat[0] != ''){
                if(dat[0] == 'fonts_text' || dat[0] == 'fonts_secondary' ) {
                    
                    //pars[i] = decodeURIComponent(pars[i]).replace(/\\+/,'');
                } else if (dat[0] == 'discount_amount' || dat[0] == 'promo_code') {
                    $(dat[0]).value = pars[i].split('=')[1];
                    continue;
                }
                $(dat[0]).value = pars[i];
                
                setActiveImage(dat[0]);
            }
        }
        setFormFieldAndSubmit();
        setDimensions(0);
    } else {
    new Ajax("lib/load.php", {
        method: "POST",
        data: 'sign_id=' + encodeURIComponent(sign_id),
        onComplete: function(msg){
            if (msg == '-1') {
                alert('Sign design not found');
            } else {
                var src = 'lib/ImageMerger.php?' + msg;
                var params = msg.split('&');
                var elems = $$('.requestString');
                for (x=0; x<elems.length; x++) {
                    elems[x].value = '';
                }
                for (i=0; i<params.length; i++) {
                    var data = params[i].split('=');
                    if (data[0] != '_method') {
                        $(data[0]).value = params[i];
                        setActiveImage(data[0]);
                    }
                }
                $('sign_id').value = sign_id;
                //$('sign_id_view').innerHTML = sign_id;
                setFormFieldAndSubmit();
                setDimensions(0);
            }
        }
    }).request();
    }
    //setActiveImages();
}


/*
function setActiveImage(field) {
    val = $(field).value;
    splits = val.split('=');//0 = dir path, 1 = file
    dir = splits[0].split('_'); //shapes_shape => shapes, shape
    //dirs = dir.join('/');//shapes, shape => shapes/shape
    dirs = dir[0] + "/picker/" + dir[1];
    img_id = splits[0] + '_vp|' + splits[1];
    path = 'images/' + dirs + '/' + splits[1] + '_active.png';
    if ($(img_id) != null) {
        $(img_id).setProperty('src', path);
        selectedImages[$(img_id).parentNode.id] = img_id;
    }
    // special for fonts_text
    if(splits[0] == 'fonts_text'){
        document.signBuilder.fonts_text_display.value = decodeURIComponent(splits[1]).replace(/[\\]/g,'').replace(/\+/g,' ');
    }
}
*/


function setActiveImage(field) {
    var val = $(field).value;
    var splits = val.split('='); //0 = dir path, 1 = file
    var dir = splits[0].split('_'); //shapes_shape => shapes, shape
    var dirs = dir[0] + "/picker/" + dir[1];
    img_id = splits[0] + '_vp|' + splits[1];
    var path = 'images/' + dirs + '/' + splits[1] + '_active.png';

    if ($(img_id) != null) {
        $(img_id).setProperty('src', path);
        selectedImages[$(img_id).parentNode.id] = img_id;
    }
    // special for fonts_text
    
    if(splits[0] == 'fonts_text'){
        document.signBuilder.fonts_text_display.value = html_entity_decode(decodeURIComponent(splits[1]));
    } else if (splits[0] == "fonts_secondary") {
    	document.signBuilder.fonts_subtext_display.value = html_entity_decode(decodeURIComponent(splits[1]));
    } else if(splits[0] == "cartwork_description") {	
	    document.signBuilder.cartwork_description_display.value = html_entity_decode(decodeURIComponent(splits[1]));
    }
}



function openHelpPopup() {
    var src = 'faq.php';
    /*MOOdalBox.open( // case matters
    src, // the link URL
    "The Sign Designer", // the caption (link's title) - can be blank
    "503 380" // width and height of the box - can be left blank
    );*/
    //window.open(src, 'The_Sign_designer_FAQs', "width=520,height=400,resizable=no,scrollbars=yes,toolbars=no,status=no,menubar=no,copyhistory=no");
    ddPopup.open('FAQ.html');
}

function openTellPopup() {
    var eles = $$('.requestString');
    var img_query = '';
    for(i = 0; i<eles.length; i++){
        dat = eles[i].value.split('=');
        if(dat[0] != 'load_config' && dat[0] != '' && dat[1] != ''){
            img_query += 'requestString[]=' + encodeURIComponent(eles[i].value);
        }
        if(i != (eles.length - 1)){
            img_query += "&";
        }
    }
    var src = 'tellafriend.php?' + img_query;
    /*MOOdalBox.open( // case matters
    src, // the link URL
    "The Sign Designer", // the caption (link's title) - can be blank
    "503 490" // width and height of the box - can be left blank
    );*/
    //window.open(src, 'The_Sign_designer_Tell_a_friend', "width=520,height=550,resizable=no,scrollbars=yes,toolbars=no,status=no,menubar=no,copyhistory=no");
    ddPopup.open(src);
}


function startOver(){
    //reset params
    var params = $$('.requestString');
    for (i=0; i<params.length; i++) {
        params[i].value = '';
    }
    //reset size
    setDimensions(0);
    //load blank page
    //loadDesign('gallery/blank');
    $('main_img').setProperty('src','images/misc/blank.gif');
    // reset active images
    var imgs = $$('.viewer img');
    for(i=0; i<imgs.length; i++){
        s = imgs[i].getProperty('src');
        if(s.indexOf('_active') > -1){
            imgs[i].setProperty('src',s.replace('_active','_normal'));
        }
    }
    // rest text
    document.signBuilder.fonts_text_display.value = '';

    // go to first step
    $('next_normal').onclick = '';
    $('next_normal').removeEvents();

	$('next_normal').setProperty('src', s);
/*
    var hasFilter = (/MSIE (5\.5|6)/.test(navigator.userAgent));
    s = 'images/misc/next_normal.png';

    if(!hasFilter){
        $('next_normal').setProperty('src', s);
    } else {
        $('next_normal').filters.item("DXImageTransform.Microsoft.AlphaImageLoader").Src = s;
    }
*/
    $('next_normal').addEvent('click', function() {
        nextStep();
    });
    nextStep();
}

function showPromoField(){

    var cont = $('promo_container')


    cont.setHTML('');
    var el1 = new Element('input',{
        'name': 'promoCode',
        'class': 'inputbox',
        'size': '8'
    });
    cont.adopt(el1);
    var el2 = new Element('span',{
        'name':'spc'
    });
    el2.setHTML('&nbsp;&nbsp;');
    cont.adopt(el2);
    var el3 = new Element('a',{
        'href':'javascript:void(1);',
        'onclick':''//something to make the price update to reflect the promo code
    });
    el3.setHTML('apply code');
    cont.adopt(el3);

}

function preloadImages(key){
    preLoaded = false;
    //to load all images in a directory, pass in a path ending in "/"
    //var k = key.replace(/^\//,'');//strip leading slashes for getPreloadImages.php
    var r = /\/$/;
    if(r.test(key)){
        new Ajax("getPreloadImages.php", {
            method: "get",
            async: true,
            data: 'dir=' + key,
            onComplete: function(msg){
                eval(msg);
                new Asset.images(images,{
                    onComplete: function(){
                        preLoaded = true;
                    }
                });
            }
        }).request();
    }else{
        new Asset.images(key,{
            onComplete: function(){
                preLoaded = true;
            }
        });
        preLoaded = true;
    }
}

function preloadPanel(key){
    if(panelLoaded[key] || key == 'fonts_text_vp' || key == 'sizes_size_vp'){
        return;
    }
    chk = setInterval(function(){
        if(designLoaded){//wait until design is loaded before starting preload
            clearInterval(chk);
            var k = key.replace('_vp','');
            data = k.split('_');
            preloadImages('images/' + data[0] + '/picker/' + data[1] + '/');
            panelLoaded[key] = true;
            return panelLoaded[key];
        }
    },100);
}

/*
 * DEPRECATED
 */
function downloadDesign() {
    var src = $('main_img').getProperty('src');
    var sid = $('sign_id').value;
    window.open(src, 'Sign ID: ' + sid, "width=420,height=320,resizable=no,scrollbars=no,toolbars=no,status=no,menubar=no,copyhistory=no");
}

function goLite(obj)
{
   obj.style.color = "#ffffff";
   obj.style.backgroundColor = "#830200";
}

function goDim(obj)
{
   obj.style.color = "#222222";
   obj.style.backgroundColor = "#e8d187";
}

function changeImagesArray(array) {
     //  if (preloadFlag == true)
    {
                var d = document;var img;
                for (var i=0; i<array.length; i+=2) {
                        img = null;var n = array[i];
                        if (d.images) {img = d.images[n];}
                        if (!img && d.getElementById) {img = d.getElementById(n);}
                        if (img) {img.src = array[i+1];}
                }
    }
}


function changeImages() {
        changeImagesArray(changeImages.arguments);
}

var cl = null;
// Handles custom artwork upload
var CustomArtwork = {

    errtimer: false,
    fname: '',

    onChange: function(e) {

        var form = document.artworkul_form;

        form.innerHTML = '';

        // Clone
        cl = e.cloneNode(true);

        // Append to form
        form.appendChild(e);
		
        // Submit form
        form.submit();
        // Disable Element
        e.disabled = true;

        // Show loader
        $('cartworkload').setStyle('display', 'inline');

        // Error timer
/*        CustomArtwork.errtimer = setTimeout(function() {

            // Show alert
            //alert('An unknown error occured, please try again.');

            CustomArtwork.clear();

        }, 20000);
		
  */
  },

    onUploadComplete: function(_data) {

        var data = null;
        // Parse json
        try {
            data = Json.evaluate(_data);
        } catch (e) {
			data = {error: true, msg: 'An unknown error occured, please try again.'};
		}


        // Clear error timer
        //clearTimeout(CustomArtwork.errtimer);

        // Alert error msg
        if (data.error) {
            alert(data.msg);
			$('cartwork_container').appendChild(cl); 
			cl.value='';
        } else {

            CustomArtwork.fname = data.new_filename;

            // Hide El
            $('cartwork').setStyle('display', 'none');

            // Show ul label
            $('cartowork_iu').setStyle('display', 'inline');
            $('cartwork_ll').setHTML(data.orig_filename);

            // add to request string
            $('cartwork_origfilename').value = 'cartwork_origfilename=' + data.orig_filename;
            $('cartwork_newfilename').value = 'cartwork_newfilename=' + data.new_filename;
        }

        CustomArtwork.clear();

    },

    // Clear el
    clear: function() {

        var e = $('cartwork');

        // Enable element
        e.disabled = false;

        // Clear
        e.value = '';

        // Hide loader
        $('cartworkload').setStyle('display', 'none');

    },

    // Removes uploaded file
    removeFile: function() {

        $('cartwork_container').appendChild(cl); 
        cl.value='';
        // Hide lbl
        $('cartowork_iu').setStyle('display', 'none');

        $('cartwork').setStyle('display', 'inline');

        $('artworkul').src = 'lib/processing/uploadcustom.php?remove=' + CustomArtwork.fname;

        $('cartwork_origfilename').value = '';
        $('cartwork_newfilename').value = '';
        CustomArtwork.fname = '';

    }

};


// Promo code manager
var PromoCode = {

    validate: function(code) {

        var buttonval = ($('sb_promo_b') ? $('sb_promo_b').value : '');

        if (code.length == 0) {
            try {
                // Checkout page
                updateAmount($('discount_amount').value, $('artwork_charge').value);
            } catch (e) {
                    // Set discount amopunt
                    $('discount_amount').value = 0;
                    $('promo_code').value = '';

                    updatePrice();
                    $('sb_promo_b').value = 'Add Code';
            }
            return;
        }

        try {
            $('sb_promo_b').value = "Checking...";
        } catch (e) {}

        // Vaidate code on server
        new Ajax("lib/validate_promo.php", {
            method: "POST",
            data: 'code=' + encodeURIComponent(code),
            onComplete: function(msg){

                var unknown_msg = 'An unknown error occurred, Please try again.';
                var data = {error: true, msg: unknown_msg}

                // Reset button
                try {
                    $('sb_promo_b').value = buttonval;
                } catch (e) {}

                try {
                    data = Json.evaluate(msg);
                } catch (e) {}

                if (data.error) {
                    alert(data.msg);

                    if (data.clear) {
                        $('promocodei').value = '';
                    }

                    try {
                        // Checkout page
                       	updateAmount($('discount_amount').value, $('artwork_charge').value);
                    } catch (e) {
                        // Set discount amopunt
                        $('discount_amount').value = 0;
                        $('promo_code').value = '';

                        updatePrice();

                    }

                    return;
                }

                if (typeof(data.amount) == 'undefined') {
                    alert(unknown_msg);
                    return;
                }

                // Recalculate amount
                try {
                    // Checkout page
                    updateAmount(parseFloat(data.amount), $('artwork_charge').value);
                } catch (e) {

                    // Set discount amopunt
                    $('discount_amount').value = data.amount;
                    $('promo_code').value = code;
                    $('currency-discount').innerHTML = '$'+data.amount+' discount applied';
                    $$('.action-purchase-price').setStyle('padding-top','0');

                    updatePrice();
                    ddPopup.close();
                }

                // Notify
                alert('Promo code entered successfully.');

            }

        }).request();

    }

};


function setCustomArtwork() {
    accordions['artworkAccordion'].display(1);
    setArtworkCharge(true);
}


// Adds artwork charge
function setArtworkCharge(set) {

    if (set) {
        var selectedCountry = countries[$('currency-selector').value];
        $('artwork_charge').value = "artwork_charge=" + selectedCountry['artworkCharge'];
    } else {
        $('artwork_charge').value = "artwork_charge=0";
    }

    updatePrice();
}

function changeCurrency(code) {

    if (code) {
        $('currency-selector').value = code;
    }

    flag = countries[$('currency-selector').value]['flag'];
    $('country-container').setHTML('<img src="images/flags/'+flag+'" />')

    if ($('artwork_charge').value != "artwork_charge=0") {
        setArtworkCharge(true);
    }

    updatePrice();
}
