YAHOO.namespace ("infonet.wizard");

YAHOO.infonet.wizard.Data = {
	streets: [],
	houses: []
};

(function() {
	    var Event = YAHOO.util.Event,
	        Dom   = YAHOO.util.Dom,
	        lang  = YAHOO.lang,
	        StreetId = 0

	    Event.onDOMReady(function() {
	    	StreetId = $("#street_list").val();

			//var oDS_Streets = new YAHOO.util.LocalDataSource(YAHOO.infonet.wizard.Data.streets);
			//oDS_Streets.responseSchema = {fields : ["name", "id"]};

			//Use an XHRDataSource
	    	var  oDS_Streets  = new YAHOO.util.XHRDataSource('/'+language+'/ajax/street');
			oDS_Streets.responseType = YAHOO.util.XHRDataSource.TYPE_JSARRAY;
			oDS_Streets.responseSchema = {fields : ["name", "id"]};

		    // Instantiate the AutoComplete
		    var oAC_Streets = new YAHOO.widget.AutoComplete("street_name", "street_container", oDS_Streets);

		    oAC_Streets.resultTypeList = false;
		    oAC_Streets.useShadow = true;
		    oAC_Streets.applyLocalFilter = true;
			oAC_Streets.maxResultsDisplayed = 15;

		    oAC_Streets.itemSelectEvent.subscribe(function(sType, aArgs) {
		        var myAC = aArgs[0]; // reference back to the AC instance
		        var elLI = aArgs[1]; // reference to the selected LI element
		        var oData = aArgs[2]; // object literal of selected item's result data

		        // update hidden form field with the selected item's ID
		        $("#street_list").val(oData.id);
	    		$("#house_list").val('');
	    		$("#house_name").val('');
		        $('#package-selector').remove();

				StreetId = oData.id;

				return;

//		        var url = '/'+language+'/ajax/house/street_id/'+oData.id;
//
//		        //YAHOO.infonet.wizard.Data.houses = [];
//		        $.getJSON(url, function(data){
//	        		$.each(data, function(i,item){
//	        			YAHOO.infonet.wizard.Data.houses.push( {id: item.id, name: item.name} );
//        			});
//		        });
		    });

			oAC_Streets.filterResults = function(sQuery, oFullResponse, oParsedResponse, oCallback) {
			    // If AC has passed a query string value back to itself, grab it
			    if(oCallback && oCallback.argument && oCallback.argument.query) {
			        sQuery = oCallback.argument.query;
			    }

			    // Only if a query string is available to match against
			    if(sQuery && sQuery !== "") {
			        // First make a copy of the oParseResponse
			        oParsedResponse = YAHOO.widget.AutoComplete._cloneObject(oParsedResponse);

			        var oAC = oCallback.scope,
			            oDS = this,
			            allResults = oParsedResponse.results, // the array of results
			            filteredResults = [], // container for filtered results
			            bMatchFound = false,
			            bMatchCase = (oDS.queryMatchCase || oAC.queryMatchCase), // backward compat
			            bMatchContains = (oDS.queryMatchContains || oAC.queryMatchContains); // backward compat

			        // Loop through each result object...
			        for(var i = allResults.length-1; i >= 0; i--) {
			            var oResult = allResults[i];

			            // Grab the data to match against from the result object...
			            var sResult = null;

			            // Result object is a simple string already
			            if(YAHOO.lang.isString(oResult)) {
			                sResult = oResult;
			            }
			            // Result object is an array of strings
			            else if(YAHOO.lang.isArray(oResult)) {
			                sResult = oResult[0];

			            }
			            // Result object is an object literal of strings
			            else if(this.responseSchema.fields) {
			                var key = this.responseSchema.fields[0].key || this.responseSchema.fields[0];
			                sResult = oResult[key];
			            }
			            // Backwards compatibility
			            else if(this.key) {
			                sResult = oResult[this.key];
			            }

			            if(YAHOO.lang.isString(sResult)) {
			                var sKeyIndex = (bMatchCase) ?
			                sResult.indexOf(decodeURIComponent(sQuery)) :
			                sResult.toLowerCase().indexOf(decodeURIComponent(sQuery).toLowerCase());

			                // A STARTSWITH match is when the query is found at the beginning of the key string...
			                if((!bMatchContains && (sKeyIndex === 0)) ||
			                // A CONTAINS match is when the query is found anywhere within the key string...
			                (bMatchContains && (sKeyIndex > -1))) {
			                    // Stash the match
			                    filteredResults.unshift(oResult);
			                }else{
			                	var q = decodeURIComponent(sQuery).toLowerCase().replace('ü','u').replace('ä','a').replace('õ','o').replace('ö','o');
			                	var s = sResult.toLowerCase().replace('ü','u').replace('ä','a').replace('õ','o').replace('ö','o');

			                	if ( s.indexOf(q) === 0 ){
			                		filteredResults.unshift(oResult);
			                	}
			                }
			            }
			        }
			        oParsedResponse.results = filteredResults;
			    }
			    else {

			    }

			    return oParsedResponse;
			};

	    	oAC_Streets.unmatchedItemSelectEvent.subscribe(function (sType, aArgs) {
	    		$("#street_list, #house_list, #house_name").val('');
		        $('#package-selector').remove();
	    	});

			//var oDS_Houses = new YAHOO.util.LocalDataSource(YAHOO.infonet.wizard.Data.houses);
			//oDS_Houses.responseSchema = {fields : ["name", "id"]};

			//Use an XHRDataSource
	    	var  oDS_Houses  = new YAHOO.util.XHRDataSource();
			oDS_Houses.responseType = YAHOO.util.XHRDataSource.TYPE_JSARRAY;
			oDS_Houses.responseSchema = {fields : ["name", "id"]};

			// Instantiate the AutoComplete
		    var oAC_Houses = new YAHOO.widget.AutoComplete("house_name", "house_container", oDS_Houses);

		    oAC_Houses.resultTypeList = false;
			oAC_Houses.useShadow = true;
		    oAC_Houses.applyLocalFilter = true;
			oAC_Houses.maxResultsDisplayed = 15;

			oAC_Houses.itemSelectEvent.subscribe(function(sType, aArgs) {
		        var myAC = aArgs[0]; // reference back to the AC instance
		        var elLI = aArgs[1]; // reference to the selected LI element
		        var oData = aArgs[2]; // object literal of selected item's result data

		        // update hidden form field with the selected item's ID
		        $("#house_list").val(oData.id);
		        $('#package-selector').remove();
		    });

	    	oAC_Houses.unmatchedItemSelectEvent.subscribe(function (sType, aArgs) {
	    		$("#house_list").val('');
		        $('#package-selector').remove();
	    	});

	    	oAC_Houses.generateRequest = function(sQuery) {
	    		return '/'+language+'/ajax/house/street_id/'+StreetId+'?query='+sQuery;
			};
	    });
})();

$(document).ready(function(){
	$("input.optional").bind(($.browser.msie ? "click" : "change"), function(event){
		var form = $(this.form);
		var price = parseFloat(this.form.package_price.value);

		form.find("input.optional:checked").each(function(i){
			var o = $(this);
			price += parseFloat(o.attr('price'));
		});

		form.find(".package-price").html(price);
		form.find(".package-price-eur").html( (price/15.6466).toFixed(2) );
    });
});
