String.prototype.urlparam = function(param)
{
    param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+param+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( this );
    if( results == null ) {
        return "";
    }
    else {
        return results[1];
    }
};

function RequestConfirm(DeleteObj, message)
{
    // Add background to obj to be removed
    jQuery(DeleteObj).addClass("red-highlight");
    
    // Request confirmation
    if (confirm(message))
    {
        // confirmed, return true
        return true;
    }
    else
    {
        // declined, remove background and return false
        jQuery(DeleteObj).removeClass("red-highlight");
        return false;
    }
}

/* jQuery/DOM ready */
jQuery(function(){
	
	/* Basket show/hide */
	jQuery('#header div.basket')
		.live('click', function(e){
		    if (jQuery(e.target).parent().is("a")) 
		    { 
		        return true;
		    }
		    else {
		        jQuery(this).find("> a.view-basket").toggleClass("open").next().slideToggle(150);
			    return false;
			}
		});
	
	if (jQuery.browser.msie && jQuery.browser.version == 7)
	{
		DD_roundies.addRule('.data-input, .button', '5px', false);
		DD_roundies.addRule('.roundify', '7px', false);
		DD_roundies.addRule('#header div.menu li div.outer', '10px', false);
		
		jQuery('#header div.menu li').hover(function(){
			jQuery(this).children().filter('div, ignore').show();
		}, function(){
			 jQuery(this).children().filter('div, ignore').hide();
		});

		jQuery('.products-list a, .category-list a').live('click', function(){
			window.location.href = jQuery(this).attr('href');
		});
	}

	if (jQuery.browser.version == 6)
	{
	    jQuery('.products-list a, .category-list a').live('click', function(){
			window.location.href = jQuery(this).attr('href');
		});
		jQuery('body').prepend('<div class="ie6-user">This site has been optimised for <a href="http://www.getfirefox.com" target="_blank">Firefox</a>, <a href="http://www.apple.com/safari" target="_blank">Safari</a>, <a href="http://www.google.com/chrome" target="_blank">Google Chrome</a> and <a href="http://www.microsoft.com/windows/Internet-explorer/default.aspx" target="_blank">Internet Explorer 7/8</a>.<br />For the best viewing experience we highly recommend that you upgrade your browser</div>');
	}
			
	jQuery('.jCarouselify').jcarousel({});	
	
	jQuery("a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded'});
});

/***********************************/
/*           Product Page          */
/***********************************/
var ProductOptionSelect = function()
{
    jQuery(this).parents('.option:eq(0)').nextAll().find('select').empty();
    
    /* Clear option info label */
    jQuery('.buying-options .option-info').text('');

    options = {
        productID: jQuery('.input_productID').val(),
        selected: [],
        nextSelect: null,
        nextType: 0,
        quantity: 1
    };
    /* Get selected options */
    jQuery('.options select').each(function(){
        /* If quantity, set quantity */
        if (jQuery(this).hasClass('quantity')){
            options.quantity = jQuery('option:selected', this).val();
        }
        else {
            /* Add option */
            options.selected.push(jQuery('option:selected', this).val());
            if (options.selected[options.selected.length-1] == '' || options.selected[options.selected.length-1] == null){
                options.selected.pop();
                jQuery('#ctl00_cph_Main_ctl00_input_SKU').val('');
            }
        }
    });
    /* Get next option type */
    options.nextSelect = jQuery(this).parents('.select:eq(0)').next('.select').find('select');
    options.nextType = jQuery(this).parents('.select:eq(0)').next('.select').find('input[type=hidden]').val();
    options.nextType = options.nextType != undefined ? options.nextType : 0;
    
    if (options.selected.length > 0 && options.nextType != 0)
    {
        /* Get options for next type */
        dataOpts = JSON.stringify({ ProductID:options.productID, SelectedOptions: options.selected, OptionType: options.nextType });
	    
        jQuery.ajax({
            type: "POST",
            cache   : false,
            beforeSend: function(){
                options.nextSelect.after('<img src="/assets/visual/ajax-loader.gif" alt="Checking Options" title="Checking Options" />');
            },
            url: "/shop/product/get_options",
            data: dataOpts,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data){
                if (data.d)
                {
                    options.nextSelect.empty();
                    for(var option in data.d)
                    {
                        options.nextSelect.append('<option value="'+data.d[option].Option+'">'+data.d[option].Name+'<\/option>');
                    } 
                    /* trigger change event on next select and remove loading image */
                    options.nextSelect.next('img').remove().end().trigger('change');
                }
            },
            error: function(ajaxResponse)
            {
                alert(ajaxResponse.responseText);
            }
       });
    }
    else if (options.selected.length > 0 && options.nextType == 0)
    {
        /* Get costs */
        /* Get options for next type */
        dataOpts = JSON.stringify({ ProductID:options.productID, SelectedOptions: options.selected });
	    
        jQuery.ajax({
            type: "POST",
            cache   : false,
            beforeSend: function(){
                options.nextSelect.after('<img src="/assets/visual/ajax-loader.gif" alt="Checking Stock Level" title="Checking Stock Level" />');
            },
            url: "/shop/product/get_cost",
            data: dataOpts,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                if (data.d)
                {
                    /* remove loading image */
                    options.nextSelect.next('img').remove();
                    
                    /* Clear quantity */
                    options.nextSelect.empty();                        
                    /* Get Stock item info */
                    StockItem = data.d;
                    
                    /* Set SKU */
                    jQuery('#ctl00_cph_Main_ctl00_input_SKU').val(StockItem.ID);
                    
                    /* If unlimited stock or in stock */
                    if (StockItem.StockInfinite || StockItem.StockLevel > 0)
                    {
                        /* Build quantity - default set on page from ascx.cs */
                        /*for(i = 1; i <= (StockItem.StockInfinite ? Product_Default_Quantity : StockItem.StockLevel); i++)
                        {
                            options.nextSelect.append('<option value="'+i+'">'+i+'<\/option>');
                        }*/
                        
                        /* Get any option additional cost */
                        if (parseFloat(StockItem.CostOverride != '' ? StockItem.CostOverride : StockItem.Cost) > 0)
                        {
                            jQuery('#input_OptionsExtra').val((StockItem.CostOverride != '' ? StockItem.CostOverride : StockItem.Cost));
                            jQuery('.buying-options .option-info')
                                .addClass("in-stock").removeClass("out-of-stock")
                                .html('Option Extra Cost: &pound;' + (StockItem.CostOverride != '' ? StockItem.CostOverride : StockItem.Cost));
                        }
                        else
                        {
                            jQuery('#input_OptionsExtra').val(0);
                        }
                        
                        /* Show product total */
                        ProductShowTotal();
                    }
                    else
                    {
                        /* Product not in stock, remove "total" costs */
                        jQuery('.buying-options h2 span').text('');
                        
                        /* Set "remind when back in stock" link */
                        nudgeUs = '/nudge-us/' + jQuery.param({ width:400, height:300, ajax:true, product: options.productID, sku: StockItem.ID });
                        jQuery('.buying-options .option-info')
                            .addClass("out-of-stock").removeClass("in-stock")
                            .html('<b>Sorry this product is currently unavailable with the selected options. To be informed when this product comes back in stock just <a href="/product-reminder" class="product-reminder" title="Tell me when this comes back in stock">send us your name and email address</a> and we will email you as soon as it\'s available<\/b>')
                            .find('a').attr('href', nudgeUs).prettyPhoto({theme:'light_rounded'});
                    }
                }
            },
            error: function(ajaxResponse)
            {
                alert(ajaxResponse.responseText);
            }
       });
    }	
};
var ProductCalculateCost = function()
{
    $qty = parseInt(jQuery('.buying-options .quantity').val());
    $extra = parseFloat(jQuery('#input_OptionsExtra').val());
    $cost = parseFloat(jQuery('#ctl00_cph_Main_ctl00_input_BaseCost').val());
    $total = ($cost+$extra) * $qty;
    
    return $total.toFixed(2);
};
var ProductShowTotal = function()
{
    jQuery('.buying-options h2 span').css("display","block").html('Total: &pound;' + ProductCalculateCost());
};
var ProductAddToBasket = function()
{
    /* Get sku code, quantity and buy button */
    sku_code = jQuery('#ctl00_cph_Main_ctl00_input_SKU').val();
    sku_code = sku_code.replace("S","");
    quantity = jQuery('.buying-options .quantity').val();
    quantity = parseInt(quantity == '' ? 1 : quantity);
    buy_button = jQuery(this);
    
    /* if we have a sku_code and a quantity > 0, AND not currently adding to basket */
    if ( sku_code > 0 && quantity > 0 && (!buy_button.hasClass('processing')))
    {            
        /* Set ajax data */
        dataOpts = JSON.stringify({ SKU_Code: sku_code, Quantity: quantity });
        
        /* Add product to basket */
        jQuery.ajax({
            type: "POST",
            cache   : false,
            beforeSend: function(){
                /* Set buy button to "processing" */
                buy_button
                    .addClass('processing')
                    .data('img', buy_button.attr('src'))
                    .attr('src', '/assets/visual/ajax-loader.gif');
            },
            url: "/shop/basket/add_item",
            data: dataOpts,
            contentType: "application/json; charset=utf-8",
            dataType: "string",
            success: function(data){
                /* Update quick-look basket */
                jQuery('#header .basket').remove();
                jQuery('#header').append(data);
                
                jQuery.prettyPhoto.open('/added-to-basket/?ajax=true&width=50%&height=50%', 'Added To Basket', '');
                
                if (jQuery.browser.msie && jQuery.browser.version == 7)
                {
                    /* re-round basket items */
                    DD_roundies.addRule('#header .roundify', '7px', false);
                }
                setTimeout(function(){
                    /* Set buy button to normal state */
                    buy_button.removeClass('processing').attr('src', buy_button.data('img'));
                }, 2000);
            },
            error: function(err)
            {
                alert(err.responseText);
                /* Set buy button to normal state */
                buy_button.removeClass('processing').attr('src', buy_button.data('img'));
            }
        });
    }
    
    if (!(quantity > 0))
    {
        alert("Please make sure a selection has been made for each option and a quantity greater than 0 has been entered");
    }
    
    return false;
};

