var imageSearch;
var year;
var make;
var model;
var date = new Date();
var car_pictures;
var current_picture = 0;

google.load('search', '1');

function searchComplete(searcher) {
	if (searcher.results && searcher.results.length > 0) 
	{
		car_pictures = new Array();
		current_picture = 0;
		
		var upper = (searcher.results.length > 5)? 5 : searcher.results.length;
		
		var string = "";
		for( var ii=0; ii<upper; ii++)
		{
			var url = searcher.results[ii].tbUrl.split("::");
			var completeUrl = "http://" + url[1];
			car_pictures.push(completeUrl);
			
			string = string + "<span id='ct-" + ii + "'></span>";
		}
		$("#counter").html(string);
		$("#counter span#ct-0").addClass("current-image");
		
		$('#car-image').css("background", "url(" + car_pictures[current_picture] + ") no-repeat scroll center center #000000");
		$("#car-image").slideDown();
	}
	else 
	{
		$("#car-image").slideUp();
	}
}

function OnLoad() {
	imageSearch = new google.search.ImageSearch();
	//imageSearch.setRestriction(google.search.ImageSearch.RESTRICT_IMAGESIZE, google.search.ImageSearch.IMAGESIZE_MEDIUM);
	imageSearch.setSiteRestriction("flickr.com");
	imageSearch.setSearchCompleteCallback(this, searchComplete, [imageSearch]);  
}

google.setOnLoadCallback(OnLoad);

function showMakeOptions(json)
{
	var select = document.getElementById("make_options"); 
	select.disabled = false;
	select.onchange = getModels;
	select.options[select.selectedIndex].disabled = true; 
	select.options[select.selectedIndex].text = "Select Make";
	
	var cars = new Array();
	
	for (var i = 0; i < json.feed.entry.length; ++i)
	{
		var entry = json.feed.entry[i];
		if (entry.title.$t == "make(text)") 
		{
			makeList = entry.gm$attribute.gm$value;
			for (var j = 0; j < makeList.length; ++j)
			{
				maker = makeList[j].$t;
				firstLetter = maker.substr(0, 1);
				cars.push(firstLetter.toUpperCase() + maker.substr(1));
			}
			break;
		}
	}
	cars.sort();
	for (var j = 0; j < cars.length; ++j)
	{
		var option = document.createElement("option");
		option.appendChild(document.createTextNode(cars[j]));
		select.appendChild(option);
	}
	var option = document.createElement("option");
	option.appendChild(document.createTextNode("Other"));
	select.appendChild(option);
	document.getElementById("makes_container").appendChild(select);
}

function showModelOptions(json) {
	var select = document.getElementById("model_options");
	select.disabled = false;
	select.options[0].disabled = true;
	
	while (select.length > 1) 
	{
		select.remove(1);
	}
	
	var models = new Array();
	
	for (var i = 0; i < json.feed.entry.length; ++i) 
	{
		var entry = json.feed.entry[i];
		
		if (entry.title.$t == "model(text)") 
		{
			makeList = entry.gm$attribute.gm$value;
			for (var j = 0; j < makeList.length; ++j) 
			{
				maker = makeList[j].$t;
				firstLetter = maker.substr(0, 1);
				models.push(firstLetter.toUpperCase() + maker.substr(1));
			}
			break;
		}
	}
	
	models.sort();
	
	for (var j = 0; j < makeList.length; ++j) 
	{
		var option = document.createElement("option");
		option.appendChild(document.createTextNode(models[j]));
		select.appendChild(option);
	}
	
	var option = document.createElement("option");
	option.appendChild(document.createTextNode("Other"));
	select.appendChild(option);
}
function getMakeOptions() {
	var attributesElement = document.createElement("script");
	attributesElement.setAttribute("id", "attributes");
	attributesElement.setAttribute("src", "http://www.google.com/base/feeds/attributes/-/vehicles?max-values=40" + "&alt=json-in-script&callback=showMakeOptions");
	attributesElement.setAttribute("type", "text/javascript");
	document.documentElement.firstChild.appendChild(attributesElement);
}

