

function address_on_keypressed_preview(event) {
    if(window._form_keypressed_delay && _form_keypressed_delay) {
        clearTimeout(_form_keypressed_delay);
        _form_keypressed_delay = null;
    }
    
    _form_keypressed_delay = setTimeout(function() {
		ajax_loading_start();								
    	var address=$("#price_comparison_lobang_location_address").val();
    	var location_preview_address_geocoder = new GClientGeocoder();
    	if(address.toLowerCase().indexOf("singapore")<0){
    		address+=" singapore";
    	}
    	$("#lobang_submission_location_supplement_title").html($("#price_comparison_lobang_location").val()+" - "+ address);
    	location_preview_address_geocoder.getLocations(address,gmap_got_response_preview );
    	$("#lobang_submission_location_supplement").slideDown("slow");
    	ajax_loading_stop();
    }, 1500);
}


function cancel_product_preview(input){
	$("#lobang_submission_product_supplement").slideUp("slow");
	$("#price_comparison_product_name").val($("#price_comparison_product_name").attr("defaultText"));
	$("#price_comparison_product_id").val("");
	$("#price_comparison_product_type").val("");
	$("#price_comparison_product_slug").val("");
	$("#price_comparison_product_name").click();
	$("#price_comparison_product_name").focus();
}

function cancel_location_preview(input){
	$("#lobang_submission_location_supplement").slideUp("slow");
	$("#lobang_submission_main_address").slideUp("slow");
	$("#price_comparison_lobang_location").val($("#price_comparison_lobang_location").attr("defaultText"));
	$("#price_comparison_lobang_location_id").val("");
	$("#price_comparison_lobang_location_type").val("");
	$("#price_comparison_lobang_location").click();
	$("#price_comparison_lobang_location").focus();
}

function ajax_loading_stop(){
	if ($("#lobang_submission_main_form_submit_loading").is(":visible")){
		$("#lobang_submission_main_form_submit_loading").hide();
	}
}
function ajax_loading_start(){
	if (!$("#lobang_submission_main_form_submit_loading").is(":visible")){
		$("#lobang_submission_main_form_submit_loading").show();
	}
}

function product_preview(){
	var slug = $("#price_comparison_product_slug").val();
	var url = "/singapore/3/product_preview/"+slug;
	
	$.ajax({
		type: "GET",
		url: url,
		dataType: "text",
		beforeSend: function(xhr) {
			ajax_loading_start();
		}, 
		complete: function(){
			ajax_loading_stop();
		},
		success: function(data){
			var jsonObj = JSON.parse(data);
			var image_url = jsonObj.image_url;
			var title = jsonObj.title;
			if(image_url)
			{
			
				$("#lobang_submission_product_supplement_image").attr("src",image_url);
				$("#lobang_submission_product_supplement_image_title").html(title);
				$("#lobang_submission_location_supplement").hide();
				$("#lobang_submission_product_supplement").show();
			}
		},
		error: function(xhr){
			//alert('error'+xhr);
		}
	});
}

function init_product_name_autocomplete(target_url){
    $("#price_comparison_product_name").autocomplete(target_url, {
		  minChars: 1,
		  dataType:'text',
		  delay: 300,
		  beforeSend: function(xhr) {
			ajax_loading_start();
		  }, 
			complete: function(){
				ajax_loading_stop();
		  },
		  matchSubset:false, // also bugged...
		  highlight:function(match,keywords){
    		keywords = keywords.split(' ').join('|');
    		return match.replace(new RegExp("("+keywords+")", "gi"),'<b>$1</b>');
    		},
		  parse:function(data){
			var array=new Array();
			var jsonObj = JSON.parse(data);
			product_results = jsonObj.results;
			
			for(var i=0; i< product_results.length;i++)
			{
			 array[i]= {
					    data: product_results[i] , 
			            value: product_results[i].id, 
					    result: product_results[i].title 
					    }
			}
          return array;
			}, 
			formatItem:function(data){
				return data.title;
          },																										   
			formatResult: function(data){
				return data.title;
          }

		  } ).result(function(event, item) {
				$("#price_comparison_product_id").val(item.id);
				$("#price_comparison_product_slug").val(item.slug);
				$("#price_comparison_product_type").val(item.type);
				product_preview();
      });
}

