var carriers = 	{
					'usps' : 'United States Postal Service',
					'ups' : 'UPS',
					'fedex': 'Fedex',
					'dhl' : 'DHL'
				}

$(function(){
				// Tabs
				$("#packageDetails").tabs();
				$("#packageDetails").tabs().find(".ui-tabs-nav").sortable({axis:'x'});
				// Login
				$("div#login").dialog({
					bgiframe: true,
					autoOpen: false,
					height: 30,
					modal: true,
					buttons: {
						'Sign In': 	function() {
										doLogin();
									},
						Cancel: 	function() {
										$(this).dialog('close');
									}
					}
				});
				
});

function doLogin() {
	var username = $("input#user").val();
	var password = $("input#pass").val();
	password = doSecure(password);
	$("div#container").slideUp("fast");
	$.post("index.php", {
		action : "login",
		username : username,
		password : password
	}, function(data) {
		if (isErrorMessage(data)) {
			alert("Incorrect Login information. Please try again...");
		} else {
			window.location.reload();
		}		
		$("div#container").slideDown("fast");
		
	}, "html");
	return false;
}


$(document).ready(function() {
	getPackages();
	
	initialize();
	
	
	$('input#changePass').livequery('click', function() {
		$.post("index.php",	{
			action : "getPage",
			pageName : 'changepass'
		}, function(data) {
			if (!isErrorMessage(data)) {
				displayModalForm(data);
			} else {
				errorHandler(data);
			}
		}, "html");
		return false;

	});	
	
	$('a#login').livequery('click', function() {
		$("div#login").dialog('open');
		
		return false;
	});
	
	if($('div#loading').hasClass("loaded")){
		$('div#loading').hide("slow");
		$('div#loading').removeClass("loaded");
		$('div#loading').addClass("hidden");		
	}
	
	if($('div#mainContainer').hasClass("hidden")){
		$('div#mainContainer').show("slow");
		$('div#mainContainer').removeClass("hidden");
		$('div#mainContainer').addClass("loaded");
		getPage('sessionmiddle');
	}
	
	$('a#signup').livequery('click', function() {						
						$("div#container").hide("normal");
						$.post("index.php", {
							action : "signup-free"
						}, function(data) {
							$("div#header").hide("fast");
							$("div#container").html(data);
							$("div#container").show("slow");
						}, "html");
						
						return false;
					});

	$('input[type=text]').livequery('focus', function() {
						clearElementContent(this.id);
					});

	$('input[type=password]').livequery('focus', function() {
						clearElementContent(this.id);
					});
	
	$('textarea').livequery('focus', function() {
						clearElementContent(this.id);
					});

	$('input#user').livequery('focus', function() {
						switchValue('user', true);
					});

	$('input#user').livequery('blur', function() {
						switchValue('user', false);
					});
	
	$('form#checkPackage').livequery('submit', function() {
		var term = $('input#trackingNumber').val();
		var handler = checkTrackingNumber(term)
		if(handler) {
			$("div#handler").html("Your Carrier is: <strong>"+carriers[handler]+"</strong>");
			$("div#extraInfo").slideDown("slow");
		} else {
			$("div#handler").html("Unknown Handler... We currently support Fedex and USPS. Please suggest your carrier at the <a href='http://blog.trackorama.com/2009/09/16/supported-carriers/'>Supported Carriers</a> page.");
		}
		return false;

	});	

	
	$('#password-clear').show();
	$('#pass').hide();

	$('#password-clear').focus(function() {
	    $('#password-clear').hide();
	    $('#pass').show();
	    $('#pass').focus();
	});
	
	$('#pass').blur(function() {
	    if($('#pass').val() == '') {
	    	$('#password-clear').val('password');
	        $('#password-clear').show();
	        $('#pass').hide();
	    }
	});

	$('input#email').livequery('blur', function() {
						checkEmail(this.id);
					});

	$('input#email-again').livequery('blur', function() {
						checkEmail(this.id);
					});

	$("form#login").livequery('submit', function() {
						doLogin();
						return false;
					});
	
	$("#activate").livequery('submit', function() {

		alert('test');

	});

	$("form#checkUsername").livequery('submit',	function() {
						var username = $("input#desiredUsername").val();
						var validUsername = validateUsername(username);
						if(true == validUsername) {
							updateDiv("availability",
									'Checking availability of \'' + username + '\', please wait... <img src="sitedata/images/ajax-loader.gif" alt="Loading..."/>');
							$.post("index.php",	{
								action : "checkUsername",
								username : username
							}, function(data) {
								if (!isErrorMessage(data)) {
									updateDiv('availability','<span class="success">Username "' + username + '" is available!</span>');
									// $("div#availability").show("slow");
									$("div#otherDetails").show("slow");
								} else {
									errorHandler(data);
									updateDiv('availability','<span class="success">Username "' + username + '" is not available!</span>');
								}
							}, "html");
						} else {
							updateDiv("availability",
									'\'' + username + '\' is an invalid entry. Please try again...');
						}						
						return false;
					});
	
	$("form#signup").livequery('submit', function() {
		$("div#transactionStatus").show("slow");
		var isValid = checkSignupForm();
		var password = $("input#desiredPassword").val();
		password = doSecure(password);
		if(true == isValid) {
			displayModalMessage('Registering, please wait... <img src="sitedata/images/ajax-loader.gif" alt="Loading..."/>');
			$.post("index.php",	{
				action : "registerUser",
				username : $("input#desiredUsername").val(),
				password : password,
				fname : $("input#fname").val(),
				lname : $("input#lname").val(),
				email : $("input#email").val(),
				type : $("input#type").val(),
			}, function(data) {
				if (!isErrorMessage(data)) {
					hideModalMessage();
					displayModalMessage('<p>Congratulations! You have completed the first step in registering with PackagePal</p>'
										+ '<p>Please note that you will need to activate your account using the email sent to you BEFORE you can sign in...</p>');
					$("div#transactionStatus").show("slow");
				} else {
					errorHandler(data);
					hideModalMessage();
				}
			}, "html");
		} else {
			displayModalError(isValid);
		}		
		return false;
	});
	
	$('a.editLink').livequery('click', function() {
		var tracker = this.id;
		handler = checkTrackingNumber(tracker);	
		$("div#details").slideUp("fast", function() {
			$("div#packageDetails").slideDown("fast");
		});

		if("usps" == handler || "fedex" == handler) {
			getPackageDetails(tracker, handler);
			$('div#packageDetails').tabs('option', 'selected', 2);
		}
		
		return false;
	});
	
	$('a.textLink').livequery('click', function() {
		var tracker = this.id;
		handler = checkTrackingNumber(tracker);	
		$("div#details").slideUp("fast", function() {
			$("div#packageDetails").slideDown("fast");
		});
		
		if("usps" == handler || "fedex" == handler) {
			getPackageDetails(tracker, handler);
			$('div#packageDetails').tabs('option', 'selected', 1);
		}
		
		return false;
	});
	
	$('a.mapLink').livequery('click', function() {
		var tracker = this.id;
		handler = checkTrackingNumber(tracker);	
		$("div#details").slideUp("fast", function() {
			$("div#packageDetails").slideDown("fast");
		});

		if("usps" == handler || "fedex" == handler) {
			getPackageDetails(tracker, handler);
			$('div#packageDetails').tabs('option', 'selected', 0);
		}
		
		return false;
	});
	
	$('a.archive').livequery('click', function() {
		var tracker = this.id;
		var message = "<div><p>Are you sure you want to archive this package?</p></div>";
		$("div#modalConfirm").html(message);
		$("div#modalConfirm").dialog({
			bgiframe: true,
			modal: true,
			overlay: {
				backgroundColor: '#000',
				opacity: 0.5
			},
			buttons: {
				No: function() {
						$(this).dialog('close');
					},
				Yes: function() {
						archivePackage(tracker);
						$(this).dialog('close');
					}				
			}			
		});
		$("#modalConfirm").dialog('open');				
		return false;
	});
	
	$('a.menuitem').livequery('click', function() {
		var page = this.id;
		$("div#details").slideUp("fast",function() {
				if('track' == page){
					$("div#packageDetails").slideDown("slow", function() {
						initialize();
					});
				} else {
					$("div#packageDetails").slideUp("fast", function () {
						getPage(page);
					});
				}				
				return false;
			}, "html");		
		return false;
	});
	
	$('a.moreTrackingDetails').livequery('click', function() {
		var trackingNumber = this.id;
		updateDiv(
				trackingNumber,
				'<span style="font-style: italic">Loading... </span><img class="wait" src="sitedata/images/small-loader.gif" alt="Loading..."/>');
		$.post("index.php",	{
			action : "trackPackage",
			trackingNumber : trackingNumber
		}, function(data) {
			if (!isErrorMessage(data)) {
				$("div#"+trackingNumber).html(data);					
			} else {
				errorHandler(data);
			}
		}, "html");		
		$("div#"+trackingNumber).show("slow");
		return false;
	});
	
	$('a.hideTrackingDetails').livequery('click', function() {
		var trackingNumber = this.id;
		$("div#"+trackingNumber).html('<a href="" class="moreTrackingDetails" id="' + trackingNumber + '" > [more details]</a><div id="detailedTrack"></div>');		
		$("div#"+trackingNumber).show("slow");
		return false;
	});
	

	$('form#addPackage').livequery('submit', function() {
		var trackingNumber = $("input#trackingNumber").val();
		var handler = checkTrackingNumber(trackingNumber);
		var name = $("input#name").val();
		var description = $("textarea#description").val();
		
		// ToDo: Validate Form
		var isValid = true;
		// var isValid = checkPasswords(current, newPass, confirm);
		
		if(isValid) {
			var content = "<p style='text-align: center; vertical-align: middle;'><strong>Please wait while we add the package to your account...</strong><br/><img src='sitedata/images/ajax-loader.gif' alt='loading'/></p>";
			displayModalMessage(content);
			$.post("index.php",	{
				action : "addPackage",
				trackingNumber : trackingNumber, 
				handler: handler,
				name : name, 
				description: description
			}, function(data) {
				hideModalMessage();
				if (!isErrorMessage(data)) {					
					displayModalMessage('<span class="success">Package added successfully!</span>');
					getPackages();
				} else {
					errorHandler(data);
				}
			}, "html");
		}			
		return false;
	});
	
	$('form#changePass').livequery('submit', function() {
		changePass();
		return false;
	});
	
	$('form#sendFeedback').livequery('submit', function() {
		var type = $("select#feedbackType").val();
		var detail = $("textarea#detail").val();		
		// ToDo: Validate Form
		var isValid = true;
		// var isValid = checkPasswords(current, newPass, confirm);
		if(isValid) {
			$.post("index.php",	{
				action : "sendFeedback",
				type : type, 
				detail: detail
			}, function(data) {
				if (!isErrorMessage(data)) {
					displayModalMessage('<p>Thank you for your feedback! If your feedback requires a response, you will be contacted as soon as possible!</p><p>Once again, thank you for choosing to use Trackorama!</p>');					
				} else {
					errorHandler(data);
				}
			}, "html");
		}			
		return false;
	});
	
	$("form#search").livequery('submit', function() {
		var content = "<p style='text-align: center; vertical-align: middle;'><strong>Please wait while we load the package details...</strong><br/><img src='sitedata/images/ajax-loader.gif' alt='loading'/></p>";
		displayModalMessage(content);
		var term = $("input#term").val();
		handler = checkTrackingNumber(term);
		if(false != handler) {
			$("div#carrier").html(handler);
			$("input#searchTerm").val("Loading...");
			$("input#searchTerm").attr('disabled', true);
			$.post("index.php",	{
				action : "trackPackageLive",
				trackingNumber : term, 
				handler: handler
			}, function(data) {
				if (!isErrorMessage(data)) {
					var results = JSON.parse(data);	
					if(results instanceof Array) {
						var newData = renderJsonResults(results, handler);
						initialize();											
						renderMap(newData['addresses'], results);											
						$("div#textResults").html(newData['html']);
						hideModalMessage();
					} else {
						$("div#textResults").html(newData['html']);
					}
				} else {
					errorHandler(data); 
				}
				$("input#searchTerm").val("Track Package");
				$("input#searchTerm").attr('disabled', false);
			}, "html");
		} else {
			$("div#carrier").html("Invalid Tracking Number... please check the number...");
		}		
		return false;
	});					
});

