var payTabs = []
var payType
var currency
var customerData
var console
var Data = {}
var receivedData
var ccAllowedNames
var requesting
var notifyDontUpdate
if (!console) { console = {debug: function(){}} }
try{document.execCommand('BackgroundImageCache', false, true);}catch(e){}
function onLoad(){
new Insertion.Bottom(document.body, '<div id="loading_img"> </div>')
mouseTrail.init()
Event.observe(document.body, 'mousemove', mouseTrail.track)
request({action:'init'})
$$('select','input').each(function(s){
if(!s.id){
s.id = s.name
}
})
setClickableEvents($$('.clickable'))
$('section_coupon').hide()
$('returning_fields').hide()
$('cc_exp_month').update(drawMonthOptions())
$('cc_exp_year').update(drawYearOptions())
var same_address = $('same_address')
same_address.onchange = function(){
var sh = $('shipping_fields')
if(this.value == '1'){
sh.hide()
}else{
sh.show()
}
}
same_address.onchange()
$$('.section input', '.section select').each(function(el){
Event.observe(el, 'focus', onFocus)
Event.observe(el, 'blur', onBlur)
})
Event.observe('cc_number', 'keyup', ccOnChange)
Event.observe(document.body, 'click', bodyOnClick)
$$('td.lang a').each(function(el){
el.href = 'javascript:changeLanguage("'+el.href+'")'
})
}
function request(params){
mouseTrail.start()
pageBtns.disable()
requesting = true
var requestPOST = cloneObject(params)
new Ajax.Request( 'connector.php', {
requestHeaders: ['Connection', 'close'], 
parameters: params,
onSuccess: requestDone.bind(this,requestPOST),
onFailure: function(){
showError({message:Data.texts.errCantConnect})
pageBtns.enable()
requesting = false
}
})
}
function notify(str1, str2, id){
var params
if(str1=='cart'){
var p = {}
p.action = 'cart_change'
var obj = checkObj(customerData.cart)
Object.keys(obj).each(function(n){
if(n == 'bonuses') return
p['set'+n]=obj[n].amount
})
p.shipping_method_id = customerData.shipping
if(customerData.bonus_id){
p.bonus_id = customerData.bonus_id
}
}
if(str2=='remove'){
p['set'+id]=0
}
notifyDontUpdate = str2=='doNotUpdate' ? true : false
request(p)
}
function requestDone(requestPOST,transport){
mouseTrail.stop()
pageBtns.enable()
requesting = false
var receivedData = transport.responseJSON || transport.responseText.evalJSON()
mergeObject(Data, receivedData)
var response = receivedData.response
if(response){
if(response.type == 'ERROR'){
clearErrors()
var msg = []
var f = response.fields
var m = response.message
if(m){
msg.push(m)
}
if(f){
for(var n in f){
markErrorField(n)
msg.push(f[n])
}
}
showError({message:msg.join('\n\r')})
}else if(response.type == 'SUCCESS'){
document.location = document.location
}
return
}
if(requestPOST.action=='init'){
initialize()
}else if(requestPOST.action=='returning_customer'){
setReturningCustomerInfo()
}else if(requestPOST.action=='submit_coupon'){
setCouponDiscount()
}else if(requestPOST.action=='cart_change' && receivedData.cart){
if(!notifyDontUpdate){
customerData.cart = cloneObject(receivedData.cart)
updCart()
}
}
}
function initialize() {
$$('div.content')[0].show()
if(!Data.customerInitialData.discount){
Data.customerInitialData.discount = {amount:0, percent:0}
}
customerData = cloneObject(Data.customerInitialData)
currency = customerData.currency
drawPMSelector()
drawCCIcons()
updPayType()
payTabs.each(function(el){
Event.observe(el, 'mouseover', onOver)
Event.observe(el, 'mouseout', onOut)
Event.observe(el, 'click', onClick)
})
var cid = customerData.country_id
var countries = drawOptions(Selects.countries, cid)
$('shipping-country_id','billing-country_id','wire_country_id').each(function(el){
el.update(countries)
el.onchange = function(){
onCountryChange(el)
if(el.name=='billing-country_id'){
setPhonePref(el.value)
}
}
})
setPhonePref(cid)
updStateSelect($('shipping-state_id'),cid)
updStateSelect($('billing-state_id'), cid)
updCart()
var f = $('checkout_form')
f.action = 'javascript:void(0)'
try{var userInfo = (document.cookie+';').match(/userInfo=(.*?);/)[1]}catch(e){}
if(userInfo){
var n, d = userInfo.toQueryParams()
Data.customerInitialData.form = {}
for(n in d){
if(n.indexOf('set_')==0 || n.indexOf('shipping_method_id')==0) continue
try{$(n).value = d[n]}catch(e){}
Data.customerInitialData.form[n]=d[n]
}
document.cookie = 'userInfo=; expires=' + new Date(0).toGMTString()
}else{
Data.customerInitialData.form = f.serialize(true)
}
}
function setClickableEvents(arr) {
arr.each(function(el){
Event.observe(el, 'mouseover', clickableOver)
Event.observe(el, 'mouseout', clickableOut)
Event.observe(el, 'click', onClick)
})
}
function bodyOnClick(event) {
if (requesting){
Event.stop(event)
return
}
}
function onClick(event) {
if (requesting){
Event.stop(event)
return
}
var el = event.element();
clickedElement = el
if (el.tagName == 'A') {
return
}
if (el.tagName == 'DIV') {
if (payTabs.indexOf(el) >= 0) {
selPayType(el)
}
return
}
if (el.tagName == 'INPUT') {
if (el.type == 'checkbox') {
checkboxOnClick(el)
} else if (el.type == 'radio') {
radioOnClick(el)
}
return
}
var tr = event.findElement('TR');
if (tr && tr != document) {
var r = $(tr).select('input')[0]
if (r && (r.type == 'checkbox' || r.type == 'radio')) {
if (r.type == 'checkbox') {
r.checked = !r.checked
checkboxOnClick(r, tr)
} else if (r.type == 'radio') {
r.checked = true
radioOnClick(r, tr)
}
try {
} catch(e) {}
Event.stop(event)
return
}
}
}
function updPayType(){
$$('#payment_methods div.section').invoke('hide')
payTabs.each(function(el){
el.removeClassName('selected')
})
$('section_'+payType).show()
var actTab = $('tab_'+payType)
actTab.className ='selected'
}
function selPayType(el){
var newPayType = el.id.split('_')[1]
if(payType == newPayType) return
payType = newPayType
updPayType()
}
function checkboxOnClick(chk, tr){
tr = tr || chk.up('TR')
if (tr){
if(chk.checked){
tr.addClassName('selected')
}else{
tr.removeClassName('selected')
}
}
if(chk.name == 'same_address'){
if(chk.checked){
$('shipping_fields').hide()
}else{
$('shipping_fields').show()
}
}
}
function radioOnClick(r, tr){
if (r.name == 'shipping_method_id'){
setShippingMethod(r.value)
return
}
if (r.name == 'bonuses'){
setBonus(r.value)
return
}
tr = tr || r.up('TR')
var tr1 = $$('.selected input[name="'+r.name+'"]')[0].up('tr')
if (tr){
tr.toggleClassName('selected')
tr1.toggleClassName('selected')
}
}
function onFocus(e){
e.element().up('tr').addClassName('focused')
}
function onBlur(e){
var el = e.element()
var tr = el.up('tr')
tr.removeClassName('focused')
}
function onOver(e){
e.element().addClassName('over')
}
function onOut(e){
e.element().removeClassName('over')
}
function clickableOver(e){
var tr = e.findElement('TR')
tr.addClassName('clickable_over')
}
function clickableOut(e){
var tr = e.findElement('TR')
tr.removeClassName('clickable_over')
}
function ccOnChange(e){
var el = e.element()
var val = formatCCNumber(el.value)
el.value = val
if(!val) return
var c = val.substr(0,1)
var allowed = false
Data.ccTypes.each(function(t){
if(c == ccFirstDigit[t]){
allowed = true
}
})
if(!allowed){
alert(Data.texts.ccCantProcess.interpolate({ cards:ccAllowedNames.join(', ') }))
el.value = ''
}
}
function showCouponForm(){
var sc = $('section_coupon')
sc.toggle()
if(!sc.visible()){
clearErrors()
}
}
function drawProducts(){
var n,d,html=''
var subtotal=0, cartCost=0, cartAmount=0, free4pills = 0, amount
var free4pillsString
var obj = checkObj(customerData.cart)
Object.keys(obj).each(function(n){
if(n == 'bonuses') return
d = cloneObject(obj[n])
price = Number(d.price)
amount = Number(d.amount)
subtotal = price*amount
cartCost += subtotal
d.id = n
cartAmount += amount
d.subtotal = currency+' '+myRound(subtotal, 2)
d.price = currency+' '+myRound(price, 2)
html += (Strings.prodTR1+Strings.prodTR2).interpolate(d)
})
$('tbody_products').update(html)
customerData.cartCost = cartCost
customerData.cartAmount = cartAmount
$$('#tbody_products input').each(function(f){
f.onblur = function(){
setProdsAmount(this, 'blur')
}
f.onkeyup = function(){
setProdsAmount(this, 'keyup')
}
})
}
function drawBonuses(){
var n,d,html=''
var bs = customerData.cart.bonuses
var func = function(o,single){
var d = cloneObject(o)
d.subtotal = d.price = Data.texts.free
d.amount = 1
if(single) 
return (Strings.prodTR3+Strings.prodTR2).interpolate(d)
if(d.id == customerData.bonus_id){
d.selected =  ' selected'
d.checked = 'checked="checked"'
}else{
}
return (Strings.prodTR4+Strings.prodTR2).interpolate(d)
}
if(bs && bs.length > 0){
html = '<tr class="hr"><td colspan="6">&nbsp;</td></tr>'
bs.each(function(o){
if(o.length > 1){
o.each(function(o1){
html += func(o1)
})
}else{
html += func(o[0],true)
}
})
$('bonus_title').update('<b>'+Data.texts.yourBonus+'</b>')
$('tbody_bonuses').update(html)
}else{
$('bonus_title').update()
$('tbody_bonuses').update()
}
setClickableEvents($$('#tbody_bonuses .clickable'))
}
function drawShippingMethods(){
var n,d,html=''
var price,cost
for (n in Data.shippingMethods){
d = cloneObject(Data.shippingMethods[n])
price = Number(d.price)
d.id = n
d.price = currency+' '+myRound(price, 2)
if(d.per_item){
d.price += ' <span class="small">'+Data.texts.perItem+'</span>'
}
if(d.free_from){
if(d.free_from <= customerData.cartCost){
price = 0
d.price = currency+' '+myRound(price, 2)
}else{
d.price += ' ( <a href="javascript:freeShippingFrom(\''+d.free_from+'\')">0.00</a> )'
}
}
if(n == customerData.shipping){
if(customerData.cartAmount==0){
cost = 0
}else if(d.per_item){
cost = price*customerData.cartAmount
}else{
cost = price
}
d.price1 = currency+' '+myRound(cost, 2)
d.selected = ' selected'
d.checked = 'checked="checked"'
}
html += Strings.shipTR.interpolate(d)
}
customerData.shippingCost = cost
$('tbody_shipping').update(html)
setClickableEvents($$('#tbody_shipping .clickable'))
}
function freeShippingFrom(n){
alert(Data.texts.freeShippingFrom.interpolate({n:currency+' '+myRound(n, 2)}))
}
function updCart(){
drawProducts()
drawBonuses()
drawShippingMethods()
var disc = customerData.discount
var discVal
if(disc.percent>0){
$('coupon_discount').update('-  '+myRound(disc.percent, 2)+'%')
discVal = customerData.cartCost*disc.percent/100
}else{
$('coupon_discount').update('- '+currency+' '+myRound(disc.amount, 2))
discVal = disc.amount
}
$('subtotal').update(currency+' '+myRound(customerData.cartCost, 2))
var tot = customerData.cartCost>0 ? customerData.cartCost - discVal + customerData.shippingCost : 0
$('total').update(currency+' '+   myRound(tot, 2))
}
function setBonus(id){
if(customerData.bonus_id == id) return
customerData.bonus_id = id
if(customerData.cartAmount==0){
updCart()
}else{
notify('cart')
}
}
function setShippingMethod(id){
if(customerData.shipping == id) return
customerData.shipping = id
if(customerData.cartAmount==0){
updCart()
}else{
notify('cart')
}
}
function setProdsAmount(f, ev){
if(f.value=='' && ev=='keyup'){
return
}
var id = f.name.split('_')[1]
var amount = Number(f.value)
if(requesting || isNaN(amount) || customerData.cart[id].amount == amount){
f.value = customerData.cart[id].amount
return
}
customerData.cart[id].amount = amount
if(amount == 0){
updCart()
notify('cart', 'doNotUpdate')
}else{
notify('cart')
}
if(ev=='keyup'){
try{$('set_'+id).focus()}catch(e){}
}
}
function removeProduct(id){
if (requesting) return
var prod = customerData.cart[id]
var d = {
prod: prod.product+' - '+prod.pckg.replace('&times;','\xd7')
}
if(!confirm( Data.texts.confirmRemove.interpolate(d) )){
return
}
delete customerData.cart[id]
notify('cart','remove',id)
}
function resetAll(){
if (requesting) return
if(!confirm( Data.texts.confirmReset )){
return
}
clearErrors()
var n, d = Data.customerInitialData.form
for(n in d){
try{$(n).value = d[n]}catch(e){}
}
customerData = cloneObject(Data.customerInitialData)
notify('cart')
}
function returningCustomer(){
var rf = $('returning_fields')
rf.toggle()
$('billing_fields').toggle()
if(!rf.visible()){
clearErrors()
}
}
function getReturningCustomerInfo(){
var req = makeParamObj($('returning_email','returning_order_id'))
req.action = 'returning_customer'
if(req)	{
request(req)
}
}
function setReturningCustomerInfo(){
var rf = $('returning_fields')
rf.previous().remove()
rf.remove()
var d = Data.returningCustomer
$('billing_fields').toggle()
var n, f
for(n in d){
if(n.indexOf('state_id')>0)continue
f = $(n)
if(f && d[n]){
Data.customerInitialData.form[n] = d[n]
f.setValue(d[n])
if(n.indexOf('country_id')>0){
onCountryChange(f)
n = n.split('-country_id')[0]+'-state_id'
f = $(n)
if(f && d[n]){
Data.customerInitialData.form[n] = d[n]
f.setValue(d[n])
}
}
}
}
$('same_address').onchange()
var dscnt = d.discount
if (dscnt && dscnt>0){
Data.customerInitialData.discount = {amount:0, percent:dscnt}
customerData.discount = {amount:0, percent:dscnt}
updCart()
}
}
function makeParamObj(arr){
clearErrors()
var val, tr
var o = {}
arr.each(function(f){
if(isVisible(f)){
val = $F(f)
if(val.blank()){
tr = f.up(1)
if(tr && tr.hasClassName('req')){
showEmptyFieldError(f,tr)
o = false
throw $break;
}
}else{
o[f.name] = val
}
}
})
return o
}
function showEmptyFieldError(f,tr){
var fld = $(f)
if (!tr){
tr = fld.up('TR')
}
tr.addClassName('error')
var n = tr.down('TH').innerHTML.unescapeHTML().stripTags().strip().replace(':','')
if(fld.type=='text'){
alert(Data.texts.isEmptyInput.interpolate({name:n}))
}else{
alert(Data.texts.isEmptySelect.interpolate({name:n}))
}
fld.focus()
}
function markErrorField(f,tr){
var fld = $(f)
if(!fld)return
if (!tr){
tr = fld.up('TR')
}
tr.addClassName('error')
}
function showError(d){
var f = $(d.field)
if(f){
clearErrors()
markErrorField(d.field, d.tr)
}
alert(d.message)
if(f){
f.focus()
}
}
function clearErrors(o){
if(!o) o = document.body
o.select('tr.error').each(function(f){
f.removeClassName('error')
})
}
function submitTransaction(event){
if (requesting) return
updCart()
if ( customerData.cartCost == 0){
alert(Data.texts.cartIsEmpty)
return
}
if ( !$('billing_fields').visible() ){
returningCustomer()
}
var sc = $('section_coupon')
if (sc) sc.hide()
var req = makeParamObj( $$('#section_billing input','#section_billing select','#section_shipping input','#section_shipping select','#payment_methods input','#payment_methods select') )
if(!req) return
if (req.phone.replace(/\D/g,'')==Selects.phones[req['billing-country_id']]){
showError({message:Data.texts.definePhone, field:'phone'})
return
}
if (!isShippingAvailable(req) ) return
if (payType=='cc'){
if (!isCreditCard(req.cc_number)){
showError({message:Data.texts.ccInvalid, field:'cc_number'})
return
}
if (isCCdateExpired(req.cc_exp_month, req.cc_exp_year)){
showError({message:Data.texts.ccExpired, field:'cc_exp_month'})
return
}
}else if (payType=='eurodebit'){
var i=1,val=''
while(i<5){
val += req['eudebid-'+i]||''
delete req['eudebid-'+i]
i++
}
if(val)	req.eurodebit_id = val
}
var n
for(n in customerData.cart){
if(customerData.cart[n].price>0){
req['set'+n]=customerData.cart[n].amount
}
}
req.shipping_method_id = customerData.shipping
if(customerData.bonus_id){
req.bonus_id = customerData.bonus_id
}
req.action = 'submit_transaction'
req.utime = new Date().toString()
req.screen = screen.width+"x"+screen.height+"x"+screen.colorDepth
request(req)
}
function onCountryChange(cb){
var c_code = cb.value,
c_name = Selects.countries[c_code],
banned = new RegExp(Data.bannedCountries).test(c_code)
if(banned){
alert (Data.texts.bannedCountry.interpolate({country:c_name}))
c_code = 0
cb.selectedIndex = 0
}
var nm = cb.name.split('-country_id')[0]
if(nm){
var st = $(nm+'-state_id')
if(!st)return
updStateSelect(st,cb.value)
}
}
function setPhonePref(c_code){
var inp=$('phone'),
n=Selects.phones[c_code]
if(n){
inp.value='+ '+n+' - '
}else{
inp.value=''
}
}
function onStateChange(cb){
var nm = cb.name.split('-state_id')[0]
if(nm){
var c = $(nm+'-country_id')
var us_ca = c.value == 'US' || c.value == 'CA'
if( cb.value == '_' && us_ca ){
c.selectedIndex = 0
}else if( cb.selectedIndex > 1 && !us_ca ){
c.selectedIndex = 0
}
}
}
function isShippingAvailable(req){
var same_address = req.same_address=='1'
var sc = req['shipping-country_id'] || req['billing-country_id']
var m = Data.shippingMethods[customerData.shipping]
var fc = m.forbidden.countries
var available = true
if( fc && fc.length>0 && fc.indexOf(sc)>=0){
available = false
}
if( !available ){
window.scrollTo(0,0);
var tr = $('shipmethod_'+customerData.shipping).up('TR')
tr.className = 'error'
alert (Data.texts.forbiddenShipping.interpolate({method:m.title, country:Selects.countries[sc]}))
return false
}
var fp = m.forbidden.products
if( fp && fp.length>0 ){
var prn
var obj = checkObj(customerData.cart)
Object.values(obj).each(function(pr){
if(pr.product && pr.amount>0){
prn=pr.product.toLowerCase()
fp.each(function(n){
if(prn.indexOf(n.toLowerCase())>=0){
alert (Data.texts.forbiddenShippingByProduct.interpolate({method:m.title, product:pr.product}))
available = false
return
}
})
}
})
}
return available
}
function submitCoupon(){
var val = $F('coupon')
if(val){
request({coupon:val, action:'submit_coupon'})
}else{
var fld = $('coupon')
var tr = fld.up('TR')
tr.addClassName('error')
alert(Data.texts.isEmptyCoupon)
fld.focus()
}
}
function drawPMSelector(){
var ms = Data.paymentMethods
var html = '<table class="method_selector"><tr>'
ms.each(function(m){
html += '<td><div id="tab_'+m+'">'+Strings.pmNames[m]+'</div></td>'
})
html += '</tr></table>'
new Insertion.Bottom($('method_selector'), html)
ms.each(function(m){
payTabs.push($('tab_'+m))
})
payType = ms[0]
}
function drawCCIcons(){
var html = ''
ccAllowedNames = []
var cs = Data.ccTypes
if(cs && cs.length>0){
cs.each(function(t){
html += '<img src="imgs/ajax/'+t+'.gif" title="'+Strings.ccNames[t]+'" alt="'+Strings.ccNames[t]+'"/> '
ccAllowedNames.push(Strings.ccNames[t])
})
new Insertion.Bottom($('ccIcons'), html)
}
}
function setCouponDiscount(){
Data.customerInitialData.discount = cloneObject(Data.couponDiscount)
customerData.discount = cloneObject(Data.couponDiscount)
$('section_coupon').remove()
var t = $('coupon_discount').previous()
t.update(t.innerHTML.replace(/ \(.*/,' :'))
updCart()
}
var mouseTrail = new function(){
var img,mx,my,on
this.init = function(){
img = $('loading_img')
}
var move = function(){
img.setStyle({
left: (mx + 15) + 'px',
top:  (my + 15) + 'px',
display: 'block'
})
}
this.start = function(){
on = true
}
this.stop = function(){
img.hide()
on = false
}
this.track = function(event){
if(!on) return
mx = Event.pointerX(event)
my = Event.pointerY(event)
move()
}
}
var pageBtns = new function(){
var btns
this.enable = function(){
getBtns().each(function(b){
b.enable()
b.setOpacity(1)
})
}
this.disable = function(){
getBtns().each(function(b){
b.disable()
b.setOpacity(0.5)
})
}
var getBtns = function(){
if(!btns) btns = $$('input[type="button"]')
return btns
}
}
function changeLanguage(str){
var f = $('checkout_form')
document.cookie = 'userInfo='+f.serialize()
document.location.replace(str)
}
var coo = new function(){
var GetValue = function(Offset){
var End=document.cookie.indexOf (";", Offset);
if (End==-1) End=document.cookie.length;
return unescape(document.cookie.substring(Offset, End));
}
this.get = function(Name){
var Len=Name.length;
var i=0;
while (i<document.cookie.length){
var j=i+Len+1;
if (document.cookie.substring(i,j)==(Name+"="))	return GetValue(j);
i=document.cookie.indexOf(" ", 1)+1;
if (i==0) break;
}
return null;
}
this.set = function(Name, Value, Expire){
var Exp="Friday,25-Feb-2000 12:00:00 GMT";
var date = new Date();
date = new Date(date.getTime() + (Expire * 1000));
document.cookie=Name+"="+escape(Value)+";expires=" + date.toGMTString();
}
}
function whatIs(addr){
var w = 500
var h = 300
var l = (screen.availWidth  - w) / 2
var t = (screen.availHeight - h) / 2
var op = 'toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,copyhistory=no,width=#{w},height=#{h},left=#{l},top=#{t}'
window.open(addr, '_blank', op.interpolate({w:w,h:h,l:l,t:t}))
}
function isVisible(el){
return el.offsetHeight > 0
}
function checkObj(obj){
if(obj instanceof Array){
return {}
}else{
return obj
}
}
function cloneObject(o){
var obj
if (o instanceof Array) {
obj = []
}else{
obj = {}
}
mergeObject(obj,o)
return obj
}
function mergeObject(obj,o,del){
var exist, val
for (var i in o) {
exist = obj[i] != null;
val = o[i]
if (typeof val == "function") continue
if (val === null) {
if (del) {
delete obj[i]
}else {
obj[i] = null
}
} else if (typeof val == "object") {
if (!exist) {
if (val instanceof Array) {
obj[i] = []
}else{
obj[i] = {}
}
}
mergeObject(obj[i], val, del);
} else {
obj[i] = val
}
}
}
function myRound(x, n){
var dec = Math.pow(10,n)
var val = (Math.round(dec*x)/dec).toString();
var i = val.indexOf('.')
var out
if(i<0){
out = val+'.00'
}else if(val.length-i==2){
out = val+'0'
}else{
out = val
}
return out
}
function drawStateOptions(cid){
var sts = Selects.states[cid]
if(sts){
return drawOptions(sts)
}else{
return ''
}
}
function updStateSelect(st,cid){
var ops = drawStateOptions(cid)
var tr = st.up('tr')
if(ops==''){
tr.hide()
}else{
tr.show()
st.update(ops)
}
}
function drawOptions(ops, selectedValue){
var html
if(selectedValue){
html = '<option value=""></option>'
}else{
html = '<option value="" selected="selected"></option>'
}
var itsCountries = ops == Selects.countries
var r = new RegExp(Data.bannedCountries)
var n,ban,sel
for(n in ops){
ban = ''
sel = ''
if(itsCountries && r.test(n)){
ban = ' class="ban"'
}else if(n==selectedValue){
sel = ' selected="selected"'
}
html += '<option'+ban+' value="'+n+'"'+sel+'>'+ops[n]+'</option>'
}
return html
}
function drawMonthOptions(){
var html = '<option value="" selected="selected"></option>'
var n1
var n = 0
while(n<12){
n++
n1 = n<10 ? '0'+n : n
html += '<option value="'+n1+'">'+n1+'</option>'
}
return html
}
function drawYearOptions(){
var n = new Date().getFullYear()
var html = '<option value="" selected="selected"></option>'
var n2 = n+8
while(n<n2){
html += '<option value="'+n+'">'+n+'</option>'
n++
}
return html
}
function myStrip(s) {
return s.strip().replace(/\s+/g, ' ')
}
function isCreditCard(n) {
n=n.replace(/[^\d]/g,'')
if(n.length < (((parseInt(n.charAt(0))) == 3) ? 15: 16))return false
var len=n.length;
var parity=len%2;
var sum=0;
for(i=0;i<len;i++){
var d=Number(n.charAt(i));
if(i%2==parity)d=d*2;
if(d>9)d=d-9;
sum+=d;
}
return(sum%10 == 0);
}
function formatCCNumber(n){
n = n.replace(/[^\d]/g,'')
var arr = n.match(/\d{1,4}/g)
if(!arr) return ''
return arr.join(' ')
}
function isCCdateExpired(month, year){
var expires = new Date(year, month, 1)
today = new Date()
var one_day = 1000 * 60 * 60 * 24
return today.getTime() - expires.getTime() >= one_day
}
var Strings = {
hrTR:
'<tr class="hr"><td colspan="6"></td></tr>',
prodTR1:
'<tr id="prod_#{id}" class="selected"><td><img class="pointer" onclick="removeProduct(#{id})" src="imgs/ajax/remove.gif" title="Remove"/></td><td><input class="qty" id="set_#{id}" name="set_#{id}" value="#{amount}"/></td>',
prodTR2:
'<td class="product">#{product}</td><td class="package">#{pckg}</td><td class="price">#{price}</td><td class="subtotal">#{subtotal}</td></tr>',
prodTR3:
'<tr id="prod_#{id}" class="selected"><td></td><td>#{amount}</td>',
prodTR4:
'<tr id="prod_#{id}" class="clickable#{selected}"><td></td><td><input name="bonuses" type="radio" class="radio" id="bonus_#{id}" value="#{id}" #{checked}></td>',
shipTR:
'<tr class="clickable#{selected}"><td></td><td><input name="shipping_method_id" type="radio" class="radio" value="#{id}" id="shipmethod_#{id}" #{checked}/></td><td>#{title}</td><td>#{delivery}</td><td>#{price}</td><td>#{price1}</td></tr>',
pmNames: {
cc: 'Credit card',
wire: 'Wire transfer',
eurodebit: 'EuroDebit',
ach: 'eCheck'
},
ccNames: {
visa: 'Visa',
mastercard: 'Mastercard',
amex: 'American Express',
discover: 'Discover'
}
}
var ccFirstDigit = {
amex: '3',
visa: '4',
mastercard: '5',
discover: '6'
}
var Selects = {
states: {
US: {
AL:'Alabama',
AK:'Alaska',
AZ:'Arizona',
AR:'Arkansas',
AA:'Armed F. Americas',
AE:'Armed F. Other AE',
AP:'Armed F. Pacific',
CA:'California',
CO:'Colorado',
CT:'Connecticut',
DE:'Delaware',
DC:'Dist. of Columbia',
FL:'Florida',
GA:'Georgia',
HI:'Hawaii',
ID:'Idaho',
IL:'Illinois',
IN:'Indiana',
IA:'Iowa',
KS:'Kansas',
KY:'Kentucky',
LA:'Louisiana',
ME:'Maine',
MD:'Maryland',
MA:'Massachusetts',
MI:'Michigan',
MN:'Minnesota',
MS:'Mississippi',
MO:'Missouri',
MT:'Montana',
NE:'Nebraska',
NV:'Nevada',
NH:'New Hampshire',
NJ:'New Jersey',
NM:'New Mexico',
NY:'New York',
NC:'North Carolina',
ND:'North Dakota',
OH:'Ohio',
OK:'Oklahoma',
OR:'Oregon',
PA:'Pennsylvania',
RI:'Rhode Island',
SC:'South Carolina',
SD:'South Dakota',
TN:'Tennessee',
TX:'Texas',
UT:'Utah',
VT:'Vermont',
VA:'Virginia',
WA:'Washington',
WV:'West Virginia',
WI:'Wisconsin',
WY:'Wyoming'
},
AU:{
ACT:'Capital Terr.',
NSW:'New South Wales',
NT:'Northern Terr.',
QLD:'Queensland',
SA:'South Australia',
TAS:'Tasmania',
VIC:'Victoria',
WA:'Western Australia'
},
CA:{
AB:'Alberta',
BC:'British Columbia',
MB:'Manitoba',
NB:'New Brunswick',
NF:'Newfoundland',
NT:'Northwest Terr.',
NS:'Nova Scotia',
NU:'Nunavut',
ON:'Ontario',
PE:'Prince Edward Isl.',
QC:'Quebec',
SK:'Saskatchewan',
YT:'Yukon'
}
},	
countries: {
US:'United States',
CA:'Canada',
GB:'United Kingdom',
AF:'Afghanistan',
AL:'Albania',
DZ:'Algeria',
AS:'American Samoa',
AD:'Andorra',
AO:'Angola',
AI:'Anguilla',
AQ:'Antarctica',
AG:'Antigua And Barbuda',
AR:'Argentina',
AM:'Armenia',
AW:'Aruba',
AU:'Australia',
AT:'Austria',
AZ:'Azerbaijan',
BS:'Bahamas',
BH:'Bahrain',
BD:'Bangladesh',
BB:'Barbados',
BY:'Belarus',
BE:'Belgium',
BZ:'Belize',
BJ:'Benin',
BM:'Bermuda',
BT:'Bhutan',
BO:'Bolivia',
BA:'Bosnia And Herzegovina',
BW:'Botswana',
BV:'Bouvet Island',
BR:'Brazil',
IO:'British Indian Ocean Territory',
BN:'Brunei Darussalam',
BG:'Bulgaria',
BF:'Burkina Faso',
BI:'Burundi',
KH:'Cambodia',
CM:'Cameroon',
CV:'Cape Verde',
KY:'Cayman Islands',
CF:'Central African Republic',
TD:'Chad',
CL:'Chile',
CN:'China',
CX:'Christmas Island',
CC:'Cocos (Keeling) Islands',
CO:'Colombia',
KM:'Comoros',
CG:'Congo',
CD:'Congo',
CK:'Cook Islands',
CR:'Costa Rica',
CI:'Cote D&quot;ivoire',
HR:'Croatia',
CU:'Cuba',
CY:'Cyprus',
CZ:'Czech Republic',
DK:'Denmark',
DJ:'Djibouti',
DM:'Dominica',
DO:'Dominican Republic',
EC:'Ecuador',
EG:'Egypt',
SV:'El Salvador',
GQ:'Equatorial Guinea',
ER:'Eritrea',
EE:'Estonia',
ET:'Ethiopia',
FK:'Falkland Islands (Malvinas)',
FO:'Faroe Islands',
FJ:'Fiji',
FI:'Finland',
FR:'France',
GF:'French Guiana',
PF:'French Polynesia',
TF:'French Southern Territories',
GA:'Gabon',
GM:'Gambia',
GE:'Georgia',
DE:'Germany',
GH:'Ghana',
GI:'Gibraltar',
GR:'Greece',
GL:'Greenland',
GD:'Grenada',
GP:'Guadeloupe',
GU:'Guam',
GT:'Guatemala',
GN:'Guinea',
GW:'Guinea-Bissau',
GY:'Guyana',
HT:'Haiti',
HM:'Heard Island And Mcdonald Islands',
VA:'Holy See (Vatican City State)',
HN:'Honduras',
HK:'Hong Kong',
HU:'Hungary',
IS:'Iceland',
IN:'India',
ID:'Indonesia',
IR:'Iran, Islamic Republic Of',
IQ:'Iraq',
IE:'Ireland',
IL:'Israel',
IT:'Italy',
JM:'Jamaica',
JP:'Japan',
JO:'Jordan',
KZ:'Kazakhstan',
KE:'Kenya',
KI:'Kiribati',
KP:'Korea, Democratic People&quot;s Republic Of',
KR:'Korea, Republic Of',
KW:'Kuwait',
KG:'Kyrgyzstan',
LA:'Lao People&quot;s Democratic Republic',
LV:'Latvia',
LB:'Lebanon',
LS:'Lesotho',
LR:'Liberia',
LY:'Libyan Arab Jamahiriya',
LI:'Liechtenstein',
LT:'Lithuania',
LU:'Luxembourg',
MO:'Macao',
MK:'Macedonia',
MG:'Madagascar',
MW:'Malawi',
MY:'Malaysia',
MV:'Maldives',
ML:'Mali',
MT:'Malta',
MH:'Marshall Islands',
MQ:'Martinique',
MR:'Mauritania',
MU:'Mauritius',
YT:'Mayotte',
MX:'Mexico',
FM:'Micronesia, Federated States Of',
MD:'Moldova, Republic Of',
MC:'Monaco',
MN:'Mongolia',
MS:'Montserrat',
MA:'Morocco',
MZ:'Mozambique',
MM:'Myanmar',
NA:'Namibia',
NR:'Nauru',
NP:'Nepal',
NL:'Netherlands',
AN:'Netherlands Antilles',
NC:'New Caledonia',
NZ:'New Zealand',
NI:'Nicaragua',
NE:'Niger',
NG:'Nigeria',
NU:'Niue',
NF:'Norfolk Island',
MP:'Northern Mariana Islands',
NO:'Norway',
OM:'Oman',
PK:'Pakistan',
PW:'Palau',
PS:'Palestinian Territory, Occupied',
PA:'Panama',
PG:'Papua New Guinea',
PY:'Paraguay',
PE:'Peru',
PH:'Philippines',
PN:'Pitcairn',
PL:'Poland',
PT:'Portugal',
PR:'Puerto Rico',
QA:'Qatar',
RE:'Reunion',
RO:'Romania',
RU:'Russian Federation',
RW:'Rwanda',
SH:'Saint Helena',
KN:'Saint Kitts And Nevis',
LC:'Saint Lucia',
PM:'Saint Pierre And Miquelon',
VC:'Saint Vincent And The Grenadines',
WS:'Samoa',
SM:'San Marino',
ST:'Sao Tome And Principe',
SA:'Saudi Arabia',
SN:'Senegal',
SC:'Seychelles',
SL:'Sierra Leone',
SG:'Singapore',
SK:'Slovakia',
SI:'Slovenia',
SB:'Solomon Islands',
SO:'Somalia',
ZA:'South Africa',
GS:'South Georgia',
ES:'Spain',
LK:'Sri Lanka',
SD:'Sudan',
SR:'Suriname',
SJ:'Svalbard And Jan Mayen',
SZ:'Swaziland',
SE:'Sweden',
CH:'Switzerland',
SY:'Syrian Arab Republic',
TW:'Taiwan, Province Of China',
TJ:'Tajikistan',
TZ:'Tanzania, United Republic Of',
TH:'Thailand',
TL:'Timor-leste',
TG:'Togo',
TK:'Tokelau',
TO:'Tonga',
TT:'Trinidad And Tobago',
TN:'Tunisia',
TR:'Turkey',
TM:'Turkmenistan',
TC:'Turks And Caicos Islands',
TV:'Tuvalu',
UG:'Uganda',
UA:'Ukraine',
AE:'United Arab Emirates',
UM:'United States Minor Outlying Islands',
UY:'Uruguay',
UZ:'Uzbekistan',
VU:'Vanuatu',
VE:'Venezuela',
VN:'Viet Nam',
VG:'Virgin Islands, British',
VI:'Virgin Islands, U.S.',
WF:'Wallis And Futuna',
EH:'Western Sahara',
YE:'Yemen',
YU:'Yugoslavia',
ZM:'Zambia',
ZW:'Zimbabwe'},
phones:{
GL:299,
DJ:253,
JM:1876,
AT:43,
PG:675,
KI:686,
SZ:268,
YT:269,
BN:673,
ZM:260,
BW:267,
AO:244,
ZW:263,
VC:1784,
PR:1787,
JP:81,
NA:264,
TJ:992,
LC:1758,
MA:212,
SV:503,
VU:678,
MT:356,
MN:976,
MP:1670,
IT:39,
WS:685,
EG:20,
FR:33,
PW:680,
UZ:998,
LR:231,
TK:690,
BE:32,
TN:216,
EE:372,
CK:682,
BY:375,
LS:266,
NO:47,
SA:966,
KR:82,
ZA:27,
PT:351,
BF:226,
CA:1,
AM:374,
CM:237,
SR:597,
MG:261,
NP:977,
BT:975,
PL:48,
CF:236,
TM:993,
AE:971,
BA:387,
TH:66,
KY:1345,
PH:63,
CC:61,
NI:505,
NC:687,
GU:1671,
KZ:7,
MM:95,
NR:674,
DM:1767,
NE:227,
MR:222,
AD:376,
TO:676,
SE:46,
AZ:994,
AF:93,
NG:234,
KE:254,
BJ:229,
OM:968,
VG:1284,
VN:84,
CI:225,
DZ:213,
YE:967,
LK:94,
ID:62,
FM:691,
GE:995,
GM:220,
CX:61,
LV:371,
RU:7,
LB:961,
FK:500,
FI:358,
DE:49,
MV:960,
LU:352,
VE:58,
BH:973,
GI:350,
WF:681,
RO:40,
GP:590,
IN:91,
AR:54,
VI:1340,
TV:688,
SN:221,
AW:297,
MX:52,
FO:298,
MC:377,
HN:504,
BR:55,
IL:972,
SB:677,
DO:1809,
NZ:64,
HU:36,
UG:256,
KH:855,
GB:44,
BB:1246,
HT:509,
DK:45,
PA:507,
QA:974,
CV:238,
GD:1473,
GF:594,
MO:853,
KM:269,
KW:965,
HR:385,
TC:1649,
MQ:596,
CZ:420,
ES:34,
MZ:258,
BO:591,
AU:61,
ST:239,
AL:355,
IR:98,
CG:242,
MD:373,
TR:90,
GN:224,
GW:245,
BI:257,
MK:389,
GR:30,
AG:1268,
CO:57,
SI:386,
AI:1264,
AQ:672,
AN:599,
JO:962,
SM:378,
UA:380,
CL:56,
CU:53,
KN:1869,
ML:223,
ET:251,
SC:248,
IS:354,
NL:31,
MS:1664,
HK:852,
EC:593,
MY:60,
CR:506,
VA:39,
SD:249,
CN:86,
MH:692,
BG:359,
UY:598,
BS:1242,
PY:595,
TL:670,
MU:230,
LI:423,
CH:41,
GH:233,
NU:683,
US:1,
PE:51,
SL:232,
BZ:501,
CY:357,
FJ:679,
IE:353,
TW:886,
KP:850,
PF:689,
ER:291,
IQ:964,
AS:1684,
MW:265,
TZ:255,
GT:502,
GY:592,
BM:1441,
PK:92,
GQ:240,
LT:370,
SG:65,
PM:508,
TT:1868,
NF:672,
TD:235,
BD:880
}
}