/***********************************/
/*             BASKET              */
/***********************************/
var basket = {
    qty_timeout: null,
    updateQtyEl: null
};
var ChangeQuantity = function(){
    /* Get qty change */
    var change = jQuery(this).hasClass('up') ? '1' : '-1';
    
    /* Current qty */
    currQty = parseInt(jQuery(this).siblings('input.req-qty').val());    
    newQty = currQty;
    
    /* If valid change */
    if ( (currQty > 1 && change < 0) || (currQty >= 1 && change > 0) )
    {
        /* Set new qty */
        newQty = currQty + parseInt(change);
    }
    /* set input qty */
    jQuery(this).siblings('input.req-qty').val(newQty);
    
    /* If we have have clicked on a qty-change a el already */
    if (basket.updateQtyEl != null)
    {
        /* Is it a different basket item? */
        if (basket.updateQtyEl.attr("id") != jQuery(this).siblings('input.req-qty').attr("id"))
        {
            /* Yes, update previous el */
            UpdateItemQty(basket.updateQtyEl);
        }    
    }
    /* Set "active" item */
    basket.updateQtyEl = jQuery(this).siblings('input.req-qty');
    
    /* Clear timeout - so it doesn't fire multiple times */
    clearTimeout(basket.qty_timeout);
    
    /* Set timeout */
    basket.qty_timeout = setTimeout(function(){
        /* Update basket item */
        UpdateItemQty(basket.updateQtyEl);
    },1000);
    
    return false;
};
function UpdateItemQty(qtyEl)
{
    /* Set ajax data */
    dataOpts = JSON.stringify({ SKU_Code: qtyEl.siblings('input.sku-code').val(), Quantity: qtyEl.val(), UpdateEl: qtyEl.attr("id") });
        
    /* Update item qty in basket */
    jQuery.ajax({
        type: "POST",
        cache   : false,
        beforeSend: function(){
            /* Set buy button to "processing" */
            qtyEl.parents('.qty:first').append('<img src="/assets/visual/ajax-loader.gif" alt="Updating" title="Updating" />');
        },
        url: "/shop/basket/update_item",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataType: "string",
        success: function(data){
        
            /* get el updated (input id) from data */
            
            /* remove updating image */
            qtyEl.parents('.qty:first').children('img').remove();
            
            /* Change line-total */
            var price = qtyEl.parents('.item:first').find('> div.price:first').html();
            price = parseFloat(price.substring(1, price.length));
            var linetotal = (price * parseInt(qtyEl.val())).toFixed(2);
            qtyEl.parents('.item:first').find('> div.line-total').html("&pound;"+linetotal );
            
            /* Update totals html */
            jQuery('#my-basket > div > .footer').find('.totals').remove().end().append(data);
        },
        error: function(err)
        {
            /* remove updating image */
            qtyEl.parents('.qty:first').children('img').remove();
            alert(err.responseText);
        }
    });
}
var RemoveBasketItem = function(){

    removeEl = jQuery(this);
    
    /* Set ajax data */
    dataOpts = JSON.stringify({ SKU_Code: removeEl.siblings('.change').find('input.sku-code').val() });
        
    /* Update item qty in basket */
    jQuery.ajax({
        type: "POST",
        cache   : false,
        beforeSend: function(){
            /* Set buy button to "processing" */
            removeEl.parents('.qty:first').append('<img src="/assets/visual/ajax-loader.gif" alt="Removing" title="Removing" />');
        },
        url: "/shop/basket/remove_item",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataType: "string",
        success: function(data){            
            /* remove updating image */
            removeEl.parents('.qty:first').children('img').remove();
            removeEl.parents('.item:first').fadeOut(250, function(){ jQuery(this).remove(); });
            
            /* Update totals html */
            jQuery('#my-basket > div > .footer').find('.totals').remove().end().append(data);
        },
        error: function(err)
        {
            /* remove updating image */
            removeEl.parents('.qty:first').children('img').remove();
            alert(err.responseText);
        }
    });
    
    return false;
};
var CheckPromoCode = function(){
    
    var el = jQuery(this).html('checking... <img src="/assets/visual/ajax-loader-bluebg.gif" alt="" title="Checking Code..." />');
    
    /* Set ajax data */
    dataOpts = JSON.stringify({ PromoCode: jQuery(this).prev().find('input').val() });
        
    /* Apply promo code */
    jQuery.ajax({
        type: "POST",
        cache: false,
        url: "/shop/basket/apply_promotion",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataType: "string",
        success: function(data){
            el
                .addClass('valid').html('Code Valid!')
                .nextAll('.action-message.error').remove();
            /* Update totals html */
            jQuery('#my-basket > div > .footer').find('.totals').remove().end().append(data);
        },
        error: function(err)
        {
            el.removeClass('valid').html('Apply Code');
            el.nextAll('.action-message').remove().end().after('<div class="action-message error">' + err.responseText + '</div>');
        }
    });
    return false;
};
var ChangeDeliveryOption = function(){
    
    var DelID = jQuery('option:selected', this).val();
    
    if (DelID > 0)
    {
        var el = jQuery(this).after('<img src="/assets/visual/ajax-loader.gif" alt="" title="Updating..." />');
        
        /* Set ajax data */
        dataOpts = JSON.stringify({ DeliveryOption: DelID });
            
        /* Update delivery */
        jQuery.ajax({
            type: "POST",
            cache: false,
            url: "/shop/basket/change_delivery",
            data: dataOpts,
            contentType: "application/json; charset=utf-8",
            dataType: "string",
            success: function(data){
                el.nextAll('.action-message.error, img').remove();
                jQuery('.checkout').show().filter('.no-delivery-method').hide();
                /* Update totals html */
                jQuery('#my-basket > div > .footer').find('.totals').remove().end().append(data);
            },
            error: function(err)
            {
                el.nextAll('.action-message, img').remove().end().after('<div class="action-message error">' + err.responseText + '</div>');
            }
        });
    }
    return false;
};

