
DiscountSearchForm = new function() {
	this.onCardTypeLoad = function(form) {
		new Ajax.Request("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=discountCardsList", {
			parameters: {cardType : $F(form["cardType"])},
			onSuccess: function(transport) {
				Util.updateOptions($(form["cardType"]).options,
					transport.responseText.evalJSON());
			},
			onFailure: function(transport) {
				Util.handleAjaxError(transport);
			}
		});
	}
	this.onCardTypeChange = function(form) {
		new Ajax.Request("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=discountCityList", {
			parameters: {cardType : $F(form["cardType"])},
			onSuccess: function(transport) {
				Util.updateOptions($(form["city"]).options,
					transport.responseText.evalJSON());
				DiscountSearchForm.onCityChange(form);
			},
			onFailure: function(transport) {
				Util.handleAjaxError(transport);
			}
		});
	}
	
	this.onCityChange = function(form) {
		new Ajax.Request("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=discountCategoryList", {
			parameters: {
				cardType : $F(form["cardType"]),
				city : $F(form["city"])
			},
			onSuccess: function(transport) {
				Util.updateOptions($(form["category"]).options,
					transport.responseText.evalJSON());
			},
			onFailure: function(transport) {
				Util.handleAjaxError(transport);
			}
		});
	}
}

CourseSearchForm = new function() {
	this.onLanguageLoad = function(form) {
		$.ajax("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=courseLanguageList",{
			data: {lang : form["lang"].value},
			dataType: "json",
			type: "POST",
			success: function (transport) {
				var select = $(form["lang"]);
				var noValueText = select.find('option[value=""]').html();
				Util.updateOptions(form["lang"].options,
						transport);
				select.find('option[value=""]').html(noValueText); 
				select.jqTransformUpdateSelect();
			},
			error: function (transport) {
				Util.handleAjaxError(transport);
			}
		});
	}

	this.onLanguageChange = function(form) {
		$.ajax("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=courseCountryList", {
			data: {lang: form["lang"].value},
			dataType: "json",
			type: "POST",
			success: function(transport) {
				var select = $(form["country"]);
				var noValueText = select.find('option[value=""]').html();
				Util.updateOptions(form["country"].options,
						transport);
				select.find('option[value=""]').html(noValueText); 
				select.jqTransformUpdateSelect();
				CourseSearchForm.onCountryChange(form);
			},
			error: function(transport) {
				Util.handleAjaxError(transport);
			}
		});
	}
	
	this.onCountryChange = function(form) {
		$.ajax("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=courseTypeList", {
			data: { lang: form["lang"].value, 
					country: form["country"].value},
			dataType: "json",
			type: "POST",
			success: function(transport) {
				var select = $(form["type"]);
				var noValueText = select.find('option[value=""]').html();
				Util.updateOptions(form["type"].options,
						transport);
				select.find('option[value=""]').html(noValueText);
				select.jqTransformUpdateSelect();
			},
			error: function(transport) {
				Util.handlerAjaxError(transport);
			}
		});
	}
}

TourSearchForm = new function() {
	
	this.fillDates = function (sourceInputName, form) {
        var date = $(form).find('input[name="' + sourceInputName + '"]').get(0).value;
        var parts = date.split('\.');
        form.find('input[name="' + sourceInputName + '_day"]').attr('value', parts[0]);
        form.find('input[name="' + sourceInputName + '_month"]').attr('value', parts[1]);
        form.find('input[name="' + sourceInputName + '_year"]').attr('value', parts[2]);
    }
	
	
	this.onContinentLoad = function(form, callback) {
		jQuery.ajax("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=tourContinentList", {
			data: {continent : $(form).find("select[name='continent']").get(0).value},
			dataType: "json",
			success: function(data, textStatus, jqXHR) {
				Util.updateOptions($(form["continent"]).get(0).options,data);
				$(form["continent"]).jqTransformUpdateSelect();
				if (callback != undefined) {
					callback();
				}
			},
			error: function(jqXHR, textStatus, errorThrown) {
				//Util.handleAjaxError(transport);
				alert(errorThrown);
			}
		});
	}
	this.onContinentChange = function(form, callback) {
		new jQuery.ajax("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=tourCountryList", {
			data: {continent : $(form).find("select[name='continent']").get(0).value},
			dataType: "json",
			success: function(data, textStatus, jqXHR) {
				Util.updateOptions($(form["country"]).get(0).options,data);
				//TourSearchForm.onCountryChange(form);
				$(form["country"]).jqTransformUpdateSelect();
				if (callback != undefined) {
					callback();
				}
			},
			error: function(jqXHR, textStatus, errorThrown) {
				//Util.handleAjaxError(transport);
				alert(errorThrown);
			}
		});
	}
	
	this.onCountryChange = function(form, callback) {
		new jQuery.ajax("/system/modules/com.gridnine.opencms.modules.startravel2/elements/search-form.jsp?command=tourTypeList", {
			data: {
				continent : $(form).find("select[name='continent']").get(0).value,
				country : $(form).find("select[name='country']").get(0).value
			},
			dataType: "json",
			success: function(data, textStatus, jqXHR) {
				Util.updateOptions($(form["type"]).get(0).options,data);
				$(form["type"]).jqTransformUpdateSelect();
				if (callback != undefined) {
					callback();
				}
			},
			error: function(jqXHR, textStatus, errorThrown) {
				//Util.handleAjaxError(transport);
				alert(errorThrown);
			}
		});
	}
}

Util = new function() {
	this.handleAjaxError = function(transport) {
		alert("Error:\n\n" + transport.responseText);
	}
	
	this.updateOptions = function(options, arr) {
		var curr = options[options.selectedIndex].value;
		options.length = 0;
		options[0] = new Option("-", "");
		for (var i = 0; i < arr.length; i++) {
			options[i + 1] = new Option(arr[i].value, arr[i].name);
			if (arr[i].name == curr) {
				options.selectedIndex = i + 1;
			}
		}
	}
}