function getPage(id) {
	page = id;
	if(id != "logout") {
		$.post("index.php",	{
			action : "getPage",
			pageName : id
		}, function(data) {
			if (!isErrorMessage(data)) {
				$("div#details").html(data);
			} else {
				errorHandler(data);
			}
			$("div#details").slideDown("fast");
		}, "html");
	} else {
		$.post("index.php",	{
			action : "logout"
		}, function(){
			window.location.reload();
		});
	}
	
}

function updateDiv(div, message) {
	$("div#" + div).show("fast");
	$("div#" + div).html(message);
}

function updateStatus(message) {
	showStatus();
	updateDiv("status", message);
}

function initialize() {
	  geocoder = new google.maps.Geocoder();
	  var latlng = new google.maps.LatLng(38.6, -98);
	  var myOptions = {
	    zoom: 4,
	    center: latlng,
	    mapTypeId: google.maps.MapTypeId.ROADMAP,
	    disableDefaultUI: true
	  }
	  map = new google.maps.Map(document.getElementById("mapResults"), myOptions);
	}

function displayModalError(message) {
	$("#modalError").html(message);
	$("#modalError").dialog({
		bgiframe: true,
		modal: true,
		dialogClass: 'ui-state-error',
		buttons: {
			OK: function() {
				$(this).dialog('close');
			}
		}
	});
	$("#modalError").dialog('open');
}

