/*
 * Monotaro Global Library
 */

if (typeof window.console != 'object') {
	var console = {};
	console.log = function(obj){ };
}

(function ($) {
    var name_space = 'monotaro';

    var klass = {
        image_proxy_api : 'http://image-monotaro.appspot.com/api/imgproxy/',
        image_server_mode : true,
        page_id: '',
        page_classes: [],
        page_type : 0,
        page_name : '',
        page_data : {},
        url_params : {},
        debug_log : false,
        DEFINE: {
            PAGE_TYPE_CATEGORY: 1,
            PAGE_TYPE_PRODUCT: 2,
            PAGE_TYPE_ITEM: 3,
            PAGE_TYPE_TOP: 4,
            PAGE_TYPE_MALL: 5,
            PAGE_TYPE_SEARCH: 6,
            PAGE_TYPE_MYPAGE: 7,
            PAGE_TYPE_BASKET: 8,
            PAGE_TYPE_ORDERFINISH: 9,
            PAGE_TYPE_VIEW_HISTORY: 10,
            PAGE_TYPE_FEATURE: 11,
            PAGE_TYPE_REGISTFINISH: 12,
            PAGE_TYPE_PRODUCT2: 13,
            PAGE_TYPE_REGIST: 14,
            PAGE_TYPE_LOGIN: 15
        }
    };

    // SSLでアクセスされている場合は、URLをhttps://に切り替える
    klass.replace_ssl_url = function(url) {
        var protocol_ssl = (document.location.protocol == 'https:');
        if (protocol_ssl) {
            url = url.replace('http://', 'https://');
        }
        return url;
    };

    // 会員登録済みかのチェック（一度でもログインしたことがあるユーザー）
    klass.registed = function() {
        var cookie_utmv = klass.cookie("__utmv");
        if (cookie_utmv && typeof cookie_utmv == 'string' && cookie_utmv.indexOf('1=registed=1=1') >= 0) {
            return true;
        }
        return false;
    };

    // ログイン中かのチェック
    klass.logined = function() {
        var cookie_a = klass.cookie("a");
        var cookie_b = klass.cookie("b");
        if (cookie_a && cookie_b) {
            return true;
        }
        return false;
    };

    // 画像キャッシュURLを返す
    klass.image_proxy_url = function(url) {
        var api_url = klass.replace_ssl_url(klass.image_proxy_api);
        return api_url + '?u=' + encodeURIComponent(url);
    };

    // 画像専用サーバーのURLを返す
    klass.image_url = function(url) {
        if (!klass.image_server_mode) {
            return klass.image_proxy_url(url);
        }
        //url = url.replace('www.monotaro.com', 'image.monotaro.com');
        url = url.replace('www.monotaro.com', 'dkgwnc2vqw698.cloudfront.net');
        return klass.replace_ssl_url(url);
    };

    // 通貨文字列
    klass.price_str = function(price) {
        return price.replace(/(\d{1,3})(?=(\d{3})+(?!\d))/g, "$1,");
    };

    // 日付＞文字列変換（format=yyyy/MM/dd HH:mm:ss)
    klass.date_format = function(date, format) {
        var fmt = new DateFormat(format);
        return fmt.format(date);
    };

    // 文字列＞日付変換（format=yyyy/MM/dd HH:mm:ss)
    klass.date_parse = function(date_str, format) {
        var fmt = new DateFormat(format);
        return fmt.parse(date_str);
    };

    // 日付＞曜日文字列
    klass.week_str = function(date) {
        var w = date.getDay();
        var week_name = ['日', '月', '火', '水', '木', '金', '土'];
        return week_name[w];
    };

    // リキッドデザインが適用済みかチェックする
    klass.liquid = function() {
    	return ($('#layout_contents').length > 0);
    };

    // Google Analytics イベントトラッキング
    klass.track_event = function(category, action, label, value) {
        if (value == undefined) {
            value = 1;
        }
        try {
        	_gaq.push(['_trackEvent', category, action, label, value]);
            var label_array = label.split('|');
            if (label_array.length == 3) {
                // 商品コード付のトラッキングは、商品コードなしのコードも送信する
                var slabel = label_array[0] + '|' + label_array[1];
                _gaq.push(['_trackEvent', category, action, slabel, value]);
            }
        } catch(e) {
        }
    };

    // デバッグログ
    klass.debug = function(obj) {
        if (klass.debug_log) {
            console.log(obj);
        }
    };

    // sid（セッションID)の日付部分を取得
    klass.get_sid_date = function() {
        var sid = readCookie('sid');
        var siddate = '';
        if (sid.length >= 48) {
            siddate = sid.substr(40, 8);
        }
        return siddate;
    };

    // URLパラメータの文字列を連想配列にする
    klass.get_parameter = function(str){
        var par = {};
        if (!str) {
            return par;
        }
        str = str.split('&');
        for(var i=0; i<str.length; i++){
            var itm = str[i].split("=");
            if (itm[0] != ''){
                if (itm[1]) {
                    par[itm[0]] = itm[1];
                } else {
                    par[itm[0]] = true;
                }
            }
        }
        return par;
    };

    // 商品ページの商品名を取得
    klass.get_product_name = function(){
        var product_name = '';
        switch(klass.page_type) {
            case klass.DEFINE.PAGE_TYPE_PRODUCT:
            case klass.DEFINE.PAGE_TYPE_PRODUCT2:
                product_name = $('.pd_product_name').text();
                break;

            case klass.DEFINE.PAGE_TYPE_ITEM:
                product_name = $('.itd_prodname a').text();
                break;
        }
        return jQuery.trim(product_name);
    };

    // レコメンドのフィードバック送信
    klass.recommend_feedback = function(feedbackType, productCode, callback) {
        // feedbackType = 0 # 興味がない
        // feedbackType = 1 # いいね

        var customerCode = klass.customer_code();
        var gsid = klass.getGSID();
        if (!customerCode && !gsid) {
            return;
        }
        // トラッキング送信
        var params = {
            'productCode': productCode,
            'feedbackType': feedbackType,
            'gsid': gsid,
            'customerCode': customerCode
        };
        var api_url = klass.replace_ssl_url('http://api-monotaro.appspot.com/api/recommend2/feedback/');
        klass.ajax(api_url, params, callback);
    };

    // 商品ページのURLを取得
    klass.get_product_url = function(){
        var product_url = '';
        switch(klass.page_type) {
            case klass.DEFINE.PAGE_TYPE_PRODUCT:
            case klass.DEFINE.PAGE_TYPE_PRODUCT2:
                var product_code = klass.code_repaer(klass.page_data['productCode']);
                product_url = 'http://www.monotaro.com/g/'+product_code+'/';
                break;

            case klass.DEFINE.PAGE_TYPE_ITEM:
                var monotaro_no = klass.page_data['monotaroNo'];
                monotaro_no = klass.code_repaer(monotaro_no);
                product_url = 'http://www.monotaro.com/p/'+monotaro_no.substr(0, 4)+'/'+monotaro_no.substr(4)+'/';
                break;
        }
        return product_url;
    };

    // コードを8桁のゼロパディングする
    klass.code_repaer = function(code){
        return ("00000000" + code).slice(-8);
    };

    // ページタイプのチェック
    klass.page_type_check = function(url) {

        // URLパラメータの解析
        var r = url.match(/\?(.*)$/i);
        if (r) {
            var url_param_str = r[1];
            klass.url_params = klass.get_parameter(url_param_str);
        }
        var url = url.replace(/\?(.*)$/i, '');
        url = url.replace(/\#(.*)$/i, '');

        var r = url.match(/^https?:\/\/([^\/]*)\/monotaroMain\.py/i);
        if (r) {
            // 検索ページ
            if (klass.url_params['func'] == 'monotaro.search.product.showListServlet.ShowListServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_SEARCH;
                klass.page_name = 'SEARCH';
                klass.page_data['keyword'] = klass.url_params['keywords'];
                return;
            }
            // マイページ
            if (klass.url_params['func'] == 'monotaro.myPage.buyHistory.showListServlet.ShowListServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_MYPAGE;
                klass.page_name = 'MYPAGE';
                return;
            }
            // バスケット
            if (klass.url_params['func'] == 'monotaro.basket.showListServlet.ShowListServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_BASKET;
                klass.page_name = 'BASKET';
                return;
            }
            // 最近見た商品
            if (klass.url_params['func'] == 'monotaro.myPage.recentViewHistory.showListServlet.ShowListServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_VIEW_HISTORY;
                klass.page_name = 'VIEW_HISTORY';
                return;
            }
            // 商品グループページ
            if (klass.url_params['func'] == 'monotaro.product.product.showReadServlet.ShowReadServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_PRODUCT;
                klass.page_name = 'PRODUCT';
                klass.page_data['productCode'] = klass.url_params['productCode'];
                klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
                return;
            }
            // 商品グループページ（特集系）
            if (klass.url_params['func'] == 'monotaro.featurePage.showDetailServlet.ShowDetailServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_PRODUCT;
                klass.page_name = 'PRODUCT';
                klass.page_data['productCode'] = klass.url_params['productCode'];
                klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
                return;
            }
            // 商品詳細ページ
            if (klass.url_params['func'] == 'monotaro.product.item.showDetailServlet.ShowDetailServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_ITEM;
                klass.page_name = 'ITEM';
                klass.page_data['monotaroNo'] = klass.url_params['monotaroNo'];
                klass.page_data['monotaroNo'] = klass.code_repaer(klass.page_data['monotaroNo'])
                $(function(){
                    // グループコードの取得
                    klass.page_data['productCode'] = klass.item_page_product_code();
                    klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
                });
                return;
            }
            // 会員登録ページ
            if (klass.url_params['func'] == 'monotaro.regist.regist.showInitEditServlet.ShowInitEditServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_REGIST;
                klass.page_name = 'REGIST';
                return;
            }
            // ログインページ
            if (klass.url_params['func'] == 'monotaro.loginForm.showFormServlet.ShowFormServlet') {
                klass.page_type = klass.DEFINE.PAGE_TYPE_LOGIN;
                klass.page_name = 'LOGIN';
                return;
            }
            $(function(){
                // 注文完了ページ
                var finish_navi_img = $('.main .navi img').attr('src');
                if (finish_navi_img == '/common/img/navi_04.gif') {
                    klass.page_type = klass.DEFINE.PAGE_TYPE_ORDERFINISH;
                    klass.page_name = 'ORDERFINISH';
                    return;
                }
                // バスケット
                var basket_next_btn_img = $('p.bs_btn_next a img').attr('src');
                if (basket_next_btn_img == '/img/BktPrint/btn_next.gif') {
                    klass.page_type = klass.DEFINE.PAGE_TYPE_BASKET;
                    klass.page_name = 'BASKET';
                    return;
                }
                // マイページ
                var mypage_tab_text = $('table.bh_tab td.bh_tab_buyitem span.bh_tab_buyitem').text();
                if (mypage_tab_text) {
                    klass.page_type = klass.DEFINE.PAGE_TYPE_MYPAGE;
                    klass.page_name = 'MYPAGE';
                    return;
                }
                // 会員登録完了
                if ($('td.reg_result_head img').attr('alt') == 'ユーザー登録完了') {
                    if (window['_customer_id']) {
                        klass.page_type = klass.DEFINE.PAGE_TYPE_REGISTFINISH;
                        klass.page_name = 'REGISTFINISH';
                        klass.page_data['customerCode'] = window['_customer_id'];
                    }
                }
            });
        }
        // 商品グループページ
        var r = url.match(/^https?:\/\/([^\/]*)\/g\/([0-9]*)/i);
        if (r) {
            klass.page_type = klass.DEFINE.PAGE_TYPE_PRODUCT;
            klass.page_name = 'PRODUCT';
            klass.page_data['productCode'] = r[2];
            klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
            return;
        }
        // 商品グループページ(yourmego)
        var r = url.match(/^https?:\/\/([^\/]*)\/sc\/1a\//i);
        if (r) {
            var rpage_val = $("input[name='RtnPage']").val();
            if (rpage_val) {
                var r2 = rpage_val.match(/\/g\/([0-9]*)/i);
                if (r2) {
                    klass.page_type = klass.DEFINE.PAGE_TYPE_PRODUCT2;
                    klass.page_name = 'PRODUCT2';
                    klass.page_data['productCode'] = r2[1];
                    klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
                }
            }
            return;
        }
        // 商品詳細ページ
        var r = url.match(/^https?:\/\/([^\/]*)\/p\/([0-9]*)\/([0-9]*)/i);
        if (r) {
            klass.page_type = klass.DEFINE.PAGE_TYPE_ITEM;
            klass.page_name = 'ITEM';
            klass.page_data['monotaroNo'] = r[2]+r[3];
            $(function(){
                // グループコードの取得
                klass.page_data['productCode'] = klass.item_page_product_code();
                klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
            });
            return;
        }
        // カテゴリページ
        var r = url.match(/^https?:\/\/([^\/]*)\/c\/([0-9]*)\/([0-9]*)/i);
        if (r) {
            klass.page_type = klass.DEFINE.PAGE_TYPE_CATEGORY;
            klass.page_name = 'CATEGORY';
            klass.page_data['categoryCode'] = r[2]+r[3];
            return;
        }
        // 特集ページ
        var r = url.match(/^https?:\/\/([^\/]*)\/news\/feature\/([0-9]*)/i);
        if (r) {
            klass.page_type = klass.DEFINE.PAGE_TYPE_FEATURE;
            klass.page_name = 'FEATURE';
            klass.page_data['featureCode'] = r[2];
            return;
        }
        // モールページ
        var r = url.match(/^https?:\/\/([^\/]*)\/(safety|tools|fa|car|kouji)\//i);
        if (r) {
            klass.page_type = klass.DEFINE.PAGE_TYPE_MALL;
            klass.page_name = 'MALL';
            klass.page_data['mallCode'] = r[2];
            klass.page_data['siteId'] = klass.get_site_id(r[2]);
            return;
        }
        // トップページ
        var r = url.match(/^https?:\/\/([^\/]*)\/$/i);
        if (r) {
            klass.page_type = klass.DEFINE.PAGE_TYPE_TOP;
            klass.page_name = 'TOP';
            return;
        }

        // リキッド化以降はCSSシグネチャーでページ判定をする
        $(function(){
            var body = $('body');
            var page_id = body.get(0).id;
            klass.page_id = page_id;
            if (page_id) {
                var body_class = body.attr('class');
                var page_classes = [];
                var page_code = '';
                if (body_class) {
                    page_classes = body_class.split(' ');
                    for (var i=0; i<page_classes.length; i++) {
                        var j = page_classes[i].indexOf(page_id);
                        if (j == 0) {
                            page_code = page_classes[i].substr(page_id.length+1);
                            $("*[page_id='"+page_id+"'][page_code='"+page_code+"']").addClass('active');
                            break;
                        }
                    }
                }
                klass.page_classes = page_classes;
                switch(page_id) {
                case 'page_category':
                    // カテゴリページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_CATEGORY;
                    klass.page_data['categoryCode'] = page_code;
                    break;

                case 'page_search':
                    // 検索ページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_SEARCH;
                    klass.page_data['keyword'] = klass.url_params['keywords'];
                    break;

                case 'page_product':
                    // 商品グループページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_PRODUCT;
                    klass.page_data['productCode'] = page_code;
                    klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
                    break;

                case 'page_item':
                    // 商品詳細ページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_ITEM;
                    klass.page_data['monotaroNo'] = page_code;
                    klass.page_data['monotaroNo'] = klass.code_repaer(klass.page_data['monotaroNo'])
                    var chk_name = 'page_product';
                    for (var i=0; i<page_classes.length; i++) {
                        var j = page_classes[i].indexOf(chk_name);
                        if (j == 0) {
                            klass.page_data['productCode'] = page_classes[i].substr(chk_name.length+1);
                            klass.page_data['productCode'] = klass.code_repaer(klass.page_data['productCode'])
                            break;
                        }
                    }
                    break;

                case 'page_basket':
                    // バスケットページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_BASKET;
                    break;

                case 'page_mypage':
                    // マイページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_MYPAGE;
                    break;

                case 'page_feature':
                    // 特集ページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_FEATURE;
                    klass.page_data['featureCode'] = page_code;
                    break;

                case 'page_mall':
                    // モールトップ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_MALL;
                    klass.page_name = 'MALL';
                    klass.page_data['mallCode'] = page_code;
                    klass.page_data['siteId'] = klass.get_site_id(page_code);
                    break;

                case 'page_top':
                    // トップページ
                    klass.page_type = klass.DEFINE.PAGE_TYPE_TOP;
                    klass.page_name = 'TOP';
                    break;

                case 'page_checkout_finish':
                    // 注文完了
                    klass.page_type = klass.DEFINE.PAGE_TYPE_ORDERFINISH;
                    klass.page_name = 'ORDERFINISH';
                    break;

                case 'page_registration_finish':
                    // 登録完了
                    klass.page_type = klass.DEFINE.PAGE_TYPE_REGISTFINISH;
                    klass.page_name = 'REGISTFINISH';
                    break;

                }
            }
        });

    };

    // モールコードからsiteIdを求める
    klass.get_site_id = function(mallCode) {
        switch(mallCode) {
            case 'safety':
                return 1;
            case 'tools':
                return 2;
            case 'fa':
                return 3;
            case 'car':
                return 4;
            case 'kouji':
                return 5;
        }
        return 0;
    };

    // 商品詳細ページで商品グループコードを取得する
    klass.item_page_product_code = function() {
        var url = $('h3.itd_prodname a').attr('href');
        if (url) {
            var r = url.match(/^\/g\/([^\/]*)\//i);
            if (r) {
                return r[1];
            }
        }
        return false;
    };

    // ログイン中の顧客コードの取得
    klass.customer_code = function() {
        if (window['_var1']) {
            return _var1;
        }
        return false;
    };

    // ログイン中のユーザー業種コードの取得
    // Construction=工事業
    // Manufacture=製造業
    // Car=自動車関連業
    // Other=その他
    klass.customer_industry = function() {
        if (window['_var2']) {
            return _var2;
        }
        return false;
    };

    // GAE用セッションIDの取得
    klass.getGSID = function() {
        var gsid = klass.cookie('gsid');
        if (!gsid) {
            return '';
        }
        return gsid;
    };

    // GAE用セッションIDの生成
    klass.createGSID = function() {
        var gsid = klass.getGSID();
        if (!gsid) {
            var api_url = klass.replace_ssl_url('http://api-monotaro.appspot.com/api/recommend/session/');
            klass.ajax(api_url, {}, function(result){
                console.log(result);
                if (result.result == 1) {
                    var date = new Date();
                    date.setTime(date.getTime() + (100 * 365 * 24 * 60 * 60 * 1000)); // 100年
                    klass.cookie('gsid', result.gsid, { path: '/', expires: date });
                }
            });
        }
    };

    // Ajax通信
    klass.ajax = function(request_url, params, callback, failback) {
        var data_type = 'jsonp';
        request_url += '?'+$.param(params);
        $.monotaro.debug(request_url);
        $.ajax({
            url: request_url,
            dataType: data_type,
            scriptCharset: 'UTF-8',
            jsonp : "callback",
            success: function(result) {
                $.monotaro.debug(result);
                if (result.Error || result.error) {
                    if (failback) {
                        failback(result);
                    }
                    return;
                }
                if (callback) {
                    callback(result);
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $.monotaro.debug('gadget request: error!! '+ request_url + '=' + textStatus);
                if (failback) {
                    failback({
                        "Error": {
                            "Message": 'ajax error'
                        }
                    });
                }
            }
        });
    };

    // jquery.cookie.js
    klass.cookie = function(name, value, options) {
        if (typeof value != 'undefined') { // name and value given, set cookie
            options = options || {};
            if (value === null) {
                value = '';
                options.expires = -1;
            }
            var expires = '';
            if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
                var date;
                if (typeof options.expires == 'number') {
                    date = new Date();
                    date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                } else {
                    date = options.expires;
                }
                expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
            }
            // CAUTION: Needed to parenthesize options.path and options.domain
            // in the following expressions, otherwise they evaluate to undefined
            // in the packed version for some reason...
            var path = options.path ? '; path=' + (options.path) : '';
            var domain = options.domain ? '; domain=' + (options.domain) : '';
            var secure = options.secure ? '; secure' : '';
            document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
        } else { // only name given, get cookie
            var cookieValue = null;
            if (document.cookie && document.cookie != '') {
                var cookies = document.cookie.split(';');
                for (var i = 0; i < cookies.length; i++) {
                    var cookie = jQuery.trim(cookies[i]);
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) == (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }
    };

    // トラッキングリンクの準備
    klass.tracking_link = function(el) {
        if (!el) {
            el = $('body');
        }
        $('.trackinglink', el).click(function(){
            var tracking_label = $(this).attr('tracking_label');
            if (!tracking_label) {
                tracking_label = '';
            }
            var tracking_code = $(this).attr('tracking_code');
            if (tracking_code) {
                //urchinTracker('/virtual/'+tracking_code);
                $.monotaro.track_event(tracking_code, 'click', tracking_label);
            }
        });
    }

    new function () {
        // 初期処理
        if (location.href.match(/jsdebug=1/)) {
            klass.debug_log = true;
        }
        klass.page_type_check(location.href);
        klass.debug('page=' + klass.page_type);
        klass.debug(klass.page_data);
        klass.tracking_link();

        // 起動時処理
        $(function(){
            // グローバルナビのマウスオーバークラス(IE対策)
            $('#global_navi li.global_navi_menu').hover(function(){
                $('select').css({'visibility':'hidden'});
                $('#categoryCode').css({'visibility':'visible'});
                $(this).addClass('navi_hover');
            }, function(){
                $(this).removeClass('navi_hover');
                $('select').css({'visibility':'visible'});
            });
        });
    };
    $[name_space] = klass;



/*
--------------------------------------------------------
dateformat.js - Simple date formatter
Version 1.1 (Update 2008/04/02)

Copyright (c) 2007-2008 onozaty (http://www.enjoyxstudy.com)

Released under an MIT-style license.

For details, see the web site:
 http://www.enjoyxstudy.com/javascript/dateformat/

--------------------------------------------------------
patterns
y : Year         ex. "yyyy" -> "2007", "yy" -> "07"
M : Month        ex. "MM" -> "05" "12", "M" -> "5" "12"
d : Day          ex. "dd" -> "09" "30", "d" -> "9" "30"
H : Hour (0-23)  ex. "HH" -> "00" "23", "H" -> "0" "23"
m : Minute       ex. "mm" -> "01" "59", "m" -> "1" "59"
s : Second       ex. "ss" -> "00" "59", "H" -> "0" "59"
S : Millisecond  ex. "SSS" -> "000" "012" "999",
                     "SS" -> "00" "12" "999", "S" -> "0" "12" "999"

Text can be quoted using single quotes (') to avoid interpretation.
"''" represents a single quote.


Useing..

 var fmt = new DateFormat("yyyy/MM/dd HH:mm:ss SSS");

 var str = fmt.format(new Date()); // "2007/05/10 12:21:19 002"
 var date = fmt.parse("2007/05/10 12:21:19 002"); // return Date object

--------------------------------------------------------
*/

var DateFormat = function(pattern) {
  this._init(pattern);
};

DateFormat.prototype = {
  _init: function(pattern) {

    this.pattern = pattern;
    this._patterns = [];

    for (var i = 0; i < pattern.length; i++) {
      var ch = pattern.charAt(i);
      if (this._patterns.length == 0) {
        this._patterns[0] = ch;
      } else {
        var index = this._patterns.length - 1;
        if (this._patterns[index].charAt(0) == "'") {
          if (this._patterns[index].length == 1
             || this._patterns[index].charAt(this._patterns[index].length - 1) != "'") {
            this._patterns[index] += ch;
          } else {
            this._patterns[index + 1] = ch;
          }
        } else if (this._patterns[index].charAt(0) == ch) {
          this._patterns[index] += ch;
        } else {
          this._patterns[index + 1] = ch;
        }
      }
    }
  },

  format: function(date) {

    var result = [];
    for (var i = 0; i < this._patterns.length; i++) {
      result[i] = this._formatWord(date, this._patterns[i]);
    }
    return result.join('');
  },
  _formatWord: function(date, pattern) {

    var formatter = this._formatter[pattern.charAt(0)];
    if (formatter) {
      return formatter.apply(this, [date, pattern]);
    } else {
      return pattern;
    }
  },
  _formatter: {
    "y": function(date, pattern) {
      // Year
      var year = String(date.getFullYear());
      if (pattern.length <= 2) {
        year = year.substring(2, 4);
      } else {
        year = this._zeroPadding(year, pattern.length);
      }
      return year;
    },
    "M": function(date, pattern) {
      // Month in year
      return this._zeroPadding(String(date.getMonth() + 1), pattern.length);
    },
    "d": function(date, pattern) {
      // Day in month
      return this._zeroPadding(String(date.getDate()), pattern.length);
    },
    "H": function(date, pattern) {
      // Hour in day (0-23)
      return this._zeroPadding(String(date.getHours()), pattern.length);
    },
    "m": function(date, pattern) {
      // Minute in hour
      return this._zeroPadding(String(date.getMinutes()), pattern.length);
    },
    "s": function(date, pattern) {
      // Second in minute
      return this._zeroPadding(String(date.getSeconds()), pattern.length);
    },
    "S": function(date, pattern) {
      // Millisecond
      return this._zeroPadding(String(date.getMilliseconds()), pattern.length);
    },
    "'": function(date, pattern) {
      // escape
      if (pattern == "''") {
        return "'";
      } else {
        return pattern.replace(/'/g, '');
      }
    }
  },

  _zeroPadding: function(str, length) {
    if (str.length >= length) {
      return str;
    }

    return new Array(length - str.length + 1).join("0") + str;
  },


  /// Parser ///
  parse: function(text) {

    if (typeof text != 'string' || text == '') return null;

    var result = {year: 1970, month: 1, day: 1, hour: 0, min: 0, sec: 0, msec: 0};

    for (var i = 0; i < this._patterns.length; i++) {
       if (text == '') return null; // parse error!!
       text = this._parseWord(text, this._patterns[i], result);
       if (text === null) return null; // parse error!!
    }
    if (text != '') return null; // parse error!!

    return new Date(
                result.year,
                result.month - 1,
                result.day,
                result.hour,
                result.min,
                result.sec,
                result.msec);
  },
  _parseWord: function(text, pattern, result) {

    var parser = this._parser[pattern.charAt(0)];
    if (parser) {
      return parser.apply(this, [text, pattern, result]);
    } else {
      if (text.indexOf(pattern) != 0) {
        return null;
      } else {
        return text.substring(pattern.length);
      }
    }
  },
  _parser: {
    "y": function(text, pattern, result) {
      // Year
      var year;
      if (pattern.length <= 2) {
        year = text.substring(0, 2);
        year = year < 70 ? '20' + year : '19' + year;
        text = text.substring(2);
      } else {
        var length = (pattern.length == 3) ? 4 : pattern.length;
        year = text.substring(0, length);
        text = text.substring(length);
      }
      if (!this._isNumber(year)) return null; // error
      result.year = parseInt(year, 10);
      return text;
    },
    "M": function(text, pattern, result) {
      // Month in year
      var month;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/1[0-2]/) != null) {
        month = text.substring(0, 2);
        text  = text.substring(2);
      } else {
        month = text.substring(0, pattern.length);
        text  = text.substring(pattern.length);
      }
      if (!this._isNumber(month)) return null; // error
      result.month = parseInt(month, 10);
      return text;
    },
    "d": function(text, pattern, result) {
      // Day in month
      var day;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/1[0-9]|2[0-9]|3[0-1]/) != null) {
        day  = text.substring(0, 2);
        text = text.substring(2);
      } else {
        day  = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(day)) return null; // error
      result.day = parseInt(day, 10);
      return text;
    },
    "H": function(text, pattern, result) {
      // Hour in day (0-23)
      var hour;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/1[0-9]|2[0-3]/) != null) {
        hour = text.substring(0, 2);
        text = text.substring(2);
      } else {
        hour = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(hour)) return null; // error
      result.hour = parseInt(hour, 10);
      return text;
    },
    "m": function(text, pattern, result) {
      // Minute in hour
      var min;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/[1-5][0-9]/) != null) {
        min  = text.substring(0, 2);
        text = text.substring(2);
      } else {
        min  = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(min)) return null; // error
      result.min = parseInt(min, 10);
      return text;
    },
    "s": function(text, pattern, result) {
      // Second in minute
      var sec;
      if (pattern.length == 1 && text.length > 1
          && text.substring(0, 2).match(/[1-5][0-9]/) != null) {
        sec  = text.substring(0, 2);
        text = text.substring(2);
      } else {
        sec  = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(sec)) return null; // error
      result.sec = parseInt(sec, 10);
      return text;
    },
    "S": function(text, pattern, result) {
      // Millimsecond
      var msec;
      if (pattern.length == 1 || pattern.length == 2) {
        if (text.length > 2 && text.substring(0, 3).match(/[1-9][0-9][0-9]/) != null) {
          msec = text.substring(0, 3);
          text = text.substring(3);
        } else if (text.length > 1 && text.substring(0, 2).match(/[1-9][0-9]/) != null) {
          msec = text.substring(0, 2);
          text = text.substring(2);
        } else {
          msec = text.substring(0, pattern.length);
          text = text.substring(pattern.length);
        }
      } else {
        msec = text.substring(0, pattern.length);
        text = text.substring(pattern.length);
      }
      if (!this._isNumber(msec)) return null; // error
      result.msec = parseInt(msec, 10);
      return text;
    },
    "'": function(text, pattern, result) {
      // escape
      if (pattern == "''") {
        pattern = "'";
      } else {
        pattern = pattern.replace(/'/g, '');
      }
      if (text.indexOf(pattern) != 0) {
        return null; // error
      } else {
        return text.substring(pattern.length);
      }
    }
  },

  _isNumber: function(str) {
    return /^[0-9]*$/.test(str);
  }
};





})(jQuery);


