//城市初始化
/*
var citylist = [
{cityid:11,citycode:'BJS',citycn:'北京',citypy:'Beijing',airport:[{airportcode:'PEK', airportshort:'北京首都',airportpy:'beijingshoudu'}, {airportcode:'NAY', airportshort:'北京南苑',airportpy:'beijingshoudu'}]},
{cityid:116,citycode:'SHA',citycn:'上海',citypy:'Shanghai',airport:[{airportcode:'SHA', airportshort:'上海虹桥',airportpy:'shanghaihongqiao'}, {airportcode:'PVG', airportshort:'上海浦东',airportpy:'shanghaipudong'}]},
{cityid:14,citycode:'CAN',citycn:'广州',citypy:'Guangzhou',airport:[{airportcode:'CAN', airportshort:'广州',airportpy:''}]},
{cityid:127,citycode:'SZX',citycn:'深圳',citypy:'Shenzhen',airport:[{airportcode:'SZX', airportshort:'深圳',airportpy:''}]},
{cityid:110,citycode:'NKG',citycn:'南京',citypy:'Nanjing',airport:[{airportcode:'NKG', airportshort:'南京',airportpy:''}]},
{cityid:16,citycode:'CGO',citycn:'郑州',citypy:'Zhengzhou',airport:[{airportcode:'CGO', airportshort:'郑州',airportpy:''}]},
{cityid:25,citycode:'CTU',citycn:'成都',citypy:'Chengdu',airport:[{airportcode:'CTU', airportshort:'成都',airportpy:''}]},
{cityid:51,citycode:'HGH',citycn:'杭州',citypy:'Hangzhou',airport:[{airportcode:'HGH', airportshort:'杭州',airportpy:''}]},
{cityid:82,citycode:'KMG',citycn:'昆明',citypy:'Kunming',airport:[{airportcode:'KMG', airportshort:'昆明',airportpy:''}]},
{cityid:57,citycode:'HRB',citycn:'哈尔滨',citypy:'Haerbin',airport:[{airportcode:'HRB', airportshort:'哈尔滨',airportpy:''}]},
{cityid:22,citycode:'CKG',citycn:'重庆',citypy:'Chongqing',airport:[{airportcode:'CKG', airportshort:'重庆',airportpy:''}]}];
var carrierlist;
var ticketcitylist;
*/
var CITY_DISPLAY_MAX = 10;  //城市显示得最大数