function getModels() {
	makeOptions = document.getElementById("make_options");
	make = makeOptions.options[makeOptions.selectedIndex].text;
	
	var attributesElement = document.createElement("script");
	attributesElement.setAttribute("id", "attributes");
	attributesElement.setAttribute("src", ['http://www.google.com/base/feeds/attributes/-/vehicles?max-values=30','&bq=[make:', make, ']&alt=json-in-script&callback=showModelOptions'].join(''));
	attributesElement.setAttribute("type", "text/javascript");
	
	document.documentElement.firstChild.appendChild(attributesElement);
}

function canMakeSearch()
{
	if(
	   $("#make_options").val() != "Select Make" && 
	   $("#make_options").val() != "Other" && 
	   $("#model_options").val() != "Select Model" && 
	   $("#model_options").val() != "Other" && 
	   $("#year").val() != "year" && 
	   $("#year").val() != "" &&
	   parseInt($("#year").val(),10) <= date.getFullYear()
	   )
	{
		return true;
	}
	else return false;
}

function sendMail(data){
	$.ajax({
		url: "php/sendMail.php",	
		type: "GET",	
		data: data,		
		cache: false,
		success: function (html) {				
			if (html==1) {
				$("#name,#email").val("");
				$('#submit').val("Send Another").addClass('c-bold');
				$(".form").children().children().removeAttr('disabled').prev().show();
			} else alert('Sorry, unexpected error. Please try again later.');				
		}		
	});
}

function checkEmail(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1)
	{
		return false
	}
	
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
	{
		return false
	}
	
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
	{
		return false
	}
	
	if (str.indexOf(at,(lat+1))!=-1)
	{
		return false
	}
	
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
	{
		return false
	}
	
	if (str.indexOf(dot,(lat+2))==-1)
	{
		return false
	}
	
	if (str.indexOf(" ")!=-1)
	{
		return false
	}
	
	return true					
}
 