/***********************************/
/*             ACCOUNT             */
/***********************************/
var DeleteAddress = function(){
    
    el = jQuery(this);
    
    if (RequestConfirm(el.parents('.address:first'), "Are you sure you wish to remove this address?")){
    
        var address = el.parents('.address:first').find('input:hidden').val();  
        dataOpts = JSON.stringify({ Address: address });
        /* Delete address */
        jQuery.ajax({
            async: false,
            type: "POST",
            cache   : false,
            beforeSend: function(){
                /* hide delete */
                el.hide();
            },
            url: "/myaccount/delete_address",
            data: dataOpts,
            contentType: "application/json; charset=utf-8",
            dataFilter: function(data){
                try
                {
                    var o = null;
                    if (typeof(JSON) !== 'undefined' && typeof(JSON.parse) === 'function'){
                        o = JSON.parse(data);
                    } else {
                        o = eval('(' + data + ')');
                    }
                    if (o.hasOwnProperty('d')){
                        return o.d;
                    } else {
                        return o;
                    }
                }
                catch (ex){
                    return data;
                }
            },
            success: function(data){
                if (data.success)
                {
                    el.parents('.address:first').fadeOut(250, function(){ jQuery(this).remove(); });
                } else {                
                    alert(data.message);
                }
            },
            error: function(err){
                alert(err.responseText);
            },
            complete: function(XMLHttpRequest, textStatus)
            {
                /* hide loader */
                el.show();
            }
        }); /* end ajax */
    }

    return false;
};
function AddNewAddress(el, callback)
{
    el = jQuery(el);
    addressType = el.attr("class").split(" ")[2];
    jQuery.prettyPhoto.open('/my-account/address-details/new/'+addressType+'/?width=685px&height=450px&ajax=true','','', function(){
        // Create validator
        jQuery('#modal form').validate({
            rules: { 
                tbx_Firstname: { required: true, maxlength: 40 },
                tbx_Surname: { required: true, maxlength: 40 },
                tbx_AddressLine1: { required: true, maxlength: 50 },
                tbx_Town: { required: true, maxlength: 50 },
                tbx_Postcode: { required: true, maxlength: 10 },
                tbx_ContactNumber: { required: true, maxlength: 20 }
            }, 
            messages: { 
                tbx_Firstname: {
                    required: "Please enter your firstname",
                    maxlength: jQuery.format("Maximum length: {0} characters")
                }, 
                tbx_Surname: {
                    required: "Please enter your surname",
                    maxlength: jQuery.format("Maximum length: {0} characters")
                },
                tbx_AddressLine1: {
                    required: "Please enter house number and road name",
                    maxlength: jQuery.format("Maximum length: {0} characters")
                },
                tbx_Town: {
                    required: "Please enter your town/city",
                    maxlength: jQuery.format("Maximum length: {0} characters")
                },
                tbx_Postcode: {
                    required: "Please enter your postal/zip code",
                    maxlength: jQuery.format("Maximum length: {0} characters")
                },
                tbx_ContactNumber: {
                    required: "Please enter a contact number",
                    maxlength: jQuery.format("Maximum length: {0} characters")
                }
            }, 
            errorPlacement: function(error, element) { 
                element.parent().parent().addClass("error")
                    .find('span').remove().end().append('<span><b></b>' + error.html() + '</span>');
            }, 
            submitHandler: function(frm){
                // Form valid, ajax submit
                SaveAddress(frm, callback);
            },
            /* field is valid */
            success: function(label) {
                var el = '#' + label.attr("for");
                jQuery(el).parents('div.item').removeClass('error').find('span').remove(); 
            } 
        });
    });
    return false;
}
var EditAddress = function(){
    el = jQuery(this);
    var address = el.parents('.address:first').find('input:hidden').val();
    addressType = el.attr("class").split(" ")[1];
    jQuery.prettyPhoto.open('/my-account/address-details/edit/'+addressType+'/?width=685px&height=450px&ajax=true&address='+address,'','');
    return false;
};
var MarkAsDefault = function(){
    el = jQuery(this);
    if (!el.hasClass("default")){
    
        var address = el.parents('.address:first').find('input:hidden').val();  
        dataOpts = JSON.stringify({ Address: address });
        /* Mark address as default*/
        jQuery.ajax({
            async: false,
            type: "POST",
            cache   : false,
            beforeSend: function(){
                /* Show loader */
                el.after('<img src="/assets/visual/ajax-loader.gif" alt="Updating address..." title="Updating address..." />');
            },
            url: "/myaccount/default_address",
            data: dataOpts,
            contentType: "application/json; charset=utf-8",
            dataFilter: function(data){
                try
                {
                    var o = null;
                    if (typeof(JSON) !== 'undefined' && typeof(JSON.parse) === 'function'){
                        o = JSON.parse(data);
                    } else {
                        o = eval('(' + data + ')');
                    }
                    if (o.hasOwnProperty('d')){
                        return o.d;
                    } else {
                        return o;
                    }
                }
                catch (ex){
                    return data;
                }
            },
            success: function(data){
                if (data.success)
                {
                    el.parents('.account-addresses:first').find('span.default a.default').removeClass("default");
                    el.addClass("default");
                } else {                
                    alert(data.message);
                }
            },
            error: function(err){
                alert(err.responseText);
            },
            complete: function(XMLHttpRequest, textStatus)
            {
                /* hide loader */
                el.next('img').remove();
            }
        }); /* end ajax */
    }
    return false;
};
function GetLastAddress(AddressType, callback)
{
    dataOpts = JSON.stringify({ AddressType: AddressType, Area: 'checkout' });
    
    /* Get Address */
    jQuery.ajax({
        async: false,
        type: "POST",
        cache   : false,
        url: "/myaccount/get_address",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataType: "html",
        success: function(html){
            callback(html);
        },
        error: function(err)
        {
            alert(err.responseText);
        }
    }); /* end ajax */
}
var SaveAddress = function(frm, callback){

    frm = jQuery(frm);
    var MemberAddress = {
        ID:         jQuery("#input_AddressID", frm).val(),
        AddressType:jQuery("#input_Type", frm).val(),
        Title:      jQuery("#ddl_Title", frm).val(),
        Firstname:  jQuery("#tbx_Firstname", frm).val(),
        Surname:    jQuery("#tbx_Surname", frm).val(),
        AddressLine1: jQuery("#tbx_AddressLine1", frm).val(),
        AddressLine2: jQuery("#tbx_AddressLine2", frm).val(),
        City:       jQuery("#tbx_Town", frm).val(),
        County:     jQuery("#tbx_County", frm).val(),
        Country:    jQuery("#ddl_Country", frm).val(),
        Postcode:   jQuery("#tbx_Postcode", frm).val() ,
        ContactTel: jQuery("#tbx_ContactNumber", frm).val()
    };
    
    var AddToDelivery = jQuery('#input_AddToDelivery').is(':checked');
    if (AddToDelivery != true) { AddToDelivery = false; }
    dataOpts = JSON.stringify({ AddressInfo: MemberAddress, AddToDelivery: AddToDelivery });
    
    /* Add Address */
    jQuery.ajax({
        async: false,
        type: "POST",
        cache   : false,
        beforeSend: function(){
            /* Show loader */
            frm.find('.button').css("visibility","hidden").after('<img src="/assets/visual/ajax-loader.gif" alt="Adding address..." title="Adding address..." />');
        },
        url: "/myaccount/save_address",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataFilter: function(data){
            try
            {
                var o = null;
                if (typeof(JSON) !== 'undefined' && typeof(JSON.parse) === 'function'){
                    o = JSON.parse(data);
                } else {
                    o = eval('(' + data + ')');
                }
                if (o.hasOwnProperty('d')){
                    return o.d;
                } else {
                    return o;
                }
            }
            catch (ex){
                return data;
            }
        },
        success: function(data){
            if (data.success)
            {
                frm.prevAll('.action-message').remove().end().before('<div class="action-message success">'+data.message+'</div>');
                frm.hide();
                if (typeof(callback) != "undefined") { callback(); }
                return true;
            } else {                
                frm.prevAll('.action-message').remove().end().before('<div class="action-message error">'+data.message+'</div>');
                return false;
            }
        },
        complete: function(XMLHttpRequest, textStatus)
        {
            /* show button and hide loader */
            frm.find('.button').css("visibility","visible").next('img').remove();
            
            if (XMLHttpRequest.status != 200)
            {
                if (XMLHttpRequest.status == 406) { /* ignore - already handled by "success" */ }
                else {
                    alert(XMLHttpRequest.responseText);
                    return false;
                }
            }
        }
    }); /* end ajax */
};