/*
 * Lazy loader is a jQuery plugin
 * http://www.appelsiini.net/projects/lazyload
 */
/*
(function($){$.fn.lazyload=function(options){var settings={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(options){$.extend(settings,options);}
var elements=this;if("scroll"==settings.event){$(settings.container).bind("scroll",function(event){var counter=0;elements.each(function(){if($.abovethetop(this,settings)||$.leftofbegin(this,settings)){}else if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){$(this).trigger("appear");}else{if(counter++>settings.failurelimit){return false;}}});var temp=$.grep(elements,function(element){return!element.loaded;});elements=$(temp);});}
this.each(function(){var self=this;if(undefined==$(self).attr("original")){$(self).attr("original",$(self).attr("src"));}
if("scroll"!=settings.event||undefined==$(self).attr("src")||settings.placeholder==$(self).attr("src")||($.abovethetop(self,settings)||$.leftofbegin(self,settings)||$.belowthefold(self,settings)||$.rightoffold(self,settings))){if(settings.placeholder){$(self).attr("src",settings.placeholder);}else{$(self).removeAttr("src");}
self.loaded=false;}else{self.loaded=true;}
$(self).one("appear",function(){if(!this.loaded){$("<img />").bind("load",function(){$(self).hide().attr("src",$(self).attr("original"))
[settings.effect](settings.effectspeed);self.loaded=true;}).attr("src",$(self).attr("original"));};});if("scroll"!=settings.event){$(self).bind(settings.event,function(event){if(!self.loaded){$(self).trigger("appear");}});}});$(settings.container).trigger(settings.event);return this;};$.belowthefold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).height()+$(window).scrollTop();}else{var fold=$(settings.container).offset().top+$(settings.container).height();}
return fold<=$(element).offset().top-settings.threshold;};$.rightoffold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).width()+$(window).scrollLeft();}else{var fold=$(settings.container).offset().left+$(settings.container).width();}
return fold<=$(element).offset().left-settings.threshold;};$.abovethetop=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollTop();}else{var fold=$(settings.container).offset().top;}
return fold>=$(element).offset().top+settings.threshold+$(element).height();};$.leftofbegin=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollLeft();}else{var fold=$(settings.container).offset().left;}
return fold>=$(element).offset().left+settings.threshold+$(element).width();};$.extend($.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);

$(function() {
    $("img.cl_product_img").lazyload({placeholder : "/common/js/lib/images/grey.gif"});
});
*/


