var js_trans_table = {
    '¡' : '&iexcl;',
    '¢' : '&cent;',
    '£' : '&pound;',
    '¤' : '&curren;',
    '¥' : '&yen;',
    '¦' : '&brvbar;',
    '§' : '&sect;',
    '¨' : '&uml;',
    '©' : '&copy;',
    'ª' : '&ordf;',
    '«' : '&laquo;',
    '¬' : '&not;',
    '­' : '&shy;',
    '®' : '&reg;',
    '¯' : '&macr;',
    '°' : '&deg;',
    '±' : '&plusmn;',
    '²' : '&sup2;',
    '³' : '&sup3;',
    '´' : '&acute;',
    'µ' : '&micro;',
    '¶' : '&para;',
    '·' : '&middot;',
    '¸' : '&cedil;',
    '¹' : '&sup1;',
    'º' : '&ordm;',
    '»' : '&raquo;',
    '¼' : '&frac14;',
    '½' : '&frac12;',
    '¾' : '&frac34;',
    '¿' : '&iquest;',
    'À' : '&Agrave;',
    'Á' : '&Aacute;',
    'Â' : '&Acirc;',
    'Ã' : '&Atilde;',
    'Ä' : '&Auml;',
    'Å' : '&Aring;',
    'Æ' : '&AElig;',
    'Ç' : '&Ccedil;',
    'È' : '&Egrave;',
    'É' : '&Eacute;',
    'Ê' : '&Ecirc;',
    'Ë' : '&Euml;',
    'Ì' : '&Igrave;',
    'Í' : '&Iacute;',
    'Î' : '&Icirc;',
    'Ï' : '&Iuml;',
    'Ð' : '&ETH;',
    'Ñ' : '&Ntilde;',
    'Ò' : '&Ograve;',
    'Ó' : '&Oacute;',
    'Ô' : '&Ocirc;',
    'Õ' : '&Otilde;',
    'Ö' : '&Ouml;',
    '×' : '&times;',
    'Ø' : '&Oslash;',
    'Ù' : '&Ugrave;',
    'Ú' : '&Uacute;',
    'Û' : '&Ucirc;',
    'Ü' : '&Uuml;',
    'Ý' : '&Yacute;',
    'Þ' : '&THORN;',
    'ß' : '&szlig;',
    'à' : '&agrave;',
    'á' : '&aacute;',
    'â' : '&acirc;',
    'ã' : '&atilde;',
    'ä' : '&auml;',
    'å' : '&aring;',
    'æ' : '&aelig;',
    'ç' : '&ccedil;',
    'è' : '&egrave;',
    'é' : '&eacute;',
    'ê' : '&ecirc;',
    'ë' : '&euml;',
    'ì' : '&igrave;',
    'í' : '&iacute;',
    'î' : '&icirc;',
    'ï' : '&iuml;',
    'ð' : '&eth;',
    'ñ' : '&ntilde;',
    'ò' : '&ograve;',
    'ó' : '&oacute;',
    'ô' : '&ocirc;',
    'õ' : '&otilde;',
    'ö' : '&ouml;',
    '÷' : '&divide;',
    'ø' : '&oslash;',
    'ù' : '&ugrave;',
    'ú' : '&uacute;',
    'û' : '&ucirc;',
    'ü' : '&uuml;',
    'ý' : '&yacute;',
    'þ' : '&thorn;',
    'ÿ' : '&yuml;',
    '<' : '&lt;',
    '>' : '&gt;'
};

function toggle(id) {
    var element = document.getElementById(id);
    if (element.style.display == 'block') {
        element.style.display = 'none';
    }
    else {
        element.style.display = 'block';
    }
}


function comment_toggle(conversation_id, reply_id) {
    var elem_conversation = document.getElementById(conversation_id);
    var elem_reply        = document.getElementById(reply_id);
    if ((elem_conversation.style.display == 'block') &&
        (elem_reply.style.display        != 'block')) {
            toggle(reply_id);
    }
    else {
        toggle(conversation_id);
        toggle(reply_id);
    }
}


