/*
Array of 1px image URLs per pageID
*/

// -- used by Range IFrame tracking
var axel = Math.random() + "";
var a = axel * 10000000000000;

var trkURLs = {
    "/en_US/fragrance-beauty": [
        "static",
        {
            mec: "http://view.atdmt.com/jaction/dencha_FragranceBeautymainpage_10"
        }
    ],
    "/en_US/fragrance-beauty/Skincare-89414": [
        "static",
        {
            didIt: ""
        }
    ],
    "/en_US/fragrance-beauty/Makeup-88484": [
        "static",
        {
            mec: "http://view.atdmt.com/jaction/dencha_Makeupmainpage_10"
        }
    ],
    "/en_US/fragrance-beauty/Makeup-Lipstick-ROUGE-COCO-88973": [
        "static",
        {
            mec: "http://view.atdmt.com/iaction/dencha_RougeCocoproductpage_10"
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Lifting-Firming-89494": [
        "static",
        {
            didIt: "",
            mec: ""
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Lifting-Firming-UC-LIFT-CREME-NUIT-89501": [
        "static",
        {
            mec: "",
            didIt: ""
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Lifting-Firming-ULTRA-CORRECTION-LIFT-89498": [
        "static",
        {
            mec: "",
            didIt: ""
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Lifting-Firming-ULTRA-CORRECTION-LIFT-89495": [
        "static",
        {
            mec: "",
            didIt: ""
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Lifting-Firming-ULTRA-CORRECTION-LIFT-SERUM-89503": [
        "static",
        {
            mec: "",
            didIt: ""
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Eye-%26-Lip-Care-ULTRA-CORRECTION-LIFT-TOTAL-EYE-LIFT-89436": [
        "static",
        {
            didIt: ""
        }
    ],
    "/en_US/fragrance-beauty/Skincare-Eye-%26-Lip-Care-ULTRA-CORRECTION-LIFT-89438": [
        "static",
        {
            didIt: ""
        }
    ],
    StoreLocator_en_US: [
        "static",
        {
            mec: "",
            didIt: ""
        }
    ],
    EmailSignup_en_US_dock: [
        "static",
        {
            mec: ""
        }
    ],
    LoginRegister_en_US: [
        "static",
        {
            //mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=94115&rnd="+a
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139929&ns=1&rnd="+a,
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156219&rnd="+a
        }
    ],
    OrderShipping_en_US: [
        "static",
        {
            //mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=94118&rnd="+a
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139932&ns=1&rnd="+a,
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156220&rnd="+a
        }
    ],
    Cart_en_US_dock: [
        "dyn",
        {
            //mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=94112&",
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139926&ns=1&",
            rangeMedia: "https://fls.doubleclick.net/activityi;src=2648221;type=landi090;cat=addto638;",
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156218"
        }
    ],
    Cart_en_US_full: [
        "dyn",
        {
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139926&ns=1&",
            rangeMedia: "https://fls.doubleclick.net/activityi;src=2648221;type=landi090;cat=addto638;",
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156218"
        }
    ],
    Wishlist_en_US_full: [
        "dyn",
        {
            rangeMedia: 'https://fls.doubleclick.net/activityi;src=2648221;type=landi090;cat=addto476;'
        }
    ],
    Wishlist_en_US_dock: [
        "dyn",
        {
            rangeMedia: 'https://fls.doubleclick.net/activityi;src=2648221;type=landi090;cat=addto476;'
        }
    ],
    Checkout_en_US: [
        "dyn",
        {
            //mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=94121&",
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139935&ns=1&",
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156221&"
        }
    ],
    OrderReview_en_US: [
        "dyn",
        {
            //mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=94138&"
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139938&ns=1&",
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156222&"
        }
    ],
    OrderThankyou_en_US: [
        "dyn",
        {
            //mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=95318&",
            mec_bleu: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=139941&ns=1&",
            mec: "https://view.atdmt.com/iaction/dencha_ThankYouPage_10/",
            cheetah: "https://enews.chanel.com/a/r2068388984/chanel.gif?",
            rangeMedia: "https://fls.doubleclick.net/activityi;src=2648221;type=confi236;cat=order070;qty=1;",
            mec_n5: "https://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156223&"
        }
    ],
    Landing_en_US: [
        "static",
        {
            rangeMedia: rangeIFrmTrk("http://fls.doubleclick.net/activityi;src=2648221;type=landi090;cat=homep142;", "")
        }
    ],
    Universe_en_US: [
        "dyn",
        {
            mec: "http://view.atdmt.com/action/"
        }
    ],
    "/en_US/fragrance-beauty/Universe-Rouge-COCO--89811": [
        "dyn",
        {
            mec: "http://view.atdmt.com/jaction/"
        }
    ],
    //---- Atlas/MEC Tagging for BLEU DE CHANEL 201012
    //---- "/en_US/fragrance-beauty/Fragrance-Bleu-de-CHANEL-BLEU-DE-CHANEL-89743": [
    Product_en_US_P107450: [
        "static",
        {
            //mec_bleu: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=94109&rnd="+a
            mec_bleu: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&amp;ActivityID=139923&ns=1&rnd="+a
        }
    ],
    //---- MEC N5 Campaign - 201111
    //----
    //----
    //en_US/fragrance-beauty/Fragrance-NÂ°5-88109 - N5 landing page
    "/en_US/fragrance-beauty/Fragrance-N%C2%B05-88109": [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156217&rnd="+a
        }
    ],
    "/en_US/fragrance-beauty/Fragrance-NÂ°5-88109": [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156217&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂ°5-PARFUM-88173
    Product_en_US_P120050: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156224&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-PARFUM-PURSE-SPRAY-REFILLABLE-88142
    Product_en_US_P105130: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156225&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-DE-PARFUM-SPRAY-88181
    Product_en_US_P125420: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156226&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂ°5-126488
    Product_en_US_P125450: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156227&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-DE-PARFUM-SPRAY-88185
    Product_en_US_P125440: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156228&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂ°5-118726
    Product_en_US_P125407: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156229&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-PREMIÃˆRE-88145
    Product_en_US_P105170: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156230&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂ°5-118724
    Product_en_US_P105117: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156231&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-DE-TOILETTE-88155
    Product_en_US_P105360: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156232&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-DE-TOILETTE-SPRAY-88158
    Product_en_US_P105440: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156233&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-DE-TOILETTE-REFILLABLE-SPRAY-88162
    Product_en_US_P105450: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156234&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-EAU-DE-TOILETTE-PARFUM-DE-SAC-88140
    Product_en_US_P105120: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156235&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂ°5-123065
    Product_en_US_P125320: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156236&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-SENSUAL-ELIXIR-88149
    Product_en_US_P105240: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156237&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-BODY-LOTION-88169
    Product_en_US_P105943: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156238&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-BATH-GEL-88171
    Product_en_US_P105965: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156239&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-BATH-SOAP-88167
    Product_en_US_P105913: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156240&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-VELVET-BODY-CREAM-88151
    Product_en_US_P105270: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156241&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-AFTER-BATH-POWDER-88112
    Product_en_US_P100057: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156242&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂº5-DELUXE-TRIO-SET-125447
    Product_en_US_P100330: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156243&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂº5-TRIO-SET--125445
    Product_en_US_P100329: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156244&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-NÂº5-DUO-SET--125449
    Product_en_US_P100338: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156245&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-FRAGRANCE-WARDROBE-SET-125467
    Product_en_US_P100335: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156246&rnd="+a
        }
    ],
    //en_US/fragrance-beauty/Fragrance-NÂ°5-CHANEL-NÂ°5-BOTTLE-88177
    Product_en_US_P120450: [
        "static",
        {
            mec_n5: "http://bs.serving-sys.com/BurstingPipe/ActivityServer.bs?cn=as&ActivityID=156247&rnd="+a
        }
    ]
};

var dynURLWriter = {
    OrderReview: {
        mec: function(baseurl, params) {
            if(params.length > 1) {
                baseurl += ("ato." + params[1].orderno+"/");
                baseurl += ("atc1." + params[1].ordertotal+"/");
            }
            return baseurl;
        },
        mec_bleu: function(baseurl, params) {
            baseurl += ("rnd=" + a);
            return baseurl;
        },
        mec_n5: function(baseurl, params) {
            baseurl += ("rnd=" + a);
            return baseurl;
        }
    },
    Checkout: {
        didIt: function(baseurl, params) {
            if(params.length > 1) {
                baseurl += ("param1=" + params[1].orderno+"&");
            }
            return baseurl;
        },
        mec_bleu: function(baseurl, params) {
            baseurl += ("rnd=" + a);
            return baseurl;
        },
        mec_n5: function(baseurl, params) {
            baseurl += ("rnd=" + a);
            return baseurl;
        }
    },
    
    OrderThankyou: {
        didIt: function(baseurl, params) {
            if(params.length > 2) {
				baseurl += ("param1=" + params[1].orderno+"&");
                baseurl += ("ordernum=" + params[1].orderno+"&");
                baseurl += ("order=" + params[1].ordertotal+"&");
        		     
                for(var i=2; i < params.length; i++) {
                    //price=0 is sample item
                    if(params[i].price > 0) {
                        baseurl += ("param" + i + "=" + params[i].sku + "-" + params[i].desc + "_" + params[i].qty + "_" + params[i].price);
                        if(i != params.length - 1) { baseurl += "&"; }
                    }
                }
            }
            return baseurl;
        },
        mec: function(baseurl, params) {
            if(params.length > 2) {
                baseurl += ("ato." + params[1].orderno+"/");
                for(var i=2; i < params.length; i++) {
                    //price=0 is sample item
                    if(params[i].price > 0) {
                        baseurl += "[";
                        baseurl += ("atm"+(i-1)+"."+params[i].qty+"/");
                        baseurl += ("atm2."+params[i].price+"/");
                        baseurl += ("atc"+(i-1)+"."+params[i].desc+"/");
                        baseurl += "]/";
                    }
                }
            }
			return baseurl;
        },
        mec_bleu: function(baseurl, params) {
            if(params.length > 2) {
                baseurl += ("Value=" + params[1].ordertotal+"&");
                baseurl += ("OrderID=" + params[1].orderno+"&");
                
                var prodid = "";
                var proddesc = "";
                for(var i=2; i < params.length; i++) {
                    //price=0 is sample item
                    if(params[i].price > 0) {
                        if(prodid != "") {
                            prodid += "|";
                        }
                        prodid += params[i].sku;
                        
                        if(proddesc != "") {
                            proddesc += "|";
                        }
                        proddesc += params[i].desc;
                    }
                }
                
                if(prodid != "") {
                    baseurl += "ProductID=" + prodid + "&";
                }
                if(proddesc != "") {
                    baseurl += "ProductInfo=" + proddesc + "&"
                }
            }
            baseurl += ("rnd=" + a);
            return baseurl;
        },
        mec_n5: function(baseurl, params) {
            if(params.length > 2) {
                baseurl += ("Value=" + params[1].ordertotal+"&");
                baseurl += ("OrderID=" + params[1].orderno+"&");
                
                var prodid = "";
                var proddesc = "";
                for(var i=2; i < params.length; i++) {
                    //price=0 is sample item
                    if(params[i].price > 0) {
                        if(prodid != "") {
                            prodid += "|";
                        }
                        prodid += params[i].sku;
                        
                        if(proddesc != "") {
                            proddesc += "|";
                        }
                        proddesc += params[i].desc;
                    }
                }
                
                if(prodid != "") {
                    baseurl += "ProductID=" + prodid + "&";
                }
                if(proddesc != "") {
                    baseurl += "ProductInfo=" + proddesc + "&"
                }
            }
            baseurl += ("rnd=" + a);
            return baseurl;
        },
        cheetah: function(baseurl, params) {
            if(params.length > 2) {
                baseurl += ("ordernum=" + params[1].orderno+"&");
                baseurl += ("amount=" + params[1].ordertotal+"&");
                baseurl += "items=";
                for(var i=2; i < params.length; i++) {
                    //price=0 is sample item
                    if(params[i].price > 0) {
                        baseurl += (params[i].sku+"-");
                        baseurl += (params[i].desc+"@");
                        baseurl += (params[i].qty+"@");
                        baseurl += (params[i].price+"|");
                    }
                }
                if(baseurl.substring(baseurl.length - 1) == "|") {
                    baseurl = baseurl.substring(0, (baseurl.length - 1));
                }
                baseurl += "&chndiv=fb";
            }
			return baseurl;
        },
        rangeMedia: function(baseurl, params) {
            if(params.length > 2){
               // prefix = "<iframe src=\"";
               // sufix = "?\" width=\"1\" height=\"1\" frameborder=\"0\"></iframe>";
                
                var u2 = parseFloat(params[1].ordertotal);
                u2 += parseFloat(params[1].shipping);
                u2 += parseFloat(params[1].tax);
                
                baseurl += ("cost=" + u2 + ";");
                //baseurl += ("u2=" + u2 + ";");
                baseurl += ("u2=" + parseFloat(params[1].ordertotal) + ";");
                baseurl += ("ord=" + params[1].orderno + ";");
                baseurl += ("u1=" + params[1].orderno + ";");
                baseurl += ("u8=" + params[1].zip + ";");
                baseurl += ("u9=" + params[1].promocode + ";");
                
                //total qty
                var u3 = 0;
                //qty per item
                var u4 = '';
                //item price
                var u5 = '';
                //item name
                var u6 = '';
                //item #
                var u7 = '';
                for(var i=2; i < params.length; i++) {
                    if(params[i].price > 0) {
                        u4 += (params[i].qty + "|");
                        u5 += (params[i].price + "|");
                        u6 += (params[i].desc + "|");
                        u7 += (params[i].sku + "|");
                        
                        u3 += parseInt(params[i].qty);
                    }
                }
                if(u4.length > 0) {
                    u4 = u4.substr(0, u4.length - 1);
                }
                if(u5.length > 0) {
                    u5 = u5.substr(0, u5.length - 1);
                }
                if(u6.length > 0) {
                    u6 = u6.substr(0, u6.length - 1);
                }
                if(u7.length > 0) {
                    u7 = u7.substr(0, u7.length - 1);
                }
                baseurl += ("u3=" + u3 + ";");
                baseurl += ("u4=" + u4 + ";");
                baseurl += ("u5=" + u5 + ";");
                baseurl += ("u6=" + u6 + ";");
                baseurl += ("u7=" + u7 + ";");
            }
            //return prefix + baseurl + sufix;
			var iframe = _createIFrame(baseurl);
			
			return iframe;
        }
    },
    
    Wishlist: {
        rangeMedia: rangeIFrmTrk
    },
    
    Cart: {
        rangeMedia: rangeIFrmTrk,
        mec_bleu: function(baseurl, params) {
            baseurl += ("rnd=" + a);
            return baseurl;
        },
        mec_n5: function(baseurl, params) {
            baseurl += ("rnd=" + a);
            return baseurl;
        }
    },
    
    Universe: {
        mec: function(baseurl, params){
            if(params.length > 1) {
                if(typeof(params[1].uname) != "undefined" && typeof(params[1].page) != "undefined") {
                    //support tracking from actionscript
                return universeMEC[params[1].uname](baseurl, params[1].page);
                } else {
                    //support tracking from Shell
                    return universeMEC[params[1]["WT.mc_id"]](baseurl);
                }
            }
        }
    }
};

var universeMEC = {
    MakeupRougeCoco: function(baseurl, page) {
        /*
        Sample call from actionscript
        chnTrack("Universe", [{locale: "en_US"},{uname: "MakeupRougeCoco", page: "Film nav"}])
        */
        switch(page) {
        case "Film nav":
            return baseurl+"dencha_RougeCocoFilmpage_10";
            break;
        case "Muse nav":
            return baseurl+"dencha_RougeCocoMustpage_10";
            break;
        case "Peter Philips nav":
            return baseurl+"dencha_RougeCocoCreatorpage_10";
            break;
        case "Secrets nav":
            return baseurl+"dencha_SecretsofRougeCocopage_10";
            break;
        case "Shades nav":
            return baseurl+"dencha_ColorsofaLegendPage_10";
            break;
        default:
            return "";
        }
    },
    "2010Rouge-coco-Universe#Film/": function(baseurl) {
        return baseurl+"dencha_RougeCocoFilmpageFlash_10";
    },
    "2010Rouge-coco-Universe#Muse/": function(baseurl) {
        return baseurl+"dencha_RougeCocoMustpageFlash_10";
    },
    "2010Rouge-coco-Universe#Creator/": function(baseurl) {
        return baseurl+"dencha_RougeCocoCreatorpageFlash_10";
    },
    "2010Rouge-coco-Universe#Secrets/": function(baseurl) {
        return baseurl+"dencha_SecretsofRougeCocopageFlash_10";
    },
    "2010Rouge-coco-Universe#Shades/": function(baseurl) {
        return baseurl+"dencha_ColorsofaLegendPageFlash_10";
    },
    FragranceCET: function(baseurl, page) {
        return baseurl+page;
    }
}

function rangeIFrmTrk(baseurl, params) {
    //var prefix = "<iframe src=\"";
    //var sufix = "?\" width=\"1\" height=\"1\" frameborder=\"0\"></iframe>";
    //return prefix + baseurl + sufix;
    baseurl += ("ord=" + a);
    var iframe = _createIFrame(baseurl);
	return iframe;
}

function _createIFrame(baseurl) {
	var iframe = document.createElement("iframe");
	iframe.src = baseurl;
	iframe.className = "hiddenframe";
	return iframe;
}

function _createImg(imgURL) {
	var img = document.createElement("img");
	img.src = imgURL;
	img.height = 1;
	img.width = 1;
	img.border = 0;
	return img;
}

function MakeupRougeCoco(baseurl, page) {
    alert("baseurl: "+baseurl+"\n"+"page: "+page);
    return baseurl;
}

function getUrlVars() {
    //var vars = [], hash;
    var vars = new Object, hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        //vars.push(hash[0]);
        //vars[hash[0]] = hash[1];
        vars[hash[0]] = hash[1];
    }
    return vars;
}

function chnTrack(pageID, items, mode) {
    var trkURLKey = pageID;
	if(typeof(trkURLs[document.location.pathname]) != "undefined" &&  mode != "append") {
		trkURLKey = document.location.pathname;
        var uvars = getUrlVars();
        
        if(items.length > 0) {
            items.push(uvars);
        }
    } else {
		if(items.length > 0) {
			for(var propName in items[0]){
				trkURLKey += "_";
				trkURLKey += items[0][propName];
			}
		}	
	}
	
    console.log(pageID+" - "+trkURLKey);
	
	
    if(typeof(trkURLs[trkURLKey]) != "undefined" && trkURLs[trkURLKey].length > 1) {
		
        var urlWritingMode = trkURLs[trkURLKey][0];
        var thisPgURLs = trkURLs[trkURLKey][1];
        for(var aName in thisPgURLs){
			var imgTag = '';
            if(urlWritingMode == "static") {
				imgURL = thisPgURLs[aName];
            } else if(urlWritingMode == "dyn") {
				imgURL = dynURLWriter[pageID][aName](thisPgURLs[aName], items);
            }

			//if(mode !== "append") {
                //if (!imgURL) return false;
                if (!imgURL) {
                    // -- do nothing
                } else {
                    if (typeof imgURL != "string") {
                        document.getElementsByTagName("body")[0].appendChild(imgURL);
                    } else if(imgURL.substr(0, 4) == "http") {
                        var img = _createImg(imgURL);
                        document.getElementsByTagName("body")[0].appendChild(img);
                    } else {
                        document.write(imgURL);
                    }
                }
            /*
			} else {
				var img = _createImg(imgURL);
				document.getElementsByTagName("body")[0].appendChild(img);
			}
			*/
        }
    }
}
//require $.DropShadow class
(function($){
	var _document = $(document);
	
	$.CustomSelect = function(sb,options){
		if (!sb || !sb.get(0)) throw new Error("$.CustomSelect: Selectbox is not defined or not jQ extended");
		
	/*****Initialize*******/	
		sb.wrap('<div class="select_parent"></div>');
		this.container = sb.parent();
		
		this.select = sb;
		//Specific to each usage
		this.index = Chanel.Global.customSelects.length;
		Chanel.Global.customSelects.push(this);
		
		var self = this;
		this.isOpen = this.isFocused = this.htmlMode = 0;
		
		this.settings = $.extend({
			maxHeight: 150,
			zIndex: 1,
			openZIndex: 10000,
			ignoredValue:false, //Options with ignored value will only be processed by javascript
			functions:'',
			submitFunction: false, //Click or enter on an option will submit the form, which calls the submitFunction if it is defined, opts with ignoredValue will not trigger submit
			openCallback : false,
			closeCallback : false,
			changeCallback : false,
			truncateDisplay:16,
			openAtTop : false,
			dropShadow : false,
			self : self
		},options);
		
		this.locked = false;
		this.parentForm = this.select.parent('form');
		this.select.data('cs', this);
	/******Create DropDown*******/
		
		this.wrapper = $('<div id="customSelect_'+this.index+'" class="select_wrapper"></div>');
		this.dropDown = $('<div class="select_dropdown"></div>');
		this.listContainer = $('<div class="select_scroller"></div>');
		this.list = $('<ul class="select_list clear"></ul>');
		
		this.currentIndex = 0;
		this.opts = this.select.find('option');
		
		this.createList();
		
		var currentItem = $.trim(this.opts[this.currentIndex].innerHTML);
		var wasTruncated = false;
		
		//browser Check
		if ($.config.services.locale == 'ru_RU') this.settings.truncateDisplay = 20;
		if ($.config.services.locale == 'es_ES') this.settings.truncateDisplay = 24;
		if ($.config.services.locale == 'es_MX') this.settings.truncateDisplay = 24;
		if ($.config.services.locale == 'pt_BR') this.settings.truncateDisplay = 24;
		if ($.config.services.locale == 'de_DE') this.settings.truncateDisplay = 22;
		if ($.config.services.locale == 'ja_JP') this.settings.truncateDisplay = 12;
		if ($.config.services.locale == 'ar_ME') this.settings.truncateDisplay = 16;
		
		//iPad Check
		if (window.location.hostname.search(/tablet/i) !== -1 && Math.abs(window.orientation)!=90) this.settings.truncateDisplay = $.config.nonLatin.length ? 9 : 16;
		
		//iPad locale Check
		if (window.location.hostname.search(/tablet/i) !== -1){
			if(Math.abs(window.orientation)!=90){
				if ($.config.services.locale == 'ru_RU'){
					this.settings.truncateDisplay = 14;
				}
				if ($.config.services.locale == 'zh_CN'){
					this.settings.truncateDisplay = 7;
				}
				if ($.config.services.locale == 'zh_TW'){
					this.settings.truncateDisplay = 7;
				}
				if ($.config.services.locale == 'zh_HK'){
					this.settings.truncateDisplay = 7;
				}
			}else{
				//fix for HK horizontal
				if ($.config.services.locale == 'zh_HK'){
					this.settings.truncateDisplay = 16;
				}
			}
		}
		
		if (this.settings.truncateDisplay && currentItem.length > this.settings.truncateDisplay){
			currentItem = currentItem.substr(0,this.settings.truncateDisplay) + "...";		
			wasTruncated = "true";		
		}
			
		this.display = $('<div class="select_display"><span class="selectLabel clear">'+currentItem+'</span></div>');
		this.displaySpan = this.display.find('span.selectLabel');
		if(wasTruncated) {
			this.displaySpan.addClass("truncated");	
		}
				
		this.listContainer.append(this.list);
		this.dropDown.append(this.listContainer);
		//this.dropDown.append($('<div class="ds_bottom"><div class="outer"><div class="inner"></div></div></div>')); //added for expandable dropshadow
		this.wrapper.append(this.display);
		this.wrapper.append(this.dropDown);
		this.container.append(this.wrapper);
		
		if (this.settings.dropShadow){
			new $.DropShadow(this.display, {top: true, bottom: false});
			new $.DropShadow(this.dropDown, {top: false, bottom: true});
		}
		
		this.setScrollPane();
		if (this.htmlMode) this.changeValue(true);

	/******Bind Events ******/
		
		$(document).click(function(e){	
			if (self.isOpen){
				var parent = '#customSelect_'+self.index;
				if (!$(e.target).parents(parent).get(0)){
					self.close();
				}
			}
		}).keyup(function(e){
			if (self.isFocused||self.isOpen){
				self.changeValue();
				if (e.keyCode==9 || e.keyCode==13 || e.keyCode == 27){
					if (e.keyCode == 13){
						self.clickOption();
					}
					self.close();
				}
			}
		});
		
		
		this.display.click(function(){
			//###### this line screws up the arabic dropdown in FF (is this necessary?) #####
			//this focus function is not being overriden by "this.select.focus(function(e){" 
			//self.select.focus();
			self.isOpen ? self.close() : self.open();
		}).hover(function(){
			$(this).addClass('hovered');
		},function(){
			$(this).removeClass('hovered');
		});
		
		$("#" + this.wrapper.attr("id") + " li").live('click',function(e){
			e.preventDefault();
			self.clickOption(e.target);
			//###### this line screws up the arabic dropdown in FF (is this necessary?) #####
			//self.select.focus();
		}).live('mouseover',function(e){
			//e.target.className += " hovered";
			$(e.target).addClass("hovered");
			
		}).live('mouseout',function(e){
			//e.target.className = e.target.className.replace(/(^|\s)hovered($|\s)/,"");
			$(e.target).removeClass("hovered");
			
		});
				
		this.select.focus(function(e){
			self.isFocused = true;
			self.wrapper.addClass("focused");
		}).blur(function(e){
			self.isFocused = false;
			self.wrapper.removeClass("focused");
		});

	}

	/*******CustomSelect methods ******/
	$.CustomSelect.prototype = {
	
		createList : function(){
			var self = this,
				thumbsList = 0,
				liString = '';
				
			this.opts.each(function(i){
				var $this = $(this);
				var $content = this.innerHTML;
				var optsStyle = $this.attr("style");
				if (optsStyle === "") {optsStyle = undefined;} //IE7 and below don't return undefined for missing attribute jquery bug 9329
				var _undefined;

				// The attribute palette should be put into the options on the select box. The real data should look like this:
				//var palette="#666666,#777777,#888888,#999999"
				var palette = $this.attr("palette") || false;				
				if (optsStyle && optsStyle.toLowerCase() == "behavior: none") optsStyle = false;				
				if (optsStyle !== undefined && optsStyle.length == 0 && $this.parent().hasClass(".colors")) optsStyle = true;
				if (!palette && $this.parent().hasClass(".palette")) palette = true;

				var sku = " sku--" + $this.extractSku() || "";
				if (optsStyle || palette) {
					var color = "";
					var bgColor = "";
					if (optsStyle !== "") {
						color = " style='"+ $this.attr("style") +"'";
						bgColor = color.split(":")[1];
					} else {
						bgColor = "";
					}
					
					var attributes = "class='swatch-name label'"; //+ color;
					var shade = this.innerHTML.split(' -- ');
					var shadeName = shade[0];
					var shadeNumber = shade.length > 1 ? shade[1] : "";
					if (shadeName.length > 17) attributes = "class='swatch-name label long-name'";// + color;
					if(!palette) {
						$content = "<span class='swatch_icon' style='background: "+bgColor+"'></span>" + "<span class='shadeNumber'>" + shadeNumber + "</span><span " + attributes + ">" + shadeName + "</span>";
					} else {

						var swatchColors = typeof palette == "string" && palette.length !== 0 ? palette.split(",") : "";
						var shadeBlock = "";
						if (swatchColors.length > 0) {
							$(swatchColors).each(function(i, itm) {
								shadeBlock += "<span class='swatch' style='background: "+itm+";'> </span>";
							});
						} else {
							shadeBlock += "<span class='swatch empty'></span>";
						}
						
						$content = "<span " + attributes + "><span class='shadeNumber'>" + shadeNumber + "</span><span class='name'>" + shadeName + "</span></span><span class='swatches'>"+shadeBlock+"</span>";
						
						$(this).parents(".selectbox").addClass("palette");
					}
					thumbsList = true;
					self.htmlMode = true;
				}
				
				if (this.selected) { self.currentIndex = i; }
				
				var optgroup = $this.parents('optgroup');
				
				if (optgroup.length > 0 && $this.prev().length == 0){
					liString += '<li class="opt_group">'+optgroup.attr('label')+'</li>';				
				}
				liString += '<li class="select_opt--' + i + sku +'">'+$content+'</li>';			
			});
			
			this.list.html(liString);
			if (thumbsList) {
				this.container.parent().addClass("thumbs");
				var swatch = this.list.find(".swatch_icon");
				swatch.data("color", swatch.css("background-color"));
			}
			
			this.listItems = this.list.find('li');
			
			this.listItems.eq(0).addClass('first');
			this.listItems.eq(this.listItems.length - 1).addClass('last');
			
			this.selectables = [];
			
			this.listItems.each(function(){
				if (this.className.indexOf('opt_group') == -1){
					self.selectables.push($(this));
				}
			});
			
			this.selectables[this.currentIndex].addClass('selected');
			
		},
		
		setScrollPane : function(){
			if (this.listContainer.outerHeight()>=this.settings.maxHeight){
				this.listContainer.css({height:this.settings.maxHeight});
				this.scrollPane = this.listContainer.jScrollPane({});
			} else if (this.scrollPane){
				this.listContainer.css({height:'auto'}).jScrollPane();
			}
		},
		
		resetScrollPane : function(){
			if (this.scrollPane){
				this.listContainer.jScrollPaneRemove();
			}
			this.setScrollPane();
		},
		
		matchToDisplay : function(){
			var self = this;
			if (this.opts.eq((this.select.get(0).selectedIndex)).html() != this.displaySpan.html()){
				this.opts.each(function(index){
					if (this.innerHTML == self.displaySpan.html()){
						self.select.get(0).selectedIndex = index;
						self.changeValue();
						return false;
					}
				});
			}
		},
		
		matchToValue : function(val){
			var self = this;
			this.opts.each(function(i){
				if (this.value == val){
					self.select.get(0).selectedIndex = i;
					self.changeValue();
					return false;
				}
			});
		},
		
		matchToIndex : function(){
			this.displaySpan.html(this.opts.eq((this.select.get(0).selectedIndex)).html());
		},
		
		updateList : function(){
			this.locked = true;
			this.opts = this.select.find('option');
			this.createList();
			this.setScrollPane();

			this.list.find('li').hover(function(e){
				$(this).addClass('hovered');
			},function(e){
				$(this).removeClass('hovered');
			});
				
			this.locked = false;
		},
		
		open : function(){
			if (this.isOpen || this.locked) return;
			this.wrapper.addClass('select_open');
			this.container.css({zIndex:this.settings.openZIndex});
						
			if (this.scrollPane && typeof this.scrollPane[0].scrollTo == "function") {
				
				this.scrollPane = this.listContainer.jScrollPane();
				if (!this.settings.openAtTop){
					this.scrollPane[0].scrollTo('li.selected');
				}
				else {
					this.scrollPane[0].scrollTo('li:first');
				}
			}
			
			this.isOpen = true;
			
			if (typeof this.settings.openCallback == 'function'){
				this.settings.openCallback();
			}
		},
		
		close : function(){
			if (!this.isOpen) {
				this.locked = false;
				return;
			}
			this.container.css({zIndex:this.settings.zIndex});
			this.wrapper.removeClass('select_open');
			this.isOpen = this.locked = false;

			if (typeof this.settings.closeCallback == 'function'){
				this.settings.closeCallback();
			}
			
			this.select.trigger("blur");
			this.parentForm.focus();
		},
		
		clickOption : function(tar){
			this.locked = true;

			if (tar && tar.className.indexOf('opt_group') != -1) return; //Always ignore optgroup clicks
			
			if (tar && tar.nodeName.toLowerCase().indexOf("li") == -1) { //This means there are html tags inside, can't just take the text
				tar = $(tar).parents("li")[0];
			}
			
			var select = this.select.get(0);
			var index;
			
			if (tar){
				index = parseInt(tar.className.split('--')[1]);
			} else {
				index = select.selectedIndex;
			}
			
			var value = select[index].value;
			
			if (this.settings.ignoredValue&&value.search(this.settings.ignoredValue) != -1){	
				
				if (typeof(this.settings.functions[value.replace(this.settings.ignoredValue + " ", "")])=='function'){
					
					this.settings.functions[value.replace(this.settings.ignoredValue + " ", "")]();
				
				}
				
			} else {
				select.selectedIndex = index;
				
				if (typeof(this.settings.submitFunction)=='function'){
					this.settings.submitFunction();
				}
				
				this.changeValue();
			}
			
			$(this.select).trigger("change");
			
			this.close();
		},
		
		changeValue : function(override){
			var self = this;
			var index = this.select.get(0).selectedIndex;
			if (index==this.currentIndex && arguments.length == 0) return;
			
			$(this.selectables[this.currentIndex]).removeClass('selected'); //remove selected class from old item
			
			var newItem = $(this.selectables[index]);
			var newItemText = "";

			if (newItem.children().length > 0) {
				newItemText = newItem.find(".label").html();
			} else {
				newItemText = newItem.html();
			}
			
			setTimeout(function() {newItem.addClass('selected');}, 50);
			
			if (this.itemVisible(newItem)==false&&this.scrollPane){
				if (this.scrollPane[0].scrollTo == "function")
				this.scrollPane[0].scrollTo('li.selected');
			}

			newItemText = $.trim(newItemText.replace(/<SPAN/g, "<span"));
			newItemText = newItemText.split("<span")[0];
			var truncated = newItemText;

			this.displaySpan.removeClass("truncated");
			this.displaySpan.html(newItem.html());

			if (this.settings.truncateDisplay && newItemText.length > this.settings.truncateDisplay){
				truncated = newItemText.substr(0,this.settings.truncateDisplay) + "...";		
				var destination = this.displaySpan.children().length == 0 ? this.displaySpan : this.displaySpan.find(".label");
				destination.html(truncated);
				this.displaySpan.addClass("truncated");
			} 

			//var destination = this.displaySpan.children().length == 0 ? this.displaySpan : this.displaySpan.find(".label");
			//if (this.displaySpan.children().length == 0) {
			//} else {
			//	this.displaySpan.html(newItem.html());
			//	this.displaySpan.addClass(this.displaySpan.find(".label").html().toLowerCase());
			//	destination.html(truncated);
			//}

			this.display.data("Value",this.select.val());
			
			this.currentIndex = index;

			if (typeof this.settings.changeCallback == 'function'){
				setTimeout(function() {self.settings.changeCallback();}, 50);
			}

		},
		
		getSelected : function() {
			return $(this.selectables[this.currentIndex]);
		},

		getSelectedIndex : function() {
			return this.currentIndex;
		},
		
		itemVisible : function(item){
			if (!this.isOpen) return true;
			var pos = item.offset().top;
			var top = this.dropDown.offset().top;
			if (pos>top && pos+item.height()<top+this.dropDown.height()){
				return true;
			}
			return false;
		},
		
		jumpToIndex : function(index){
			if (index<this.opts.length){
			
				this.select.get(0).selectedIndex = index;
				this.changeValue();
			
			}
		},
		
		jumpToValue : function(value){
			var index = -1;
			
			this.opts.each(function(i){
				if (this.value==value){
					index = i;
					return false;
				}
			});
			
			if (index!=-1){
				this.select.get(0).selectedIndex = index;
				this.changeValue();
			}
			
			return index;
		},
		
		editOptionText : function(index,text){
			this.opts.eq(index).html(text);
			this.updateList();
		}
	};
	
})(jQuery);
$.DockHandler = function(params){
	if (!params.dock || !params.dock.get(0)) return false;
	
	//start:Init
		var _self = this,
			_settings = $.extend({},this.defaults,params), 
			_undefined, 
			_document = $(document),
			_window = $(window),
			_panels = [],
			_panelName = [],
			_activePanel = null,
			_scrollOffset = 0,
			_height = _settings.dock.height(),
			_dockMainNav = $("#dockMainNav");
		
		if (_settings.panels && _settings.panels.length > 0){
			for (var i=0; i<_settings.panels.length; i++){
				var panel = _settings.panels[i];
				if (!$(panel.selector).exists()) continue;
				var params = {panelName : panel.selector, panel : $(panel.selector), trigger : $(panel.triggerSelector), externalTrigger : $(panel.externalTriggerSelector), parentDock : _self };
				params = panel.customPanel ? $.extend({}, panel.customPanel, params) : $.extend({}, params);
				_panels.push( new $.DockPanel(params) );
				_panelName[panel.selector] = (_panels[i]);
			}
		}
		
		//start:Events			
			
			//close dock on click outside of dock
			//may wish to remove later if not desired
			_document.click(function(e){
				if (_activePanel != null && e.target.id != _settings.dock.attr("id") && $(e.target).parents(".purchaseInfo:not(.pdp)").length < 1 && $(e.target).parents("#"+_settings.dock.attr("id")).length < 1 ){
					_activePanel.hide();
				}
			});
			
			if ($.config.ie6) {
				$.config.window.bind("resize", function(e) {
					if ($.config.window.width() > 990) {
						_settings.dock.css({width: $.config.window.width()});
					} else {
						_settings.dock.css({width: 990});
					}
				});
				
				$.config.window.trigger("resize");
			}
		//end:Events
	
	//end:Init
		
	//start:Public
		this.slideUp = function(panel){
			_slideUp(panel);
		};
		
		this.slideDown = function(panel){
			_slideDown(panel);
		};
		
		this.getContainer = function() {
			return _settings.dock;
		}
		
		//hides all or keeps active showing if passed in
		this.hidePanels = function(activePanel,id){
			for (var i=0; i<_panels.length; i++){
				if ( activePanel ){
					//var panelName = _panels[i] == _panelName["#dockCart"] ? "hide panel is #dockCart" : "hide panel is #dockWishlist";
					var panelName = _panels[i].name();
					if ( id != panelName ) {
						_panels[i].hide();
					}
				}
				else {
					_panels[i].hide();
				}
			}
			
		};	
		
		//get/set _activePanel
		this.activePanel = function(panel,id){
			if (panel == _undefined){
				return _activePanel;
			}
			_activePanel = panel;
			var panelName = _activePanel == _panelName["#dockCart"] ? "active panel is #dockCart" : "active panel is #dockWishlist";
		};
		
		this.showPanel = function(id) {
			_panelName[id].show();
		};
		
		this.addItem = function(data, noShow) {
			if (_panelName[data.dockType]) _panelName[data.dockType].addItem(data, noShow);
		}
		
		this.removeItem = function(data) {
			if (_panelName[data.dockType]) _panelName[data.dockType].removeItem(data);
		}

		this.updateItem = function(data) {
			if (_panelName[data.dockType]) _panelName[data.dockType].updateItem(data);
		}
		
		this.removeAll = function() {
			if (_panelName['#dockCart']) _panelName['#dockCart'].removeAll();
		}

		this.refreshCart = function(callback) {
			if (_panelName['#dockCart']) _panelName['#dockCart'].refreshCart(callback);
		}
		
		this.hasItem = function(data) {
			if (_panelName[data.dockType]) return _panelName[data.dockType].hasItem(data);
		}

		this.moveItem = function(data) {
			if (_panelName[data.dockType]) _panelName[data.dockType].moveItem(data);
		}
		
		this.getItemQty = function(data) {
			return _panelName[data.dockType] ? _panelName[data.dockType].get.itemQty(data) : false;			
		}
		
		this.getAllItems = function(data) {
			return _panelName[data.dockType] ? _panelName[data.dockType].get.contents() : false;						
		}

		this.updatePrice = function(price, mode) {
			var price = price.price || price;
			if (typeof price == "string") price.replace($.config.monetary,"");
			price = parseFloat(price);
			if (_panelName['#dockCart']) _panelName['#dockCart'].updatePrice(price, mode);
		}
		
		this.resetPrice = function(){
			if (_panelName['#dockCart']) _panelName['#dockCart'].resetPrice();
		}
		
		this.resetCounter = function(){
			if (_panelName['#dockCart']) _panelName['#dockCart'].resetCounter();
		}
		
	//end:Public
	
	//start:Private
		/* Not needed with current dock css expression
		function _resizeIE6(){			
			if (_page.height() > _window.height()){
				_resize(_scrollOffset);
			}
			else {
				_resize(0);
			}
		}
		*/
		function _resize(scrollOffset){
			if (_window.width() < _settings.minWidth){
				_settings.dock.width(_settings.minWidth);
			}
			else {
				_settings.dock.width("100%");
			}
			
			for (var i=0;i<_panels.length;i++){
				_panels[i].centerItems();
			}
		}
		
		function _slideUp(panel){
				var growAmt = panel.outerHeight() + $.config.footer.outerHeight() + _dockMainNav.outerHeight();
				//$('.' + _settings.classPanel).removeAttr("style");
				$('.' + _settings.classPanel).removeClass("open_panel");
				panel.addClass("open_panel");
				
				if (panel.is('#dockCart')) growAmt = 248;
				
				_settings.dock.animate({
					//height : _height + _settings.growAmt
					height : growAmt
				}, {
					duration : _settings.slideDuration,
					easing : _settings.slideEasing,
					complete: function () {
						_self.open = true;
					}
				});
				if (_settings.fadePage) _settings.fadePage.animate({opacity: 0.3}, {duration : _settings.slideDuration});
		}
		
		function _slideDown(panel){
			var growAmt = panel.outerHeight();
			//if ($.browser.msie) $('.' + _settings.classPanel).removeAttr("style");
			if ($.browser.msie) $('.' + _settings.classPanel).removeClass("open_panel");
			//if (_settings.dock.height() == _height + growAmt){
				_settings.dock.animate({
					height : _height
				}, {
					duration : _settings.slideDuration,
					easing : _settings.slideEasing,
					complete: function () {
						//if (!$.browser.msie) $('.' + _settings.classPanel).removeAttr("style");
						if (!$.browser.msie) $('.' + _settings.classPanel).removeClass("open_panel");
						_self.open = false;
						_window.resize();
					}
				});
				
				if (_settings.fadePage) _settings.fadePage.animate({opacity: 1}, {duration : _settings.slideDuration});
			//}
		}
		
	//end:Private	
};
$.DockHandler.prototype.defaults = {
	dock : 0,
	minWidth : 500,
	growAmt : $.browser.msie ? 140 : 135,
	classPanel: 'dock_panel',
	slideDuration: 350,
	slideEasing: 'easeOutQuint',
	panels : [
		{
			selector : "#dockCart",
			triggerSelector : "#myBagTrigger, .open-Cart",
			externalTriggerSelector : ".AddTo-dockCart"
		},
		{
			selector : "#dockWishList",
//			triggerSelector : "#wishListTrigger, .open-WishList",
			triggerSelector : "#wishListTrigger",
			externalTriggerSelector : ".AddTo-dockWishList"
		},
		{
			selector : "#dockAccount",
			triggerSelector : "#AccountTrigger, .open-Account"
		},
		{
			selector : "#dockLogIn",
			triggerSelector : "#LoginTrigger, .open-Login"
		},
		{
			selector : "#dockGlobalNav",
			triggerSelector : "#chanelTrigger, .open-GlobalNav"
		}
	
	],
	itemSelector : "div.item",
	fadePage : 0
};

$.DockPanel = function(params){

	if (!params.panel || !params.panel.get(0)) return false;
	
	//start:Init
		var 
			_self = this,
			_settings = $.extend({},this.defaults,params),
			_dock = _settings.parentDock,
			_locked = 0,
			_isShowing = 0,
			_count = 0,
			_items = new $.Hash(),
			_height,
			_hideTimeout,
			_showTimeout,
			_itemsContainer = _settings.panel.find(_settings.itemsContainer),
			_price = 0;
			
		_settings.counterContainer = _settings.panelName + "Counter";
		_settings.closeTrigger = $(_settings.closeTriggerSelector);
		
		_settings.panel.find(_settings.itemSelector).each(function(){
			var $this = $(this);
			$this.data("Index", _count);
		});
		
		_centerItems();
		_price = parseFloat($(_settings.panelName + '_subtotal .price').text().replace($.config.monetary,""));
		
		//start:Events
			if (_settings.closeTrigger) {
				_settings.closeTrigger.live("click", function(e) {
					e.preventDefault();
					
					if (_isShowing){
						_self.hide();
					}						
				});
			}
			
			if (_settings.trigger){
			
				_settings.trigger.live("click", function(e){				
					e.preventDefault();
					var $this = $(this);				
					if (_isShowing){
						_self.hide();
					}
					else {
						_self.show();

						if ($.track) {
							var params = $.extend({}, $.track.dockDefault);
							var panelName = _settings.panel.attr("id").replace("dock","").toLowerCase();
							switch (panelName) {
								case("cart"):									
									panelName = "bag";									
									break;
								case ("globalnav"):
									panelName = "chanel";
									params["WT.dl"] = "50";
							}
							
							if (panelName == "cart") panelName = "bag";
							params["WT.ti"] = params["WT.ti"] + panelName;
							params["DCSext.ch_scat2"] = panelName;
							
							$.track.fire(params, {});
						}
						
					}
				});
				
			}
			/*
			if (_settings.externalTrigger){

				_settings.externalTrigger.live("click", function(e){				
					e.preventDefault();
					var data = $.extend({mode: 'add', dockType: _settings.panelName.replace('#','')}, $(this).parents(_settings.itemSelector).data("data-json"));
					$.productManager.update(data);
					//_self.addItem();
				});
				
			}
			
			if (_settings.removeTriggerSelector) {
			
				_settings.panel.find(_settings.removeTriggerSelector).live("click", function(e){				
					e.preventDefault();
					var data = $.extend({mode: 'remove'}, $(this).parents(_settings.itemSelector).data("data-json"));
					//_self.removeItem($(this).parents(_settings.itemSelector).data("data-json"), $(this));
					$.productManager.update(data);
				});				
			}
			*/
		//end:Events
	//end:Init
	
	//start:Public
		this.name = function() {
			return _settings.panelName;
		};
		
		this.show = function(){
			if (_isShowing) return false;

			_dock.activePanel(_self, _settings.panelName);
			_dock.hidePanels(_self, _settings.panelName);
			_dock.slideUp(_settings.panel);
			
			//_settings.panel.css({position : 'static'});
			_isShowing = 1;
			
		};
		
		this.hide = function(){
			
			if (!_isShowing) return false;

			if (_dock.activePanel().name() == _settings.panelName){
				_dock.activePanel(null);
				_dock.slideDown(_settings.panel);
			}
			
			//_settings.panel.css({position : 'absolute'});
			_isShowing = 0;
			
		};
		
		this.get = {
			itemByIndex: function(index) {
				if ( index < _items.length){
					return _items[index];
				}
				else {
					return 0;
				}
			},
			contents: function() {
				return _items.getAllItems();
			},
			itemQty: function(data) {
				var qty = 0;
				
				if ($(_settings.panelName).find(".sku--" + data.sku).exists()) {
					qty = _items.getItem(data.sku);
				}
				
				return qty;
			}
		}
		
		//accepts jQuery extended div.item
		this.addItem = function(data, noShow){	
								
			_self.counter({action: "add", qty: data.quantity, skus: data.sku});
			
			if ($(_settings.panelName).find(".sku--" + data.sku).exists()) {
				var newQty = Math.min(_items.getItem(data.sku), _settings.maxQty);
				
				var $item = $(_settings.panelName).find(".sku--" + data.sku);
				$item.find('.itemQty').text(newQty);
				$item.find('.qty').text(newQty);
				
				// kills the old selectbox, clones it, and assigns new value
				var $select = $item.find('select');
				var $clone = $select.clone();
				$select.remove();
				$item.find('.select_parent').remove();
				$item.find('.selector').append($clone);
				$item.find('select').get(0).selectedIndex = newQty - 1;
				
				if (noShow && $.QuickBuy) {
					new $.QuickBuy(data, 'qb-status', _itemsContainer, {setupOnly: true, setupItem: $(_settings.panelName).find(".sku--" + data.sku)});
				} else {
					_itemsContainer.prepend($(_settings.panelName).find(".sku--" + data.sku))
				}
			} else {
				_createLayer(data);
			}
			
			var $select = $(_settings.panelName).find(".sku--" + data.sku + ' select');
			var $qty = $(_settings.panelName).find(".sku--" + data.sku + ' .qty');
			var sku = data.sku;
			
			if ($select.exists()) {
				var sb = new $.CustomSelect($select , {					
					changeCallback: function() {
						
						// make service call here depending on if it's a wishlist or cart
						if(sb.noCallback !== 1) {
							var data = $select.parents(_settings.itemSelector).gatherData();
							data.dockType = "#" + $select.parents(".dock_panel").attr("id");
							data.quantity = $select.val();
							data.qty = $select.val();
							data.mode = "update";
							data.action = "update";
							data.callType = "update";
							data.skus = data.sku;

							if(data.dockType == "#dockCart") {
								data.destination = "cart";
							} else {
								data.destination == "wishlist";
							}
							
							var newQty = data.quantity;
							data.originalQty = parseInt($qty.html());
							
							var $item = $(_settings.panelName).find(".sku--" + data.sku);
							$item.find('.itemQty').text(newQty);
							$item.find('.qty').text(newQty);
							
							// just to prevent callback from firing, otherwise it would be recursive
							sb.noCallback = 1;
							sb.jumpToIndex(newQty - 1);
							sb.noCallback = 0;
							
							// $.dock.updateItem(data);
							
							if(data.dockType == "#dockCart") {
								_self.counter(data);
								
								$.dock.updatePrice((data.price * (data.originalQty)), "subtract");	
								$.dock.updatePrice((data.price * (data.qty)), "add");	
							}
							
							$.productManager.update(data);
						}
					}
				});
				sb.noCallback = 0;
			}
			
			//remove products that fall off the first row in the bag, make room for new ones IE6 ONLY
			if($.config.ie6 || _settings.panelName == "#dockWishList") {
				// normalize the name
				var _tempItemContainer = $(_settings.panelName.replace("dock", "").toLowerCase() + "Content");
				if (_tempItemContainer.children(".item").length > 6) {
					_tempItemContainer.children(".item").slice(6).remove();
				}
			}
			
			_centerItems();
			if (!noShow) _self.show();
		};
		
		this.updateItem = function(data) {
			
		};
		
		this.removeItem = function(data) {
			_self.counter({action: "remove", skus: data.sku});
			$(_settings.panelName).find(".sku--" + data.sku).remove();
			this.updatePrice((data.price * data.originalQty), "subtract");
		};
		
		this.refreshCart = function(callback) {
			var $dockCart = $("#cartContent");
			
			$.dock.hidePanels();
			
			//fill the bag
			if ($dockCart.exists() && location.protocol == "http:") {
				 $.ajax({
				   type: "GET",
				   url: $.config.services.cartFragment,
				   success: function(response){
						if (response && $.productManager) {
							var temp = $("<div></div>");
							temp.append(response);
							var items = temp.find("#cartContentWrapper").children(),
								price = parseFloat(temp.find("#priceWrapper").text());
							
							$.dock.removeAll();
							$.dock.updatePrice(price);
							$dockCart.append(items);
							$.productManager.initDock();
							if (typeof callback == "function") callback();
						}
					}
				 });
			};
		};
		
		this.removeAll = function() {
			_items.clear();
			_itemsContainer.empty();
			_self.resetPrice();
			_self.counter(true,true);
		}
		
		this.hasItem = function(data) {
			return _items.hasItem(data.sku);
		}
		
		this.moveItem = function(data) {
			var originalData = $.extend({}, data);
			originalData.dockType = data.originalDock;
			delete data.originalDock;
			
			$.dock.removeItem(originalData);
			$.dock.addItem(data);
		}
		
		this.centerItems = function(){
			_centerItems();
		};
		
		this.counter = function(action,removeAll) {
			_counter(action,removeAll);
		}
		
		this.getContents = function() {
			return _items;
		}
		
		this.updatePrice = function(tempPrice, mode) {
			function setPrice(price) {
				$(_settings.panelName + '_subtotal .price').text($.config.monetary + price.toFixed(2));
			}
			
			if ($(_settings.panelName + '_subtotal .price').exists()) {
				var cookieName = _settings.panelName.replace('#dock','').toLowerCase() + 'Total';
				if (tempPrice) {
					tempPrice = parseFloat(tempPrice);
					var cookiePrice = $(_settings.panelName + '_subtotal .price').text()  ? parseFloat($(_settings.panelName + '_subtotal .price').text().replace($.config.monetary,"")) : 0;
					if (isNaN(cookiePrice)) cookiePrice = 0;
				}

				if (tempPrice && mode == "add") {
					_price = tempPrice + cookiePrice;
					setPrice(_price);
				} else if (tempPrice && mode == "subtract") {
					_price = _price - tempPrice;
					setPrice(_price);
				} else {
					_price = tempPrice;
					setPrice(_price);
				}
			}
		}
		
		this.resetPrice = function() {
			_price = 0;
		}
		
		this.resetCounter = function(){
			_counter({},true);
			_count = 0;
		}
		
	//end:Public
	
	//start:Private
		function _createLayer(data) {
			if (!$.QuickBuy) return false;
			if ($(data.family).attr('alt')) data.family = $(data.family).attr('alt');
			if (data.tracking) {
				if (data.tracking["DCSext.ch_prod"]) data.tracking["DCSext.ch_prod"] = decodeURIComponent(data.tracking["DCSext.ch_prod"]);
				if (data.tracking["DCSext.ch_scat1"]) data.tracking["DCSext.ch_scat1"] = decodeURIComponent(data.tracking["DCSext.ch_scat1"]);
				if (data.tracking["DCSext.ch_scat2"]) data.tracking["DCSext.ch_scat2"] = decodeURIComponent(data.tracking["DCSext.ch_scat2"]);
			}
			_template = new $.QuickBuy(data, 'qb-status', $("#" + data.destination + "Content"));
			var price = $.config.monetary + data.price.toFixed(2).toString().replace($.config.monetary, "");
			var productImage = _template.find('.item_trigger');
			productImage.css({opacity: 0});
			productImage.load(function() {
				setTimeout(function() {productImage.animate({opacity: 1})},$.dock.defaults.slideDuration);
			});
			_template.find('.price').text(price);
			_template.find('.itemQty').text(_items.getItem(data.sku));
			//_itemsContainer.append(_template);
			var item = _itemsContainer.find(".sku--"+ data.sku);
			
			return item;
		}

		function _counter(obj,removeAll) {
			if (!obj) {
				return _count;
			}
			
			var countContainers = $(_settings.counterContainer).add(_settings.panelName + ' .counter');
			if (!removeAll) {
				var counterAdd = obj.qty
				
				if (obj.action == "remove") {
					_count = _count - parseInt(_items.getItem(obj.skus));
					_items.removeItem(obj.skus);
				} else if(obj.action == "update") {
					_count -= parseInt(obj.originalQty);
					_count += parseInt(obj.qty);
					_items.setItem(obj.sku, parseInt(obj.qty));
				} else {
					if (_items.hasItem(obj.skus)) {
						var newQty = Math.min(obj.qty + _items.getItem(obj.skus), _settings.maxQty);
						counterAdd = obj.qty + _items.getItem(obj.skus) > _settings.maxQty ? _settings.maxQty - _items.getItem(obj.skus) : obj.qty;
						_items.setItem(obj.skus, (newQty));
					} else {
						_items.setItem(obj.skus, obj.qty);
					}
					_count = _count + counterAdd;
				}
			} else {
				_count = 0;
			}
			
			
			if (_count !== 0) {
				$(_settings.panelName).find(":first-child").removeClass("default");
				countContainers.text(_count + " ");
			} else {
				$(_settings.panelName).find(":first-child").addClass("default");
				countContainers.text("0");
				$(_settings.panelName + '_subtotal .price').text($.config.monetary + "0");
			}
			
		}
		
		function _centerItems(){
			if (!_settings.centered) return false;
			var 
				center = _settings.panel.width()/2,
				containerWidth = _itemsContainer.width();
			
			_itemsContainer.css({
				left : (center - containerWidth/2)
			});
		}
	//end:Private
};	
$.DockPanel.prototype.defaults = {
	panel : 0,
	index : 0,
	centered : false,
	itemsContainer : "#cartContent",
	itemSelector : "div.item",
	removeTriggerSelector : ".RemoveFromDock",
	maxItems : 5,
	showCallback : 0,
	hideCallback : 0,
	showTimeout : 50,
	hideTimeout : 500,
	trigger : 0,
	maxQty: 4,
	closeTriggerSelector : ".dock-closer",
	animateSpeed : 400
};

if (location.host.indexOf("chanel.com") > -1) document.domain = "chanel.com";

(function($){
	$.Login = function(params) {
		if (!$.config.services.enableCommerce) return false;
		this.defaults = {
			domIframe: 'commerceSignIn',
			classWaiting: 'waiting',
			classShowLogIn: 'showLogin'
		}
		this.settings = $.extend({}, this.defaults, params);

		var self = this,
			$body = $('body'),
			$dockCart = $("#cartContent"),
			$dockWishlist = $("#wishlistContent"),
			$dockSignin = $("#dockSignin"),
			$userEmail = $("#user"),
			$userPass = $("#pass"),
			$userRemember = $("#rememberMe"),
			$accountBtnDock = $("#AccountTrigger"),
			$loginBtnDock = $("#LoginTrigger"),
			$logout = $(".logout"),
			$iFrame = "";

			var cookieSettings = $.config.cookieManager.commerceCookieSettings;
			
			//check the authentication state of the user on page load and display the appropriate label in the dock
			var $viewBag = $("<iframe class='hiddenframe' id='viewBagManager' src='" + $.config.services.ecommerceViewCart + $.getRandQueryString() + "'>");
			$viewBag.load(function(response) {
				if (!$.isAuthenticated()) {
					$body.removeClass($.config.cookieManager.authenticated);
					$body.addClass(self.settings.classShowLogIn);
					if ($.track) {
						$.track.setMetaTag("WT.z_loggedIn", "false");
					}
					$.cookie($.config.cookieManager.userID, null, {path: "/", domain: document.domain});
				} else {
					$body.addClass($.config.cookieManager.authenticated);
					if ($.track) {
						$.track.setMetaTag("WT.z_loggedIn", "true");
					}
				}
				$viewBag.remove();
			});
			$("body").append($viewBag);

			if ($dockSignin.exists() === false) return false;
			if (!$dockSignin.find("input[name=action]").exists()) $dockSignin.append('<input type="hidden" name="action" value="login" />');
			if ($.cookie($.config.cookieManager.username) !== null) {
				var cookieName = $.getNameValuePairs($.cookie($.config.cookieManager.username), "&", "=");
				$userEmail.val(cookieName.Username);
			}
			
		_bindEvents();
		
		//start:private
		function _bindEvents() {
			$logout.click(function(e) {
				e.preventDefault();
				self.logout();
			});
			
			$dockSignin.find('.submit').click(function(e) {
				e.preventDefault();
				_resetForm();
				
				if (!$userEmail.valid("email")) $userEmail.error(true);
				if ($userPass.isBlank())  $userPass.error(true);
				
				if ($userEmail.valid("email") && !$userPass.isBlank()) {
					$dockSignin.submit();
				} else {
					$dockSignin.error(true);
				}
			});
			
			$dockSignin.submit(function(e) {
				e.preventDefault();
				$body.addClass(self.settings.classWaiting);
				$iFrame = $("<iframe id='" + self.settings.domIframe + "' src='" + $.config.services.accountLogin + "?" + $dockSignin.serialize() + $.getRandQueryString() + "'>");
				var userID = $.cookie($.config.cookieManager.userID) || "";
				$iFrame.load(function() {
					$.config.userID = $.cookie($.config.cookieManager.userID) || "";

					if ($.isAuthenticated()) {
						if ($userRemember.get(0).checked) {
							$.cookie($.config.cookieManager.username, unescape("Username=" + $userEmail.val()), {expires: 30, path: "/", domain: document.domain}, true);
						}
						_resetForm();
						$userEmail.val("");
						$userPass.val("");
						setTimeout(function() {self.loggedIn()}, 100);
					} else {
						//error messaging
						$dockSignin.error(true);
						$body.removeClass(self.settings.classWaiting);
						if ($iFrame.exists()) $iFrame.remove();
					}
				});
				$body.append($iFrame);
			});
			
		}

		function _resetForm() {
			$dockSignin.error();
			$userEmail.error();
			$userPass.error();
		}
		
		//end:private
		
		//start:public
		this.loggedIn = function() {
			$body.addClass($.config.cookieManager.authenticated);
			$body.removeClass(self.settings.classShowLogIn);
			$dockSignin.get(0).reset();
			if ($.config && $.config.loginCallback && typeof $.config.loginCallback == "function") {
				$.config.loginCallback();
			}

			if ($iFrame.exists()) $iFrame.remove();

			if ($.dock) {
				$.dock.hidePanels();
				
				//fill the bag
				if ($dockCart.exists() && location.protocol == "http:") {
					$.dock.refreshCart(
						function() {
							if ($.track) {
								$.track.setMetaTag("WT.z_loggedIn", "true");
							}
						}
					);
				} else {
					window.location.reload();
				}

				//add to wishlist if not empty
				var wishlistInfo = $.dock.getAllItems({dockType: "#dockWishList"});
				if (wishlistInfo.skus.length > 0 && $.productManager) {
					wishlistInfo = $.extend({}, wishlistInfo, {dockType: "#dockWishList", callType: "add", destination: "wishlist", container: $("#dockWishList")});
					$.productManager.makeCall(wishlistInfo);
				}
			}
			
			$body.removeClass(self.settings.classWaiting);
		}
		
		this.logout = function() {
			$body.addClass(self.settings.classWaiting);
			var logoutiFrame = $("<iframe id='" + self.settings.domIframe + "' src='" + $.config.services.accountLogin + "?action=logout&userid=" + $.cookie($.config.cookieManager.userID) + "'>");
			$body.append(logoutiFrame);
			$body.removeClass($.config.cookieManager.authenticated);
			$body.addClass(self.settings.classShowLogIn);
			if ($.track) {
				$.track.setMetaTag("WT.z_loggedIn", "false");
				var params = $.extend({},$.track.dockDefault);
				params["WT.z_loggedIn"] = "false";
				params["WT.ti"] = params["WT.ti"] + "logout";
				
				$.track.fire(params, {});
				
			}
			$.cookie($.config.cookieManager.orderID, null, {path: "/", domain: document.domain});
			$.cookie($.config.cookieManager.userID, null, {path: "/", domain: document.domain});
			$.cookie($.config.cookieManager.authenticated, null, {path: "/", domain: document.domain});
			//$.cookie($.config.cookieManager.username, null, {path: "/", domain: document.domain});
			$.cookie($.config.cookieManager.sessionId, null, {path: "/", domain: document.domain});
			$dockCart.empty();
			$dockWishlist.empty();
			$("#dockCartCounter").html(" ");
			logoutiFrame.remove();
			if ($.dock) {
				$.dock.hidePanels();
				$.dock.removeAll({dockType: "#dockCart"});
				$.dock.removeAll({dockType: "#dockWishList"});
				$.dock.updatePrice(0);
			}
			$body.removeClass(self.settings.classWaiting);
		}
		//end:public
		
	};

})(jQuery);

$(function() {
	$.extend({login: new $.Login()});
});
(function($){
	
	$(function(){
		/*
		if(!$.browser.msie) {
			var $container = $.config.page;
				//$container.hide();
				$container.fadeIn(400);
			
			$("a[href!=javascript:void(0);]").live('click', function(e) {
				e.preventDefault();
				var link = this;
				$container.fadeOut(200, function() {
					document.location = link.href;							 
				});
			});
		}
		*/
		
		$.extend({cookie: jQuery.cookie || false});

		if ($.Navigation && $.config.navigation.exists()) {
			var navSettings = {easing:"easeOutQuart", followScroll : true, animateTo: true, alignCenter:false};

			if (document.body.className.indexOf("landing")!=-1) {
				navSettings = $.extend(navSettings, {landing: true, followScroll: false, animateTo: false, duration: 500, timeout: 500});
			}
			
			$.extend({navigation: new $.Navigation($.config.navigation, navSettings)});
		}

		if ($.Search) $.extend({search: new $.Search()});
		if ($.QuickbuyManager) setTimeout(function() {new $.QuickbuyManager()}, 50);
		if ($.ProductManager) setTimeout(function() {$.extend({productManager: new $.ProductManager()})}, 100);
		if ($.DockHandler) $.extend({dock: new $.DockHandler({dock: $.config.dock})});
			if ($("#WishlistJump") && $.track) {
				$("#WishlistJump").click(function(e) {
					var params = $.extend({}, $.track.dockDefault);
					params["WT.ti"] = params["WT.ti"] + "view wishlist";
					
					$.track.fire(params, {});
				});
			}
			
		$(".toggler").each(function() {
			var settings = {toggler: this};
			//settings.timeout = 7000;
			
			if ($(this).parents('#sectionalNav').exists()) {
				settings = $.extend(true, {}, {toggler: this, label: 0, speed: 300, timeout: false});
			}
			
			new $.ToggleHeight(settings);			
		});
		
		if ($.QuickBuy) {
			$('.qb-status-update').each(function(i,qb) {
				new $.QuickBuy({}, 'qb-status', {}, {setupOnly: true, setupItem: $(qb)});
			});
		}
		
		//Custom Selects
		//Add logic to differentiate selects/params where needed
		var selects = $.config.page.find("select").filter(function(index) {
			if (!$(this).parents('.filter').exists()) return $(this);
		}).each(function(){
			var params = {};			
			if ($(this).attr('name') == 'replenishment') {
				params.truncateDisplay = 23;
				params.maxHeight = 90;
			} else if ($(this).parents(".checkout").exists()) {
				params.truncateDisplay = 38;
			} else if ($(this).attr('name') == 'skuName') {
				params.truncateDisplay = 17;
				params.maxHeight = 100;	
				params.openCallback = function() {jQuery(".shadeValidation").hide();}
			} else if ($(this).parents(".thumbs").exists()) {
				params.maxHeight = 100;
			} 
			
			
			if(! $(this).hasClass("ignore")) {
				new $.CustomSelect($(this), params);
			}
			
		});	
		
		if ($("#footer .dropdown").exists()) {
			$.footerDropdowns = [];
			$("#footer .dropdown").each(function(i,dd) {
				var currentMax = 255;
				var params = {noWrap: true, maxHeight: currentMax, event: 'hover', dropShadow: 0};
				if ($(this).find(".dd_content").outerHeight() > currentMax || $(this).find(".dd_content").outerHeight() > $(window).height() - $.config.dock.outerHeight()) params = $.extend({}, params, {maxHeight: Math.min(currentMax, $(window).height() - $.config.dock.outerHeight())});
				$.footerDropdowns.push(new $.DropDown($(this), params));
			});
		}

		if ($('.helper').exists()) {
			$('.helper').each(function(i,h) {
				var dTrigger = $(h).find('.item_trigger');
				var dContent = $(h).find('.item_content');
				new $.DropDown($(h), {dropShadow: 0, maxHeight: 650, width: 'auto', trigger: dTrigger, content: dContent});
			});
		}
		
		//use a cookie to populate a return URL if it is supported
		if ($.cookie) {
			if ($.config.services.lastShopPoint) {
				$.cookie($.config.cookieManager.lastShopPoint, $.config.services.lastShopPoint, $.config.cookieManager.commerceCookieSettings);
				//sessionStorage.setItem("lastShopPoint", $.config.services.lastShopPoint);
			} else {
				if ($.cookie($.config.cookieManager.lastShopPoint) && $("#dockCart_continue").exists()) {
					//$("#dockCart_continue").attr("href",sessionStorage.lastShopPoint);
					$("#dockCart_continue").attr("href", decodeURIComponent($.cookie($.config.cookieManager.lastShopPoint)));
				}
			}
		}

		// prevent shade names from breaking in IE6
		if($.config.ie6 && $("body").hasClass("collections")) {
			$("#contentWrapper .collectionshades span").each(function() {
				var name = this.innerHTML;
				
				//replace whitespace with &nbsp; because IE6 breaks to two lines otherwise
				if (this.innerHTML.indexOf(" ") !== -1) {
					this.style.width = "auto";
					if ($(this).width() < 60) this.style.width = 60;
				}
				if (!$(this).attr("class") || this.className == "multiShadeTitle") {
					$(this).html(name.replace(/\s-\s/g, "&nbsp;-&nbsp;").replace(/\s/g, "&nbsp;"));
				}
			});
		}
		
		//add a class to identify Safari
		if ($.config.safari) $.config.body.addClass("safari");
		
		//custom tracking for items under the Chanel logo dock
		if ($.dock && $("#dockGlobalNav").exists()) {
			$("#dockGlobalNav .dock_items a").click(function() {
				var $this = $(this);
				var params = $.extend({}, $.track.dockDefault);
				params["WT.ti"] = params["WT.ti"] + 'chanel/' + $this.text().toLowerCase();
				params["DCSext.ch_scat2"] = "chanel";
				params["WT.dl"] = "50";
				$.track.fire(params, {});
			});
		}
	});

	$.extend( $.easing,{
		easeout:function(e,f,a,h,g){return -h*f*f/(g*g)+2*h*f/g+a},
		easeInSine: function (x, t, b, c, d) {
			return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
		},
		easeInCubic: function (x, t, b, c, d) {
			return c*(t/=d)*t*t + b;
		},
		easeOutCubic: function (x, t, b, c, d) {
			return c*((t=t/d-1)*t*t + 1) + b;
		},
		easeInOutCubic: function (x, t, b, c, d) {
			if ((t/=d/2) < 1) return c/2*t*t*t + b;
			return c/2*((t-=2)*t*t + 2) + b;
		},
		easeInQuart: function (x, t, b, c, d) {
			return c*(t/=d)*t*t*t + b;
		},
		easeOutQuart: function (x, t, b, c, d) {
			return -c * ((t=t/d-1)*t*t*t - 1) + b;
		},
		easeInOutQuart: function (x, t, b, c, d) {
			if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
			return -c/2 * ((t-=2)*t*t*t - 2) + b;
		},
		easeOutQuint: function (x, t, b, c, d) {
			return c*((t=t/d-1)*t*t*t*t + 1) + b;
		}
	});
	
})(jQuery);(function($){
	$.Overlay = function(params) {
		
		//start:Init
		this.defaults = {
			classOverlay: 'overlay',
			classHeader: 'overlayHeader',
			classContent: 'overlayContent',
			classButtons: 'overlayButtons',
			classBlocker: 'overlay_block',
			classOverflowOff: 'no-hspill',
			template: '<div class="overlay"><div class="overlayContent"></div><div class="overlayButtons"></div></div>',
			closeButton: true,
			width: 'auto',
			height: 'auto',
			center: true,
			block: true,
			hideOthers: true,
			removeOnHide: true,
			animate: {
				show: {opacity: 1},
				hide: {opacity: 0},
				settings: {duration : 300, easing : "easeOutQuint", queue: false}
			},
			events: {},
			parent: $('body'),
			dimensions: 0,
			position: {top: 0, left: 0}
		};
		this.settings = $.extend({}, this.defaults, params);
		
		var self = this,
			$container = (typeof self.settings.template == 'object') ? self.settings.template : $(self.settings.template),
			$content = $container.find('.' + self.settings.classContent),
			$block = $('<div class="'+ self.settings.classBlocker +'"></div>'),
			$body = $('body');
			
			$content.addClass("clear");
			$newHeight = $.config.ie6 ? Math.max($body.height(),Chanel.Utilities.getContentHeight()) : '100%';		
		
		if (self.settings.hideOthers) _hideOthers();
			if (self.settings.block) {
				$body.append($block);
				$block.css({width: '100%', height: $newHeight});
			}
		self.settings.parent.append($container);
		
		
		_bindEvents();
		
		var handler = function() {
			self.center();						  
		}
		//end:Init
		
		//start:private
		function _bindEvents() {
			if (self.settings.closeButton){
				var $a = $('<a href="#" class="close button"><span>' + $.config.local.close + '</span></a>');
				$a.click(function(e){
					e.preventDefault();
					self.hide();
				});
				
				$container.append($a);
			}
		}
		
		function _hideOthers() {
			if (self.settings.animate) {
				$('.'+self.settings.classOverlay).fadeOut('fast').remove();
			} else {
				$('.'+self.settings.classOverlay).remove();
			}
		}
		
		function _setupHelpers() {
			var helpers = $content.find('.helper');
			if (helpers.exists()) {
				helpers.each(function(i,h) {
					var dTrigger = $(h).find('.item_trigger');
					var dContent = $(h).find('.item_content');
					new $.DropDown($(h), {dropShadow: 0, maxHeight: 650, width: 250, trigger: dTrigger, content: dContent});
					if ($.config.ie6) {
						dTrigger.click(function() {
							dContent.css({zoom: 1});
						});
					}
				});
			}
		}
		//end:private
		
		//start:public
		this.center = function(w,h) {
			var $parent = (self.settings.parent.is('body')) ? $(window) : self.settings.parent;
			var width = w || $container.width();
			var height = h || $content.outerHeight();
			var x = ($parent.width() / 2) - (width / 2);
			var y = Math.max( (($(window).height() / 2) - (height / 2)) + $(window).scrollTop() - ($.config.dock.height()/2),0);//extra to account for dock height
			if (w && h) {
				return {top: y, left: x};
			} else {
				$container.css({top: y, left: x});
			}
		}
		
//		this.center2 = function(w,h) {
//			var $parent = (self.settings.parent.is('body')) ? $(window) : self.settings.parent;
//			var x = ($parent.width() / 2);
//			var y = Math.max( ($(window).height() / 2) + $(window).scrollTop() - ($.config.dock.height()/2),0);//extra to account for dock height
//			$container.css({top: y, left: x});
//		}
		
		this.show = function() {
			_setupHelpers();
			$(window).bind("scroll", handler);
			//set the hide styles first so that it will animate in properly
			$container.css(self.settings.animate.hide);
			$container.css({width: $content.outerWidth()});
			$block.css(self.settings.animate.hide);

			if (self.settings.events.onBeforeShow && typeof self.settings.events.onBeforeShow == "function") {
				self.settings.events.onBeforeShow();
			}
			
			if (self.settings.center) {
				self.center();
			} else {
				$container.css(self.settings.position);
			}
			
			var extraTimeout = $.config.ie6 ? 100 : 50;
			
			if (self.settings.animate) {
				var animSettings = $.extend({}, self.settings.animate.settings);
				var overlaySettings = $.extend({}, self.settings.animate.settings);
				delete overlaySettings.complete;
				
				if (self.settings.events.onShow && typeof self.settings.events.onShow == "function") {
					animSettings.complete = self.settings.events.onShow;
				}
				
				setTimeout(function() {
					$container.animate(self.settings.animate.show, animSettings);
					if (self.settings.block) $block.animate({opacity: 0.6, height: $newHeight}, {duration : overlaySettings.duration, easing : "easeOutQuint"});
					if ($.config.ie6 && $content.find(".minor").exists()) {
						$content.css({zoom: 1});
						$content.find(".minor").css({zoom: 1});
					}
				},extraTimeout);
			} else {
				if (self.settings.center) self.center();
				$container.show();
				$block.show();
			}
				
		}
		
//		this.show = function() {
//			//set the hide styles first so that it will animate in properly
//			var newWidth = $container.width();
//			var newHeight = $container.height();
//			
//			$container.css(self.settings.animate.hide);
//			$block.css(self.settings.animate.hide);
//
//			if (self.settings.events.onBeforeShow && typeof self.settings.events.onBeforeShow == "function") {
//				self.settings.events.onBeforeShow();
//			}
//			
//			if (self.settings.center) {
//				self.center2();
//			} else {
//				$container.css(self.settings.position);
//			}
//			
//			self.settings.parent.addClass(self.settings.classOverflowOff);
//			
//			if (self.settings.animate) {
//				var animSettings = $.extend({}, self.settings.animate.settings);
//				var overlaySettings = $.extend({}, self.settings.animate.settings);
//				delete overlaySettings.complete;
//				
//				if (self.settings.events.onShow && typeof self.settings.events.onShow == "function") {
//					animSettings.complete = self.settings.events.onShow;
//				}
//				
//				$container.css({
//					width: 0,
//					height: 0
//				});
//				
//				self.settings.animate.show.width = newWidth;
//				self.settings.animate.show.height = newHeight;
//				self.settings.animate.show.left = '-=' + newWidth/2 + 'px';
//				self.settings.animate.show.top = '-=' + newHeight/2 + 'px';
//				
//				animSettings.complete = function(){
//					if (typeof self.settings.events.onShow == "function") self.settings.events.onShow();
//					$container.find('div.overlayLoader img').show();
//					
//					if($container.find('.item_trigger').is(':loaded')){
//						$container.find('.overlayLoader').fadeOut();
//					}
//					
//					self.settings.parent.removeClass(self.settings.classOverflowOff);
//				}
//				
//				setTimeout(function() {
//					$container.append('<div class="overlayLoader" style="text-align:center;position:absolute;top:0;left:0;width:' + newWidth + 'px;height:' + newHeight +'px;background:#fff;"><img style="margin-top:175px;display:none;" src="' + $.config.services.baseUrl + '_assets/img/global/chanel_loader_white.gif" /></div>');
//					$container.animate(self.settings.animate.show, animSettings);
//					if (self.settings.block) $block.animate({opacity: 0.6}, {duration : overlaySettings.duration, easing : "easeOutQuint"});
//				},50);
//			} else {
//				$container.show();
//				$block.show();
//				self.settings.parent.removeClass(self.settings.classOverflowOff);
//			}
//		}
		
		this.hide = function() {
			$(window).unbind("scroll", handler);
			if (self.settings.animate) {
				var animSettings = self.settings.animate.settings;
				
				animSettings.complete = function () {
					if (self.settings.events.onHide && typeof self.settings.events.onHide == "function") {
						self.settings.events.onHide;
					}
					self.remove();
				}
				if (self.settings.block) $block.animate({opacity: 0}, {duration : animSettings.duration, easing : "easeOutQuint"});
				$container.animate(self.settings.animate.hide, animSettings);
			} else {
				self.remove();
			}		
		}
		
		this.remove = function() {
			if (self.settings.block) $('.' + self.settings.classBlocker).remove();
			$container.remove();
		}
		
		this.set = {
			overlayClass: function(name) {
				$container.addClass(name);
			},
			id: function(name) {
				$container.attr("id", name);
			},
			content: function(html) {
				if ($container.find("." + self.settings.classContent)) $container.find("." + self.settings.classContent).html(html);
			},
			dimensions: function(x) {
				$container.css(x);
			}
		}
		
		this.get = {
			overlay: function() {
				return $container;
			},
			content: function() {
				return $container.find("." + self.settings.classContent);
			},
			position: function() {
				return $container.position();
			}
		}
		//end:public
		
	}
})(jQuery);
// start:ProductManager.class.js
(function($){
	$.ProductManager = function(params){
		if (!$.config.services.enableCommerce) return false;
		this.defaults = {
			stockOptions: {backOrder: 'backOrder', outOfStock: 'outOfStock', replenishable: 'isReplenishable', limitedEdition: 'limitedEdition'},
			docks: ['dockCart', 'dockWishList'],
			selectorExtensions: {
					add: '.AddTo-',
					remove: '.RemoveFrom-',
					move: '.mover-'
			},
			productSelector: '.item',
			productLimit: 4,
			itemQty: '.itemQty',
			purchaseHolder: '.purchaseInfo',
			detailSelector: '.productDetails',
			skuSelector: 'skuName',
			skuHolder: '.sku',
			xmlNames: {
				price:'TotalPrice',
				sku: 'SKU',
				qty: 'Quantity',
				success: 'Success',
				cartItem: 'CartItem'
			}
		}
		
		var self = this,
			_settings = $.extend({},this.defaults,params), 
			dock = {
				cart: "dockCart",
				wishlist: "dockWishList"
			},
			_orderID = $.cookie($.config.cookieManager.orderID) ? $.cookie($.config.cookieManager.orderID).split("|||")[0] : 'new',
			_cookieSettings = $.config.cookieManager.commerceCookieSettings;
			if (document.domain == "localhost") delete _cookieSettings.domain;//DELETE THIS AFTER MOVING FROM LOCALHOST
			
		var updateDock = $.dock ? true : false;
		var _currentAction = "";
		this.sku = null;
		
		// start:private
		function _init(){
			
			_bindEvents();
			
			if (updateDock && $('#' + dock.cart + ' ' + _settings.productSelector).exists()) {
				self.initDock();
			}
		};

		// start:events
		function _bindEvents(){
			$('select[name=' + _settings.skuSelector + ']').live('change', function(e) {
				var $this = $(this);
				var selected = $this.get(0).selectedIndex;
				var selectedOption = $this.find('option').eq(selected);
				var selectedText = selectedOption.extractSku();
				var purchaseHolder = $this.parents(_settings.purchaseHolder);
				var price = selectedOption.extractPrice();
				purchaseHolder.find('.price').text(price);
				purchaseHolder.find(_settings.skuHolder).html(selectedText);
				var purchaseLinks = purchaseHolder.find('.purchase');
				//check out of stock and backorder settings
				$.each(_settings.stockOptions, function(i,option) {
					purchaseLinks.removeClass(option);
				});
				
				//Out of stock vs. Back order flags
				if (selectedOption.hasClass(_settings.stockOptions.outOfStock) && !selectedOption.hasClass(_settings.stockOptions.backOrder)) {
					purchaseLinks.addClass(_settings.stockOptions.outOfStock);
				} else if (selectedOption.hasClass(_settings.stockOptions.outOfStock) && selectedOption.hasClass(_settings.stockOptions.backOrder)) {
					purchaseLinks.addClass(_settings.stockOptions.backOrder);
				};
				
				//Replenishment flag
				if (selectedOption.hasClass(_settings.stockOptions.replenishable)) {
					purchaseHolder.addClass(_settings.stockOptions.replenishable);
				} else {
					purchaseHolder.removeClass(_settings.stockOptions.replenishable);
				}

				//Limited Edition flag
				if (selectedOption.hasClass(_settings.stockOptions.limitedEdition)) {
					purchaseHolder.parent().addClass(_settings.stockOptions.limitedEdition);
				} else {
					purchaseHolder.parent().removeClass(_settings.stockOptions.limitedEdition);
				}
				
				if ($.track) {
					_prepareCookies();
					var params = $.track.productView;
					var parent = $this.parents(".productDetails");
					var data = parent.gatherProductTags();
					params = $.extend({}, params, data);
					var ti = [data["WT.cg_n"], data["WT.cg_s"], data["DCSext.ch_scat1"], data["DCSext.ch_scat2"], data["DCSext.ch_prod"]];
					params["WT.ti"] = ti.join("/");
					params["WT.ti"] = params["WT.ti"].replace(/\/\//g, "/");
					if (data["DCSext.ch_scat2"] == data["DCSext.ch_scat1"]) params["WT.ti"] = params["WT.ti"].replace("/" + data["DCSext.ch_scat2"], "");
					if (parent.parents(".quickbuy-pdp-item").exists() || parent.hasClass("quickbuy-pdp-item")) params["WT.ti"] = params["WT.ti"] + "/quickview pdp";
					params["WT.pn_sku"] = data.sku;
					params["WT.tx_u"] = data.qty;
					
					delete params["WT.tx_cartid"];
					
					$.track.fire(params, data);
					$.track.clearCommerce();
					
				}
			});

			$(_settings.docks).each(function(index, el) {
				//Adds
				$(_settings.selectorExtensions.add + el).live("click", function(e) {
					e.preventDefault();
					var $this = $(this);
					var data = {mode: "add", callType: "add", destination: el.replace("dock","").toLowerCase(), dockType: "#" + el};
					var $productDetails = $this.parents(_settings.detailSelector);
					if( $productDetails.parents(_settings.detailSelector).get(0) != null) {
						$productDetails = $productDetails.parents(_settings.detailSelector);
					}
					
					var opts = $.extend({}, data, $productDetails.gatherData($(this)));
					
					$skuSelect = jQuery("select[name='skuName']",$productDetails);
					$shadeValidation = jQuery(".shadeValidation",$productDetails);
					if ($skuSelect.length > 0 && !$skuSelect.parents(".size").exists() && $skuSelect[0].selectedIndex == 0 && $shadeValidation.length > 0)
					{$shadeValidation.show();return false;}
					
					//get the proper image size
					if (opts.item_trigger) {
						opts.item_trigger = opts.item_trigger.replace((/LARGE|MEDIUM|SMALL/), "SMALL");
					} else {
						opts.item_trigger = "";
					}
					
					//if the max # of items per sku is already in the dock, do not add
					if (($.dock.getItemQty(opts) + parseInt(opts.qty)) > _settings.productLimit && opts.mode !== "remove" && opts.destination !== "wishlist") {
						$this.parents(".purchase").addClass("maxQty");
						return false;
					} else {
						$this.parents(".purchase").removeClass("maxQty");
					}
					
					if (opts.destination == "wishlist") {
						function _addToWishlist(opts, noShow) {
							var params = {};
							var source = "addWishList";
							var tempData = _prepareData(opts);
							if ($.track) {
								if (tempData.container.hasClass("quickbuy")) {
									params = $.track["dockWishList"];
									source = "dockWishList";
								} else {
									params = $.track["addWishList"];
								}
							}
	
							var productdata = tempData.tracking;
							params = $.extend({}, params, productdata);
							if (source !== "dockWishList") {
								var ti = [productdata["WT.cg_n"], productdata["WT.cg_s"], productdata["DCSext.ch_scat1"], productdata["DCSext.ch_scat2"], productdata["DCSext.ch_prod"]];
								params["WT.ti"] = ti.join("/");
								params["WT.ti"] = params["WT.ti"].replace(/\/\//g, "/");
								if (productdata["DCSext.ch_scat2"] == productdata["DCSext.ch_scat1"]) params["WT.ti"] = params["WT.ti"].replace("/" + productdata["DCSext.ch_scat2"], "");
								if (tempData.container.parents(".quickbuy-pdp-item").exists() || tempData.container.hasClass("quickbuy-pdp-item")) params["WT.ti"] = params["WT.ti"] + "/quickview pdp";
								params["WT.ti"] = params["WT.ti"] + "/add to wishlist";
							}
							params["WT.tx_u"] = opts.qty;
							params["WT.tx_cartid"] = _orderID == "new" ? "" : _orderID;
	
							if ($this.hasClass(_settings.selectorExtensions.remove + dock.cart)) {
								params = $.extend({}, params, $.track[dock.cart + "Remove"]);
								if (source == "dockWishList") {
									params["WT.ti"] = $.track["dockWishList"]["WT.ti"];
									params["WT.tx_u"] = opts.qty;
								}
							}
						

							if ($.track) {
								$.track.fire(params, tempData);
								$.track.clearCommerce();
							}
							
							if (chnTrack) {
								chnTrack( opts.destination.charAt(0).toUpperCase() + opts.destination.slice(1), [
									{locale: $.config.services.locale, mode: "dock"},
									{sku: opts.sku, desc: opts.family + " " + opts.name, price: opts.price}
								], "");
							}
							
							self.updateDock(tempData, noShow);
						}
						
						//if this is an add to wishlist and the user is not logged in, add the item to the dock but do not make a service call
						if ($.isAuthenticated() == false && $.dock.getItemQty(opts) == 0) {
							if (typeof opts.skus == "object") {
								var items = opts.container.find(".product").not(".empty").parent();
								items.each(function(i,adder) {
									var newopts = $(adder).gatherData();
									newopts.destination = opts.destination;
									newopts.dockType = opts.dockType;
									newopts.mode = opts.mode;
									newopts.qty = 1;
									_addToWishlist(newopts, (i < items.length-1));
								});
							} else {
								_addToWishlist(opts, false);
							}
							
							return false;
						} else {
							opts.alternateMode == "remove";
						}
					}
					
					self.update(_prepareData(opts));

				});

				//Removes
				$(_settings.selectorExtensions.remove + el).live("click", function(e) {
					e.preventDefault();
					var $this = $(this);
					var data = {mode: "remove", callType: "update", destination: el.replace("dock","").toLowerCase(), dockType: "#" + el};
					var opts = $.extend({}, data, $this.parents(_settings.detailSelector).gatherData());
					opts.originalQty = opts.qty;
					opts.qty = 0;
					if ($this.hasClass(_settings.selectorExtensions.add + dock.wishlist)) {
						opts.alternateDestination = "wishlist";
					}
					
					self.update(_prepareData(opts));
					
				});

			});
			
		}
		//end:events
		
		function _processResponse(response, data) {
			var result = $.browser.msie && typeof response === "string" ? $.parseXML(response) : response;
			var success = $('Success', result).text();
			var price = parseFloat($(_settings.xmlNames.price,result).text());

			_currentAction = "";
			
			if (updateDock && data.dockType == "#dockCart" && typeof data.skus !== 'object') {
				self.updatePrice(price);
			}
			
			if ($.dock && data.dockType == "#dockCart" && typeof data.skus == 'object') {
				$.dock.refreshCart(function() {
					$.dock.showPanel(data.dockType);
				});
			} else if (typeof data.skus == 'object') {
				$.dock.showPanel(data.dockType);
			}
			
			if ($.track) {
				if (data.destination == "cart" && data.alternateDestination && data.alternateDestination == "wishlist") return false;
				
				_prepareCookies();
				var params = {};
				if (data.mode == "remove") {
					params = $.track[data.dockType.replace('#','') + data.mode.capitalize()];
				} else {
					if (data.destination == "wishlist") {
						if ($.dock.getItemQty(data) > 1) return false;
						if (data.container.parents("#contentWrapper").exists() == false && data.container.parents(".overlay").exists() == false) {
							data.wishlistMove = true;
							params = $.track["dockWishList"];
						} else {
							params = $.track["addWishList"];
						}
						if (data.alternateMode && data.alternateMode == "remove") params = $.extend({}, $.track[dock.cart + "Remove"], params);
					} else {
						params = $.track[data.dockType.replace('#','')];
					}
				}

				if (params == undefined) return false;
				
				if(data.mode == "update") {
					var difference = Math.abs(data.originalQty - data.qty);
					if(data.originalQty > data.qty) {
						data.mode = "remove";
						params = $.track[data.dockType.replace('#','') + data.mode.capitalize()];
					} else {
						data.mode = "add";
						params = $.track[data.dockType.replace('#','')];
					}
					data.qty = difference;
				}
				
				var productdata = data.tracking || {};
				
				if (typeof data.skus == "object") data.skus = data.skus.join(",").split(":1").join("");
				
				var chnTrackProductData= {sku: data.sku, desc: data.family + " " + data.name, price: data.price};

				if (data.mode !== "remove") {
					params = $.extend({}, params, productdata);
					var ti = [productdata["WT.cg_n"], productdata["WT.cg_s"], productdata["DCSext.ch_scat1"], productdata["DCSext.ch_scat2"], productdata["DCSext.ch_prod"]];
					params["WT.ti"] = ti.join("/");
					params["WT.ti"] = params["WT.ti"].replace(/\/\//g, "/");
					if (data.container.parent().exists() && data.container.parents(".quickbuy-pdp-item").exists() || data.container.hasClass("quickbuy-pdp-item")) params["WT.ti"] = params["WT.ti"] + "/quickview pdp";
					if (data.destination == "cart" && data.mode == "add") {
						params["WT.ti"] = params["WT.ti"] + "/add to cart";
					}
					
					if (data.qty) chnTrackProductData.qty = data.qty;
					
				}
				
				if (productdata["DCSext.ch_scat2"] == productdata["DCSext.ch_scat1"]) params["WT.ti"] = params["WT.ti"].replace("/" + productdata["DCSext.ch_scat2"], "");
				if (parseInt(data.qty) >= 1) params['WT.tx_u'] = data.qty;
				if ((data.wishlistMove && data.originalQty) || (data.mode == "remove" && data.originalQty)) params['WT.tx_u'] = data.originalQty;

				chnTrack( data.destination.charAt(0).toUpperCase() + data.destination.slice(1), [
					{locale: $.config.services.locale, mode: "dock"},
					chnTrackProductData
				], "append");
				
				if (params["WT.tx_cartid"]) params["WT.tx_cartid"] = _orderID;
				$.track.fire(params, data);
				$.track.clearCommerce();
			}
		}
		
		function _prepareCookies() {
			_orderID = $.cookie($.config.cookieManager.orderID) ? $.cookie($.config.cookieManager.orderID).split("|||")[0] : 'new';
			_userID = $.cookie($.config.cookieManager.userID) || 'new';
		}
		
		function _prepareData(opts) {
			var sku = opts.sku;
			var qty = opts.qty == undefined ? 1 : parseInt(opts.qty);
			
			var data = {
				skus: sku, quantity: qty, mode: opts.mode
			};
			
			data = $.extend({}, data, opts);

			return data;
		}

		// end:private
		
		// start:public
		this.initDock = function() {
			var cookieItems = $.cookie($.config.cookieManager.orderID) ? $.cookie($.config.cookieManager.orderID).substr(39).split("|||") : [];
			var cookieTemp = eval(cookieItems.join("+").replace(/\d{6}\|\|/g,""));
			var cookieQty = cookieTemp !== "" ? cookieTemp : 0;
			var dockQty = isNaN(parseInt($("#dockCartCounter").text())) ? 0 : parseInt($("#dockCartCounter").text())

			function _cartSetup() {
				$('#' + dock.cart + ' ' + _settings.productSelector).each(function(i,item) {
					var data = $(item).gatherData();
					data.mode = 'add';
					data.dockType = '#dockCart';
					data.destination = "cart";
					data.quantity = parseInt($(item).find( _settings.itemQty).text());
					if ($.dock.hasItem(data) == false) self.updateDock(data, true);
				});
			}
			
			/*
			if (dockQty !== cookieQty) {

				$("#cartContent").load($.config.services.cartFragment, "",
					function(response){
						if (response) {
							$.dock.resetCounter();
							$.dock.resetPrice();
							_cartSetup();
						}
					}
				);
			} else {
			*/
				_cartSetup();
			//}
			
			return true;
		}

		this.updateDock = function(data, noShow) {
			data.dock = true;
			$.dock[data.mode + 'Item'](data, noShow);//add,remove
		}
		
		this.updatePrice = function(data, mode) {
			$.dock.updatePrice(data, mode);
		}
		
		this.updateJSON = function(jsonStr){
			//console.log('JSON STRING');
			//console.log(jsonStr);
			var data = eval(jsonStr);
			
			updateDock = true;
			self.updateDock(data);
			self.makeCall(data);
		};
		
		this.update = function(data){
				//$.each(data.mode, function(i,mode) {
					//console.log("UPDATE");
					//console.log(data);
					//var jsonStr = JSON.stringify(data);
					//console.log(jsonStr);
					
					if (updateDock && typeof data.skus !== 'object') {
						self.updateDock(data);
						//reflect updated price a little faster, will update with the official price after call as well
						if (data.mode == "add" && data.price && data.dockType == "#dockCart") {
							self.updatePrice(data.price, "add");
						}
						delete data.price;
					}
					
					//console.log("MAKING CALL");
					self.makeCall(data);				
				//});
		};

                this.updateMultiple = function(dataArray) {
                    dataArray.each( function(i) {
                        console.log(i + " " + $(this));
                    });
//                    if (updateDock) {
//                        self.updateDock(dataArray[i]);
//                        if (dataArray[i].mode == "add" && dataArray[i].price && dataArray[i].dockType == "#dockCart") {
//                            self.updatePrice(dataArray[i].price, "add");
//                        }
//                        delete dataArray[i].price;
//                    }
//                    self.makeCall(dataArray[i]);
                };
		
		this.makeCall = function(data) {
			_prepareCookies();
			var targetDestination = 'bag';

			if (data.destination == 'cart') {
				targetID = _orderID;
			} else {
				targetID = _userID;
				targetDestination = 'wishlist';
			}
						
			var callData = {
				action: data.callType,
				skus: data.skus,
				qtys: data.quantity
			}
			if (data.replenishment) {
				callData.replenishment = data.replenishment;
				data.replenishment = ':' + data.replenishment;
			} else {
				data.replenishment = '';
			}
			
			var itemInformation = data.skus + ':' + data.quantity + data.replenishment;
			
			if (typeof data.skus == 'object') {
				var multiSkus = typeof data.skus == 'object' ? data.skus : data.skus.split(',');
				itemInformation = '';
				
				//do nothing if there are no selected
				if(!data.skus[0]){
					return false;
				}
				
				if (data.skus[0].indexOf(":") == -1) {
					$.each(multiSkus, function(i,singleSku) {
						data.skus[i] = data.skus[i] + ":" + data.quantity[i];
						//itemInformation = data.skus.join(':' + data.quantity[i] + ',') + ":" + data.quantity[data.skus.length-1];
					});
				}
				
				itemInformation = data.skus.join(",");

			};
			
			var url = $.config.services.ecommerceCart + data.callType + '/' + targetID + '/' + targetDestination + '/' + itemInformation;
			
			if (location.protocol == "https:") {
				url = $.config.services.ecommerceCart;

				if (targetDestination == 'wishlist') {
					callData.userId = targetID;
					url = $.config.services.ecommerceCart.replace("CartService", "WishlistService");
				} else {
					if (targetID !== 'new') callData.orderid = targetID;
					if (callData.action == "update") callData.action = "change";
				}
				

			} else {
				callData = {};
			}
			
			$.get(url, callData, function(response) {_processResponse(response,data)});
			
			return false;
		}
		// end:public
		
		_init();
	};
	
})(jQuery);
// end:ProductManager.class.js
(function($){
	$.QuickbuyManager = function(params) {
		this.defaults = {
			classContainer: 'horizShowcase',
			classItem: 'item',
			classItemWrapper: 'item_wrapper',
			classProduct: 'item_trigger_container',
			classImage: 'item_trigger',
			classQuickbuy: 'item_quickbuy',
			classQbTrigger: 'trigger',
			classDescription: 'item_description',
			classItemPerRow: 'per-',
			classControl: 'grid-controller',
			classControlContainer: 'gridController',
			classActive: 'active',
			classLoading: 'loading',
			classEmpty: 'empty',
			quickbuys: [
				{
					selector: 'qb-pdp',
					data: {
						name: '',
						family: '',
						image: ''
					}
				},
				{
					selector: 'qb-status',
					data: {
						family: '',
						name: '',
						price: '',
						quantity: 1,
						selectedText: ''
					}
				}
			]
		}
		this.settings = $.extend({}, this.defaults, params);

		var self = this,
			ie6 = navigator.appVersion.indexOf("MSIE 6") == -1 ? false : true,
			_showTimeout, _hideTimeout,
			$quickbuys = $('.' + self.settings.classQuickbuy),
			$qbtrigger = $quickbuys.find('.' + self.settings.classQbTrigger),
			$items = $quickbuys.parents('.' + self.settings.classItem + ':not(.' + self.settings.classEmpty + ')'),
			$itemWrappers = $items.find('.' + self.settings.classItemWrapper),
			$productContainers = $items.find('.' + self.settings.classProduct),
			$imgs = $items.find('.' + self.settings.classImage),
			$products = $productContainers.find('a');
			
		//$productContainers.css("borderWidth", 3);
			$products.each(function() {
				var $this = $(this);
				var parentContainer = $this.parents('.' + self.settings.classContainer);
				if (parentContainer.hasClass("per-1") || parentContainer.hasClass("shelf-small")) return false;
				var prodDimensions = {height: $this.parents('.' + self.settings.classContainer).hasClass("per-6") ? parseInt($this.parent().height() * 0.90) : Math.ceil($this.parent().height() * 0.98)}
				if (ie6) delete prodDimensions.height;
				$this.css(prodDimensions);
			});
		$qbtrigger.parent().css({opacity: 0});
		
		$items.each(function(i,item) {
			$.each(self.settings.quickbuys, function(i, settings) {
				if ($(item).hasClass(settings.selector)) $(item).data('mode', self.settings.quickbuys[i].selector);
				if ($(item).data('mode') == 'qb-status') new $.QuickBuy({}, 'qb-status', {}, {setupOnly: true, setupItem: $(item)});
			});
		});
		
		_bindEvents();
		
		//start:private
		function _bindEvents() {
			
			$products.mouseenter(function() {
				var $this = $(this);
				var $parentItem = $(this).parents('.'+ self.settings.classItem);
				
				//PDP mode
				if ($parentItem.data('mode') == 'qb-pdp') {
					var elements = {
						me: $this,
						parent: $this.parent(),
						qbText: $parentItem.find('.' + self.settings.classQuickbuy + ' p')
					}

					clearTimeout(_showTimeout);
					//_cancelAnims(elements);
					var parentContainer = $parentItem.parents('.' + self.settings.classContainer);
					if (parentContainer.hasClass("per-1") || parentContainer.hasClass("shelf-small")) return false;
					
					_showTimeout = setTimeout(function(){
						$this.stop();
						var height = $parentItem.parents('.' + self.settings.classContainer).hasClass("per-6") ? {height: Math.ceil($this.parent().height() * 0.98)} : {height: parseInt($this.parent().height())};
						if (!ie6) $this.animate(height, {queue: false, duration:200});
						//$this.parent().animate({"borderWidth": 5}, {duration: 150, queue: false});
						var qb = $parentItem.find('.' + self.settings.classQuickbuy + ' p');
						qb.css({display: "block"});
						qb.animate({opacity: 1});
					},100);
				}
			});
			
			$itemWrappers.mouseleave(function() {
				clearTimeout(_showTimeout);
				var $this = $(this);
				var parentContainer = $this.parents('.' + self.settings.classContainer);
				if (parentContainer.hasClass("per-1") || parentContainer.hasClass("shelf-small")) return false;
				
				//PDP MODE
				if ($this.parent().data('mode') == 'qb-pdp') {
					var qb = $this.parent().find('.' + self.settings.classQuickbuy + ' p');
					var imageContainer = $this.find('.' + self.settings.classProduct);
					var prodLink = $this.find('.' + self.settings.classProduct + ' a');
					var elements = {
						product: prodLink,
						parent: imageContainer,
						qbText: qb
					}
					//_cancelAnims(elements);
					
					var height = $this.parents('.' + self.settings.classContainer).hasClass("per-6") ? {height: parseInt(imageContainer.height() * 0.90)} : {height: Math.ceil(imageContainer.height() * 0.98)};
					if (!ie6) prodLink.animate(height, {queue: false});
					//imageContainer.animate({"borderWidth": 3}, {duration: 150, queue: false});
					qb.animate({opacity: 0}, {queue: false, complete: function() {$(this).css({display: "none"})}});
				}
			});
			
			$qbtrigger.click(function(e) {
				e.preventDefault();
				var data = $(this).parents('.' + self.settings.classItem).gatherData();
				new $.QuickBuy(data, $(this).parents('.' + self.settings.classItem).data('mode'));
			});
		}
		
		function _cancelAnims(el) {
			$.each(el, function(d,a) {
				a.stop();
			});
		}
		//end:private
	};

	$.QuickBuy = function(info, mode, destination, params) {
		this.defaults = {
			classItem: 'item',
			classImage: 'item_trigger',
			classSelectbox: 'selectbox',
			classQbContent: 'item_content',
			classSelectholder: 'select_parent',
			classOverlimitRight: 'reversed',
			classPurchaseHolder: 'purchaseInfo',
			classProductInfoHolder: 'productDetails',
			classProdName: 'name',
			classProdFamily: 'family',
			classActive: 'active',
			animate: 1,
			animationTimeout: 300
		}
		
		this.settings = $.extend({}, this.defaults, params);
		var self = this,
			data = info,
			$item = data.container || $('<div class="item"></div>'),
			$purchaseHolder = $item.find('.' + self.settings.classPurchaseHolder),
			template,
			timeout,
			mode = mode || 'qb-status';
			
			if (mode == 'qb-pdp') {
				if (data.item_trigger) data.item_trigger = data.item_trigger.replace((/LARGE|MEDIUM|SMALL/), "LARGE");
				
				var form = $purchaseHolder.clone();
				form.find('.' + self.settings.classSelectbox).each(function() {
					var $this = $(this);
					
					if(!$(this).find("select").hasClass("ignore")) {
						var select = $this.find("select").clone();
						var selectName = select.attr("name");
						$this.find('.' + self.settings.classSelectholder).remove();
						$this.append(select);
					}
				});
				
				template = tmpl("template_pdp", data);
				//var startPos = $.extend({}, trigger.position(), {overflow: 'hidden', width: trigger.parents('.' + self.settings.classItem).width(), height: trigger.parents().height()});
				
				var o = new $.Overlay({
					/*
					parent: $("body").hasClass("checkout") ? $("#aspnetForm") : $("body"),
					events: {
						onBeforeShow: function() {
							//o.get.overlay().css(startPos);
						},
						onShow: function() {
							//var contentHeight = o.get.content().outerHeight();
							//var dimensions = $.extend({}, {width: 700, height: contentHeight}, o.center(700,contentHeight));
							//o.get.overlay().animate(dimensions);
						}
					}
					*/
				});
				
				var $overlay = o.get.overlay();
				o.set.content(template);
				
				$overlay.find('.item_trigger').load(function(){
					$overlay.find('.overlayLoader').fadeOut();
				});
				
				$overlay.find(".overlayContent").addClass("pdp-item");
				$overlay.find(".minor").append(form);
				if (data.container.find(".familyImage").exists()) {
					$overlay.find(".family").html(data.container.find(".familyImage").clone());
				}
				if ($overlay.find(".keywords").exists()) $overlay.find(".productName").append($overlay.find(".keywords"));
				if ($overlay.find("div.tout").exists()) $overlay.find(".productName .name").after($overlay.find("div.tout"));
				if (form.hasClass("limitedEdition")) $overlay.find(".minor").addClass("limitedEdition");
				
				//replace the select boxes after dom insertion
				form.find("select").each(function(i,sbox) {
					var params = {maxHeight: 120};
					var $this = $(sbox);
					var selectName = $this.attr("name");
					if (!$this.hasClass("colors")) {
					    if (selectName == "replenishment") {
						    params.truncateDisplay = 23;
						    params.maxHeight = 90;
					    }
					    else if (selectName == "skuName") {
						    params.truncateDisplay = 17;				    
					    }


					    var newSelect = new $.CustomSelect($this, params);
					    var origSbox = $purchaseHolder.find('select[name=' + selectName + ']');
					    var newSelectedIndex = false;
					    if (origSbox.data('cs')) {
						    newSelectedIndex = origSbox.data('cs').getSelectedIndex();
					    } else {
						    newSelectedIndex = origSbox.get(0).selectedIndex;
					    }

					    newSelect.jumpToIndex(newSelectedIndex);

					    $this.change(function() {
						    var origSbox = $purchaseHolder.find('select[name=' + selectName + ']');
						    if (origSbox.data('cs')) origSbox.data('cs').jumpToIndex(sbox.selectedIndex);
					    });
					}	
				
				});
				
				form.find(".purchase a").click(function(e) {
						$skuSelect = jQuery("select[name='skuName']",jQuery(this).parents(".productData"));		
						if ($skuSelect.length > 0 && !$skuSelect.parents(".size").exists() && $skuSelect[0].selectedIndex == 0)
						{jQuery(".shadeValidation",jQuery(this).parents("form")).show();return false;}
						else {						
							o.hide();}
				});
							
				o.show();
				$(".quickbuy-pdp-item .inlineShadeContainer").InlineShadeSelector();
				
				if($.config.ie6) {
					setTimeout(function() {
						o.center();	
						$(".overlay_block").height($("body").height() + 350);
					}, 400);
				} else {
					var $oBlock = $(".overlay_block");
					setTimeout(function() {
						if($oBlock.height() < $("body").height() + 100) {
							$oBlock.height($("body").height() + 100);
						}
					}, 400);
				}
				
				if ($.track) {
					var params = $.track[mode];
					var data = $overlay.gatherProductTags();
					params = $.extend({}, params, data);
					var ti = [data["WT.cg_n"], data["WT.cg_s"], data["DCSext.ch_scat1"], data["DCSext.ch_scat2"], data["DCSext.ch_prod"]];
					params["WT.ti"] = ti.join("/");
					params["WT.ti"] = params["WT.ti"].replace(/\/\//g, "/") + '/quickview pdp';
					if (data["DCSext.ch_scat2"] == data["DCSext.ch_scat1"]) params["WT.ti"] = params["WT.ti"].replace("/" + data["DCSext.ch_scat2"], "");
					params["WT.tx_u"] = data.qty;
					
					$.track.fire(params,data);
				}
				
			} else if (mode == 'qb-status' && !self.settings.setupOnly) {
				template = $(tmpl("template_qb_status", data));
				if (destination){
//					template.css({
//						left: '-10px', opacity: 0
//					}).prependTo(destination).animate({
//						left: 0, opacity: 1
//					}, 'normal');
					
					destination.prepend(template);
				}
				_bindEvents($(template));

				return template;
			} else if (self.settings.setupItem) {
				_bindEvents(self.settings.setupItem);
			}
			
		//start:private
		function _bindEvents(item) {
			if (mode == 'qb-status') {
				var item = item.hasClass(self.settings.classItem) ? item : item.find('.' + self.settings.classItem);
				var qb = item.find('.' + self.settings.classQbContent);
				var pageRightLimit = $.config.page.offset().left + $.config.page.width();
				item.find('.adder-dockCart').remove();
				item.find('.adder-dockWishList').remove();
				
				item.mouseenter(function() {
					if (self.settings.animate && !$.config.ie6) {
						clearTimeout(timeout);
						qb.css({opacity: 0});
						item.addClass(self.settings.classActive);
						if ((item.offset().left + item.width()) > pageRightLimit) item.addClass(self.settings.classOverlimitRight);
						//if (item.offset().top + item.height())
						//timeout = setTimeout(function() {qb.animate({opacity: 1}, {queue: false})}, self.settings.animationTimeout);
						qb.animate({opacity: 1}, {queue: false});
					} else {
						item.addClass(self.settings.classActive);					
					}
				});
				
				item.mouseleave(function() {
					clearTimeout(timeout);
					function hider () {
						qb.animate({opacity: 0}, {queue: false, complete: 
							function() {
								item.removeClass(self.settings.classActive);
							}
						});
					}
					
					if (self.settings.animate && !$.config.ie6) {
						if ($("body.replenishment")) {
							timeout = setTimeout(function() {hider()}, self.settings.animationTimeout);
						} else {
							hider();
						}
					} else {
						item.removeClass(self.settings.classActive);
					}
				});
			}
			
		}
		//end:private
		
		//start:public
		this.get = {
			template: function() {
				return $(template);
			}
		}
		//end:public
		
		return this;
	};
	
})(jQuery);
//end:Quickbuy
(function($){
	$.Search = function(params) {
		this.defaults = {
			domSearch: 'search',
			domSearchHolder: 'searchHolder',
			domPredictiveSearch: 'predictiveSearch',
			classActive: 'active',
			maxHeight: 350,
			width: 'auto',
			height: 'auto',
			submitDelay: 500,
			minSearchLength: 3
		}
		this.settings = $.extend({}, this.defaults, params);
		
		var self = this,
			_document = $(document),
			submitTimer,
			$search = $('#' + self.settings.domSearch),
			$predictiveSearch = $("#" + self.settings.domPredictiveSearch),
			$input = $search.find("input");
		
		$input.val('');
		
		_bindEvents();
		
		//start:private
		function _bindEvents() {
			$search.add('#' + self.settings.domSearch + ' h3').add('#' + self.settings.domSearch + ' h3 span').click(function() {
				$input.trigger("focus");
			});
			
			$search.submit(function(e) {
				e.preventDefault();
			});
			
			$input.focus(function() {
				$search.addClass(self.settings.classActive);
			});
			
			$input.keypress(function(e) {
				//if ($.config.services.predictiveSearch && location.protocol == "http:") _resetTimer();
				
				if (e.which == 13) {
					var value = _getInputValue();
					if (_getInputValue() == "") return false;
					
					chnTrack("SearchResults", [{locale: $.config.services.locale}, {searchterm: value}], "append");
					window.location = $.config.services.search + _getInputValue();
				}
			});
		
			_document.click(function(e) {
				if (e.target.id !== self.settings.domSearch && $(e.target).parents('#' + self.settings.domSearchHolder).length < 1) {
					$input.val("");
					$search.removeClass(self.settings.classActive);
					_emptyPrediction();
				}
			});
		}
		
		function _resetTimer() {
			clearTimeout(submitTimer);
			submitTimer = setTimeout(function() {self.predict()}, self.settings.submitDelay);
		}
		
		function _emptyPrediction() {
			$predictiveSearch.removeClass(self.settings.classActive);
			$predictiveSearch.empty();		
		}
		
		function _disableSearch(disabler) {
			if (disabler) {
				$search.attr("disabled", "true");
			} else {
				$search.removeAttr("disabled");
			}
		}
		
		function _getInputValue() {
			var goodValue = $input.val().replace(/[<>%#*]/g, "");
			return encodeURIComponent(goodValue).replace(/[^A-Za-z0-9%20%C2%B0%C3%AE%C3%AF%C3%8F%C3%8E%C3%A8%C3%A9%C3%88%C3%89%C3%A4%C3%84]/g, "");
		}
		//end:private
		
		//start:public
		this.predict = function() {
			//don't replace these characters, escape them first then do check:°îïÏÎèéÈÉäÄ
			var value = _getInputValue();
			if (value.length < self.settings.minSearchLength) {
				_disableSearch(true);
				return false;
			}
			_disableSearch();
			$predictiveSearch.load($.config.services.predictiveSearch + value, '',
				function(response){
					if (response) {
						var $holder = $predictiveSearch.find(".holder");
						if ($holder.outerHeight()>=self.settings.maxHeight){
							$holder.css({height:Math.min(self.settings.maxHeight, $(window).height() - $.config.dock.outerHeight())});
							self.scrollPane = $holder.jScrollPane({});
						}
						$predictiveSearch.addClass(self.settings.classActive);
					} else {
						_emptyPrediction();
					}
				}
			);
		}
		//end:public
	};

})(jQuery);
(function($){
    
    var settings = {};
    var blocked = false;

  var methods = {
     init : function( options ) {
                      
	       settings = {
		   containerId : "chanel_tooltip"
	       }
		
	   if ( options ) { 
	    $.extend( settings, options );
	  }
			var arrowImg = $.config.services.baseUrl;
			if ($.config.ie6) {
			    arrowImg += "_assets/img/global/tooltip_down_arrow_ie6.png";
			}
			else
			{
			 arrowImg += "_assets/img/global/tooltip_down_arrow.png";
			}
			
	    var $toolTipContainer = $('<div id="' + settings.containerId + '"><p></p><img src="' + arrowImg + '" /></div>');
             $("body").append($toolTipContainer);	     
 
       return this.each(function(){
 
        
         var $this = $(this),
             data = $this.data("tooltip"),
             tooltipText = $this.attr("title");
            
         
         // If the plugin hasn't been initialized yet
         if ( ! data ) {
        
           $this.data("tooltip", {
               target : $this,
               tooltipText : tooltipText	    
           }).removeAttr("title")
           .bind("mouseenter.chanelTooltip",methods.show)
           .bind("mouseleave.chanelTooltip",methods.hide)
	   .bind("click.chanelTooltip",methods.hide);
	
     
         }
       });
     },
     destroy : function( ) {

       return this.each(function(){

         var $this = $(this),
             data = $this.data('tooltip');

         // Namespacing FTW
         $(this).unbind('.chanelTooltip');        
         data = $this.removeData('tooltip');	 

       })

     },
     reposition : function(e) {		     
	 $container = $("#" + settings.containerId);
         $container.css("top", e.pageY-$container.height()-5).css("left", e.pageX-($container.width()/2));
        },
     show : function(e) {
	 if (!blocked) { 
           $(document.body).bind('mousemove.chanelTooltip', methods.reposition);
           var titleText = $(this).chanelTooltip('getTooltipText');   
	   $container = $("#" + settings.containerId);
           $container.children("p").text(titleText).parent().fadeIn().css("top", e.pageY-$container.height()-5).css("left", e.pageX-($container.width()/2));  
       }
     },
     hide : function( ) {
	 $container =  $("#" + settings.containerId);	
	 $container.stop(true,true).hide();	     	  
      $(document.body).unbind('mousemove.chanelTooltip', methods.reposition);
       },
     getTooltipText : function () {
         return $(this).data("tooltip").tooltipText;
     }
  };

  $.fn.chanelTooltip = function(method) {
    
    if ( methods[method] ) {
      return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    
  
  }; 
 

})(jQuery);  

(function($){
   
	
    //var currentShade;
    var settings = {};
    
    var methods = {
	init: function (options)
	{
	    settings = {
			    topContainerSelector : ".inlineShadeSelector",
			    limitedClass : "limitedEdition",
			    nextShadeSelector : ".nextShade",
			    prevShadeSelector : ".prevShade",
			    shadeValidationClass : "shadeValidation",			
			    scrollerDragMaxHeight : 20,
			    shadeContainerSelector: ".inlineShadeContainer",
			    selectedShadeClass : "on"			    
			}
				
		               
		if ( options ) { 
	    $.extend( settings, options );
	    }
	      return this.each(function(){
	
	    var $this = $(this);
	      
	    $("select.colors",$this.next()).each(function() {		  
		  var selectorParams = {};
		    selectorParams.truncateDisplay = 17;
		    selectorParams.maxHeight = 100;	
		    selectorParams.openCallback = function() {$("."+settings.shadeValidationClass).hide();this.self.select.data("shadeSelector").listChange = true;}
		    selectorParams.changeCallback = function() {			
			var i = this.self.getSelectedIndex();
			var sku = this.self.opts[i].value;
			if (this.self.select.data("shadeSelector").listChange) {						
			$("#sku-" + sku,this.self.select.parents("form")).click();						
			this.self.select.data("shadeSelector").listChange = false;
			}
		    }
			$(this).data("shadeSelector",{selector: new $.CustomSelect($(this),selectorParams), listChange : false});
			
	    });		
		    var $shadeContainer = $(settings.topContainerSelector,$this).data("inlineShadeSelector",
		{limited : false,
		    currentShade : null});
		    
		    $shadeList = $shadeContainer.find("ul")
		    if ($shadeList.hasClass("multishades")) {
			$swatchesPerSku = $shadeContainer.find("a").eq(0).find("span").length;
			$shadeList.removeClass("multishades").addClass("multishades-" + $swatchesPerSku);		
		    }
			$(settings.topContainerSelector,$this).each(function(){			  
			       configureScroll($(this));			  
			});			
			$shadeContainer.css("visibility","visible");
			
			var $shadeLinks = $shadeContainer.find("a");		
			$shadeLinks.chanelTooltip().click(function(e){ 
			    getShade(this,e)	});
			
		    var $shadeDetailContainer = $shadeContainer.parent().next();
		    var $shadeDetailClose = $shadeDetailContainer.children(":first").children("a");		   
			$shadeDetailClose.click(function() {				
				$shadeDetailContainer.hide();				
				$shadeContainer.parent().show(); 
				
			});
			$(settings.prevShadeSelector,$this).click(function() {		
				getPrevShade(this).click();				
			});		
			$(settings.nextShadeSelector,$this).click(function() {		
				getNextShade(this).click();				
			});
			var $allShades = $shadeContainer.parent().prev().children(":first");
			var $limitedShades = $allShades.next();
			$allShades.click(function() {
				$(this).removeClass("inactive");				
				$limitedShades.addClass("inactive");				
				$("li",$shadeContainer).show();  
				$shadeContainer.data("inlineShadeSelector").limited = false;				                                         
				$shadeDetailClose.click();				
				configureScroll(this);
			});

			$limitedShades.click(function() {
				$(this).removeClass("inactive");				
				$allShades.addClass("inactive");						
				$("a",$shadeContainer).not("."+settings.limitedClass).parent().hide();
				$shadeContainer.data("inlineShadeSelector").limited = true;								
				$shadeDetailClose.click();				
				configureScroll(this);
			});
			
			if ($("."+settings.selectedShadeClass,$shadeContainer).length > 0)
			{
				$("."+settings.selectedShadeClass,$shadeContainer)[0].click();			    
			}
			
	      });

	}
	
    }
    
	$.fn.InlineShadeSelector = function(method) {
	        	
		    if ( methods[method] ) {
		      return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
		    } else if ( typeof method === 'object' || ! method ) {
		      return methods.init.apply( this, arguments );
		    } else {
		      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
		    }    


		
		}		
		
	
	
	
	function getShade(current, e) {
			e.preventDefault();
			var $shadeParent = $(current).parents(settings.shadeContainerSelector)
			var $shadeContainer = $(settings.topContainerSelector,$shadeParent);
			$shadeContainer.find("a").removeClass(settings.selectedShadeClass);			
			$this = $(current);
			$this.addClass(settings.selectedShadeClass);			
			$(".featured img",$shadeParent).attr("src",$this.attr("href"));			
			$(".tagline",$shadeParent).text($this.chanelTooltip("getTooltipText"));		
			$("."+settings.shadeValidationClass).hide()											
			$shadeContainer.data("inlineShadeSelector").currentShade = current.id;
			var extractedSku = $this.extractSkuFromId();			
			$(".sku",$shadeParent.parents("form")).text(extractedSku);
			$("select.colors",$shadeParent).val(extractedSku);
			
				var $next = getNextShade(current);		
				if ($next){
					toggleVisibility($(".rightShade," + settings.nextShadeSelector,$shadeParent),true);					
					toggleVisibility($(".nextShadeMuted",$shadeParent),false);					
					$(".rightShade img",$shadeParent).attr("src",$next.attr("href"));					
				}
				else
				{
					toggleVisibility($(".rightShade," + settings.nextShadeSelector,$shadeParent),false);					
					toggleVisibility($(".nextShadeMuted",$shadeParent),true);					
				}

				var $prev = getPrevShade(current);
				if ($prev){
					toggleVisibility($(".leftShade," + settings.prevShadeSelector,$shadeParent),true);					
					toggleVisibility($(".prevShadeMuted",$shadeParent),false);
					$(".leftShade img",$shadeParent).attr("src",$prev.attr("href"));					
				}
				else
				{
					toggleVisibility($(".leftShade," +  settings.prevShadeSelector,$shadeParent),false);					
					toggleVisibility($(".prevShadeMuted",$shadeParent),true);					
				}
				
				if($this.hasClass(settings.limitedClass)){
						$("div.minor").addClass(settings.limitedClass);
					}		
				else
				{
					$("div.minor").removeClass(settings.limitedClass);	
				}
				var cs = $("select.colors",$shadeParent.next()).data("shadeSelector").selector;
				if (cs) {					
					cs.jumpToValue(extractedSku);					
					cs.clickOption();
				}
				
			
			    $shadeContainer.parent().hide();					
			$(".shadeDetail",$shadeParent).show();
	}	    
				
	function getPrevShade(child)
	{
		var $first;
		var $shadeParent;
		if (typeof(child) == "undefined"){
		    $shadeParent = $(this).parents(settings.shadeContainerSelector);
		}
		else
		    {
		 $shadeParent = $(child).parents(settings.shadeContainerSelector);
		}
		var $shadeContainer = $(settings.topContainerSelector,$shadeParent);
		var limited = $shadeContainer.data("inlineShadeSelector").limited;
		if (limited) {
			$first = $shadeContainer.find("a.limitedEdition:first");
		}
		else
		{
			$first = $shadeContainer.find("a:first");
		}
			var current = $shadeContainer.data("inlineShadeSelector").currentShade;	
		
		if (limited){
			if (current == $first.attr("id"))
			{
				return false;
			}	
			else
			{		
				var result = false;
				var $limited = $shadeContainer.find("a.limitedEdition");
				$limited.each(function(index) {
					if (this.id == current) {										
						result = $($limited[index-1]);
						return false;																	
					}
				});				
				return result;					
			} 
		}	
		else
		{
			if (current == $first.attr("id"))
			{
				return false;
			}
			else
			{
				return $("#" + current, $shadeParent).parent().prev().children("a");
			}	
		}       


		}

	function getNextShade(child)
	{	
		var $last;
		var $shadeParent;
		if (typeof(child) == "undefined"){
		    $shadeParent = $(this).parents(settings.shadeContainerSelector);
		}
		else
		{
		    $shadeParent = $(child).parents(settings.shadeContainerSelector);
		}
		var $shadeContainer = $(settings.topContainerSelector,$shadeParent);
		var limited = $shadeContainer.data("inlineShadeSelector").limited;
		if (limited) {
			$last = $shadeContainer.find("a.limitedEdition:last");
		}
		else
		{
			$last = $shadeContainer.find("a:last");
		}
		var current = $shadeContainer.data("inlineShadeSelector").currentShade;		
		if (limited){
			if (current == $last.attr("id"))
			{
				return false;
			}	
			else
			{		
				var result = false;
				var $limited = $shadeContainer.find("a.limitedEdition");
				$limited.each(function(index) {
					if (this.id == current) {										
						result = $($limited[index+1]);
						return false;																	
					}
				});						
				return result;					
			} 
		}	
		else
		{
			if (current == $last.attr("id"))
			{
				return false;
			}
			else
			{
				return $("#" + current,$shadeParent).parent().next().children("a");
			}	
		}

	}	
	
	function configureScroll(current) {
		var $shadeContainer;
	    	if (typeof(current) == "undefined" ) {
			$shadeContainer = $(settings.topContainerSelector);	
		}
		else
		    {
			var $shadeParent = $(current).parents(settings.shadeContainerSelector)
		      $shadeContainer = $(settings.topContainerSelector,$shadeParent);
		    }
	  	   		
		    $shadeContainer.jScrollPane({dragMaxHeight: settings.scrollerDragMaxHeight});		   
	}
	
	function toggleVisibility(selector, show){
	    //ie has an issue with not obeying display:none;
		if (show){
		    selector.show().css("visibility","visible");		    
		}
		else
		{
		    selector.hide().css("visibility","hidden");
		}
	    }


})
(jQuery);
