(function(){
let w = window.innerWidth;
function setHeaderCssVar() {
const headerEle = document.getElementById('shoplaza-section-header');
if(!headerEle){ return };
document.body.style.setProperty('--window-height', `${window.innerHeight}px`);
document.body.style.setProperty('--header-height', `${headerEle.clientHeight}px`);
const mdScorllHideEle = headerEle.querySelector('.header__mobile .header__scroll_hide');
if (mdScorllHideEle) {
document.body.style.setProperty('--header-scroll-hide-height-md', `${mdScorllHideEle.clientHeight}px`);
}
const pcScorllHideEle = headerEle.querySelector('.header__desktop .header__scroll_hide');
if (pcScorllHideEle) {
document.body.style.setProperty('--header-scroll-hide-height-pc', `${pcScorllHideEle.clientHeight}px`);
}
}
function handlResize() {
if(w == window.innerWidth){return};
w = window.innerWidth;
setHeaderCssVar();
};
function init(){
setHeaderCssVar();
window.removeEventListener('resize', window._theme_header_listener)
window._theme_header_listener = handlResize;
window.addEventListener('resize', window._theme_header_listener);
}
init();
})();
About us
About fballshirt
Our original mission was to provide fans with access to unique and exciting product that previously were only available in scattered local markets throughout the world. As brands woke up to the fact that people were not just following Single based teams we were able to source locally and broaden our product range.
As we expand we will continue to grow our product range and services to meet the demands of the 21st century consumer in a global world. To date we have sent product to over 90 countries, and with major logistical investment and constant overhaul of our websites fballshirt are staying at the forefront of internet retailing standards. Less gimmicks, more product.
Nowhere else are over 4000 lines of official football apparel available to order secure in the knowledge that the company places total emphasis on customer satisfaction and product authenticity. It is how we built our reputation, and we will never lose sight of this.
Perhaps the biggest area of growth for our company has been in the area of our official printing division. A highly experienced team of operators takes enormous care to make sure that your jerseys are printed with the attention to detail learned from our insight into the Japanese retail market, where accuracy and pride in workmanship is the only mantra that matters.
The dedicated fan takes pride in his or her jerseys, and always wants the best. In turn, these are the customers that we treasure. fballshirt has built an extensive range of original jerseys, officially licensed reproductions and retro products to suit varying budgets. It was, and continues to be a badge of honor for many to wear styles that make a close connection to eras of football's glorious past and their club's treasured heritage. Thankfully, driven by customer demand, brands are increasingly allowing us to buy into their back catalog of styles to bring customers the nostalgic shirts they long for.
fballshirt's profile has always remained relatively high in comparison to its size, and one of the reasons for this has been attributed to the consistently high standard of product photography. Strict quality control ensures all products faithfully reproduce color and appearance as closely as possible on all web and print marketing to ensure the product is represented to the customer as accurately as possible.
With a dedicated team of staff, fballshirt will continue to push our user experience in a highly competitive marketplace, but nonetheless we are always open to suggestions and feedback from our customers.
Our sincerest thanks for your interest in fballshirt. We hope this provided a small insight into how the company operates. If you have any comments or questions please email us directly at support@fballshirt.com
${function(){
const earnCampaigns = data[0].campaigns;
const memberDetail = data[1].member;
if (!memberDetail) return '';
const closed = data[2];
const hasBirthDayPlan = earnCampaigns.find((item) => item.campaign.event_type === 'enter_birthday');
const hasPhonePlan = earnCampaigns.find((item) => item.campaign.event_type === 'enter_phone_number');
let content = null;
if (hasBirthDayPlan && hasPhonePlan && !memberDetail.birthday && !memberDetail.phone) {
content=`Complete your phone number and birthday to get . `;
} else if (hasBirthDayPlan && !memberDetail.birthday) {
content=`Fill in your birthday to get `;
} else if (hasPhonePlan && !memberDetail.phone) {
content=`Fill in your phone number to get `;
}
return (!closed && content && memberDetail) ? `
You've purchased
${ item.invalid_order_count}
extra
${ item.benefit_package.product_name }
(s). Benefits only apply for the purchase of just one item. Please refund the extra item(s).
View order details >
${function(){
let title = data.campaign.name;
if (data.campaign.event_type === 'share_link') {
let limit_reward_count = Number(data.campaign.campaign_rule.limit_reward_count);
let participation_times = Number(data.participation_info.participation_times);
if (limit_reward_count > 1) {
title = `${title} (${limit_reward_count - participation_times}/${limit_reward_count})`;
}
}
return title;
}()}
${function(){
if (data.campaign.event_type === 'successful_order') {
return `
${function(){
const formatTimeStr = (execution_schedule) => {
const { type, effective_started_at, effective_ended_at, months, days } = execution_schedule;
if (type === 'time_range' && !(effective_started_at && effective_ended_at)) {
return 'Valid for long term';
}
if (type === 'time_range' && effective_started_at && effective_ended_at) {
return `
-
`
}
if (type === 'weekly') {
const time = days.map((d) => {
switch(d) {
case "1": return "Monday";
case "2": return "Tuesday";
case "3": return "Wednesday";
case "4": return "Thursday";
case "5": return "Friday";
case "6": return "Saturday";
case "0": return "Sunday";
}
});
return `Effective ${time} (Weekly)`;
}
if (type === 'monthly') {
const isFullMonth = months.length === 12;
const monthStr = months.map((value) => {
switch(value) {
case "1": return "January";
case "2": return "February";
case "3": return "March";
case "4": return "April";
case "5": return "May";
case "6": return "June";
case "7": return "July";
case "8": return "August";
case "9": return "September";
case "10": return "October";
case "11": return "November";
case "12": return "December";
}
}).join(' ');
const dayStr = days.map((value) => {
switch(value) {
case "1": return "1st";
case "2": return "2nd";
case "3": return "3rd";
case "4": return "4th";
case "5": return "5th";
case "6": return "6th";
case "7": return "7th";
case "8": return "8th";
case "9": return "9th";
case "10": return "10th";
case "11": return "11th";
case "12": return "12th";
case "13": return "13th";
case "14": return "14th";
case "15": return "15th";
case "16": return "16th";
case "17": return "17th";
case "18": return "18th";
case "19": return "19th";
case "20": return "20th";
case "21": return "21st";
case "22": return "22nd";
case "23": return "23rd";
case "24": return "24th";
case "25": return "25th";
case "26": return "26th";
case "27": return "27th";
case "28": return "28th";
case "29": return "29th";
case "30": return "30th";
case "31": return "31st";
}
}).join(' ');
if (isFullMonth) return `Effective ${dayStr} (Monthly)`; // 每月
return `Effective ${dayStr} (Valid only in ${monthStr})`;
}
};
return formatTimeStr(data.campaign.execution_schedule);
}()}
${function(){
if (data.campaign.campaign_rule.order_condition?.min_order_paid === "0") {
return `Order payment of any amount`
} else {
return `Order payment amount ()`
}
}()}
Purchase any item with order amount
The order contains:
Available :
${function(){
return new Intl.NumberFormat().format(data[0].point.active_amount)
}()}
Frozen :
${function(){
return new Intl.NumberFormat().format(data[0].point.frozen_amount)
}()}
Expiring Soon
${function(){
return new Intl.NumberFormat().format(data[0].point.expiring_points || 0)
}()}
${function(){
const { use_global_config, is_expired, expired_method, day, month } = data[1].points_rule.point_expired_setting;
let date = `Permanent Validity`;
if (!use_global_config) {
date = `Each point is calculated separately according to the rules of the activity (details can be viewed in the point detail records)`;
} else {
if (is_expired) {
if (expired_method === 'after_x_months') {
date = `${month} months valid`;
} else if (expired_method === 'after_x_days') {
date = `${day} days valid`;
} else if (expired_method === 'on_specific_date') {
const dateElement = ``;
date = `All points are valid for ${dateElement} before collection.`;
}
}
}
return `Valid until: ${date}`;
}()}
${function(){
const order_id = data.data?.order_number || data.data?.order_id || '';
const platformMap = {
'facebook': 'Facebook',
'x': 'X (Twitter)',
'pinterest': 'Pinterest'
};
const share_platform = platformMap[data.data?.share_platform] || '';
const adjustMap = {
'expiry_compensation': `Points expiration compensation`,
'holiday_bonus': `Festival Rewards`,
'customer_complaint_compensation': `Customer complaint compensation`,
'custom': `${data.data?.reason?.note}`
}
const adjust_type = adjustMap[data.data?.reason?.type] || '';
switch(data.resource_type) {
case 'become_member': return `Bonus for joining the club.`;
case 'enter_phone_number': return `Bonus for completing mobile phone filling`;
case 'enter_birthday': return `Bonus for completing birthday filling`;
case 'successful_order': return `Bonus for completing payment of order ${order_id}`;
case 'order_returned': return `Deduction of for refund of order ${order_id} `;
case 'discount_code_received': return `Deduction of for redeeming ${data.data.campaign_name} benefit`;
case 'coupon_received': return `Deduction of for redeeming ${data.data.coupon_title} coupon`;
case 'expired': return `Expired`;
case 'upgrade_benefit': return `Bonus for member benefits`;
case 'periodic_benefit': return `Bonus for member benefits`;
case 'birthday_benefit': return `Bonus for birthday benefits`;
case 'import_member_points': return `Manual adjustment of points`;
case 'deduction': return `Redeem for off order ${order_id}`;
case 'deduction_returned': return `Refund for order ${order_id}`;
case 'member_migrate': return `System upgrade updates balance`;
case 'share_link': return `Share ${share_platform} reward `;
case 'benefit_package_issued': return `${data.data.name} Issue `;
case 'manual_adjust': return `${adjust_type}`;
case 'compensation': return `Refund points for historical order consumption amount`;
case 'member_active_reward': return `Membership activation points`;
default: '';
}
}()}
${function(){
if (!data.is_show_expiration_time) return '';
const expiryText = data.expired_at
? `Expiry Date: `
: `Permanent Validity`;
return `|${expiryText}`;
}()}
${function(){
const {discount_type, discount_value, prerequisite_value, prerequisite_type, obtain_product, max_free_shipping} = data[0].campaign?.reward.discount_code_activity || {};
let value = '';
let unit = '';
if (discount_type === 'fixed_amount') {
value = ``;
}
if (discount_type === 'percentage') {
value = `${parseInt(discount_value)}%`;
unit = `OFF`;
}
if (discount_type === 'free_shipping') {
if (max_free_shipping !== -1) {
value = `
FREESHIPPING`;
unit = `Up to `;
} else {
value = `FREE`;
unit = `SHIPPING`;
}
}
if (discount_type === 'buy_x_get_y') {
const x = prerequisite_value;
const y = obtain_product.product_count;
const obtain_value = obtain_product.obtain_value;
if(obtain_product.obtain_type === 'free') {
value = `FREE`;
unit = `PRODUCT`;
}
if(obtain_product.obtain_type === 'percentage') {
value = `${obtain_value}%`;
unit = `OFF`;
}
if(obtain_product.obtain_type === 'fixed_amount') {
value = ``;
}
}
return `
${value}
${unit}
`;
}()}
${data[0].campaign?.name}
${function(){
const { prerequisite_type, prerequisite_value } = data[0].campaign?.reward.discount_code_activity || {};
if (prerequisite_type === 'none') {
return `No threshold`;
}
if (prerequisite_type === 'quantity') {
return `The order is available when it contains at least ${parseInt(prerequisite_value)} items`;
}
if (prerequisite_type === 'subtotal') {
return `Available when the order amount exceeds `;
}
}()}
It will cost to redeem the coupon. Are you sure you want to redeem it?
Get discount code
Congratulations! You have received a discount code
Available when paying for an order
${function(){
const {discount_type, discount_value, prerequisite_value, prerequisite_type, obtain_product, max_free_shipping} = data[0].campaign?.reward.discount_code_activity || {};
let value = '';
let unit = '';
if (discount_type === 'fixed_amount') {
value = ``;
}
if (discount_type === 'percentage') {
value = `${parseInt(discount_value)}%`;
unit = `OFF`;
}
if (discount_type === 'free_shipping') {
if (max_free_shipping !== -1) {
value = `
FREESHIPPING`;
unit = `Up to `;
} else {
value = `FREE`;
unit = `SHIPPING`;
}
}
if (discount_type === 'buy_x_get_y') {
const x = prerequisite_value;
const y = obtain_product.product_count;
const obtain_value = obtain_product.obtain_value;
if(obtain_product.obtain_type === 'free') {
value = `FREE`;
unit = `PRODUCT`;
}
if(obtain_product.obtain_type === 'percentage') {
value = `${obtain_value}%`;
unit = `OFF`;
}
if(obtain_product.obtain_type === 'fixed_amount') {
value = ``;
}
}
return `
${value}
${unit}
`;
}()}
Discount
${function(){
const { discount_code_activity } = data[0].campaign?.reward || data[0].benefit?.reward || data[0].member_active_setting?.reward || {};
const { discount_type, obtain_product, discount_value } = discount_code_activity;
if (discount_type === 'fixed_amount') {
return `
`
}
if (discount_type === 'percentage') {
return `
${parseInt(discount_value)}% OFF
`
}
if (discount_type === 'free_shipping') {
return `
FREE SHIPPING
`
}
return '';
}()}
${function(){
const {discount_type, prerequisite_value, prerequisite_type, obtain_product} = data[0].campaign?.reward.discount_code_activity || data[0].benefit?.reward.discount_code_activity || {};
if (discount_type === 'buy_x_get_y') {
const x = prerequisite_value;
const y = obtain_product.product_count;
const obtain_value = obtain_product.obtain_value;
if(obtain_product.obtain_type === 'free') {
if (prerequisite_type === 'quantity') {
return `Buy ${x} Get ${y} Free`;
} else if (prerequisite_type === 'subtotal') {
return `Buy Get ${y} Free`;
}
}
if(obtain_product.obtain_type === 'percentage') {
if (prerequisite_type === 'quantity') {
return `Buy ${x}, get ${y} at ${obtain_value}% OFF`;
} else if (prerequisite_type === 'subtotal') {
return `Buy , get ${y} at ${obtain_value}% OFF`;
}
}
if(obtain_product.obtain_type === 'fixed_amount') {
if (prerequisite_type === 'quantity') {
return `Buy ${x} get ${y} with off each`;
} else if (prerequisite_type === 'subtotal') {
return `Buy get ${y} with off each`;
}
}
}
return '';
}()}
${function(){
const { prerequisite_type, prerequisite_value, discount_type, obtain_product } = data[0].campaign?.reward.discount_code_activity || data[0].benefit?.reward.discount_code_activity || data[0].member_active_setting?.reward.discount_code_activity || {};
if (discount_type === 'buy_x_get_y') {
let x_content = '';
let y_content = '';
const x = prerequisite_value;
const {obtain_value, obtain_type} = obtain_product;
if (prerequisite_type === 'quantity') {
x_content = `Purchase the following items for a total of ${x} items`;
} else if (prerequisite_type === 'subtotal') {
x_content = `Purchase the following items for a total of `;
}
if (obtain_type === 'free') {
y_content = `Get for free`;
} else if (obtain_type === 'percentage') {
y_content = `${obtain_value}% OFF on the purchase of the following items`;
} else if (obtain_type === 'fixed_amount') {
y_content = `The following items are discounted by each`;
}
return `
`;
}
if (prerequisite_type === 'none') {
return `No threshold`;
}
if (prerequisite_type === 'quantity') {
return `The order is available when it contains at least ${parseInt(prerequisite_value)} items`;
}
if (prerequisite_type === 'subtotal') {
return `Available when the order amount exceeds `;
}
}()}
${function(){
const {obtain_type, obtain_value, prerequisite_type, prerequisite_value} = data;
if (prerequisite_type === 'quantity') {
return `Purchase the following items for a total of ${prerequisite_value} items`;
} else if (prerequisite_type === 'subtotal') {
return `Purchase the following items for a total of `;
}
if (obtain_type === 'free') {
return `Get for free`;
} else if (obtain_type === 'percentage') {
return `${obtain_value}% OFF on the purchase of the following items`;
} else if (obtain_type === 'fixed_amount') {
return `The following items are discounted by each`;
}
return `Products participating in the points activity`;
}()}
${function(){
let link = '';
if (!item.subscribe_info?.subscribed) {
link = `/products/${ item.benefit_package.product_handle }`;
} else {
link = 'javascript:void(0);';
}
if (!true) {
link = `javascript:void(0);`;
}
return `
${ item.subscribe_info?.subscribed ? 'Subscribed' : `Subscribe` }
`;
}()}
You've purchased
${ item.invalid_order_count}
extra
${ item.benefit_package.product_name }
(s). Benefits only apply for the purchase of just one item. Please refund the extra item(s).
View order details >
After the current paid benefits expire, the system will no longer automatically renew your paid benefits. Are you sure you want to cancel the subscription?
${function(){
if (!data.success) {
return ``
}
return `
Unsubscribed successfully (${s}s)
`;
}()}
Loading...
${function(){
switch(data.status || data) {
case 'COUPON_RECEIVE_INSUFFICIENT_POINTS_ERROR': return `
Insufficient
`;
case 'BIRTHDAY_NOT_COME': return `
Your birthday time has not yet come
`;
case 'SHOW_LOGIN_TIP':
case 'UNAUTHORIZED':
return `You have not yet joined as a member or logged into your account`;
case 'COUPON_RECEIVE_NOT_IN_TIME_ERROR':
case 'COUPON_NOT_FOUND_ERROR':
case 'CAMPAIGN_NOT_FOUND_ERROR': return `Points benefit does not exist. Please refresh the page`;
case 'COUPON_RECEIVE_NOT_ELIGIBLE_ERROR':
case 'COUPON_RECEIVE_UPPER_LIMIT_ERROR':
case 'COUPON_RECEIVE_FAILED_ERROR': return `redemption failed. Please refresh the page and try again.`;
case 'COUPON_RECEIVE_NO_STOCK_ERROR': return `The coupon has been redeemed!`;
case 'LOYALTY_SERVER_UNAUTHORIZED': return `Please log in to your account!`;
case 'LOYALTY_SERVER_CUSTOMER_NOT_FOUND_ERROR': return `User error detected. Please refresh the page and try again~`;
case 'INVALID_PHONE_NUMBER_ERROR': return `Please enter a valid phone`;
case 'BENEFIT_UNSUBSCRIBE_FAILED_ERROR': return `Network error. Please try again!`;
default: return `The network is abnormal or the system is busy, please refresh the page and try again~`;
}
}()}
${function(){
const { discount_code_activity } = data.benefit?.reward || {};
const { discount_type, obtain_product, discount_value } = discount_code_activity || {};
if (discount_type === 'fixed_amount') {
return `
`
}
if (discount_type === 'percentage') {
return `
${parseInt(discount_value)}% OFF
`
}
if (discount_type === 'free_shipping') {
return `
FREE SHIPPING
`
}
return '';
}()}
${function(){
const {discount_type, prerequisite_value, prerequisite_type, obtain_product} = data.benefit?.reward.discount_code_activity || {};
if (discount_type === 'buy_x_get_y') {
const x = prerequisite_value;
const y = obtain_product.product_count;
const obtain_value = obtain_product.obtain_value;
if(obtain_product.obtain_type === 'free') {
if (prerequisite_type === 'quantity') {
return `Buy ${x} Get ${y} Free`;
} else if (prerequisite_type === 'subtotal') {
return `Buy Get ${y} Free`;
}
}
if(obtain_product.obtain_type === 'percentage') {
if (prerequisite_type === 'quantity') {
return `Buy ${x}, get ${y} at ${obtain_value}% OFF`;
} else if (prerequisite_type === 'subtotal') {
return `Buy , get ${y} at ${obtain_value}% OFF`;
}
}
if(obtain_product.obtain_type === 'fixed_amount') {
if (prerequisite_type === 'quantity') {
return `Buy ${x} get ${y} with off each`;
} else if (prerequisite_type === 'subtotal') {
return `Buy get ${y} with off each`;
}
}
}
return '';
}()}
${function(){
const { prerequisite_type, prerequisite_value, discount_type, obtain_product, max_free_shipping } = data.benefit?.reward.discount_code_activity || {};
if (prerequisite_type === 'none' && discount_type === 'free_shipping' && max_free_shipping !== -1) {
return `Up to , no threshold`;
}
if (prerequisite_type === 'quantity' && discount_type === 'free_shipping' && max_free_shipping !== -1) {
return `Up to , the order is available when it contains at least ${parseInt(prerequisite_value)} items`;
}
if (prerequisite_type === 'subtotal' && discount_type === 'free_shipping' && max_free_shipping !== -1) {
return `Up to , available when the order amount exceeds `;
}
if (prerequisite_type === 'none') {
return `No threshold`;
}
if (prerequisite_type === 'quantity') {
return `The order is available when it contains at least ${parseInt(prerequisite_value)} items`;
}
if (prerequisite_type === 'subtotal') {
return `Available when the order amount exceeds `;
}
return '';
}()}
${function(){
if (data.discount_code?.available_times === -1) {
return `Available`;
} else if (data.discount_code?.available_times > 0) {
return `Can be used ${data.discount_code?.available_times} times`;
}
return 'Exhausted';
}()}
`;
}
return '';
}()}
${function(){
const {execution_schedule, trigger_type} = data.benefit.benefit_config;
const { type, date } = execution_schedule || {};
if (data.benefit.type === 'point') {
if (trigger_type === 'onetime') {
return `After you successfully purchase the benefit package, it will be immediately issued to your account.`;
} else if (trigger_type === 'periodic') {
if (type === 'monthly') {
return `After successfully purchasing the benefit package, it will be automatically issued to your account every month.`;
} else if (type === 'weekly') {
return `After you successfully purchase the benefit package, it will be automatically issued to your account every week.`;
} else if (type === 'cycle') {
return `After you successfully purchase the benefit package, it will be automatically issued to your account every ${execution_schedule.days[0]} days.`;
}
} else if (type === 'specific_date') {
return `The benefit will be issued to your account on ${ date } every year.`;
}
} else {
if (trigger_type === 'onetime') {
return `After you successfully purchase the benefit package, it will be immediately issued to your account.`;
} else if (trigger_type === 'periodic') {
if (type === 'monthly') {
return `After you successfully purchase the benefit package, the discount code will be automatically refreshed monthly.`;
} else if (type === 'weekly') {
return `After you successfully purchase the benefit package, the discount code will be automatically refreshed weekly.`;
} else if (type === 'cycle') {
return `After you successfully purchase the benefit package, it will be automatically issued to your account every ${execution_schedule.days[0]} days.`;
}
} else if (type === 'specific_date') {
return `The benefit will be issued to your account on ${ date } every year.`;
}
}
}()}
${data.discount_code?.discount_code}
${function(){
const {execution_schedule, trigger_type} = data.benefit.benefit_config;
const { type, date } = execution_schedule || {};
if (data.benefit.type === 'point') {
if (trigger_type === 'periodic') {
if (type === 'monthly') {
if (data.had_reward) {
return `The benefit of the month has been issued to your account. The next issuance will occur in
`;
} else {
return `Next refresh time:
`;
}
} else if (type === 'weekly') {
if (data.had_reward) {
return `The benefit of the week has been issued to your account. The next issuance will occur in
`;
} else {
return `Next refresh time:
`;
}
}
}
if (trigger_type === 'onetime') {
if (data.had_reward) {
return `The benefit has been issued to your account.`;
} else {
return `Next refresh time:
`;
}
}
if (data.had_reward) {
return `The benefit has been issued to your account. The next issuance will occur in
`;
} else {
return `Next refresh time:
`;
}
} else {
return `Next refresh time:
`;
}
}()}