/*
 * IE PNG Fix v1.4
 *
 * Copyright (c) 2006 Takashi Aida http://www.isella.com/aod2/
 *
 */

// IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com

// This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/

if (typeof IEPNGFIX == 'undefined') {
//--============================================================================

var IEPNGFIX = {
    blank:  '/common/js/lib/images/blank.gif',
    filter: 'DXImageTransform.Microsoft.AlphaImageLoader',

    fixit: function (elem, src, method) {
        if (elem.filters[this.filter]) {
            var filter = elem.filters[this.filter];
            filter.enabled = true;
            filter.src = src;
            filter.sizingMethod = method;
        }
        else {
            elem.style.filter = 'progid:' + this.filter +
                '(src="' + src + '",sizingMethod="' + method + '")';
        }
    },

    fixwidth: function(elem) {
        if (elem.currentStyle.width == 'auto' &&
            elem.currentStyle.height == 'auto') {
            elem.style.width = elem.offsetWidth + 'px';
        }
    },

    fixchild: function(elem, recursive) {
        if (!/MSIE (5\.5|6\.|7\.)/.test(navigator.userAgent)) return;

        for (var i = 0, n = elem.childNodes.length; i < n; i++) {
            var childNode = elem.childNodes[i];
            if (childNode.style) {
                if (childNode.style.position) {
                    childNode.style.position = childNode.style.position;
                }
                else {
                    childNode.style.position = 'relative';
                }
            }
            if (recursive && childNode.hasChildNodes()) {
                this.fixchild(childNode, recursive);
            }
        }
    },

    fix: function(elem) {
        if (!/MSIE (5\.5|6\.|7\.)/.test(navigator.userAgent)) return;

        var bgImg =
            elem.currentStyle.backgroundImage || elem.style.backgroundImage;

        if (elem.tagName == 'IMG') {
            if ((/\.png$/i).test(elem.src)) {
                this.fixwidth(elem);
                this.fixit(elem, elem.src, 'scale');
                elem.src = this.blank;
                elem.runtimeStyle.behavior = 'none';
            }
        }
        else if (bgImg && bgImg != 'none') {
            if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i)) {
                var s = RegExp.$1;
                this.fixwidth(elem);
                elem.style.backgroundImage = 'none';
                this.fixit(elem, s, 'scale'); // crop | image | scale

                if (elem.tagName == 'A' && elem.style) {
                    if (!elem.style.cursor) {
                        elem.style.cursor = 'pointer';
                    }
                }

                this.fixchild(elem);
                elem.runtimeStyle.behavior = 'none';
            }
        }
    },

    hover: function(elem, hvImg) {
        var bgImg = elem.style.backgroundImage;

        if (!bgImg && elem.currentStyle) bgImg = elem.currentStyle.backgroundImage;

        if (elem.tagName == 'IMG' && hvImg) {
            var image = elem.src;
            elem.onmouseover = function() {
                elem.src = hvImg;
                IEPNGFIX.fix(elem);
            };
            elem.onmouseout = function() {
                elem.src = image;
                IEPNGFIX.fix(elem);
            };
        }
        else if (bgImg && bgImg != 'none' && hvImg) {
            elem.onmouseover = function() {
                elem.style.backgroundImage = 'url(' + hvImg + ')';
                IEPNGFIX.fix(elem);
            };
            elem.onmouseout = function() {
                elem.style.backgroundImage = bgImg;
                IEPNGFIX.fix(elem);
            };
        }

        IEPNGFIX.fix(elem);
    }
};

