/*****************************************************************************
It is adviced to place the sIFR JavaScript calls in this file, keeping it
separate from the `sifr.js` file. That way, you can easily swap the `sifr.js`
file for a new version, while keeping the configuration.

You must load this file *after* loading `sifr.js`.
*/

/*Customisation */
parseSelector.pseudoClasses = {
    'not': function(nodes, selector) {
        var result = [];
        each: for (var i = 0, node; i < nodes.length; i++) {
            node = nodes[i];
            var ignore = parseSelector(selector, node.parentNode);
            for (var j = 0; j < ignore.length; j++) {
                if (ignore[j] == node) continue each;
            }
            result.push(node);
        }
        return result;
    }
}


var gotham_med = { src: '/_resx/sifr/gotham.med.swf' };
var gotham_black = { src: '/_resx/sifr/gotham.black.swf' };
sIFR.activate(gotham_med, gotham_black);

sIFR.replace(gotham_black, {
    selector: '#promo h2',
    modifyCss: sifrSetColor,
    css: '.sIFR-root { color: #17b1eb; text-transform: uppercase; }',
    transparent: true,
    selectable: false,
    sharpness: 25,
    tuneHeight: -4,
    filters: {
        DropShadow: {
            distance: 1,
            blurY: 0,
            blurX: 0,
            color: '#ffffff',
            strength: .5,
            alpha: 1,
            angle: 90,
            distance: 1
        }
    }
});

sIFR.replace(gotham_med, {
    selector: '#content h2',
    modifyCss: sifrSetColor,
    css: '.sIFR-root { color: #17b1eb; letter-spacing: -1; }',
    transparent: true,
    selectable: false,
    tuneHeight: -4,
    sharpness: 25,
    filters: {
        DropShadow: {
            distance: 1,
            blurY: 0,
            blurX: 0,
            color: '#ffffff',
            strength: .5,
            alpha: 1,
            angle: 90,
            distance: 1
        }
    }
});

sIFR.replace(gotham_med, {
    selector: '#content h1',
    modifyCss: sifrSetColor,
    css: '.sIFR-root { color: #000000; letter-spacing: -1;  }',
    transparent: true,
   
    selectable: false,
    tuneHeight: -4,
    sharpness: 25,
    filters: {
        DropShadow: {
            distance: 1,
            blurY: 0,
            blurX: 0,
            color: '#ffffff',
            strength: .5,
            alpha: 1,
            angle: 90,
            distance: 1
        }
    }
});



sIFR.replace(gotham_med, {
    selector: '#training-benefits h2',
	modifyCss: sifrSetColor,
	css: '.sIFR-root { color: #000000; text-transform: uppercase; }',
    transparent: true,
    selectable: false,
    tuneHeight: -4,
    sharpness: 25,
    filters: {
		DropShadow: {
			distance: 1,
			blurY: 0,
			blurX: 0,
			color: '#ffffff',
			strength: .5,
			alpha: 1,
			angle: 90,
			distance: 1
		}
	}
});




function sifrSetColor(css, contentNode, selector) {
    var hexColor = new RGBColor($(contentNode).css("color")).toHex();

    var cssString = ""

    var newCss = [];

    for (var o in css) {
        var cssString = o;
        var cssObj = css[o];
        cssString += "{ ";
        for (var c in cssObj) {

            var e = $(o, contentNode);

            if (c == "color" && o == ".sIFR-root") {
                cssString += "color: " + hexColor + ";";
            } else if (c == "color" && e.length > 0) {
                cssString += "color: " + new RGBColor(e.css("color")).toHex() + ";";
            } else {
                cssString += c + ": " + cssObj[c] + "; ";
            }
        }
        cssString += "}";
        newCss.push(cssString);
    }

    return newCss;
}


/* ============================================================= */
/**
* A class to parse color values
* @author Stoyan Stefanov <sstoo@gmail.com>
* @link   http://www.phpied.com/rgb-color-parser-in-javascript/
* @license Use it if you like it
*/
function RGBColor(color_string) {

    this.ok = false;
    // strip any leading #
    if (color_string.charAt(0) == '#') { // remove # if any
        color_string = color_string.substr(1, 6);
    }

    color_string = color_string.replace(/ /g, '');
    color_string = color_string.toLowerCase();

    // array of color definition objects
    var color_defs = [
        {
            re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],
            process: function(bits) {
                return [
                    parseInt(bits[1]),
                    parseInt(bits[2]),
                    parseInt(bits[3])
                ];
            }
        },
        {
            re: /^(\w{2})(\w{2})(\w{2})$/,
            example: ['#00ff00', '336699'],
            process: function(bits) {
                return [
                    parseInt(bits[1], 16),
                    parseInt(bits[2], 16),
                    parseInt(bits[3], 16)
                ];
            }
        },
        {
            re: /^(\w{1})(\w{1})(\w{1})$/,
            example: ['#fb0', 'f0f'],
            process: function(bits) {
                return [
                    parseInt(bits[1] + bits[1], 16),
                    parseInt(bits[2] + bits[2], 16),
                    parseInt(bits[3] + bits[3], 16)
                ];
            }
        }
    ];

    // search through the definitions to find a match
    for (var i = 0; i < color_defs.length; i++) {
        var re = color_defs[i].re;
        var processor = color_defs[i].process;
        var bits = re.exec(color_string);
        if (bits) {
            channels = processor(bits);
            this.r = channels[0];
            this.g = channels[1];
            this.b = channels[2];
            this.ok = true;
        }

    }

    // validate/cleanup values
    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);
    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);
    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);

    // some getters
    this.toRGB = function() {
        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';
    }

    this.toHex = function() {
        var r = this.r.toString(16);
        var g = this.g.toString(16);
        var b = this.b.toString(16);
        if (r.length == 1) r = '0' + r;
        if (g.length == 1) g = '0' + g;
        if (b.length == 1) b = '0' + b;
        return '#' + r + g + b;
    }

}