function CheckEmailAddress(value, callback){
    /* Set ajax data */
    dataOpts = JSON.stringify({ EmailAddress: value });
    
    /* Check email */
    jQuery.ajax({
        async: false,
        type: "POST",
        cache   : false,
        url: "/myaccount/check_email",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataFilter: function(data){
            try
            {
                var o = null;
                if (typeof(JSON) !== 'undefined' && typeof(JSON.parse) === 'function'){
                    o = JSON.parse(data);
                } else {
                    o = eval('(' + data + ')');
                }
                if (o.hasOwnProperty('d')){
                    return o.d;
                } else {
                    return o;
                }
            }
            catch (ex){
                return data;
            }
        },
        success: function(data){
            callback(data.success, data.message);
            if (data.success)
            {                                
                return true;
            } else {                
                return false;
            }
        },
        complete: function(XMLHttpRequest, textStatus)
        {
            if (XMLHttpRequest.status != 200)
            {
                if (XMLHttpRequest.status == 406) { /* ignore - already handled by "success" */ }
                else {
                    alert(XMLHttpRequest.responseText);
                    return false;
                }
            }
        }
    }); /* end ajax */
}
var ResetPassword = function(frm, email){
        
    frmBtn = frm.find('input.button');
    
    /* Set ajax data */
    dataOpts = JSON.stringify({ EmailAddress: email });
    
    /* Try and reset password */
    jQuery.ajax({
        type: "POST",
        cache   : false,
        beforeSend: function(){
            /* Hide button */
            frmBtn.hide().after('<img src="/assets/visual/ajax-loader.gif" alt="Please wait..." title="Please wait..." />');
        },
        url: "/myaccount/reset_password",
        data: dataOpts,
        contentType: "application/json; charset=utf-8",
        dataFilter: function(data){
            try
            {
                var o = null;
                if (typeof(JSON) !== 'undefined' && typeof(JSON.parse) === 'function'){
                    o = JSON.parse(data);
                } else {
                    o = eval('(' + data + ')');
                }
                if (o.hasOwnProperty('d')){
                    return o.d;
                } else {
                    return o;
                }
            }
            catch (ex){
                return data;
            }
        },
        success: function(data){
            if (data.success)
            {
                /* Show success and remove form */
                frmBtn.parents('form:first')
                    .prevAll('.action-message').remove().end()
                    .before('<div class="action-message success">Successfully reset password. Please check your email</div>').remove();
            } else {
                frmBtn.show().nextAll('img').remove();
                frmBtn.parents('form:first')
                    .prevAll('.action-message').remove().end()
                    .before('<div class="action-message error">'+data.message+'</div>').end();
            }
            return false;
        },
        complete: function(XMLHttpRequest, textStatus)
        {
            if (XMLHttpRequest.status != 200)
            {                
                alert(XMLHttpRequest.responseText);
                return false;
            }
        }
    }); /* end ajax */
    
    return false;
};