function comment_post(item_id, comment) {
    if (comment == '') return;

    document.getElementById('comment_cmd').value     = 'comment_post';
    document.getElementById('comment_type').value    = (item_id == 'list') ? 'list' : 'item';
    document.getElementById('comment_item_id').value = (item_id == 'list') ? 0      : item_id;
    document.getElementById('comment_comment').value = comment;
    comment_form_submit();
}


function comment_delete(comment_no) {
    if (!confirm('Are you sure you want to delete this comment?')) return;

    document.getElementById('comment_cmd').value        = 'comment_delete';
    document.getElementById('comment_comment_no').value = comment_no;
    comment_form_submit();
}


function comment_form_submit() {
    var form = document.getElementById('wishlist_comment');
    form.submit();
}


function list_share() {
    var params = {
        'cmd'  : 'list_share',
        'from' : get_element_value('FromEmail'),
        'name' : get_element_value('FromName'),
        'to'   : get_element_value('ToEmail'),
        'msg'  : get_element_value('Message')
    };
    ajax_request('list_share', params);
}


function item_reserve(item_id, value) {
    var params = {
        'cmd'     : 'item_reserve',
        'item_id' : item_id,
        'value'   : value
    };
    ajax_request('item_reserve', params);
}

function check_list_name(edit_id) {
    var table = document.getElementById('manageWishlists');
    list_name = new String(table.rows[edit_id].cells[1].childNodes[0].value);
    err = '';
    
    // check listname
    var re = new RegExp("^[ ]*$");
    if ( re.test(list_name) ) {
        err = 'Invalid name. Please choose another.';
    }
    
    // check uniqueness - skip the thead (start from 1)
    for (i=1; i < table.rows.length; i++) {
        if (i != edit_id) {
            current = new String(table.rows[i].cells[1].childNodes[0].value);
            if (current.toLowerCase() == list_name.toLowerCase()) {
                err = 'This name is already in use. Please choose another.';
                break;
            }
            
        }
    }
    
    return err;
}


function manage_new() {
    var table = document.getElementById('manageWishlists');
    
    err = check_list_name(table.rows.length-1);
    
    if ( err != '' ) {
        alert(err);
        table.rows[table.rows.length-1].cells[1].childNodes[0].select();
        return false;
    }
    
    var params = {
        'cmd'        : 'manage_new',
        'list_name'  : list_name
    };

    ajax_request('manage_new', params);
}


function enable_create_list_button() {
    button = document.getElementById('list_create');
    button2 = document.getElementById('doneButton');
    button.disabled = false;
    button.className = 'button';
    button2.disabled = false;
    button2.className = 'button';
}


function disable_create_list_button() {
    button = document.getElementById('list_create');
    button2 = document.getElementById('doneButton');
    button.disabled = true;
    button.className = 'disabled';
    button2.disabled = true;
    button2.className = 'disabled';
}


function manage_default(list_id) {
    var params = {
        'cmd'        : 'manage_default',
        'list_id'    : list_id
    };
    ajax_request('manage_default', params);
}


function update_initial_values(list_id, list_name) {
    initial['list' + list_id] = list_name;
}


function manage_name(list_id, list_name) {
    if (list_name == '') return;
    
    current_list = 'list' + list_id;
    var table = document.getElementById('manageWishlists');
    for (edit_id=1; edit_id < table.rows.length; edit_id++) {
        if (table.rows[edit_id].cells[1].childNodes[0].id == current_list) break;
    }

    err = check_list_name(edit_id);
    
    if ( err != '' ) {
        alert(err);
        table.rows[edit_id].cells[1].childNodes[0].value = initial[table.rows[edit_id].cells[1].childNodes[0].id];
        table.rows[edit_id].cells[1].childNodes[0].select();
        return false;
    }

    var params = {
        'cmd'       : 'manage_name',
        'list_id'   : list_id,
        'list_name' : list_name
    };
    ajax_request('manage_name', params);
}


