var changedUser = new Boolean(false);
var changedPass = new Boolean(false);


function checkTrackingNumber(number) {
	if(number.length == 12 || number.length == 15) {
		if(checkForFedex(number)){
			return 'fedex';
		} else {
			return false;
		}
	} else if(number.length == 22) {
		if(checkForUSPS(number)){
			return 'usps';
		} else {
			return false;
		}		
	} else {
		return false;
	}
	
}

function checkForFedex(number) {
	if(12 == number.length) {
		var checkDigit = number%10;
		var top11 = number.substring(0,11);				
		var multipliers = new Array(1,3,7);
		var sum = 0;
		for(var i = 10; i >= 0; i--) {
			var check = i%3;
			if(1 == check) {
				sum += (top11%10)*multipliers[0];
			} else if(0 == check) {
				sum += (top11%10)*multipliers[1];
			} else if(2 == check) {
				sum += (top11%10)*multipliers[2];
			}	
			top11 = parseInt(top11/10);
		}
		var remainder = sum % 11;
		if(remainder > 9) {
			remainder = remainder%10;
		}
		if(remainder == checkDigit) {
			return true;
		} else {
			return false;
		}
	} else if(15 == number.length) {
		var checkDigit = number%10;
		var top14 = number.substring(0,14);
		var sumOdd = 0;
		var sumEven = 0;
		for(var i = 13; i >= 0; i--) {
			var check = i%2;
			if(1 == check) {
				sumOdd += (top14%10);
			} else if(0 == check) {
				sumEven += (top14%10);
			}
			top14 = parseInt(top14/10);
		}
		var sum = (sumOdd*3)+sumEven;
		var check = (parseInt(sum/10)+1)*10;
		check = check-sum;
		if((check) > 9) {
			check = check%10;
		} 
		if(check == checkDigit){
			return true;
		} else {
			return false;
		}
	}
}

function checkForUSPS(number) {
	var checkDigit = number.substring(21, 22);
	var top14 = number.substring(0,21);
	var sumOdd = 0;
	var sumEven = 0;
	for(var i = 20; i >= 0; i--) {
		var check = i%2;
		if(1 == check) {
			sumOdd += parseInt(top14[i]);
		}else if(0==check){
			sumEven += parseInt(top14[i]);
		}
		top14 = top14.substring(0, top14.length-1);
	}
	var sum = (sumEven*3)+sumOdd;
	var check = (parseInt(sum/10)+1)*10;
	if((check-sum) == checkDigit){
		return true;
	} else {
		return false;
	}
}

function renderJsonResults(results, handler) {
	var address = new Array();
	var returnObject = new Array();
	resultString = "<table class='trackEvents'>";
	resultString += "<tr> <td class='heading'>Date/Time</td> <td class='heading'>Activity</td> <td class='heading'>Location</td> <td class='heading'>Details</td> </tr>";
	counter = 0;
	for(var i in results) {
		resultString += "<tr>";
		resultString += "<td> " + results[i]['date'] + "</td>";
		if("object" == typeof(results[i]['description'])) {
			resultString += "<td> " + results[i]['description']["0"] + "</td>";
		} else {
			resultString += "<td> " + results[i]['description'] + "</td>";
		}

		if (", " != results[i]['location'] && "" != results[i]['location']) {
			
			resultString += "<td> " + results[i]['location'] + "</td>";
			if(0 == counter) {
				previousLocation = '';
			} else {
				previousLocation = address[counter-1];
			}			
			currentLocation  = results[i]['location'];
			if(currentLocation.toLowerCase().indexOf("city of ") != -1) {
				currentLocation = currentLocation.replace(/city of /i,'');
			}
			if(previousLocation.toLowerCase() != currentLocation.toLowerCase()){
				address[counter++] = currentLocation.toLowerCase();
			} 
			
		} else {
			resultString += "<td> </td>";
		}
		if(null == results[i]['details']) {
			resultString += "<td> </td>";
		} else {
			resultString += "<td> " + results[i]['details'] + "</td>";
		}
		resultString += "</tr>";
	}
	resultString += "</table>";
	returnObject['addresses'] = address;
	returnObject['html'] = resultString;
	return returnObject;
	
}