//--============================================================================
} // end if (typeof IEPNGFIX == 'undefined')



/**
 * Twit
 *  jQuery Plugin to Display Twitter Tweets on a Blog.
 *  http://code.google.com/p/jquery-twit/
 *
 * Copyright (c) 2010 Yusuke Horie
 *
 * Released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Since  : 0.1.0 - 08/26/2009
 * Version: 0.2.0 - 02/17/2010
 */
(function(jQuery){

  var _i = 0;

  /** public methods **/

  jQuery.fn.twit = function (user, options) {
    if (typeof user != 'string') return this;

    var
      opts = jQuery.extend({}, jQuery.fn.twit.defaults, options),
      c = jQuery.isFunction(opts.callback) ? opts.callback: _callback,
      url = 'http://twitter.com/statuses/user_timeline/' + user + '.json',
      params = {};

    opts.user = user;
    params.count = opts.count;

    return this.each(function(i, e) {
      var $e = $(e);
      if (!$e.hasClass('twit')) $e.addClass('twit');

      jQuery.ajax({
        url: url,
        data: params,
        dataType: 'jsonp',
        success: function (o) {
          c.apply(this, [(o.results) ? o.results: o, e, opts]);
        }
      });
    });
  };

  jQuery.fn.twit.defaults = {
    user: null,
    callback: null,
    icon: true,
    username: true,
    text: true,
    count: 200,
    limit: 7,
    label: 'Twitter',
    title: ''
  };

  /** private method **/

  var _callback = function (o, e, opts) {
    var $this = $(e);
    if (!o || o.length == 0 || $this.length == 0) return false;
    $this.data('_inc', 1);
    _i++;

    var username = o[0].user.screen_name,
        icon = o[0].user.profile_image_url;

    var h =
      '<div class="twitHeader">' +
      ' <span class="twitLabel">' + opts.label + '</span>&nbsp;&nbsp;' +
      ' <span class="twitTitle">' + opts.title + '</span>' +
      '</div>';
    if (opts.icon || opts.username) {
      h += '<div class="twitUser">';
      if (opts.icon)
        h +=
          ' <a href="http://twitter.com/' + username + '/">' +
          '  <img src="' + icon + '" alt="' + username + '" title="' + username + '" />' +
          ' </a>';
      if (opts.username)
        h += '<a href="http://twitter.com/' + username + '/" class="twitUserName">' + username + '</a>';
      h += '</div>';
    }
    h += '<ul class="twitBody" id="twitList' + _i + '">' + _build(o, $this, opts) + '</ul>';

    $this.html(h);

    $('a.twitEntryShow', '#twitList' + _i).live('click', function (e) {
      e.preventDefault();
      var $t = $(this);

      $t.parent().fadeOut(400, function () {
        var i = $this.data('_inc');
        i++;
        $this.data('_inc', i);

        if ($t.hasClass('twitEntryAll')) {
          $t.die('click');
          var start = (i*opts.limit) - opts.limit;
          $(this).after(_build(o, $this, opts, start, o.length)).remove();
        } else {
          $(this).after(_build(o, $this, opts)).remove();
        }
      });
    });

  };

  var _build = function (o, $t, opts, s, e) {
    var
      h = '',
      inc = $t.data('_inc'),
      start = s || (inc*opts.limit) - opts.limit,
      end = e || ((o.length > start + opts.limit) ? start + opts.limit: o.length);

    for (var i=start; i<end; i++) {
      var
        t = o[i],
        username = t.user.screen_name,
        icon = t.user.profile_image_url;

      h += '<li class="twitEntry">';
      if (opts.text) {
        var text = t.text
          .replace(/(https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/, function (u) {
            var shortUrl = (u.length > 30) ? u.substr(0, 30) + '...': u;
            return '<a href="' + u + '">' + shortUrl + '</a>';
          })
          .replace(/@([a-zA-Z0-9_]+)/g, '@<a href="http://twitter.com/$1">$1</a>')
          .replace(/(?:^|\s)#([^\s\.\+:!]+)/g, function (a, u) {
            return ' <a href="http://twitter.com/search?q=' + encodeURIComponent(u) + '">#' + u + '</a>';
          });
        h += ' <span>' + text + '</span>';
      }

      h += '</li>';
    }

    if (o.length > end) {
      h +=
        '<li class="twitNavi">' +
        '<a href="#" class="twitEntryShow">もっと見る</a> &nbsp;/&nbsp;';
      if (o.length > opts.limit)
        h += '<a href="#" class="twitEntryShow twitEntryAll">全て</a>';
      h += '</li>';
    }
    return h;
  };

})(jQuery);


