/////////////// WICKEDWEB INLINE FLASH REPLACEMENT (WWIFR) COPYRIGHT WICKEDWEB ///////////////

function setDimensions(height, id){
	$('#' + id).height(height);
}
function RGBtoHex(R,G,B){
	return '#'+toHex(R)+toHex(G)+toHex(B);
}
function toHex(N) {
	if (N==null) return "00";
	N=parseInt(N); if (N==0 || isNaN(N)) return "00";
	N=Math.max(0,N); N=Math.min(N,255); N=Math.round(N);
	return "0123456789ABCDEF".charAt((N-N%16)/16)
	+ "0123456789ABCDEF".charAt(N%16);
}
function replaceText(theClass, fontWeight, linkColor, linkHoverColor, linkDecoration, linkHoverDecoration, lineHeight, font){
	$(theClass).each(function(e){
		var myID = 'id' + Math.floor(Math.random()*1234567890);
		$(this).attr('id', myID);
		var myText = $(this).html();
		var myWidth = $(this).parent().width();
		var myHeight = $(this).height();
		var mySize = $(this).css('font-size');
		var myString = $(this).css('color');
		var myColor = "";
		if(fontWeight == '' || fontWeight == null){
			var myWeight = $(this).css('font-weight');
		}
		else{
			var myWeight = fontWeight;
		}
		var myLinkColor = linkColor;
		var myLinkHoverColor = linkHoverColor;
		var myLinkDecoration = linkDecoration;
		var myLinkHoverDecoration = linkHoverDecoration;
		var myMarginTop = $(this).css('margin-top');
		var myMarginRight = $(this).css('margin-right');
		var myMarginBottom = $(this).css('margin-bottom');
		var myMarginLeft = $(this).css('margin-left');
		var myLineHeight = lineHeight;
		if(myString.indexOf('#') <= -1){
			for(i=0; i<myString.length; i++){
				if(parseInt(myString.charAt(i))%1 == 0 || myString.charAt(i) == ',') {
					myColor += myString.charAt(i);
				}
			}
			myNewColor = myColor.split(",");
			myColor = RGBtoHex(myNewColor[0],myNewColor[1],myNewColor[2]);
		}
		else{
			myColor = myString;
		}
		if(document.location.href.indexOf('file:///') > -1){
			var live = false;
		}
		else{
			var live = true;
		}
		$(this).wrap('<div>');
		$(this).parent().css('margin', myMarginTop + ' ' + myMarginRight + ' ' + myMarginBottom + ' ' + myMarginLeft);
		$(this).parent().append('<span style="display:none;">' + myText + '</span>');
		myText = myText.split(" &amp; ").join(" %26 ").split('+').join('%2B');
		swfobject.embedSWF("http://www.thepharmacyshow.co.uk/static/flash/" + font, myID, myWidth, myHeight, "8.0.0", "http://www.thepharmacyshow.co.uk/static/flash/expressInstall.swf", "false", {wmode:"transparent", FlashVars:"myID=" + myID + "&myText=" + myText + "&myWidth=" + myWidth + "&myHeight=" + myHeight + "&mySize=" + mySize + "&myColor=" + myColor + "&myLinkColor=" + myLinkColor + "&myLinkHoverColor=" + myLinkHoverColor + "&myLinkDecoration=" + myLinkDecoration + "&myLinkHoverDecoration=" + myLinkHoverDecoration + "&myWeight=" + myWeight + "&myLineHeight=" + myLineHeight + "&live=" + live});
	});
}


/////////////// FLASH GATEWAY ///////////////

function Exception(name, message){
    if (name)
        this.name = name;
    if (message)
        this.message = message;
}

Exception.prototype.setName = function(name){
    this.name = name;
}

Exception.prototype.getName = function(){
    return this.name;
}


Exception.prototype.setMessage = function(msg){
    this.message = msg;
}

Exception.prototype.getMessage = function(){
    return this.message;
}

function FlashTag(src, width, height){
    this.src       = src;
    this.width     = width;
    this.height    = height;
    this.version   = '7,0,14,0';
    this.id        = null;
    this.bgcolor   = 'ffffff';
    this.flashVars = null;
}

FlashTag.prototype.setVersion = function(v){
    this.version = v;
}

FlashTag.prototype.setId = function(id){
    this.id = id;
}

FlashTag.prototype.setBgcolor = function(bgc){
    this.bgcolor = bgc;
}

FlashTag.prototype.setFlashvars = function(fv){
    this.flashVars = fv;
}

FlashTag.prototype.toString = function(){
    var ie = (navigator.appName.indexOf ("Microsoft") != -1) ? 1 : 0;
    var flashTag = new String();
    if (ie)
    {
        flashTag += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
        if (this.id != null)
        {
            flashTag += 'id="'+this.id+'" ';
        }
        flashTag += 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+this.version+'" ';
        flashTag += 'width="'+this.width+'" ';
        flashTag += 'height="'+this.height+'">';
        flashTag += '<param name="movie" value="'+this.src+'"/>';
        flashTag += '<param name="quality" value="high"/>';
        flashTag += '<param name="bgcolor" value="#'+this.bgcolor+'"/>';
        if (this.flashVars != null)
        {
            flashTag += '<param name="flashvars" value="'+this.flashVars+'"/>';
        }
        flashTag += '</object>';
    }
    else
    {
        flashTag += '<embed src="'+this.src+'" ';
        flashTag += 'quality="high" '; 
        flashTag += 'bgcolor="#'+this.bgcolor+'" ';
        flashTag += 'width="'+this.width+'" ';
        flashTag += 'height="'+this.height+'" ';
        flashTag += 'type="application/x-shockwave-flash" ';
        if (this.flashVars != null)
        {
            flashTag += 'flashvars="'+this.flashVars+'" ';
        }
        if (this.id != null)
        {
            flashTag += 'name="'+this.id+'" ';
        }
        flashTag += 'pluginspage="http://www.macromedia.com/go/getflashplayer">';
        flashTag += '</embed>';
    }
    return flashTag;
}