function hideModalError(){
	$("#modalError").dialog('close');
}

function displayModalMessage(message) {
	$("#modalMessage").html(message);
	$("#modalMessage").dialog({
		bgiframe: true,
		modal: true,
		buttons: {
			OK: function() {
				$(this).dialog('close');
			}
		}
	});
	$("#modalMessage").dialog('open');
}

function hideModalMessage(){
	$("#modalMessage").dialog('close');
}

function displayModalForm(message) {
	$("div#modalForm").html(message);
	$("div#modalForm").dialog({
		bgiframe: true,
		autoOpen: false,
		modal: true,
		buttons: {
			'Change': 	function() {
							if("changepass" == $("input#action").val()){
								changePass();
							} else if("changeemail" == $("input#action").val()){
								changeEmail();
							}
							$(this).dialog('close');
						},
			Cancel: 	function() {
							$(this).dialog('close');
						}
		}
	});
	$("div#modalForm").dialog('open');
}

function hideModalForm(){
	$("div#modalForm").dialog('close');
}

function getPackageDetails(tracker, handler) {
	var content = "<p style='text-align: center; vertical-align: middle;'><strong>Please wait while we load the package details...</strong><br/><img src='sitedata/images/ajax-loader.gif' alt='loading'/></p>";
	displayModalMessage(content);
	$.post("index.php",	{
		action : "trackPackage",
		trackingNumber : tracker, 
		handler: handler
	}, function(data) {
		//alert(data);
		if (!isErrorMessage(data)) {
			var results = JSON.parse(data);	
			if(results instanceof Array) {
				var newData = renderJsonResults(results, handler);
				initialize();											
				renderMap(newData['addresses'], results);											
				$("div#textResults").html(newData['html']);
				hideModalMessage();
			} else {
				$("div#textResults").html(newData['html']);
			}
		} else {
			errorHandler(data);
		}
	}, "html");	
}