function init_lobang_location_autocomplete(target_url){
    $("#price_comparison_lobang_location").autocomplete(target_url, {
		  minChars: 1,
		  dataType:'text',
		  beforeSend: function(xhr) {
			ajax_loading_start();
		  }, 
			complete: function(){
				ajax_loading_stop();
		  },
		  matchSubset:false,
		  highlight:function(match,keywords){
    		keywords = keywords.split(' ').join('|');
    		return match.replace(new RegExp("("+keywords+")", "gi"),'<b>$1</b>');
    		},
		  parse:function(data){
			var array=new Array();
			var jsonObj = JSON.parse(data);
			retailer_results = jsonObj.results;
			
			for(var i=0; i< retailer_results.length;i++)
			{
				array[i]= {
					    data: retailer_results[i] , 
			            value: retailer_results[i].id, 
					    result: retailer_results[i].title 
					    }
			}
			return array;
			}, 
			formatItem:function(data){
				return data.title;
			},																										   
			formatResult: function(data){
				return data.title;
			}

		  } ).result(function(event, item) {
			  	if(item){
			  		$("#price_comparison_lobang_location_type").val(item.type);
			  		$("#price_comparison_lobang_location_id").val(item.id);
			  		location_preview(item.id,$("#price_comparison_lobang_location_type").val(),item.type);
			  		$("#lobang_submission_main_address").hide();
			  	} else {
			  		var cur_loc_val = $("#price_comparison_lobang_location").val();
			  		if($("#price_comparison_lobang_location").attr("defaultText")!=cur_loc_val && cur_loc_val.trim()!="" ){
				  		// this condition means that the user has not selected a location from the autocomplete
				  		$('#price_comparison_lobang_location_type').val('USER_ENTERED');
				  		$("#price_comparison_lobang_location_id").val("");
				  		$("#lobang_submission_main_address").show();
				  		$("#lobang_submission_location_supplement").hide();
				  		$("#price_comparison_lobang_location_address").click();
				  		$("#price_comparison_lobang_location_address").focus();			
				  		$("#lobang_submission_location_supplement_title").html("");
			  		}
			  	}
      });    
    // this is part of the hack to detect that the user has not selected from the autocomplete
    $("#price_comparison_lobang_location").blur(function(){
    	$("#price_comparison_lobang_location").search();
    });
}



function location_preview(location_id,location,location_type){
	var url = "/singapore/5/retailer_get_locations/"+location_id+"/";
	
	$.ajax({
		type: "GET",
		url: url,
		dataType: "text",
		beforeSend: function(xhr) {
			ajax_loading_start();
		}, 
		complete: function(){
			ajax_loading_stop();
		},
		success: function(data){
			var jsonObj = JSON.parse(data);
			var locations = jsonObj.locations;
			var title=$("#price_comparison_lobang_location").val()+" - ";
			for(i=0;i<locations.length;i++){
				title+=locations[i].address;
				if(i<locations.length-1){
					title+=", ";
				} 
			}
			$("#lobang_submission_location_supplement_title").html(title)
			$("#lobang_submission_product_supplement").hide();
			$("#lobang_submission_location_supplement").show();
			$(document).ready(function() {
				location_preview_gmap_retailer_initialize(locations);//use the jquery function rather than google.setOnLoadCallback which seems to cause wierd error if inside ajax.. 
			});
		},
		error: function(xhr){
			//alert('error'+xhr);
		}
	});
}

function lobang_submission_main_submit(form){
	url = $(form).attr("action");
	$(".errors").html("");
	
	$.ajax({
		type: "POST",
		url: url,
		data: $(form).serialize(),
		dataType: "text",
		beforeSend: function(xhr) {
			ajax_loading_start();
		}, 
		complete: function(){
			ajax_loading_stop();
		},		
		success: function(data){
			var jsonObj = JSON.parse(data);
			var rc = jsonObj.rc;
			var result = jsonObj.result;
			if(rc!="0"){
				for(item in result){
					$("#"+item+"_errors").html(result[item]);
				}
			}else{
				window.location.replace(result);
			}
		},
		error: function(xhr){
			//alert('error'+xhr);
		}
	});
	return false;
}