FlashTag.prototype.write = function(doc){
    doc.write(this.toString());
}

function FlashSerializer(useCdata)
{
    this.useCdata = useCdata;
}

FlashSerializer.prototype.serialize = function(args){
    var qs = new String();

    for (var i = 0; i < args.length; ++i)
    {
        switch(typeof(args[i]))
        {
            case 'undefined':
                qs += 't'+(i)+'=undf';
                break;
            case 'string':
                qs += 't'+(i)+'=str&d'+(i)+'='+escape(args[i]);
                break;
            case 'number':
                qs += 't'+(i)+'=num&d'+(i)+'='+escape(args[i]);
                break;
            case 'boolean':
                qs += 't'+(i)+'=bool&d'+(i)+'='+escape(args[i]);
                break;
            case 'object':
                if (args[i] == null)
                {
                    qs += 't'+(i)+'=null';
                }
                else if (args[i] instanceof Date)
                {
                    qs += 't'+(i)+'=date&d'+(i)+'='+escape(args[i].getTime());
                }
                else // array or object
                {
                    try
                    {
                        qs += 't'+(i)+'=xser&d'+(i)+'='+escape(this._serializeXML(args[i]));
                    }
                    catch (exception)
                    {
                        throw new Exception("FlashSerializationException",
                                            "The following error occurred during complex object serialization: " + exception.getMessage());
                    }
                }
                break;
            default:
                throw new Exception("FlashSerializationException",
                                    "You can only serialize strings, numbers, booleans, dates, objects, arrays, nulls, and undefined.");
        }

        if (i != (args.length - 1))
        {
            qs += '&';
        }
    }

    return qs;
}

FlashSerializer.prototype._serializeXML = function(obj){
    var doc = new Object();
    doc.xml = '<fp>'; 
    this._serializeNode(obj, doc, null);
    doc.xml += '</fp>'; 
    return doc.xml;
}

FlashSerializer.prototype._serializeNode = function(obj, doc, name){
    switch(typeof(obj))
    {
        case 'undefined':
            doc.xml += '<undf'+this._addName(name)+'/>';
            break;
        case 'string':
            doc.xml += '<str'+this._addName(name)+'>'+this._escapeXml(obj)+'</str>';
            break;
        case 'number':
            doc.xml += '<num'+this._addName(name)+'>'+obj+'</num>';
            break;
        case 'boolean':
            doc.xml += '<bool'+this._addName(name)+' val="'+obj+'"/>';
            break;
        case 'object':
            if (obj == null)
            {
                doc.xml += '<null'+this._addName(name)+'/>';
            }
            else if (obj instanceof Date)
            {
                doc.xml += '<date'+this._addName(name)+'>'+obj.getTime()+'</date>';
            }
            else if (obj instanceof Array)
            {
                doc.xml += '<array'+this._addName(name)+'>';
                for (var i = 0; i < obj.length; ++i)
                {
                    this._serializeNode(obj[i], doc, null);
                }
                doc.xml += '</array>';
            }
            else
            {
                doc.xml += '<obj'+this._addName(name)+'>';
                for (var n in obj)
                {
                    if (typeof(obj[n]) == 'function')
                        continue;
                    this._serializeNode(obj[n], doc, n);
                }
                doc.xml += '</obj>';
            }
            break;
        default:
            throw new Exception("FlashSerializationException",
                                "You can only serialize strings, numbers, booleans, objects, dates, arrays, nulls and undefined");
            break;
    }
}

FlashSerializer.prototype._addName= function(name){
    if (name != null)
    {
        return ' name="'+name+'"';
    }
    return '';
}

FlashSerializer.prototype._escapeXml = function(str){
    if (this.useCdata)
        return '<![CDATA['+str+']]>';
    else
        return str.replace(/&/g,'&amp;').replace(/</g,'&lt;');
}

function FlashProxy(uid, proxySwfName){
    this.uid = uid;
    this.proxySwfName = proxySwfName;
    this.flashSerializer = new FlashSerializer(false);
}


FlashProxy.prototype.call = function(){
    if (arguments.length == 0)
    {
        throw new Exception("Flash Proxy Exception",
                            "The first argument should be the function name followed by any number of additional arguments.");
    }
    var qs = 'lcId=' + escape(this.uid) + '&functionName=' + escape(arguments[0]);
    if (arguments.length > 1)
    {
        var justArgs = new Array();
        for (var i = 1; i < arguments.length; ++i)
        {
            justArgs.push(arguments[i]);
        }
        qs += ('&' + this.flashSerializer.serialize(justArgs));
    }
    var divName = '_flash_proxy_' + this.uid;
    if(!document.getElementById(divName))
    {
        var newTarget = document.createElement("div");
        newTarget.id = divName;
        document.body.appendChild(newTarget);
    }
    var target = document.getElementById(divName);
    var ft = new FlashTag(this.proxySwfName, 1, 1);
    ft.setVersion('6,0,65,0');
    ft.setFlashvars(qs);
    target.innerHTML = ft.toString();
}

FlashProxy.callJS = function(){
    var functionToCall = eval(arguments[0]);
    var argArray = new Array();
    for (var i = 1; i < arguments.length; ++i)
    {
        argArray.push(arguments[i]);
    }
    functionToCall.apply(functionToCall, argArray);
}