/*
SSP+Foxycart Integration (AS3)
Created by Stephen Chai
Copyright 2009 stephen.chai.name. All rights reserved.
Distrubute and have at it, but give credit where it's due.
Due Credit:
http://wiki.foxycart.com/integration:flash:loading_thickbox_from_flash
http://forums.slideshowpro.net/viewtopic.php?id=11099
http://www.klimcanada.com/store/
http://www.swivelstudio.com/blog/?p=30
Adds "Purchase This Photo: [Size Drop-Down] [Add To Cart Button]" purchase controls for each image with defined costs.
Uses dynamic TextField for "Purchase This Photo"
Uses fl.controls.ComboBox for [Size Drop-Down].
Uses fl.controls.Buttton for [Add To Cart Button].
Matches the ssp caption text format.
Required Movie Clips for dynamic attaching:
'sspfc_purchaseControls', the purchase controls, includes the following symbols
'sspfc_purchaseControls.tfLabel', TextField for the label text ('Purchase This Photo')
'sspfc_purchaseControls.cmpSizes', fl.controls.ComboBox component for available size/price pairs
'sspfc_purchaseControls.cmpButton', fl.controls.Button component to trigger foxycart add to cart call
'sspfc_purchaseIcon', the shopping cart icon to add to the 'sspfc_purchaseControls.cmpButton' button
XML Definition:
On each tag add a sizes attribute with comma separated size description|size cost pairs.
E.g.,
*/
/* ============= */
/* = Req'd .as = */
/* ============= */
// ssp+foxycart integration includes
import net.slideshowpro.slideshowpro.*;
import fl.controls.Button;
import fl.controls.ButtonLabelPlacement;
import fl.controls.ComboBox;
import fl.controls.List;
import flash.events.MouseEvent;
import flash.external.ExternalInterface;
import flash.text.TextFormat;
/* ========== */
/* = Config = */
/* ========== */
// ssp+foxycart integration config, show debug messages?
var sspfc_debug:Boolean = true;
// ssp+foxycart integration config, foxycart URL
var sspfc_foxycart_url:String = 'barnsleyone.foxycart.com';
// ssp+foxycart integration config, currency sign
var sspfc_currency:String = '£';
// ssp+foxycart integration config, SSP component instance name
var sspfc_ssp:SlideShowPro = my_ssp;
/* =========== */
/* = Methods = */
/* =========== */
// ssp+foxycart integration, trace a debug message
function sspfc_debugMessage(message:String) {
// trace if debug is on
if (sspfc_debug) trace(' SSP+Foxycart: ' + message);
}
// ssp+foxycart integration listener method, on 'add to cart' click
function sspfc_onAddToCart(event:MouseEvent) {
// event button pressed
var button:Button = event.target as Button;
// purchase controls
var purchase_controls = button.parent;
// product vars
var product_name:String = sspfc_purchase_controls.data.title;
var product_data:Array = sspfc_purchase_controls.cmpSizes.selectedItem.data.split('|');
var product_size:String = product_data[0];
var product_price:String = product_data[1];
// add to cart
sspfc_debugMessage('Adding item to cart: name - ' + product_name + ', size - ' + product_size + ', price - ' + product_price);
// get a foxycart session id
var session_id = String(ExternalInterface.call('fc_AddSession'));
// foxycart call pre-process
ExternalInterface.call('fc_PreProcess');
// foxycart, add to cart call
ExternalInterface.call('fc_tb_show', null, 'https://' + sspfc_foxycart_url + '/cart.php?'+ 'name=' + product_name + '&price=' + product_price + '&size=' + product_size + '&category=' + session_id, false);
}
// ssp+foxycart integration listener method, on gallery state event
function sspfc_onGalleryStateEvent(event:SSPGalleryStateEvent) {
// if galleryOpening (Dispatched when the gallery begins to open.)
if (event.type == 'galleryOpening') {
// hide the purchase controls
sspfc_debugMessage('Hiding purchase controls');
sspfc_purchase_controls.visible = false;
}
}
// ssp+foxycart integration listener method, on image format
function sspfc_onImageFormatEvent(event:SSPImageFormatEvent) {
// if imageFormat (Dispatched when slideshow content is resized.)
if (event.type == 'imageFormat') {
// position controls
sspfc_debugMessage('..positioning controls');
// here is where you position the controls where you want by setting sspfc_purchase_controls.x and sspfc_purchase_controls.y
// for example, position the controls in the bottom right corner of the movie, offset by 15px
sspfc_purchase_controls.x = sspfc_ssp.stage.stageWidth - sspfc_purchase_controls.width - 15px;
sspfc_purchase_controls.y = sspfc_ssp.stage.stageHeight - sspfc_purchase_controls.height = 15px;
// show controls
sspfc_debugMessage('..showing controls');
sspfc_purchase_controls.visible = true;
}
}
// ssp+foxycart integration listener method, on slide show data
function sspfc_onSlideShowData(event:SSPDataEvent) {
// if imageData (Dispatched immediately after slideshow content (video or image) is requested. Contains data about the content being loaded.)
if (event.type == 'imageData') {
sspfc_debugMessage('Loading image data for "' + event.data.title + '"');
// draw the add to cart mc
sspfc_debugMessage('..configuring purchase controls');
// product data (needed in sspfc_onAddToCart method)
sspfc_purchase_controls.data = event.data;
// format the "purchase this photo" text field to match SSP caption
sspfc_debugMessage('..setting purchase label text format');
sspfc_purchase_controls.tfLabel.setTextFormat(sspfc_text_format_bold);
// remove all the old sizes from the ComboBox
sspfc_debugMessage('..removing all sizes');
sspfc_purchase_controls.cmpSizes.removeAll();
// if no sizes for this image, hide controls
if (!event.data.sizes) {
sspfc_debugMessage('..no sizes specified in XML, hiding controls');
sspfc_purchase_controls.visible = false;
return;
}
// size description and cost from the size attribute to data provider, comma separated
var sizes:Array = event.data.sizes.split(',');
// for each size
for(var i = 0; i < sizes.length; i++) {
// split description|cost into size object, add item to ComboBox
var size_params:Array = sizes[i].split('|');
var size:Object = { label: size_params[0] + ' - ' + sspfc_currency + size_params[1], data: sizes[i] };
sspfc_debugMessage('..adding size, label: ' + size.label + ', data: ' + size.data);
sspfc_purchase_controls.cmpSizes.addItem(size);
}
// position and format sizes combo box (10px right of and vertically centered w/ text label, you could do your own positioning here)
sspfc_debugMessage('..positioning and formatting size combo box');
sspfc_purchase_controls.cmpSizes.setStyle('textFormat', sspfc_text_format);
sspfc_purchase_controls.cmpSizes.dropdown.setRendererStyle('textFormat', sspfc_text_format);
sspfc_purchase_controls.cmpSizes.x = sspfc_purchase_controls.tfLabel.textWidth + 10;
sspfc_purchase_controls.cmpSizes.y = (sspfc_purchase_controls.tfLabel.textHeight / 2) - (sspfc_purchase_controls.cmpSizes.height / 2);
// position add and format to cart button (10px right of and vertically centered w/ sizes combo box, you could do your own positiong here)
sspfc_debugMessage('..positioning and formatting add to cart button');
sspfc_purchase_controls.cmpButton.useHandCursor = true;
sspfc_purchase_controls.cmpButton.labelPlacement = ButtonLabelPlacement.LEFT;
sspfc_purchase_controls.cmpButton.setStyle('icon', sspfc_purchaseIcon);
sspfc_purchase_controls.cmpButton.setStyle('textFormat', sspfc_text_format);
sspfc_purchase_controls.cmpButton.x = sspfc_purchase_controls.cmpSizes.x + sspfc_purchase_controls.cmpSizes.width + 10;
sspfc_purchase_controls.cmpButton.y = (sspfc_purchase_controls.tfLabel.textHeight / 2) - (sspfc_purchase_controls.cmpButton.height / 2);
// bind cart button click to ssp+foxycart add to cart method
sspfc_debugMessage('..binding add to cart button to foxycart');
sspfc_purchase_controls.cmpButton.addEventListener(MouseEvent.CLICK, sspfc_onAddToCart);
// done
sspfc_debugMessage('..purchase controls configured');
}
}
/* ============== */
/* = Initialize = */
/* ============== */
// ssp+foxycart integration init, create and hide the purchase controls
sspfc_debugMessage('Adding and hiding purchase controls');
var sspfc_purchase_controls = addChild(new (getDefinitionByName('sspfc_PurchaseControls') as Class));
sspfc_purchase_controls.visible = false;
// ssp+foxycart integration init, text formats (derived from SSP caption style)
sspfc_debugMessage('Setting text formats from SSP caption style');
var sspfc_text_format = new TextFormat(sspfc_ssp.typeface, sspfc_ssp.captionTextSize, sspfc_ssp.captionTextColor);
var sspfc_text_format_bold = new TextFormat(sspfc_ssp.typeface, sspfc_ssp.captionTextSize, sspfc_ssp.captionTextColor, true);
// ssp+foxycart integration init, add listeners
sspfc_ssp.addEventListener(SSPGalleryStateEvent.GALLERY_OPENING, sspfc_onGalleryStateEvent);
sspfc_ssp.addEventListener(SSPImageFormatEvent.IMAGE_FORMAT, sspfc_onImageFormatEvent);
sspfc_ssp.addEventListener(SSPDataEvent.IMAGE_DATA, sspfc_onSlideShowData);