/*
 * meerkat 1.3
 *
 * http://meerkat.jarodtaylor.com/
 */
jQuery.fn.extend({

    meerkat: function(options) {

        var defaults = {
            background: 'none',
            opacity: null,
            height: 'auto',
            width: '100%',
            position: 'bottom',
            close: '.close',
            dontShowAgain: '#dont-show',
            animationIn: 'none',
            animationOut: null,
            easingIn: 'swing',
            easingOut: 'swing',
            animationSpeed: 'normal',
            cookieExpires: 0,
            removeCookie: '.removeCookie',
            delay: 0,
            onMeerkatShow: function() {},
            timer: null
        };

        var settings = jQuery.extend(defaults, options);


        if(jQuery.easing.def){
            settings.easingIn = settings.easingIn;
            settings.easingOut = settings.easingOut;
        }else {
            settings.easingIn = 'swing';
            settings.easingOut = 'swing';
        }

        if(settings.animationOut === null){
            settings.animationOut = settings.animationIn;
        }

        settings.delay = settings.delay * 1000;
        if(settings.timer != null){
            settings.timer = settings.timer * 1000;
        }

        function createCookie(name,value,days) {
            if (days) {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires = "; expires="+date.toGMTString();
            }
            else {
                var expires = "";
            }
            document.cookie = name+"="+value+expires+"; path=/";
        }

        function readCookie(name) {
            var nameEQ = name + "=";
            var ca = document.cookie.split(';');
            for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)===' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length);
            }
            return null;
        }

        function eraseCookie(name) {
            createCookie(name,"",-1);
        }
        jQuery(settings.removeCookie).click(function(){ eraseCookie('meerkat')});

        return this.each(function() {
            var element = jQuery(this);
            if(readCookie('meerkat') != "dontshow"){
                settings.onMeerkatShow.call(this);

                function animateMeerkat(showOrHide, fadeOrSlide){
                    var meerkatWrap = jQuery('#meerkat-wrap');
                    if(fadeOrSlide === "slide"){
                        if(settings.position === "left" || settings.position === "right"){
                            var animationType = 'width';
                        } else {
                            var animationType = 'height';
                        }
                    } else {
                        var animationType = "opacity";
                    }
                    var animationProperty = {};
                    animationProperty[animationType] = showOrHide;

                    if(showOrHide === "show"){
                        if(fadeOrSlide !== "none"){
                            if(settings.delay > 0){
                                jQuery(meerkatWrap).hide().delay(settings.delay).animate(animationProperty,settings.animationSpeed, settings.easingIn);
                            } else {
                                jQuery(meerkatWrap).hide().animate(animationProperty,settings.animationSpeed, settings.easingIn);
                            }
                        } else if ((fadeOrSlide === "none")&&(settings.delay > 0)){
                            jQuery(meerkatWrap).hide().delay(settings.delay).show(0);
                        } else {
                            jQuery(meerkatWrap).show();
                        }
                        jQuery(element).show(0);
                    }

                    if(showOrHide === "hide"){
                        if(fadeOrSlide !== "none"){
                            if(settings.timer !== null){
                                jQuery(meerkatWrap).delay(settings.timer).animate(animationProperty,settings.animationSpeed, settings.easingOut, function(){jQuery(this).destroyMeerkat();});
                            }
                            jQuery(settings.close).click(function(){
                                jQuery(meerkatWrap).stop().animate(animationProperty,settings.animationSpeed, settings.easingOut, function(){jQuery(this).destroyMeerkat();});
                                return false;
                            });
                            jQuery(settings.dontShowAgain).click(function(){
                                jQuery(meerkatWrap).stop().animate(animationProperty,settings.animationSpeed, settings.easingOut, function(){jQuery(this).destroyMeerkat();});
                                createCookie('meerkat','dontshow', settings.cookieExpires);
                                return false;
                            });
                        } else if((fadeOrSlide === "none")&&(settings.timer !== null)) {
                            jQuery(meerkatWrap).delay(settings.timer).hide(0).queue(function(){
                                jQuery(this).destroyMeerkat();
                            });
                        } else {
                            jQuery(settings.close).click(function(){
                                jQuery(meerkatWrap).hide().queue(function(){
                                    jQuery(this).destroyMeerkat();
                                });
                                return false;
                            });
                            jQuery(settings.dontShowAgain).click(function(){
                                jQuery(meerkatWrap).hide().queue(function(){
                                    jQuery(this).destroyMeerkat();
                                });
                                createCookie('meerkat','dontshow', settings.cookieExpires);
                                return false;
                            });
                        }
                    }
                }


                jQuery('html, body').css({'margin':'0', 'height':'100%'});
                jQuery(element).wrap('<div id="meerkat-wrap"><div id="meerkat-container"></div></div>');
                jQuery('#meerkat-wrap').css({'position':'fixed', 'z-index': '10000', 'width': settings.width, 'height': settings.height}).css(settings.position, "0");
                jQuery('#meerkat-container').css({'background': settings.background, 'height': settings.height});

                if(settings.position === "left" || settings.position === "right"){ jQuery('#meerkat-wrap').css("top", 0);}

                if(settings.opacity != null){
                    jQuery("#meerkat-wrap").prepend('<div class="opacity-layer"></div>');
                    jQuery('#meerkat-container').css({'background': 'transparent', 'z-index' : '2', 'position': 'relative'});
                    jQuery(".opacity-layer").css({
                            'position': 'absolute',
                            'top' : '0',
                            'height': '100%',
                            'width': '100%',
                            'background': settings.background,
                            "opacity" : settings.opacity
                        });

                }
                if(jQuery.browser.msie && jQuery.browser.version <= 8){
                    jQuery('#meerkat-wrap').css({'position':'absolute', 'bottom':'-1px', 'z-index' : '0'});
                    var wrap_container_name = 'layout_wrapper';
                    if ($('#'+wrap_container_name).length == 0) {
                        return;
                    }
                    jQuery('html, body').css({'height':'100%', 'width':'100%', 'overflow':'hidden'});
                    jQuery('#'+wrap_container_name).css({'overflow':'auto', 'width':'100%', 'height':'100%', 'position':'absolute', 'top':'0', 'left':'0'});
                    var bgProperties = document.body.currentStyle.backgroundColor+ " ";
                    bgProperties += document.body.currentStyle.backgroundImage+ " ";
                    bgProperties += document.body.currentStyle.backgroundRepeat+ " ";
                    bgProperties += document.body.currentStyle.backgroundAttachment+ " ";
                    bgProperties += document.body.currentStyle.backgroundPositionX+ " ";
                    bgProperties += document.body.currentStyle.backgroundPositionY;
                    jQuery("body").css({'background':'none'});
                    jQuery("#"+wrap_container_name).css({'background' : bgProperties});
                    var ie6ContentContainer = document.getElementById(wrap_container_name);
                    if((ie6ContentContainer.clientHeight < ie6ContentContainer.scrollHeight) && (settings.position != 'left')) {
                        jQuery('#meerkat-wrap').css({'right' : '17px'});
                    }

                    /*
                    if(jQuery('#ie6-content-container').length == 0){
                        jQuery('body').children()
                            .filter(function (index) {
                                return jQuery(this).attr('id') != 'meerkat-wrap';
                            })
                        .wrapAll('<div id="ie6-content-container"></div>');
                        jQuery('html, body').css({'height':'100%', 'width':'100%', 'overflow':'hidden'});
                        jQuery('#ie6-content-container').css({'overflow':'auto', 'width':'100%', 'height':'100%', 'position':'absolute'});
                        var bgProperties = document.body.currentStyle.backgroundColor+ " ";
                        bgProperties += document.body.currentStyle.backgroundImage+ " ";
                        bgProperties += document.body.currentStyle.backgroundRepeat+ " ";
                        bgProperties += document.body.currentStyle.backgroundAttachment+ " ";
                        bgProperties += document.body.currentStyle.backgroundPositionX+ " ";
                        bgProperties += document.body.currentStyle.backgroundPositionY;
                        jQuery("body").css({'background':'none'});
                        jQuery("#ie6-content-container").css({'background' : bgProperties});
                    }
                    var ie6ContentContainer = document.getElementById('ie6-content-container');
                    if((ie6ContentContainer.clientHeight < ie6ContentContainer.scrollHeight) && (settings.position != 'left')) {
                        jQuery('#meerkat-wrap').css({'right' : '17px'});
                    }
                    */
                }

                switch (settings.animationIn)
                {
                    case "slide":
                        animateMeerkat("show", "slide");
                        break;
                    case "fade":
                        animateMeerkat("show", "fade");
                        break;
                    case "none":
                        animateMeerkat("show", "none");
                        break;
                    default:
                        alert('The animationIn option only accepts "slide", "fade", or "none"');
                }

                switch (settings.animationOut)
                {
                    case "slide":
                        animateMeerkat("hide", "slide");
                        break;

                    case "fade":
                        animateMeerkat("hide", "fade");
                        break;

                    case "none":
                        if(settings.timer != null){
                            jQuery('#meerkat-wrap').delay(settings.timer).hide(0).queue(function(){
                                jQuery(this).destroyMeerkat();
                            });
                        }
                        jQuery(settings.close).click(function(){
                            jQuery('#meerkat-wrap').hide().queue(function(){
                                jQuery(this).destroyMeerkat();
                            });
                        });
                        jQuery(settings.dontShowAgain).click(function(){
                            jQuery('#meerkat-wrap').hide().queue(function(){
                                jQuery(this).destroyMeerkat();
                            });
                            createCookie('meerkat','dontshow', settings.cookieExpires);
                        });
                        break;

                    default:
                      alert('The animationOut option only accepts "slide", "fade", or "none"');
                }
            } else {
                jQuery(element).hide();
            }
        });
    },
    destroyMeerkat: function() {
        jQuery('#meerkat-wrap').replaceWith( jQuery('#meerkat-container').contents().hide() );
    }
});