$(document).ready(function(){
	
	// INIT FORM
	
	getMakeOptions();
	$("#makes_container, #models_container, #makes_container_text, #models_container_text, .more-info, #car-image, .sending, .thanks").hide();
	//$("label").remove();
	$('#colors').val("-- Color --");
	$('#condition').val("-- Condition --");
	$('#miles').val("-- Miles --");
	
		//FILE UPLOAD
	
	var imgs = new Array();
	$('#fileInput').uploadify({
		'uploader'  : 'images/uploadify.swf',
		'script'    : '../php/uploadify.php',
		'cancelImg' : 'images/cancel.png',
		'width'		: 131,
		'height'	: 43,
		'auto'      : true,
		'folder'    : '/uploads/'+date.getFullYear()+"-"+date.getMonth()+"-"+date.getDate(),
		'multi'		: true,
		'fileDesc'	: 'Image Files',
		'fileExt'	: '*.jpg;*.jpeg;*.png;*.gif',
		'sizeLimit' : 1000000,
		'wmode'		: 'transparent',
		'displayData': 'percentage',
		'buttonImg'	: 'images/upload.png',
		'scriptData': {'name': $("#name").val() + $("#year").val() + $("#make").val() + $("#model").val()},
		onComplete	: function (event, queueID, fileObj, reposnse, data) {
			id = fileObj.name.substring(0,fileObj.name.length-4);
			path = fileObj.filePath.replace(" ","-");
			$('.upload').append('<div class="uploadedImg" style="background: url(' + path + ') center center no-repeat #444" id='+(imgs.length-1)+'><span>X</span><p>'+fileObj.name+'</p></div>');
			imgs.push(path);
		}
	});
	
	// HANDLE PICTURE ROTATION
	
	$("#flick-controls span#back").click(function(){
		
		if(current_picture == 0) current_picture = car_pictures.length-1;
		else current_picture--;
				
		$("#counter").children().removeClass("current-image");
		$("#counter span#ct-" + current_picture).addClass("current-image");
		
		$('#car-image').css("background", "url(" + car_pictures[current_picture] + ") no-repeat scroll center center #000000");
	});
	
	$("#flick-controls span#forward").click(function(){
		
		if(current_picture == car_pictures.length-1) current_picture = 0;
		else current_picture++;
		
		$("#counter").children().removeClass("current-image");
		$("#counter span#ct-" + current_picture).addClass("current-image");
		
		$('#car-image').css("background", "url(" + car_pictures[current_picture] + ") no-repeat scroll center center #000000");
	});
	
	//HANDLE FORM INPUT
	
	$("#year").livequery(function(){
		$(this).change(function()
		{
			if($(this).val() != "year" && $(this).val() != "" && $(this).val().length == 4)
			{
				year = $(this).val();
				$("#makes_container").slideDown();
				if(canMakeSearch())
				{
					imageSearch.execute(year + " " + make + " " + model);
				}
			}	
		});
	});
	
	$("#year").livequery(function(){
		$(this).keyup(function()
		{
			if($(this).val() != "year" && $(this).val() != "" && $(this).val().length == 4)
			{
				year = $(this).val();
				$("#makes_container").slideDown().focus();
				$("#models_container").slideDown();
				if(canMakeSearch())
				{
					imageSearch.execute(year + " " + make + " " + model);
				}
			}
	
		});
	});
	$("#makes_container").livequery(function(){
		$(this).bind(($.browser.msie ? "click" : "change"), function ()
		{
			if($("#make_options").val() != "Other" && $("#make_options").val() != "Select Make")
			{
				make = $("#make_options").val();
				if($("#make_options").val() != "Other")
					$("#models_container").slideDown().focus();
			}
			
			if(canMakeSearch())
			{
				imageSearch.execute(year + " " + make + " " + model);
			}
			
			if($("#make_options").val() == "Other")
			{
				$("#makes_container_text").slideDown();
				$("#models_container_text").slideDown();
				$("#models_container").slideUp()
			}
			else 
			{
				$("#makes_container_text").slideUp();
				$("#models_container_text").slideUp();
			}
		});
	});
	$("#makes_container").livequery(function(){
		$(this).click(function()
		{
			if($("#make_options").val() != "Other" && $("#make_options").val() != "Select Make")
			{
				make = $("#make_options").val();
				if($("#make_options").val() != "Other")
					$("#models_container").slideDown().focus();
			}
			
			if(canMakeSearch())
			{
				imageSearch.execute(year + " " + make + " " + model);
			}
			
			if($("#make_options").val() == "Other")
			{
				$("#makes_container_text").slideDown();
				$("#models_container").slideUp()
			}
			else 
			{
				$("#makes_container_text").slideUp();
				$("#models_container_text").slideUp();
			}
		});
	});
	$("#models_container").livequery(function(){
		$(this).bind(($.browser.msie ? "click" : "change"), function ()
		{
			if($("#model_options").val() != "Other" && $("#model_options").val() != "Select Model")
			{
				model = $("#model_options").val();
				$(".more-info").slideDown().focus();
			}
			if(canMakeSearch())
			{
				imageSearch.execute(year + " " + make + " " + model);
			}
			if($("#model_options").val() == "Other")
			{
				$("#models_container_text").slideDown();
			}
			else $("#models_container_text").slideUp();
		});
	});
	$("#models_container").livequery(function(){
		$(this).click(function()
		{
			if($("#model_options").val() != "Other" && $("#model_options").val() != "Select Model")
			{
				model = $("#model_options").val();
				$(".more-info").slideDown().focus();
			}
			if(canMakeSearch())
			{
				imageSearch.execute(year + " " + make + " " + model);
			}
			if($("#model_options").val() == "Other")
			{
				$("#models_container_text").slideDown();
			}
			else $("#models_container_text").slideUp();
		});
	});
	
	$("#make, #model").livequery(function(){
		$(this).blur(function(){
			if($(this).val() != "" && $(this).val() != $(this).attr("name"))
			{
				if($(this).attr("name") == "make"){
					make = $(this).val();
					$("#models_container_text").slideDown();
				}
				if($(this).attr("name") == "model")
				{ 
					$(".more-info").slideDown();
					model = $(this).val();
					if($("#make").val() != $("#make").attr("name") && $("#model").val() != $("#model").attr("name") && $("#year").val() != $("#year").attr("name") &&
					   $("#make").val() != "" && $("#model").val() != "" && $("#year").val() != ""
					   )
					{
						imageSearch.execute(year + " " + make + " " + model);
					}
				}
			}
			if(	$("#make, #model, #year").val() != "" && 
				$("#make").val() != $("#make").attr("name") && 
				$("#model").val() != $("#model").attr("name") &&
				$("#year").val() != $("#year").attr("name")
			  )
			{
					$(".more-info").slideDown();
					if($("#make").val() != $("#make").attr("name") && $("#model").val() != $("#model").attr("name") && $("#year").val() != $("#year").attr("name") &&
					   $("#make").val() != "" && $("#model").val() != "" && $("#year").val() != ""
					   )
					{
						imageSearch.execute(year + " " + make + " " + model);
					}
			}
		});
	});
	
	
	$('#submit').click(function () {		
		
		//Get the data from all the fields
		var name 		= $('input[name=name]');
		var email 		= $('input[name=email]');
		var phone 		= $('input[name=phone]');
		var make		= $('input[name=make]');
		var make_other	= $('input[name=make]');
		var model		= $('input[name=model]');
		var model_other	= $('input[name=model]');
		var year		= $('input[name=year]');
		var color		= $('select[name=color]');
		var condition	= $('select[name=condition]');
		var miles		= $('select[name=miles]');
		var comment 	= $('textarea[name=questions-comments]');
		
		var count = 0;
		var ypos = 0;
		var message = new Array();
		$(".delete-me").remove();
		
		if (name.val()=="" || name.val() == name.attr('name')) 
		{
			count ++;
			if(ypos == 0) ypos = name.position().top;
			message.push("Please enter your name");
			name.addClass("highlight").after("<p class='delete-me'>Please enter your name</p>");
		} 
		else 
		{
			name.removeClass("highlight");
		}
		
		if (email.val()=="" || !checkEmail(email.val()) || email.val() == email.attr('name') ) 
		{
			count ++;
			if(ypos == 0) ypos = name.position().top;
			message.push("Please enter your name");
			email.addClass("highlight").after("<p class='delete-me'>Please enter a valid email</p>");
		} 
		else 
		{
			email.removeClass("highlight");
		}
		
		if (phone.val()=="" || phone.val() == phone.attr('name')) 
		{
			count ++;
			if(ypos == 0) ypos = name.position().top;
			message.push("Please enter your name");
			phone.addClass("highlight").after("<p class='delete-me'>Please enter your phone</p>");
		} 
		else 
		{
			phone.removeClass("highlight");
		}
		
		if(count>0)
		{
			if(ypos != 0) window.scrollTo(0,ypos);
			return false;
		}
		
		var images = new String();
		
		for(var ii=0; ii<imgs.length; ii++)
		{
			images += imgs[ii] + ",";
		}
			
		var data = 	'name=' 		+ name.val() 		+ 
					'&email=' 		+ email.val() 		+ 
					'&phone=' 		+ phone.val() 		+ 
					'&make=' 		+ make.val() 		+ 
					'&make_other=' 	+ make_other.val() 	+ 
					'&model=' 		+ model.val() 		+ 
					'&model_other=' + model_other.val() + 
					'&year=' 		+ year.val() 		+ 
					'&color=' 		+ color.val() 		+ 
					'&condition=' 	+ condition.val() 	+ 
					'&miles=' 		+ miles.val() 		+ 
					'&images=' 		+ images	 		+
					'&comment='  	+ comment.val();

		$('.sending').slideDown().html(images);

		sendMail(data);
		
		$("#car-name").html(make.val() + " " + model.val());
		
		$(".form, .sending").slideUp();
		$(".thanks").slideDown();
		
		return false;
	});
	
	$(".uploadedImg span").livequery(function(){
		$(this).click(function(){
			imgs.splice($(this).parent().attr("id"),1);
			$(this).parent().slideUp();
		});
	});
});