function manage_private(list_id, value) {
    var params = {
        'cmd'     : 'manage_private',
        'list_id' : list_id,
        'value'   : value ? 0 : 1
    };
    ajax_request('manage_private', params);
}


function list_delete(list_id) {
    if (!confirm('Are you sure you want to delete this list?')) return;

    var params = {
        'cmd'        : 'list_delete',
        'list_id'    : list_id
    };
    ajax_request('list_delete', params);
}


function list_create() {
    disable_create_list_button();
    var table = document.getElementById('manageWishlists');
    var row_id = 'newList' + table.rows.length;
    var list_name = 'My Wishlist';
    var list_pattern = list_name + ' - ';

    var table = document.getElementById('manageWishlists');
    if (table.rows.length > 1) {
        base_found = false;
        for (id=1; id < table.rows.length; id++) {
            if (list_name == table.rows[id].cells[1].childNodes[0].value) {
                base_found = true;
            }
        }

        if (base_found) {
            var no = 1;
            var re = new RegExp('^' + list_pattern + '(\\d+)$');
            for (id=1; id < table.rows.length; id++) {
                matched = table.rows[id].cells[1].childNodes[0].value.match(re);
                if (matched && matched.length > 1) {
                    if (matched[1] >= no) {
                        no = parseInt(matched[1]) + 1;
                    }
                }
            }
            
            list_name = list_pattern + no;
        }
    }

    var row = table.insertRow(-1);
    var cell_default = row.insertCell(-1);
    cell_default.style.textAlign = 'center';
    cell_default.innerHTML = '&nbsp;';

    var cell_name = row.insertCell(-1);
    cell_name.innerHTML = '<input type="text" id="' + row_id + '" value="' + list_name + '" size="64" />';

    var cell_private = row.insertCell(-1);
    cell_private.innerHTML = '<input type="button" class="button" value="&nbsp;Save&nbsp;"  onclick="manage_new()"/>';

    var cell_delete = row.insertCell(-1);
    cell_delete.style.textAlign = 'center';
    cell_delete.innerHTML = '<a href="#" onclick="delete_tmp_row(); return false;">Delete</a>';

    document.getElementById(row_id).select();
}


function delete_tmp_row() {
    var table = document.getElementById('manageWishlists');
    table.deleteRow(-1);

    document.getElementById('list_create').disabled = false;
    enable_create_list_button();
}


function ajax_request(id, params) {
    AjaxEngine.makeReplaceCall(
        id,
        {
            'parameters' : params,
            'timeout'    : 20000,
            'onLoading'  : function() { loader_show(); },
            'onComplete' : function() { loader_hide(); },
            'onError'    : function() { loader_hide(); alert('An error has occured. Please try again.'); },
            'onTimeout'  : function() { loader_hide(); alert('The request has timed out. Please try again.'); }
        }
    );
}


function create_row(list_id, list_name) {
    var table = document.getElementById('manageWishlists');
    var row_id = 'list' + list_id;
    var row = table.insertRow(-1);

    var cell_default = row.insertCell(-1);
    var checked_default = (table.rows.length == 2) ? ' checked' : '';
    cell_default.style.textAlign = 'center';
    cell_default.innerHTML = '<input type="radio" name="defaultWishlist" onclick="manage_default(' + list_id + ');"' + checked_default + ' />';

    var cell_name = row.insertCell(-1);
    cell_name.innerHTML = '<input type="text" id="' + row_id + '" value="' + list_name + '" size="64" onblur="manage_name(' + list_id + ', this.value);" />';

    var cell_private = row.insertCell(-1);
    cell_private.innerHTML = '<input type="checkbox" onclick="manage_private(' + list_id + ', this.checked);" /> Only I can see it';

    var cell_delete = row.insertCell(-1);
    cell_delete.style.textAlign = 'center';
    cell_delete.innerHTML = '<a href="#" onclick="list_delete(' + list_id + '); return false;">Delete</a>';

    document.getElementById(row_id).select();
}