/*
 * jQuery BBQ: Back Button & Query Library - v1.0.2 - 10/10/2009
 * http://benalman.com/projects/jquery-bbq-plugin/
 * 
 * Copyright (c) 2009 "Cowboy" Ben Alman
 * Licensed under the MIT license
 * http://benalman.com/about/license/
 */
(function($,c){var g,k=document.location,i=Array.prototype.slice,E=decodeURIComponent,a=$.param,m,d,p,n=$.bbq=$.bbq||{},o,e,z,b="hashchange",v="querystring",y="fragment",q="hash",x="elemUrlAttr",h="href",D="src",C=$.browser,l=C.msie&&C.version<8,j="on"+b in c&&!l,r=/^.*\?|#.*$/g,A=/^.*\#/,t={};function s(F){return typeof F==="string"}function w(G){var F=i.call(arguments,1);return function(){return G.apply(this,F.concat(i.call(arguments)))}}function f(G,O,F,H,K){var M,L,J,N,I;if(H!==g){J=F.match(G?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);I=J[3]||"";if(K===2&&s(H)){L=H.replace(O,"")}else{N=d(J[2]);H=s(H)?d[G?y:v](H):H;L=K===2?H:K===1?$.extend({},H,N):$.extend({},N,H);L=a(L)}M=J[1]+(G?"#":L||!J[1]?"?":"")+L+I}else{if(F){M=F.replace(O,"")}else{M=G?k[q]?k[h].replace(O,""):"":k.search.replace(/^\??/,"")}}return M}a[v]=w(f,0,r);a[y]=m=w(f,1,A);$.deparam=d=function(I,G){var H={},F={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(M,O){var L=O.split("="),P=E(L[0]),K,Q=H,N=0,R=P.split("]["),J=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[J])){R[J]=R[J].replace(/\]$/,"");R=R.shift().split("[").concat(R);J=R.length-1}else{J=0}if(L.length===2){K=E(L[1]);if(G){K=K&&!isNaN(K)?+K:K==="undefined"?g:F[K]!==g?F[K]:K}if(J){for(;N<=J;N++){P=R[N]===""?Q.length:R[N];Q=Q[P]=N<J?Q[P]||(R[N+1]&&isNaN(R[N+1])?{}:[]):K}}else{if($.isArray(H[P])){H[P].push(K)}else{if(H[P]!==g){H[P]=[H[P],K]}else{H[P]=K}}}}else{if(P){H[P]=G?g:""}}});return H};function u(I,H,G,F){if(G===g||typeof G==="boolean"){F=G;G=a[I]()}else{G=s(G)?G.replace(H,""):G}return d(G,F)}d[v]=w(u,v,r);d[y]=p=w(u,y,A);$[x]||($[x]=function(F){return $.extend(t,F)})({a:h,base:h,iframe:D,img:D,input:D,form:"action",link:h,script:D});e=$[x];function B(I,F,H,G){if(!s(H)&&typeof H!=="object"){G=H;H=F;F=g}return this.each(function(){var L=$(this),J=F||e()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,G))})}$.fn[v]=w(B,v);$.fn[y]=w(B,y);n.pushState=o=function(I,H){if(s(I)&&/^#/.test(I)&&H===g){H=2}var G=I!==g,F=m(k[h],G?I:{},G?H:2);k[h]=F+(/#/.test(F)?"":"#")};n.getState=function(G,F){return G===g||typeof G==="boolean"?p(G):p(F)[G]};n.pollDelay=100;$.event.special[b]={setup:function(){if(j){return false}z.start()},teardown:function(){if(j){return false}z.stop()},add:function(F,H,G){return function(J){var I=J[y]=m();J.getState=function(L,K){return L===g||typeof L==="boolean"?d(I,L):d(I,K)[L]};F.apply(this,arguments)}}};z=(function(){var G={},K,F,H,J;function I(){H=J=function(L){return L};if(l){F=$('<iframe src="javascript:0"/>').hide().appendTo("body")[0].contentWindow;J=function(){return F.document.location[q].replace(/^#/,"")};H=function(N,L){if(N!==L){var M=F.document;M.open();M.close();M.location[q]="#"+N}};H(m())}}G.start=function(){if(K){return}var M=m();H||I();(function L(){var O=m(),N=J(M);if(O!==M){H(M=O,N);$(c).trigger(b)}else{if(N!==M){o("#"+N)}}K=setTimeout(L,n.pollDelay)})()};G.stop=function(){if(!F){K&&clearTimeout(K);K=0}};return G})()})(jQuery,this);

/* json2.js 
 * 2008-01-17
 * Public Domain
 * No warranty expressed or implied. Use at your own risk.
 * See http://www.JSON.org/js.html
*/
if(!this.JSON){JSON=function(){function f(n){return n<10?'0'+n:n;}
Date.prototype.toJSON=function(){return this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z';};var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};function stringify(value,whitelist){var a,i,k,l,r=/["\\\x00-\x1f\x7f-\x9f]/g,v;switch(typeof value){case'string':return r.test(value)?'"'+value.replace(r,function(a){var c=m[a];if(c){return c;}
c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+
(c%16).toString(16);})+'"':'"'+value+'"';case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
if(typeof value.toJSON==='function'){return stringify(value.toJSON());}
a=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){l=value.length;for(i=0;i<l;i+=1){a.push(stringify(value[i],whitelist)||'null');}
return'['+a.join(',')+']';}
if(whitelist){l=whitelist.length;for(i=0;i<l;i+=1){k=whitelist[i];if(typeof k==='string'){v=stringify(value[k],whitelist);if(v){a.push(stringify(k)+':'+v);}}}}else{for(k in value){if(typeof k==='string'){v=stringify(value[k],whitelist);if(v){a.push(stringify(k)+':'+v);}}}}
return'{'+a.join(',')+'}';}}
return{stringify:stringify,parse:function(text,filter){var j;function walk(k,v){var i,n;if(v&&typeof v==='object'){for(i in v){if(Object.prototype.hasOwnProperty.apply(v,[i])){n=walk(i,v[i]);if(n!==undefined){v[i]=n;}}}}
return filter(k,v);}
if(/^[\],:{}\s]*$/.test(text.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof filter==='function'?walk('',j):j;}
throw new SyntaxError('parseJSON');}};}();}