var geocoder;
var map;
var lat = new google.maps.LatLng(23.5441966, -139.484375);
var long = new google.maps.LatLng(51.055448, -56.515625);
var locations = new Array();
var counter = 0;
var bounds = null;
var infoWindows = new Array();
var c = 0;
var boundstry = new google.maps.LatLngBounds();

function calculateBounds() {
	var bounds = new google.maps.LatLngBounds(locations[0], locations[1]);
	for(var i=2; i<locations.length; i++ ){
		bounds.extend(locations[i]);
	}		
	return bounds;
}

function initialize() {
	  geocoder = new google.maps.Geocoder();
	  var latlng = new google.maps.LatLng(38.6, -98);
	  var myOptions = {
	    zoom: 4,
	    center: latlng,
	    mapTypeId: google.maps.MapTypeId.ROADMAP,
	    disableDefaultUI: true
	  }
	  map = new google.maps.Map(document.getElementById("mapResults"), myOptions);
	}

function setMarker (results, status) {
	if (status == google.maps.GeocoderStatus.OK) {			       
		var formAdd = results[0].formatted_address;
        // alert("Formatted Address: " +results[0].formatted_address+ "\nShort
		// Name: " + results[0].address_components[0].short_name + "\nFull Name:
		// " + results[0].address_components[0].long_name);
		var marker = new google.maps.Marker({
	            map: map, 
	            position: results[0].geometry.location,
	            title: formAdd,
	            clickable: true, 
	            visible: true
	    });
		boundstry.extend(results[0].geometry.location);
		for(var i in infoWindows) {
			if(i.toLowerCase().indexOf(results[0].address_components[0].short_name.toLowerCase()) != -1 && infoWindows[i]['marked'] == false){
				marker.setIcon(infoWindows[i]['markerURL']); 
				infoWindows[i]['marker'] = marker;
				infoWindows[i]['marked'] = true;
				google.maps.event.addListener(marker, 'click', function() {	 	    		  
					for(var j in infoWindows) {
						infoWindows[j]['infoWindow'].close();
					}	    		  
					infoWindows[i]['infoWindow'].open(map,marker);
 	    		});
				break;
    	   }
       }
       map.setCenter(results[0].geometry.location);
       } else {
    	   alert("Geocode was not successful for the following reason: " + status);
       }
}