function fieldEvent(event, text) {
    target = event.currentTarget || event.srcElement;
    if (event.type == 'focus' && target.value == text) {
        target.className = 'fieldBlack';
        target.value = '';
    } else if (event.type == 'blur' && target.value == '' && text != '') {
        target.className = 'fieldGray';
        target.value = text;
    }
}

function showWLAddDialog(ev, context, app_id, foreign_id, title, url, price, store, description, image, product_url, ebay_type, ebay_ending_time, default_priority) {

    if (!ev) {
        ev = window.event;
    }

    var scrollxy = getScrollXY();
    var mouse_Xpos;
    if (ev.pageX) {
        mouse_Xpos = ev.pageX;
    } else if (ev.clientX) {
        mouse_Xpos = ev.clientX + scrollxy[0];
    } else {
        return;
    }

    var mouse_Ypos;
    if (ev.pageY) {
        mouse_Ypos = ev.pageY;
    } else if (ev.clientY) {
        mouse_Ypos = ev.clientY + scrollxy[1];
    } else {
        return;
    }


    var wl_app_id = document.getElementById("wl_app_id");
    var wl_foreign_id = document.getElementById("wl_add_product_foreign_id");
    var wl_title = document.getElementById("wl_add_product_title");
    var wl_url = document.getElementById("wl_add_product_url");
    var wl_price = document.getElementById("wl_add_product_price");
    var wl_store = document.getElementById("wl_add_product_store");
    var wl_description = document.getElementById("wl_add_product_description");
    var wl_image = document.getElementById("wl_add_product_image");
    var wl_product_url = document.getElementById("wl_add_product_product_url");
    var wl_ebay_type = document.getElementById("wl_add_product_ebay_type");
    var wl_ebay_ending_time = document.getElementById("wl_add_product_ebay_ending_time");
    var wl_wishlist_comment = document.getElementById("wishlist_comment");
    var wl_wishlist_priority = document.getElementById("wishlist_priority");

    if (!wl_app_id || !wl_foreign_id || !wl_title || !wl_url || !wl_price || !wl_store
            || !wl_description || !wl_image || !wl_product_url || !wl_ebay_type || !wl_ebay_ending_time
            || typeof(app_id) == "undefined" || typeof(foreign_id) == "undefined"
            || typeof(title) == "undefined" || typeof(url) == "undefined"
            || typeof(price) == "undefined" || typeof(store) == "undefined"
            || typeof(description) == "undefined" || typeof(image) == "undefined") {
        return;
    }

    if (description.length == 0) {
        description = title;
    }

    wl_app_id.value = app_id;
    wl_foreign_id.value = foreign_id;
    wl_title.value = js_html_entities(title);
    wl_url.value = url;
    wl_price.value = price;
    wl_store.value = store;
    wl_description.value = js_html_entities(description);
    wl_image.value = image;
    if (typeof(product_url) != undefined) {
        wl_product_url.value = product_url;
    }
    if (typeof(ebay_type) != "undefined") {
        wl_ebay_type.value = ebay_type;
    }
    if (typeof(ebay_ending_time) != "undefined") {
        wl_ebay_ending_time.value = ebay_ending_time;
    }
    if (wl_wishlist_comment) {
        wl_wishlist_comment.value = "";
        wl_wishlist_comment.className = "fieldGray";
    }
    if (wl_wishlist_priority && typeof(default_priority) != "undefined") {
        for (i = 0; i < wl_wishlist_priority.length - 1; i++) {
            if(wl_wishlist_priority.options[i].value == default_priority) {
                wl_wishlist_priority.selectedIndex = i;
                wl_wishlist_priority.options[i].selected = true;
                break;
            }
        }
    }

    var form_box = document.getElementById('wishlist_dialog_form');
    var response_box = document.getElementById('wishlist_dialog_response');
    var dialogBox = document.getElementById('wishlist_add_dialog');
    if (!form_box || !response_box || !dialogBox) {
        return;
    }

    form_box.style.display = 'block';
    response_box.style.display = 'none';
    dialogBox.style.display='block';

    dialogBox.style.left=mouse_Xpos+'px';
    dialogBox.style.top=mouse_Ypos+'px';
}