function getPackages(){
	$.post("index.php",	{
		action : "getQuickSummary",
	}, function(data) {
		if (!isErrorMessage(data)) {
			$("div#packagelist").slideUp("fast");
			$("div#packagelist").accordion('destroy');
			//alert(data);
			var packages = JSON.parse(data);
			var content = "";
			for(var i in packages) {
				content += "<div>\n\t<h4><a href='#'>"+packages[i]['name']+"</a></h4>";
				content += "\n\t<div style='text-align: left;'><strong>Tracking Number: </strong>"+packages[i]['trackingNumber']+"<br/>" +
				"<strong>Carrier: </strong>"+carriers[checkTrackingNumber(packages[i]['trackingNumber'])]+"<br/>" +
						"<strong>Current Status: </strong>"+packages[i]['status']+"<p class='viewLinks'>" +
								"<img src='sitedata/images/map.png' alt=''/> <a href='' id='"+packages[i]['trackingNumber']+"' class='mapLink'>View Map</a> | " +
								"<img src='sitedata/images/text.png' alt=''/> <a href='' id='"+packages[i]['trackingNumber']+"' class='textLink'>View Text</a> | " +
								"<img src='sitedata/images/archive.png' alt=''/> <a href='' id='"+packages[i]['trackingNumber']+"' class='archive'>Archive</a> | " +
										"<img src='sitedata/images/edit.png' alt=''/> <a href='' id='"+packages[i]['trackingNumber']+"'class='editLink'>Edit</a></p></div>"; 
				content += "\n\t</div>";
			}
			$("div#packagelist").html(content);
			$(function(){					
					$("#packagelist").accordion({ 
						header: "h4",
						collapsible: true,
						active: false
					});
					
				});
			$("div#packagelist").slideDown("fast");
		} else {
			errorHandler(data);
		}
	}, "html");
}



function init() {
	  // quit if this function has already been called
	  if (arguments.callee.done) {
		  setTimeout(updateAds, 30000);
		  return;
	  }

	  // flag this function so we don't do the same thing twice
	  arguments.callee.done = true;

	  // kill the timer
	  if (_timer) clearInterval(_timer);

	  // do stuff


	/* for Mozilla/Opera9 */
	if (document.addEventListener) {
	  document.addEventListener("DOMContentLoaded", init, false);
	}

	/* for Internet Explorer */
	/* @cc_on @ */
	/*
	 * @if (@_win32) document.write("<script id=__ie_onload defer
	 * src=javascript:void(0)><\/script>"); var script =
	 * document.getElementById("__ie_onload"); script.onreadystatechange =
	 * function() { if (this.readyState == "complete") { init(); // call the
	 * onload handler } }; /*@end @
	 */

	/* for Safari */
	if (/WebKit/i.test(navigator.userAgent)) { // sniff
	  var _timer = setInterval(function() {
	    if (/loaded|complete/.test(document.readyState)) {
	      init(); // call the onload handler
	    }
	  }, 10);
	}

	/* for other browsers */
	window.onload = setTimeout(updateAds, 30000);;
}

function errorHandler(code) {
	var content = "<div class='ui-state-error' style='padding: 0 .7em;'><span class='ui-icon ui-icon-alert' " +
			"style='float: left; margin-right: .3em;'></span>"+code+"</div>";
	
	//alert(content);
	$("div#modalError").html(code);
	$("div#error").addClass("ui-state-error");
	displayModalError();
}


function isErrorMessage(message) {
	var re = new RegExp('\E[0-9]+');
	if(message.match(re)) {
		return true;
	} else {
		return false;
	}
}

function insertIntoContainer(data) {
	var re = new RegExp('\E[0-9]+');
	if(data.match(re)) {
		var match = re.exec(data);
		errorHandler(match[0])
	} else {
		$("div#container").replaceWith(data);
	}
     
}

function updateDefs() {
	//  set definition for changedUser
	var value = document.getElementById('user').value;
	if (value == "username") {
		changedUser = false;
	} else {
		changedUser = true;
	}

	return true;
}

function clearElementContent(eventObject) {
	document.getElementById(eventObject).value = '';
	return false;
}

function switchValue(id, focus) {
	updateDefs();
	var value = document.getElementById(id).value;
	if (focus == true) {
		if (changedUser == false && id == 'user') {
			if (value == "username") {
				clearElementContent(id);
			}
		}
		if (id == 'pass') {
			if (value == "password") {
				clearElementContent(id);
			}
		}
	} else {
		if (id == "user") {
			if (value == "") {
				document.getElementById(id).value = 'username';
			}
		}

	}

}

function processFeedback() {
	var feedbackType = document.getElementById("feedbackType");
	var details = document.getElementById("detail");

	if ("" == feedbackType.value || "" == details.value) {
		showDiv("status");
		document.getElementById("status").innerHTML = '<span class="warning"> Invalid feedback data! </span>';
		return false;
	} else {
		var string = "feedbackType=" + escape(feedbackType.value) + "&details="
				+ escape(details.value);
		submitFeedback(string);
	}
	return false;
}