function initValidate() {
	$.formValidator.initConfig({validatorgroup:"4",autotip:true,alertmessage:true,onerror:function(msg,id){showErrInfo(msg,id,5,0)}});
	$("#txtdepcity").formValidator({validatorgroup:"4"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"请输入出发城市"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateCity($(":hidden[@name=depCityId1]").val(), arg0) },onerror:"出发城市输入有误，请重新输入"});
	$("#txtfltdate").formValidator({validatorgroup:"4"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"请输入出发日期"})
					.functionValidator({fun:function(arg0, arg1){ return isDate(arg0) },onerror:"出发日期格式错误，请重新输入"})
					.functionValidator({fun:function(arg0, arg1){ return compareDate(arg0, "") >= 0}, onerror:"出发日期不能小于当前日期，请重新输入"});
	$("#txtarrcity").formValidator({validatorgroup:"4"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"请输入到达城市"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != $("#txtdepcity").val()}, onerror:"到达城市不能与出发城市相同"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateCity($(":hidden[@name=arrCityId1]").val(), arg0) },onerror:"到达城市输入有误，请重新输入"});
	
	$.formValidator.initConfig({validatorgroup:"5",autotip:true,alertmessage:true,onerror:function(msg,id){showErrInfo(msg,id,5,0)}});
	$("#txtbackdate").formValidator({validatorgroup:"5"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"请输入返回日期"})
					.functionValidator({fun:function(arg0, arg1){ return isDate(arg0) },onerror:"返回日期格式错误，请重新输入"})
					.functionValidator({fun:function(arg0, arg1){ return compareDate(arg0, $("#txtfltdate").val()) >= 0}, onerror:"返回日期不能小于出发日期，请重新输入"});
	
	$.formValidator.initConfig({validatorgroup:"6",autotip:true,alertmessage:true,onerror:function(msg,id){showErrInfo(msg,id,5,0)}});
	$("#txtdepcity1").formValidator({validatorgroup:"6"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"第一航程出发城市不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateCity($(":hidden[@name=depCityId1]").val(), arg0) },onerror:"第一航程出发城市输入有误，请重新输入"});
	$("#txtfltdate1").formValidator({validatorgroup:"6"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"第一航程出发日期不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return isDate(arg0) },onerror:"第一航程出发日期格式错误，请重新输入"})
					.functionValidator({fun:function(arg0, arg1){ return compareDate(arg0, "") >= 0}, onerror:"第一航程出发日期不能小于当前日期，请重新输入"});
	$("#txtarrcity1").formValidator({validatorgroup:"6"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"第一航程到达城市不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != $("#txtdepcity1").val()}, onerror:"第一航程到达城市不能与出发城市相同"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateCity($(":hidden[@name=arrCityId1]").val(), arg0) },onerror:"第一航程到达城市输入有误，请重新输入"});
	$("#txtdepcity2").formValidator({validatorgroup:"6"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"第二航程出发城市不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateCity($(":hidden[@name=depCityId2]").val(), arg0) },onerror:"第二航程出发城市输入有误，请重新输入"});
	$("#txtfltdate2").formValidator({validatorgroup:"6"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"第二航程出发日期不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return isDate(arg0) },onerror:"第二航程出发日期格式错误，请重新输入"})
					.functionValidator({fun:function(arg0, arg1){ return compareDate(arg0, "") >= 0}, onerror:"第一航程出发日期不能小于第一航程出发日期，请重新输入"});
	$("#txtarrcity2").formValidator({validatorgroup:"6"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"第二航程到达城市不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != $("#txtdepcity2").val()}, onerror:"第二航程到达城市不能与出发城市相同"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateCity($(":hidden[@name=arrCityId2]").val(), arg0) },onerror:"第二航程到达城市输入有误，请重新输入"});
	
	$.formValidator.initConfig({validatorgroup:"7",autotip:true,alertmessage:true,onerror:function(msg,id){showErrInfo(msg,id,5,0)}});
	$("#ticketCitycn").formValidator({validatorgroup:"7"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 != "" && $(arg1).val() != $(arg1).attr("prompt") },onerror:"出票城市不能为空"})
					.functionValidator({fun:function(arg0, arg1){ return isValidateTicketCity(arg0) },onerror:"该城市不能出票，请输入其他城市"});
	$("#txtcarrier").formValidator({validatorgroup:"7"})
					.functionValidator({fun:function(arg0, arg1){ return arg0 == "" || 
																		   $(arg1).val() == $(arg1).attr("prompt") || 
																		   isValidateCarrier(arg0, $("#carrier").val())},onerror:"航空公司输入有误，请重新输入"});
			
}

//暂时用来表单验证
function validateForm(ft) {
	var flttype = ft * 1;
	var result = true;
	switch (flttype) {
	case 1:
		result = result && jQuery.formValidator.pageIsValid('4');
		break;
	case 2:
		result = result && jQuery.formValidator.pageIsValid('4');
		if (!result) return false;
		result = result && jQuery.formValidator.pageIsValid('5');
		break;
	case 3:
		result = result && jQuery.formValidator.pageIsValid('6');
		break;
	}
	if (!result) return false;
	//公用字段
	return result && jQuery.formValidator.pageIsValid('7');
}

$(document).ready(function() {
	/*
	//装载城市
	cityService.getAllCnCity(function(data) {
		citylist = data;
		
	});
	//装载航空公司
	carrierService.getAllCnCarrier(function(data) {
		carrierlist = data;
	});
	//装载送票城市
	cityService.getAllTicketCity(function(data) {
		ticketcitylist = data;
	});*/
	
	//如果出发到达城市有数值，则自动关联
	initCityId();
	//绑定组件
	bindInputComp();
	
	//$(":text").attr("autocomplete", "off");
	//初始化校验框架
	initValidate();
});

function initCityId() {
	if ($("#depCity1").val() != "" ||
		$("#depCity2").val() != "" ||
		$("#arrCity1").val() != "" ||
		$("#arrCity2").val() != "") {
		var i = 0;
		for (i = 0; i < citylist.length; i ++) {
			var city = citylist[i];
			if (city.citycode == $("#depCity1").val()) {
				$("#depCityId1").val(i);
			}
			if (city.citycode == $("#depCity2").val()) {
				$("#depCityId2").val(i);
			}
			if (city.citycode == $("#arrCity1").val()) {
				$("#arrCityId1").val(i);
			}
			if (city.citycode == $("#arrCity2").val()) {
				$("#arrCityId2").val(i);
			}
		}
	}
}

function checkCityInput(textcity, valuecity) {
	var val = valuecity.val();
	
	if (val != "" && val * 1 == parseInt(val)) {
		var cityindex = valuecity.val() * 1;
		var city = citylist[cityindex];
		//如果输入为城市名，则退出
		if (city.citycn == val) return;
		else if (city.airport.length > 1) {
			//如果不是城市则判断是不是机场
			for (var i = 0; i < city.airport.length; i ++) {
				//如果是机场，则退出
				if (city.airport[i].airportshort == val) return;
			}
		}
	}
	//如果都不是，则清空
	textcity.val("");
	valuecity.val("");
	return;
}

function filtCity(input) {
    //如果没有则直接返回空
    if (!citylist) return;
    //自动补全得逻辑
    var arrStart = [];
    var arrMidd = [];
    var count = 0;
    for (var i = 0; i < citylist.length; i ++) {
        var city = citylist[i];
        var cn_pos = city.citycn.indexOf(input);
        var py_pos = city.citypy.toLowerCase().indexOf(input.toLowerCase());
        //如果是以输入字符打头的则添加到arrStart
        if (cn_pos == 0 || py_pos == 0) {
	        arrStart.push([i, city.citycn, city.citypy]);    
            count ++;
	        if (count >= CITY_DISPLAY_MAX) break;
        } else if (cn_pos > 0 || py_pos > 0) {
            //如果是包含此字符则添加到arrMidd
            //如果是超过一个机场的城市，则把机场和城市全部列出来
	        if (input != "" && city.airport.length > 1) {
	        	arrMidd.push([i, city.citycn, city.citypy]);
	        	for (var j = 0; j < city.airport.length; j ++) {
	        		arrMidd.push([i, city.airport[j].airportshort, city.airport[j].airportpy]);
	        	}
	        } else {
	            arrMidd.push([i, city.citycn, city.citypy]);    
            }
        }
        if (input != "" && city.airport.length > 1) {
        //如果是超过一个机场的城市，则把机场和城市全部列出来
	        	for (var j = 0; j < city.airport.length; j ++) {
	        		if (city.airport[j].airportshort.indexOf(input) == 0 ||
	        		   (city.airport[j].airportpy && city.airport[j].airportpy.toLowerCase().indexOf(input.toLowerCase()) == 0)) {
	        			arrStart.push([i, city.airport[j].airportshort, city.airport[j].airportpy]);
	        			count ++;
	        			if (count >= CITY_DISPLAY_MAX) break;
	        		}
	        	}
	    }
    }

    var j = 0;
    while (arrStart.length < 10) {
        if (arrMidd.length - 1 < j) break;
        arrStart.push(arrMidd[j]);
        j ++;
    }
    return arrStart;
}

function fillDepCity1(obj) {
    fillCity(obj, $("#depCityId1"))
}

function fillDepCity2(obj) {
    fillCity(obj, $("#depCityId2"))
}

function fillArrCity1(obj) {
    fillCity(obj, $("#arrCityId1"))
}

function fillArrCity2(obj) {
    fillCity(obj, $("#arrCityId2"))
}

function fillCity(obj, txtcity, txtairport, txtdisplay) {
	//var city = citylist[obj[0]];
	txtcity.val(obj[0]);
	//if (city.citycn == obj[1]) {
		//输入的是城市
		//txtcity.val(city.citycode);
//	} else {
//		//输入的是机场
//		for (var j = 0; j < city.airport.length; j ++) {
//			if (obj[1] == city.airport[j].airportshort) {
//				txtairport.val(city.airport[j].airportcode;
//			}
//		}
//	}
    //txtvalue.attr("value",obj[0]);
    //txtdisplay.attr("value",obj[1]);
}

function filtCarrier(input) {
    if (!carrierlist) return;
    var arrStart = [];
    var arrMidd = [];
    for (var i = 0; i < carrierlist.length; i ++) {
        var carrier = carrierlist[i];
        var cn_pos = carrier.carriercn.indexOf(input);
        var code_pos = carrier.carriercode.toLowerCase().indexOf(input.toLowerCase());
        //如果是以输入字符打头的则添加到arrStart
        if (cn_pos == 0 || code_pos == 0) {
            arrStart.push([carrier.carriercode, carrier.carriercn, carrier.carriercode]);
        } else if (cn_pos > 0 || py_pos > 0) {
            //如果是包含此字符则添加到arrMidd
            arrMidd.push([carrier.carriercode, carrier.carriercn, carrier.carriercode]);
        }
    }
    return arrStart;
}

function fillCarrier(carrier){
	$("#carrier").val(carrier[0]);
    $(":text[@complete=carrier").val(carrier[1]);
}

function filtTicketCity(input) {
    if (!ticketcitylist) return;
    var arrStart = [];
    var arrMidd = [];
    var count = 0;
    for (var i = 0; i < ticketcitylist.length; i ++) {
        var city = ticketcitylist[i];
        var cn_pos = city.citycn.indexOf(input);
        var py_pos = city.citypy.toLowerCase().indexOf(input.toLowerCase());
        //如果是以输入字符打头的则添加到arrStart
        if (cn_pos == 0 || py_pos == 0) {
            arrStart.push([city.cityid, city.citycn, city.citypy]);
            count ++;
            if (count >= CITY_DISPLAY_MAX) break;
        } else if (cn_pos > 0 || py_pos > 0) {
            //如果是包含此字符则添加到arrMidd
            arrMidd.push([city.cityid, city.citycn, city.citypy]);
        }
    }

    var j = 0;
    while (arrStart.length < 10) {
        if (arrMidd.length - 1 < j) break;
        arrStart.push(arrMidd[j]);
        j ++;
    }
    return arrStart;
}

function fillTicketCity(city){
	$("#ticketCity").val(city[0]);
    $("#ticketCitycn").val(city[1]);
}

function isValidateCity(index, cn) {
	if (parseInt(index) != index*1 || cn == "") return false;
	if (!citylist) return false;
	
	var city = citylist[parseInt(index)];
	if (cn == city.citycn) return true;
	else if (city.airport.length > 1) {
		for (var i = 0; i < city.airport.length; i ++) {
			if (cn == city.airport[i].airportshort) return true;
		}
	}
	
	return false;
}

function isValidateTicketCity(citycn) {
	if (citycn == "") return false;
	if (!ticketcitylist) return false;
	for (var i = 0; i < ticketcitylist.length; i ++) {
		var city = ticketcitylist[i];
		if (city.citycn == citycn) {
			return true;
		}
	}
	
	return false;
}

function isValidateCarrier(carriercn, carriercode) {
	if (carriercn == "" || carriercn == "") return false;
	if (!carrierlist) return false;
	for (var i = 0; i < carrierlist.length; i ++) {
        var carrier = carrierlist[i];
        if (carrier.carriercode == carriercode) {
        	return carriercn == carrier.carriercn;
        }
    }
    
    return false;
}

function compareDate(d, compd) {
	var d1, d2;
	d1 = parseDate(d);
	if (!compd || compd == "") {
		var temp = new Date();
		d2 = new Date(temp.getYear() < 1900 ? temp.getYear() + 1900 : temp.getYear(), temp.getMonth(), temp.getDate());
	} else {
		d2 = parseDate(compd);
	}
	return d1.getTime() - d2.getTime();
}

function parseDate(strd) {
	var s = strd;
	var year = s.substring(0, s.indexOf("-"));
	s = s.substr(s.indexOf("-") + 1);
	var month = s.substring(0, s.indexOf("-"));
	s = s.substr(s.indexOf("-") + 1);
	var date = s;
	return new Date(year, parseInt(month) - 1, date);
}

function fillForm(flttype) {
	var type = flttype * 1;
	switch (type) {
	case 1:
        $("#depDisplay1").val($("#txtdepcity").val() == $("#txtdepcity").attr("prompt") ? "" : $("#txtdepcity").val());
		$("#arrDisplay1").val($("#txtarrcity").val() == $("#txtarrcity").attr("prompt") ? "" : $("#txtarrcity").val());
        $("#fltDate1").val($("#txtfltdate").val() == $("#txtfltdate").attr("prompt") ? "" : $("#txtfltdate").val());
        $("#depTime1").val($("#seldeptime").val());
		
        $("#depDisplay2").val("");
		$("#arrDisplay2").val("");
        $("#fltDate2").val("");
        $("#depTime2").val("");
        break;
    case 2:
		$("#depDisplay1").val($("#txtdepcity").val() == $("#txtdepcity").attr("prompt") ? "" : $("#txtdepcity").val());
		$("#arrDisplay1").val($("#txtarrcity").val() == $("#txtarrcity").attr("prompt") ? "" : $("#txtarrcity").val());
        $("#fltDate1").val($("#txtfltdate").val() == $("#txtfltdate").attr("prompt") ? "" : $("#txtfltdate").val());
        $("#depTime1").val($("#seldeptime").val());

        $("#depDisplay2").val("");
		$("#arrDisplay2").val("");
        $("#fltDate2").val($("#txtbackdate").val() == $("#txtbackdate").attr("prompt") ? "" : $("#txtbackdate").val());
        $("#depTime2").val($("#selbaktime").val());
        break;
    case 3:
		$("#depDisplay1").val($("#txtdepcity1").val() == $("#txtdepcity1").attr("prompt") ? "" : $("#txtdepcity1").val());
		$("#arrDisplay1").val($("#txtarrcity1").val() == $("#txtarrcity1").attr("prompt") ? "" : $("#txtarrcity1").val());
        $("#fltDate1").val($("#txtfltdate1").val() == $("#txtfltdate1").attr("prompt") ? "" : $("#txtfltdate1").val());
        $("#depTime1").val($("#seldeptime1").val());
          	
		$("#depDisplay2").val($("#txtdepcity2").val() == $("#txtdepcity2").attr("prompt") ? "" : $("#txtdepcity2").val());
		$("#arrDisplay2").val($("#txtarrcity2").val() == $("#txtarrcity2").attr("prompt") ? "" : $("#txtarrcity2").val());
        $("#fltDate2").val($("#txtfltdate2").val() == $("#txtfltdate2").attr("prompt") ? "" : $("#txtfltdate2").val());
        $("#depTime2").val($("#seldeptime2").val());
        break;
	}
	
    fillCityAndAirport($("#depDisplay1").val() == $("#depDisplay1").attr("prompt") ? "" : $("#depDisplay1").val(), $("#depCityId1"), $("#depCity1"), $("#depDrome1"));
    fillCityAndAirport($("#arrDisplay1").val() == $("#arrDisplay1").attr("prompt") ? "" : $("#arrDisplay1").val(), $("#arrCityId1"), $("#arrCity1"), $("#arrDrome1"));
    fillCityAndAirport($("#depDisplay2").val() == $("#depDisplay2").attr("prompt") ? "" : $("#depDisplay2").val(), $("#depCityId2"), $("#depCity2"), $("#depDrome2"));
    fillCityAndAirport($("#arrDisplay2").val() == $("#arrDisplay2").attr("prompt") ? "" : $("#arrDisplay2").val(), $("#arrCityId2"), $("#arrCity2"), $("#arrDrome2"));
    //如果没有选择送票城市，则默认为出发城市
    if ($.trim($("#ticketCitycn").val()) == "" || $.trim($("#ticketCitycn").val()) == $("#ticketCitycn").attr("prompt")) {
    	if ($("#depDisplay1").val() != "" && $("#depCityId1").val()*1 == parseInt($("#depCityId1").val())) {
	    	var city = citylist[$(":hidden[@name=depCityId1]").val() * 1];
	    	$("#ticketCitycn").val(city.citycn);
    	}
    }
    return true;
}

function fillCityAndAirport(display, txtid, txtcity, txtdrome) {
	var val = txtid.val();
	if (val != "" && val * 1 == parseInt(val)) {
		var city = citylist[val * 1];
		//如果是城市，则填写城市，
		if (city.citycn == display) {
			txtcity.val(city.citycode);
			txtdrome.val("");
			return true;
		} else {
			//如果不是城市，则看机场
			for (var i = 0; i < city.airport.length; i ++) {
				if (city.airport[i].airportshort == display) {
					txtcity.val(city.citycode);
					txtdrome.val(city.airport[i].airportcode);
					return true;
				}
			}
		}
	} else if (display != "") {
		var input = display;
		for (var i = 0; i < citylist.length; i ++) {
			if (citylist[i].citycn != input && citylist[i].airport.length <= 1) {
				continue;
			} else if (citylist[i].citycn == input) {
				txtcity.val(citylist[i].citycode);
				txtdrome.val("");
				txtid.val(i);
				return true;
			} else if (citylist[i].airport.length > 1) {
				for (var j = 0; j < citylist[i].airport.length; j ++) {
					if (citylist[i].airport[j].airportshort == input) {
						txtcity.val(citylist[i].citycode);
						txtdrome.val(citylist[i].airport[j].airportcode);
						txtid.val(i);
						return true;
					}
				}
			}
		}
	}
	txtcity.val("");
	txtdrome.val("");
	txtid.val("");
	return false;
}