function getScrollXY() {
    var scrOfX = 0, scrOfY = 0;
    if( typeof( window.pageYOffset ) == 'number' ) {
        //Netscape compliant
        scrOfY = window.pageYOffset;
        scrOfX = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
        //DOM compliant
        scrOfY = document.body.scrollTop;
        scrOfX = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
    }
    return [ scrOfX, scrOfY ];
}

function js_html_entities(s)
{
    if (!s) {
        return "";
    }
    var st = new String();
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (js_trans_table[c]) {
            st += js_trans_table[c];
        } else {
            st += c;
        }
    }

    return st;
}

function hideWLAddDialog()
{
    var dialogBox = document.getElementById('wishlist_add_dialog');
    if (!dialogBox) {
        return;
    }

    dialogBox.style.display = 'none';
}

function is_input_not_prefill(input_id, default_text)
{
    var input_obj = document.getElementById(input_id);
    if (!input_obj || typeof(default_text) == "undefined") {
        return false;
    }

    if ("" != default_text && input_obj.value == default_text) {
        return false;
    }

    return true;
}

function ajax_add_to_wishlist(wish_form, new_list_text)
{
    if (typeof(wish_form) == 'undefined') {
        return false;
    }

    var lists_select = document.getElementById("wishlist_name");
    if (!lists_select) {
        return false;
    }

    if (lists_select && lists_select.selectedIndex == lists_select.length - 1) {
        if(!is_input_not_prefill('new_wishlist_name', new_list_text)) {
            alert("Don't forget to give your new list a name!");
            return false;
        }
        else {
            newText = new String(wish_form.new_wishlist_name.value);
            for (i=0; i < lists_select.length - 1; i++) {
                currentText = new String(lists_select.options[i].text);
                if(currentText.toLowerCase() == newText.toLowerCase()) {
                    alert("This name is already in use. Please choose another.");
                    return false;
                }
            }
        }
    }

    var wishlist_loader_id = 'wishlist_progress_loader';

    var status = AjaxRequest.submit(
        wish_form,
        {
            'timeout'    : 20000,
            'onLoading'  : function() { wishlist_updating_show(wishlist_loader_id); },
            'onComplete' : function(req) { wishlist_updating_hide(wishlist_loader_id); AjaxResponse.handleResponse(req)},
            'onError'    : function() { wishlist_updating_hide(wishlist_loader_id); alert('An error has occured. Please try again.'); },
            'onTimeout'  : function() { wishlist_updating_hide(wishlist_loader_id); alert('The request has timed out. Please try again.'); }
        }
    );

    return status;
}

function wishlist_updating_show(progress_item)
{
    var progress = document.getElementById(progress_item);
    if (!progress) {
        return;
    }

    progress.style.display = 'block';
}

function wishlist_updating_hide(progress_item)
{
    var progress = document.getElementById(progress_item);
    if (!progress) {
        return;
    }

    progress.style.display = 'none';
}


function change_skin(id) {
    var skin = document.getElementById('skin').value;
    var flash = document.getElementById('widget_flash');
    var template = document.getElementById('widget_code').value;
    var new_code = template.replace(/dealio.swf|ornaments.swf|snowman.swf/g, skin);
    var new_flash = flash.innerHTML.replace(/dealio.swf|ornaments.swf|snowman.swf/g, skin);
    document.getElementById('widget_flash').innerHTML = new_flash;
    document.getElementById('widget_code').value = new_code;
}


function location_anchor(name) {
    window.location += '#' + name;
}