function checkPasswords(current, newPass, confirm) {
	if (newPass != confirm) {
		displayModalError('<p>Confirmation passwords do not match!</p>');
	} else {
		if (current == newPass) {
			displayModalError('<p>New and old passwords cannot be the same!</p>');
		} else {
			return true;
		}
	}
	return false;
}


function addPackage() {
	var trackingNumber = document.getElementById("trackingNumber").value;
	var handler = document.getElementById("handler").value;
	var name = document.getElementById("name").value;
	var description = document.getElementById("description").value;
	if ('' == trackingNumber) {
		alert("Please specify a valid tracking number!");
	} else {
		if ('' == handler) {
			alert("Please select the company handling your shipment!");
		} else {
			addPackageToServer(trackingNumber, handler, name, description);
		}
	}
	return false;
}

function toggleDetails(divName) {
	getTrackingInfo(divName);
	return false;
}

function closeTrackingDetails(trackingNumber) {
	document.getElementById(trackingNumber).innerHTML = '<a href="" class="collapser" id="' + trackingNumber + '" onclick="toggleDetails(this.id); return false;" style="text-decoration: none; color: darkgreen; font-style: italic; font-size:0.7em;"> [more] </a> <div id="detailedTrack"></div>';
	return false;
}

function clearElement(element, defaultValue) {
	if (defaultValue == element.value) {
		element.value = '';
	}
	return false;
}

function updateAds() {
	if (null != document.getElementById("vertads")) {
		$("iframe#vertads").hide("slow");
		document.getElementById("vertads").src = "vert-ads.html";
		$("iframe#vertads").show("slow");
	}

	if (null != document.getElementById("horizads")) {
		$("iframe#horizads").hide("slow");
		document.getElementById("horizads").src = "horiz-ads.html";
		$("iframe#horizads").show("slow");
	}
	setTimeout(updateAds, 30000);
	return false;
}

function checkSignupForm() {
	var username = $("input#desiredUsername").val();
	var pass = $("input#desiredPassword").val();
	var confirmPass = $("input#retypePassword").val();
	var email = $("input#email").val();
	var confirmEmail = $("input#email-again").val();
	var fname = $("input#fname").val();
	var lname = $("input#lname").val();
	var message = "";
	message += "<ul> The following errors were found in the registration form:";
	var valid = true;
			
	if (pass != confirmPass) {
		$("input#desiredPassword").addClass("incorrect");
		$("input#retypePassword").addClass("incorrect");
		message += "<li> Passwords don't match</li>";
		 valid = valid & false;

	}
	if ('password' == pass) {
		$("input#desiredPassword").addClass("incorrect");
		message += "<li> You haven't entered your own password</li>";
		 valid = valid & false;

	} else {
		pass = doSecure(pass);
		 valid = valid & true;
	}
	if (email != confirmEmail) {
		$("input#email").addClass("incorrect");
		$("input#email-again").addClass("incorrect");
		message += "<li> Emails don't match</li>";
		 valid = valid & false;

	}
	if ("email address" == email || "Retype email address" == confirmEmail) {
		$("input#email").addClass("incorrect");
		message += "<li> Please enter your email addresses</li>";
		 valid = valid & false;

	}
	if ('' != fname && 'first name' != fname.toLowerCase()) {
		if ('' != lname && 'last name' != lname.toLowerCase()) {
			$("div#transactionStatus").removeClass("errors");
			 valid = valid & true;
		} else {
			$("input#lname").addClass("incorrect");
			message += "<li> Please enter your last name</li>";
			valid = valid & false;

		}
	} else {
		$("input#fname").addClass("incorrect");
		message += "<li> Please enter your first name</li>";
		valid = valid & false;

	}
	message += "</ul><p> Please correct the errors mentioned above.</p>";
	if(true == valid) {
		return valid;
	} else {
		return message;
	}
	
	
}

function checkEmail(id) {
	var email = document.getElementById(id);
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email.value)) {
		//alert('Please provide a valid email address');
		$("input#"+id).toggleClass("incorrect");
		return false;
	} else {
		$("input#"+id).toggleClass("correct");
		return false;
	}
}

function switch_style(css_title) {
	// You may use this script on your site free of charge provided
	// you do not remote this notice or the URL below. Script from
	// http://www.thesitewizard.com/javascripts/change-style-sheets.shtml
	var i, link_tag;
	for (i = 0, link_tag = document.getElementsByTagName("link"); i < link_tag.length; i++) {
		if ((link_tag[i].rel.indexOf("stylesheet") != -1) && link_tag[i].title) {
			link_tag[i].disabled = true;
			if (link_tag[i].title == css_title) {
				link_tag[i].disabled = false;
			}
		}
	}
}


