window.console = window.console || { log: function () { } };
var CITYSEARCH = function (options) {
var defaluts = {
oInput: '.city-search'
}
$(options && options.oInput || defaluts.oInput).each(function () {
//防止重复初始化
if ($(this).data("init")) {
return;
}
new CitySearch($(this), options, defaluts);
$(this).data("init", true);
})
}
// 构造函数
var CitySearch = function ($target, options, defaluts) {
var _this = this;
// 初始化
_this.init($target, options, defaluts);
}
// 初始化
CitySearch.prototype.init = function ($target, options, defaluts) {
//Begin由于后台接口没去掉,默认一个国家
if ($("#gLanguageCurrent").val() == "zh" || $("#gLanguageCurrent").val() == "cn") {
$("#Country").val("107");
$("#txtCountry").val("北京市");
} else {
$("#Country").val("255");
$("#txtCountry").val("United States");
}
//End由于后台接口没去掉,默认一个国家
var _this = this;
// 合并参数
_this.opts = $.extend({}, defaluts, options);
// 外部对象
_this.oInput = $target;
// 生成dom结构(用于装数据的盒子)
_this.generateBox();
// 手动生成数据
_this.oData = [];
//for(i = 0; i < 3; i ++){
// _this.oData.push({
// "data-id":"012,14,254",
// "data-name":"深圳市, 广东省, 中国",
// "data-value":"深圳市, 广东省, 中国"
// },{
// "data-id":"012,14,254",
// "data-name":"广州市, 广东省, 中国",
// "data-value":"广州市, 广东省, 中国"
// },{
// "data-id":"012,14,254",
// "data-name":"东莞市, 广东省, 中国",
// "data-value":"东莞市, 广东省, 中国"
// })
//}
// 事件
_this.oEvent();
}
// 生成dom结构(用于装数据的盒子)
CitySearch.prototype.generateBox = function () {
var _this = this;
var boxObj = '
';
_this.oInput.after(boxObj);
_this.oKeyCon = _this.oInput.nextAll('.city-con');
// 添加样式
_this.style();
}
// 添加样式
CitySearch.prototype.style = function () {
var w = $(window).width();
var _this = this;
var style = '' +
'' +
'
';
_this.oInput.after(style);
}
// 事件
CitySearch.prototype.oEvent = function () {
var _this = this;
// 光标进入的时候提示文字
_this.oInput.on('focus', function () {
var aData = [];
//if ($(this).val() == '' || $(this).val().length < 3) {
// aData.push('' + $("#HidGetPricingCpc").val() + '');
//}
if ($("#gLanguageCurrent").val() == "zh" && $(this).val().length <= 0) {
aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "请输入1个或更多字符." : $("#HidGetPricingCpc").val()) + '');
} else if ($("#gLanguageCurrent").val() != "zh" && $(this).val().length < 3) {
aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "Please enter 3 or more characters." : $("#HidGetPricingCpc").val()) + '');
}
if (_this.oKeyCon.attr('data-num') == 1 || aData.length > 0) {
_this.oKeyCon.css('display', 'block');
if (_this.oKeyCon.find('a').length == 0) {
_this.oKeyCon.html(aData.slice(0, 20).join(""))
_this.oInput.trigger("change-content");
}
}
})
//输入字母选择城市或者文字选择城市
var trimer = '';
var oldValue;
var timer2;
_this.oInput.on('input', function(e) {
clearTimeout(timer2)
var This = $(this);
timer2 = setTimeout(function() {
lazyInput(This);
}, 330)
})
function lazyInput(This) {
//切不是删除键
// if(e.key.length>1 && e.keyCode!=8){
// return;
// }
// 如果上一次循环没有走完就不进入再次循环
//下拉菜单上下键切换
if (_this.oInput.data("tabfocusselect")) {
clearTimeout(trimer);
_this.oInput.data("tabfocusselect", false)
return;
}
if (oldValue == This.val()) {
return;
}
oldValue = This.val()
clearTimeout(trimer);
trimer = setTimeout(function() {
if (_this.oInput.data("tabfocusselect")) {
_this.oInput.data("tabfocusselect", false)
return;
}
var oInputValue = This.val(),
aData = [];
if ($("#gLanguageCurrent").val() == "zh" && oInputValue.length <= 0) {
aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "请输入1个或更多字符." : $("#HidGetPricingCpc").val()) + '');
_this.oKeyCon.html(aData.slice(0, 20).join(""))
_this.oInput.trigger("change-content");;
} else if ($("#gLanguageCurrent").val() != "zh" && oInputValue.length < 3) {
aData.push('' + ($("#HidGetPricingCpc").val() == "GetPricingCpc" ? "Please enter 3 or more characters." : $("#HidGetPricingCpc").val()) + '');
_this.oKeyCon.html(aData.slice(0, 20).join(""))
_this.oInput.trigger("change-content");;
} else {
_this.oKeyCon.html('')
loadCityData(oInputValue, function(data) {
if (data != null && data.length > 0) {
if ($("#gLanguageCurrent").val() == 'zh' || $("#gLanguageCurrent").val() == 'cn') {
for (k = 0; k < data.length; k++) {
var vDNames = ((data[k].name != undefined && data[k].name != '' && data[k].name.length > 0) ? data[k].name.split(';') : null);
var vCity = ((vDNames != null && vDNames.length >= 2) ? vDNames[0] : "");
if (isInArray(vCity)) {
aData.push("" + vCity + "");
} else {
var vPri = ((vDNames != null && vDNames.length >= 2) ? vDNames[1] : "");
aData.push("" + vCity + "," + vPri + "");
}
}
} else {
for (k = 0; k < data.length; k++) {
aData.push("" + data[k].name + "");
}
}
// 光标开关
_this.oKeyCon.attr('data-num', 1);
} else {
aData.push('' + $("#HidGetPricingCpcMsg").val() + '');
// 光标开关
_this.oKeyCon.attr('data-num', 0);
}
_this.oKeyCon.html(aData.slice(0, 189).join(""))
_this.oInput.trigger("change-content");;
})
}
// 重新绑定demo元素
_this.oBtna = _this.oKeyCon.find('a');
_this.oKeyCon.css('display', 'block');
// 分割字符串( 有 空格 , ,)
// oInputValueNum = oInputValue.trim().split(/[,,\s]+/g);
// if (oInputValue == '') {
// _this.oKeyCon.css('display', 'none');
// _this.oKeyCon.html(' ');
// };
// var beforeData = curData(oInputValueNum,_this.oData);
// 递归循环数据函数
// function curData (keywords,filterData){
// var ret = [];
// if(keywords.length==0){
// return filterData;
// }
// var pop = keywords.shift().toLowerCase();
// for(var i = 0; i < filterData.length; i ++){
// var dataqp = filterData[i]['data-name'].toLowerCase();
// var patt = new RegExp(pop).test(dataqp);
// if(patt){
// ret.push(filterData[i]);
// }
// }
// ret = curData(keywords,ret);
// return ret;
// }
}, 100);
};
/**
* 加载城市数据
*/
function loadCityData(oInputValue, success) {
var ajaxUrl = location.protocol + "//" + location.host + "/en/Service/CollectUser"
var params = {
"type": "getCountryProvinceCity",
"keys": oInputValue,
"languages": $("#gLanguageCurrent").val().toLowerCase(),
"count": 50
}
$.ajax({
type: "POST",
url: ajaxUrl,
data: params,
cache: false,
// async: false,
success: function (data) { success(data); },
error: function (XMLHttpRequest, textStatus, errorThrown) {
var ve = "";
}
})
}
// 第一次加载数据
if ($("#gLanguageCurrent").val() == "zh") {
loadCityData("深圳", function () { })
} else {
loadCityData("abc", function () { })
}
/**
* 使用循环的方式判断一个元素是否存在于一个数组中
* @param {Object} vCitys 数组
* @param {Object} value 元素值
*/
function isInArray(value) {
var vCitys = ["北京市", "上海市", "天津市", "重庆市"];
for (var i = 0; i < vCitys.length; i++) {
if (value === vCitys[i]) {
return true;
}
}
return false;
}
//点击城市
_this.oKeyCon.on('mousedown', 'a', function (e) {
e.stopPropagation();
_this.oInputValue = '';
_this.offVerification = false;
var thisHTML = $(this).html();
var thisName = $(this).attr('data-name');
var thisID = $(this).attr('data-id');
var showFlag = $(this).data("keyupselect")
$(this).data("keyupselect",false)
_this.oInput.val('');
_this.oInput.val(thisHTML);
_this.oInput.attr('data-name', thisName);
_this.oInput.attr('data-id', thisID);
searchVerification(_this.oInput,showFlag);
})
//输入文字不匹配的提示
_this.oInput.on('blur', function () {
searchVerification($(this));
});
// 验证函数
function searchVerification(obj,showFlag) {
_this.offVerification = false;
var dataqp;
_this.oInputValue = obj.val().toLowerCase();
var oreqiuredText = obj.attr("data-error");
var match = false;
_this.oKeyConA = _this.oKeyCon.find('a');
if (_this.oInputValue != '') {
for (var i = 0; i < _this.oKeyConA.length; i++) {
dataqp = _this.oKeyConA.eq(i).html().toLowerCase(); //.attr('data-name').toLowerCase();
if (_this.oInputValue == dataqp) {
_this.offVerification = true;
}
};
}
if (!_this.offVerification) {
_this.oInput.addClass('red');
_this.oInput.nextAll('.input-error').text(_this.oInput.attr('countryerr')).addClass('error');
_this.oInput.parents('.J-validItem').removeClass('validSuccess').addClass('validError');
clearCpcVal();
} else {
_this.oInput.removeClass('red');
_this.oInput.nextAll('.input-error').removeClass('error');
_this.oInput.parents('.J-validItem').removeClass('validError').addClass('validSuccess');
setCpcVal(_this)
}
if(!showFlag){
_this.oKeyCon.css('display', 'none');
}
return _this.offVerification;
}
//提供给外部调用
_this.oInput.data("valid-func", searchVerification)
function setCpcVal(_this) {
var vDId = _this.oInput.attr("data-id");
var vDName = _this.oInput.attr("data-name");
var vDtIds = ((vDId != undefined && vDId != '' && vDId.length > 0) ? vDId.split(';') : null);
var vDNames = ((vDName != undefined && vDName != '' && vDName.length > 0) ? vDName.split(';') : null);
$("#txtidataCityId").val(((vDtIds != null && vDtIds.length >= 3) ? vDtIds[0] : ""));
$("#txtidataProvinceId").val(((vDtIds != null && vDtIds.length >= 3) ? vDtIds[1] : ""));
$("#txtidataCountryId").val(((vDtIds != null && vDtIds.length >= 3) ? vDtIds[2] : ""));
if ($("#gLanguageCurrent").val() == 'zh' || $("#gLanguageCurrent").val() == 'cn') {
var vCity = ((vDNames != null && vDNames.length >= 1) ? vDNames[0] : "");
if (isInArray(vCity)) {
$("#txtidataCityName").val(vCity);
$("#txtidataProvinceName").val(vCity);
} else {
$("#txtidataCityName").val(((vDNames != null && vDNames.length >= 2) ? vDNames[0] : ""));
$("#txtidataProvinceName").val(((vDNames != null && vDNames.length >= 2) ? vDNames[1] : ""));
}
$("#txtidataCountryName").val("中国");
} else {
$("#txtidataCityName").val(((vDNames != null && vDNames.length >= 3) ? vDNames[0] : ""));
$("#txtidataProvinceName").val(((vDNames != null && vDNames.length >= 3) ? vDNames[1] : ""));
$("#txtidataCountryName").val(((vDNames != null && vDNames.length >= 3) ? vDNames[2] : ""));
}
}
function clearCpcVal() {
$("#txtidataCityId").val('');
$("#txtidataCityName").val('');
$("#txtidataProvinceId").val('');
$("#txtidataProvinceName").val('');
$("#txtidataCountryId").val('');
$("#txtidataCountryName").val('');
}
//处理item上下和自己的方向
function hanlderItemDir($option, $parent, dir) {
$parent.find(".city-con a").removeClass("focusActive");
if ($option.length == 0) {
$parent.find(".city-con a").first().addClass("focusActive");
} else {
switch (dir) {
case "prev":
if ($option.prev().length) {
$option.prev().addClass("focusActive");
} else {
$parent.find(".city-con a").last().addClass("focusActive");
}
break;
case "next":
if ($option.next().length) {
$option.next().addClass("focusActive");
} else {
$parent.find(".city-con a").first().addClass("focusActive");
}
break;
default:
$option.addClass("focusActive");
}
}
scrollVisiable($parent.find(".city-con"), $parent.find(".city-con a.focusActive"));
}
//如果有滚动条那么就显示出来
function scrollVisiable($content, $active) {
var conHeight = $content.height();
var conTop = $content.offset().top
var activeTop = $active.offset().top;
var activeHeight = $active.height() + (parseFloat($active.css("padding-top"), 10) || 0) + (parseFloat($active.css("padding-top"), 10) || 0)
if (conHeight < (activeTop - conTop + activeHeight)) {
$content.scrollTop((activeTop - conTop) - conHeight + activeHeight + $content.scrollTop())
} else if (activeTop - conTop < 0) {
$content.scrollTop((activeTop - conTop) + $content.scrollTop())
}
}
//处理option的上下
function hanlderOptionDir(e, $parent,$t) {
var $option = $parent.find(".city-con a.focusActive");
var skip;
if (e.keyCode*1==38 ) {//== "ArrowUp"
$t.data("tabfocusselect",true);
hanlderItemDir($option, $parent, "prev")
} else if (e.keyCode*1==40 ) {//e.key == "ArrowDown"
$t.data("tabfocusselect",true);
hanlderItemDir($option, $parent, "next")
} else {
skip = true;
}
return skip
}
//处理上下和左右入口
function hanlderDir(e, $t) {
var $select = $t.parents(".J-validItem")
var skip = false;
if ($select.find(".city-con").is(":hidden")) {
if ( (e.keyCode*1==40) || (e.keyCode*1==13) ) {//e.key == "ArrowDown"//Enter
$select.find(".city-con").show();
}
} else {
if ( (e.keyCode*1==13) ) {//e.key == "Enter"
//设置keyupselect防止下拉框隐藏
if($select.find(".city-con a.focusActive").length){
$select.find(".city-con a.focusActive").trigger("mousedown");
}else{
$select.find(".city-con").toggle();
}
// $select.find(".focusActive").removeClass("focusActive");
//需要区分上下
} else {
skip = hanlderOptionDir(e, $select,$t);
//设置keyupselect防止下拉框隐藏
$select.find(".city-con a.focusActive").data("keyupselect",true).trigger("mousedown");
}
}
if (!skip) {
e.stopPropagation();
e.preventDefault();
}
}
if ($(window).width() >= 750) {
//按键
$(".city-search").data("skip", true).on("keyup", function (e) {
hanlderDir(e, $(this))
})
}
//加验证
var $form = $("#txtidataCityName").parents("form")
$form.on("init-validform", function () {
var validForm = $form.data("valid-form");
var setRule = validForm("getRule");
setRule["searchcity"] = {
check: function (value, $obj) {
return !searchVerification($obj)
}
}
})
}
if($(".J-select-country").length && $(".input-chengshi.city-search").length){
alert("error: double country input.")
}
//中文搜索
if ($("#gLanguageCurrent").val() == "zh" || $(".input-chengshi.city-search").length) {
CITYSEARCH();
//英文加载数据
}
if($(".J-select-country").length){
var ajaxUrl = location.protocol + "//" + location.host + "/en/Service/CollectUser?languages=en&type=getCountrys";
if ($("#gLanguageCurrent").val() == "ru-ru") ajaxUrl = location.protocol + "//" + location.host + "/en/Service/CollectUser?languages=ru-RU&type={CF1E2149-3043-4EF3-870D-DB4A12C530AA}";
$.ajax({
type: "get",
url: ajaxUrl,
dataType: "json",
success: function (data) {
if (data && data.length) {
var arr = [];
for (var i = 0; i < data.length; i++) {
arr.push('' + data[i].name + '')
}
$(".J-select.J-select-country").data("data", data).find(".J-select-option").html(arr.join("")).trigger("data-ready")
} else {
$(".J-select.J-select-country").data("data", []).find(".J-select-option").html('no result')
}
}, error: function () {
$(".J-select.J-select-country").find(".J-select-option").html('error')
}
})
}