/// <reference path="jquery.js"/>
jQuery.noConflict();

// global変数
var EC_WWW_ROOT = '';

// default charsetの設定
jQuery.ajaxSetup({ contentType: 'application/x-www-form-urlencoded; charset=utf-8' });

// util
function _ecUtil() {
    // ダブルクリック禁止処理
    this.ignoreDblClickFlag = null;

    // 郵便番号検索
    var timerId_lookupzip_ = null;
    var zipcache_lookupzip_ = '';

    // 全角半角変換
    this.hanMap = {};
    this.zenMap = {
        'ａ': 'a', 'ｂ': 'b', 'ｃ': 'c', 'ｄ': 'd', 'ｅ': 'e', 'ｆ': 'f', 'ｇ': 'g', 'ｈ': 'h', 'ｉ': 'i', 'ｊ': 'j',
        'ｋ': 'k', 'ｌ': 'l', 'ｍ': 'm', 'ｎ': 'n', 'ｏ': 'o', 'ｐ': 'p', 'ｑ': 'q', 'ｒ': 'r', 'ｓ': 's', 'ｔ': 't',
        'ｕ': 'u', 'ｖ': 'v', 'ｗ': 'w', 'ｘ': 'x', 'ｙ': 'y', 'ｚ': 'z', 'Ａ': 'A', 'Ｂ': 'B', 'Ｃ': 'C', 'Ｄ': 'D',
        'Ｅ': 'E', 'Ｆ': 'F', 'Ｇ': 'G', 'Ｈ': 'H', 'Ｉ': 'I', 'Ｊ': 'J', 'Ｋ': 'K', 'Ｌ': 'L', 'Ｍ': 'M', 'Ｎ': 'N',
        'Ｏ': 'O', 'Ｐ': 'P', 'Ｑ': 'Q', 'Ｒ': 'R', 'Ｓ': 'S', 'Ｔ': 'T', 'Ｕ': 'U', 'Ｖ': 'V', 'Ｗ': 'W', 'Ｘ': 'X',
        'Ｙ': 'Y', 'Ｚ': 'Z', '０': '0', '１': '1', '２': '2', '３': '3', '４': '4', '５': '5', '６': '6', '７': '7',
        '８': '8', '９': '9', '！': '!', '＠': '@', '＃': '#', '＄': '$', '％': '%', '＾': '^', '＆': '&', '＊': '*',
        '（': '(', '）': ')', '＿': '_', '＋': '+', '｜': '|', '￣': '~', '－': '-', '＝': '=', '￥': '\\', '｀': '`',
        '｛': '{', '｝': '}', '［': '[', '］': ']', '：': ':', '”': '"', '；': ';', '’': '\'', '＜': '<', '＞': '>',
        '？': '?', '，': ',', '．': '.', '／': '/', '。': '｡', '「': '｢', '」': '｣', '、': '､', '・': '･', 'ヲ': 'ｦ',
        'ァ': 'ｧ', 'ィ': 'ｨ', 'ゥ': 'ｩ', 'ェ': 'ｪ', 'ォ': 'ｫ', 'ャ': 'ｬ', 'ュ': 'ｭ', 'ョ': 'ｮ', 'ッ': 'ｯ', 'ー': 'ｰ',
        'ア': 'ｱ', 'イ': 'ｲ', 'ウ': 'ｳ', 'エ': 'ｴ', 'オ': 'ｵ', 'カ': 'ｶ', 'キ': 'ｷ', 'ク': 'ｸ', 'ケ': 'ｹ', 'コ': 'ｺ',
        'サ': 'ｻ', 'シ': 'ｼ', 'ス': 'ｽ', 'セ': 'ｾ', 'ソ': 'ｿ', 'タ': 'ﾀ', 'チ': 'ﾁ', 'ツ': 'ﾂ', 'テ': 'ﾃ', 'ト': 'ﾄ',
        'ナ': 'ﾅ', 'ニ': 'ﾆ', 'ヌ': 'ﾇ', 'ネ': 'ﾈ', 'ノ': 'ﾉ', 'ハ': 'ﾊ', 'ヒ': 'ﾋ', 'フ': 'ﾌ', 'ヘ': 'ﾍ', 'ホ': 'ﾎ',
        'マ': 'ﾏ', 'ミ': 'ﾐ', 'ム': 'ﾑ', 'メ': 'ﾒ', 'モ': 'ﾓ', 'ヤ': 'ﾔ', 'ユ': 'ﾕ', 'ヨ': 'ﾖ', 'ラ': 'ﾗ', 'リ': 'ﾘ',
        'ル': 'ﾙ', 'レ': 'ﾚ', 'ロ': 'ﾛ', 'ワ': 'ﾜ', 'ン': 'ﾝ', 'ガ': 'ｶﾞ', 'ギ': 'ｷﾞ', 'グ': 'ｸﾞ', 'ゲ': 'ｹﾞ', 'ゴ': 'ｺﾞ',
        'ザ': 'ｻﾞ', 'ジ': 'ｼﾞ', 'ズ': 'ｽﾞ', 'ゼ': 'ｾﾞ', 'ゾ': 'ｿﾞ', 'ダ': 'ﾀﾞ', 'ヂ': 'ﾁﾞ', 'ヅ': 'ﾂﾞ', 'デ': 'ﾃﾞ', 'ド': 'ﾄﾞ',
        'バ': 'ﾊﾞ', 'パ': 'ﾊﾟ', 'ビ': 'ﾋﾞ', 'ピ': 'ﾋﾟ', 'ブ': 'ﾌﾞ', 'プ': 'ﾌﾟ', 'ベ': 'ﾍﾞ', 'ペ': 'ﾍﾟ', 'ボ': 'ﾎﾞ', 'ポ': 'ﾎﾟ',
        'ヴ': 'ｳﾞ', '゛': 'ﾞ', '゜': 'ﾟ', '　': ' '
    };

    // 半角->全角マップ
    for (var key in this.zenMap) {
        if (!this.hanMap[this.zenMap[key]]) {
            this.hanMap[this.zenMap[key]] = key;
        }
    }

    // 半角<->全角変換
    this.strConvert = function(obj, isHanToZen) {

	chk_surrogate(obj);//サロゲートペア対応[add]

        var str = obj.value;
        var conv = '';
        var map = isHanToZen ? this.hanMap : this.zenMap;

        for (var i = 0; i < str.length; i++) {
            var tmp = '';
            if (i < str.length - 1) {
                tmp = str.substring(i, i + 2);
            }
            if (map[tmp]) {
                conv += map[tmp];
                i++;
                continue;
            } else {
                tmp = str.substring(i, i + 1);
                conv += map[tmp] ? map[tmp] : tmp;
            }
        }
        obj.value = conv;
        return true;
    }

    // ダブルクリック（連続ポスト）の制御
    this.ignoreDblClick = function() {
        if (this.ignoreDblClickFlag == null) {
            this.ignoreDblClickFlag = 1;
            return true;
        } else {
            return false;
        }
    }

    // htmlタグの置き換え
    this.htmlspecialchars = function(str) {
        if (!str || str == '') { return ''; }
        str = str.replace(/&/g, '&amp;');
        str = str.replace(/"/g, '&quot;');
        str = str.replace(/'/g, '&#039;');
        str = str.replace(/</g, '&lt;');
        str = str.replace(/>/g, '&gt;');
        return str;
    }

    // 郵便番号検索
    this.lookupZipInit = function(zip, pref, addr, addr2, cnt, offset) {
        var defaultXOffset = 90;
        var timerOffset = 300;

        var zip_id = '#' + zip + cnt;
        var pref_id = '#' + pref + cnt;
        var addr_id = '#' + addr + cnt;
        var addr2_id = '#' + addr2 + cnt;

        offset = offset + defaultXOffset;
        jQuery(zip_id).bind('keyup', function() {
            jQuery('ul.ziplist_').remove();

            if (zipcache_lookupzip_ == jQuery(zip_id).val()) {
                zipcache_lookupzip_ = jQuery(zip_id).val();
                return false;
            }
            zipcache_lookupzip_ = jQuery(zip_id).val();

            clearTimeout(timerId_lookupzip_);
            timerId_lookupzip_ = setTimeout(function() {
                if (!jQuery(zip_id).val().match(/^[0-9]{3}[\-]{0,1}[0-9]{0,4}$/)) {
                    return true;
                }
                jQuery.get('/search/lookupzipjson.aspx',
                  {
                      zip: jQuery(zip_id).val(),
                      charset: 'shift_jis'
                  },
                function(data, status) {
                    var of = jQuery(zip_id).offset();
                    var ul = jQuery('<ul></ul>').addClass('ziplist_');
                    ul.css('top', of.top);
                    ul.css('left', of.left + offset);

                    var searchCount = 0;
                    var tempzip, temppref, tempaddr, tempaddr2;
                    jQuery.each(data, function(key, item) {
                        searchCount++;
                        tempzip = item.zip;
                        temppref = item.pref;
                        tempaddr = item.addr;
                        tempaddr2 = item.addr2;

                        var li = jQuery('<li>' + key + ' ' + item.pref + ' ' + item.addr + ' ' + item.addr2 + '</li>');
                        li.bind('click', function() {
                            jQuery(zip_id).val(item.zip);
                            jQuery(pref_id).val(item.pref);
                            jQuery(addr_id).val(item.addr);
                            jQuery(addr2_id).val(item.addr2);
                            jQuery('ul.ziplist_').remove();
                            jQuery(zip_id).blur();
                            jQuery(addr2_id).focus();
                            return false;
                        });
                        li.bind('mouseover', function() { li.addClass('hover'); });
                        li.bind('mouseleave', function() { li.removeClass('hover'); });
                        ul.append(li);
                    });

                    if (searchCount == 1) {
                        jQuery(zip_id).val(tempzip);
                        jQuery(pref_id).val(temppref);
                        jQuery(addr_id).val(tempaddr);
                        jQuery(addr2_id).val(tempaddr2);
                        jQuery('ul.ziplist_').remove();
                        jQuery(zip_id).blur();
                        jQuery(addr2_id).focus();
                        return false;
                    } else if (searchCount > 1) {
                        jQuery(document.body).append(ul);
                    }
                }, 'json'
                );
            }, timerOffset);
        });
    }

    // 汎用入力チェック
    this.confirmInputCheck = function() {
        // メールアドレスチェック
        if (jQuery('#mail').size() == 1 && jQuery('#cmail').size() == 1) {
            if (jQuery('#mail').val() != jQuery('#cmail').val()) {
                alert('メールアドレスとメールアドレス（確認）が一致しません');
                ecUtil.ignoreDblClickFlag = false;
                return false;
            }
            return true;
        }

        // メールアドレスチェック２
        if (jQuery('#newmail1').size() == 1 && jQuery('#newmail2').size() == 1) {
            if (jQuery('#newmail1').val() != jQuery('#newmail2').val()) {
                alert('メールアドレスとメールアドレス（確認）が一致しません');
                ecUtil.ignoreDblClickFlag = false;
                return false;
            }
            return true;
        }

        // パスワードチェック
        if (jQuery('#npwd1').size() == 1 && jQuery('#npwd2').size() == 1) {
            if (jQuery('#npwd1').val() != jQuery('#npwd2').val()) {
                alert('入力されたパスワードと確認用パスワードが一致しません');
                ecUtil.ignoreDblClickFlag = false;
                return false;
            }
            return true;
        }

        // IDチェック
        if (jQuery('#newid1').size() == 1 && jQuery('#newid2').size() == 1) {
            if (jQuery('#newid1').val() != jQuery('#newid2').val()) {
                alert('入力されたIDと確認用IDが一致しません');
                ecUtil.ignoreDblClickFlag = false;
                return false;
            }
            return true;
        }
    }

    // IDとPASSの不一致確認
    this.checkIdPass = function(arg1, arg2, arg3) {
        if (jQuery('#' + arg1).val() != '' && jQuery('#' + arg2).val() != '') {
            if (jQuery('#' + arg1).val() == jQuery('#' + arg2).val()) {
                alert('お客様IDとパスワードは別々のものを指定してください');
                jQuery('#' + arg2).val('');
                jQuery('#' + arg3).val('');
                ecUtil.ignoreDblClickFlag = false;
                return false;
            }
        }
    }
}


// サロゲートペア除去(結合文字含む)
function chk_surrogate(obj) {
//idが必要(input type="text" name="txtMoji" id="txtMoji" onblur="chk_surrogate(this.id);"/>
var txt = obj.value;
var input = obj.value;

	len = input.length;

	for ( i = 0; i < len; i++ ) {

		str1 = input.charCodeAt(i);
//windowsの(全角マイナス)に変換
if(str1==8722 || str1==12316){txt=txt.replace(String.fromCharCode(str1),"－"); }
		if ( 1 < input.length ) {
			str2 = input.charCodeAt(i + 1);
		} else {
			str2 = 0;
		}
		// サロゲートペア判定
		if ( ( 0xD800 <= str1 && str1 <= 0xDBFF ) &&
		     ( 0xDC00 <= str2 && str2 <= 0xDFFF ) ) {

			//サロゲートペアあり;
			txt=txt.replace(String.fromCharCode(str1,str2),""); // ペアで一文字を取り除く
			// 下位2バイトまで取得したので1文字スキップ
			i++;

		}

		//結合文字あり;
		if(str2 == 0x309A || str2 == 0x3099){
			txt=txt.replace(String.fromCharCode(str1,str2),""); // ペアで一文字を取り除く
			// 下位2バイトまで取得したので1文字スキップ
			i++;
		}

	}
	obj.value = txt;
	return true;
}



var ecUtil = new _ecUtil();