function codeAddress(address) {
		if (geocoder) {
		    geocoder.geocode( { 'address': address}, setMarker);
		}
}

function renderMap(address, results) {
	var message;
	$("input#searchTerm").val("Getting information about each location...");
	for(var i=address.length-1; i >= 0; i--) {
		//message = "<div style='width: 250px; height: 200px; text-align: justify; overflow:auto;'><span style=''>";
		message = "<div id='infoBody'><h2>"+address[i].toUpperCase()+"</h2><hr/><ul>";
		for(var j in results) {
			if(results[j]['location'] != ", " && results[j]['location'] != ""){
				var add = results[j]['location'].toLowerCase();
				if(add.toLowerCase().indexOf("city of ") != -1) {
					add = add.replace(/city of /i,'');
				}
				
				if(add == address[i].toLowerCase()) {
					var description = "";
					if(typeof(results[j]['description']) == "object") {
						description = results[j]['description']["0"];
					} else {
						description = results[j]['description'];
					}
					
					message += "<li>"+description+" @ " + results[j]['date'];
					if(results[j]['details'] != '' && results[j]['details'] != null) {
						message += " with message: "+results[j]['details'];
					}
					message += "</li>";	
				}
			}				
		}
		message += "</ul></div>";
		infoWindows[address[i].toLowerCase() +", usa"] = new Array();
		infoWindows[address[i].toLowerCase() +", usa"]['infoWindow'] = new google.maps.InfoWindow({
		    content: message
		})
		infoWindows[address[i].toLowerCase() +", usa"]['infoWindow'].setOptions({maxWidth:300});
		
		if(i == address.length-1) {
			infoWindows[address[i].toLowerCase() +", usa"]['markerURL'] = "http://www.trackorama.com/sitedata/images/markers/start.png"; 
		} else if (i == 0) {
			var temp =  infoWindows[address[i].toLowerCase() +", usa"]['infoWindow'].getContent();
			if(temp.toLowerCase().indexOf("delivered") != -1){
				infoWindows[address[i].toLowerCase() +", usa"]['markerURL'] = "http://www.trackorama.com/sitedata/images/markers/end.png";
			} else {
				infoWindows[address[i].toLowerCase() +", usa"]['markerURL'] = "http://www.trackorama.com/sitedata/images/markers/marker"+((address.length-1)-i)+".png";
			}
		} else {
			infoWindows[address[i].toLowerCase() +", usa"]['markerURL'] = "http://www.trackorama.com/sitedata/images/markers/marker"+((address.length-1)-i)+".png";
		}
		
		infoWindows[address[i].toLowerCase() +", usa"]['marked'] = false;
		
		
		// alert("@ " + address[i] + ":\n"+infoWindows[address[i]]);
		codeAddress(address[i]);
	}
	
}

function archivePackage(trackingNumber) {
	$.post("index.php",	{
							action : "archivePackage",
							trackingNumber : trackingNumber
						}, function(data) {
							if (!isErrorMessage(data)) {
								displayModalMessage("<strong> Package ("+trackingNumber+") has been archived...");
							} else {
								errorHandler(data);
							}
						}, "html");	
	getPackages();
	return false;
}

function validateUsername(user) {
	if('desired username' != user.toLowerCase() && '' != user) {
		reWhiteSpace = new RegExp(/^\s+$/);
	     if (reWhiteSpace.test(s)) {
	          alert("Please Check Your Fields For Spaces");
	          return false;
	     } else {
	    	 return true;
	     }
	} else {
		return false;
	}
	
}

function redirectToTrackorama() {
	window.location = "http://www.trackorama.com/";
}

function changePass() {
	var current = $("input#current").val();
	var newPass = $("input#new").val();
	var confirm = $("input#confirm").val();
	var isValid = checkPasswords(current, newPass, confirm);
	if(isValid) {
		$.post("index.php",	{
			action : "changePass",
			newPass : doSecure(newPass), 
			oldPass: doSecure(current)
		}, function(data) {
			if (!isErrorMessage(data)) {
				hideModalForm();
				displayModalMessage('Password Changed Successfully!');					
			} else {
				errorHandler(data);
			}
		}, "html");
	}			
	return false;
}



