
var Common = function() {
	
	this.openBrowser = function(url, width, height) {
		var iLeft = (screen.width  - width) / 2 ;
		var iTop  = (screen.height - height) / 2 ;
	
		var sOptions = "toolbar=no, scrollbars=yes,status=no,resizable=no,dependent=yes" ;
		sOptions += ",width=" + width ;
		sOptions += ",height=" + height ;
		sOptions += ",left=" + iLeft ;
		sOptions += ",top=" + iTop ;
	
		window.open(url, "", sOptions);
	}
	
	this.getImageSize = function(url, width, height) {
		var image = new Image();
		
		image.src = url;
		
		var realWidth = image.width;
		var realHeight = image.height;
		var maxWidth = (realWidth > width) ? realWidth : width;
		var maxHeight = (realHeight > height) ? realHeight : height;
		var scale = (maxWidth > maxHeight) ? (width / maxWidth) : (height / maxHeight);
		
		realWidth = realWidth * scale;
		realHeight = realHeight * scale;
		
		return new Array(realWidth, realHeight);
	}
	
	this.submitForm = function(form, param) {
		var frm = document.getElementById(form);
		
		if (!frm) {
			return;
		}
		
		if (param) {
			frm.action += param;	
		}
		
		frm.submit();
	}
	
	this.confirmDelete = function(param) {
		if (confirm("Are you sure you want to delete this " + param + "?")) {
			return true;
		}
		
		return false;
	}
	
	this.closeWindow = function() {
		window.close();
	}
	
	this.changeColor = function(element, color) {
		if (!element) {
			return;
		}
		
		element.style.backgroundColor = color;
	}
	
	/* 
	 * Check and enable an element
	 */
	this.enableElement = function(source, widget) {
		if (!source || !widget) {
			return;
		}
	
		var widgetObj = document.getElementById(widget);
		if (!widget) {
			return;
		}
		
		if (source.checked == true) {
			widgetObj.style.enable = true;
		} else {
			widgetObj.style.enable = false;
		}
	}
	
	this.checkUserForm = function() {
		var username = new String(document.frm_user.username.value);
		var password = document.frm_user.password.value;
		var retype_password = document.frm_user.retype_password.value;
		var email = new String(document.frm_user.email.value);
		var fullname = document.frm_user.fullname.value;
		
		if (!username.match(/^([-\d\w][-.\d\w]*)?[-\d\w]$/)) {
			alert("Invalid username! Please try again.");
			document.frm_user.username.focus();
			
			return false;
		}
		
		if (password.length < 6) {
			alert("Password must be at least 6 characters long!");
			document.frm_user.password.focus();
			
			return false;
		}
		
		if (password != retype_password) {
			alert("Password do not match! Please try again.");
			document.frm_user.retype_password.focus();
			
			return false;
		}
		
		if (!email.match(/^([-\d\w][-.\d\w]*)?[-\d\w]@([-\w\d]+\.)+[a-zA-Z]{2,6}$/)) {
			alert("Invalid email! Please try again.");
			document.frm_user.email.focus();
			
			return false;
		}
		
		if (!fullname) {
			alert("Please type in your full name!");
			document.frm_user.fullname.focus();
			
			return false;
		}
		
		return true;
	}
	
	this.checkCheckoutForm = function() {
		var ba_firstname = document.frm_checkout.ba_firstname.value;
		var ba_lastname = document.frm_checkout.ba_lastname.value;
		var ba_email = new String(document.frm_checkout.ba_email.value);
		var ba_street = document.frm_checkout.ba_street.value;
		var ba_city = document.frm_checkout.ba_city.value;
		var ba_country = document.frm_checkout.ba_country.value;
		var ba_phone = document.frm_checkout.ba_phone.value;
		
		var chk_same = document.frm_checkout.chk_same.checked;
		
		var sa_firstname = document.frm_checkout.sa_firstname.value;
		var sa_lastname = document.frm_checkout.sa_lastname.value;
		var sa_email = new String(document.frm_checkout.sa_email.value);
		var sa_street = document.frm_checkout.sa_street.value;
		var sa_city = document.frm_checkout.sa_city.value;
		var sa_country = document.frm_checkout.sa_country.value;
		var sa_phone = document.frm_checkout.sa_phone.value;
		
		if (!ba_firstname) {
			alert("Please type in your first name!");
			document.frm_checkout.ba_firstname.focus();
			
			return false;
		}

		if (!ba_lastname) {
			alert("Please type in your last name!");
			document.frm_checkout.ba_lastname.focus();
			
			return false;
		}
		
		if (!ba_email.match(/^([-\d\w][-.\d\w]*)?[-\d\w]@([-\w\d]+\.)+[a-zA-Z]{2,6}$/)) {
			alert("Invalid email! Please try again.");
			document.frm_checkout.ba_email.focus();
			
			return false;
		}
		
		if (!ba_street) {
			alert("Please type in your street address!");
			document.frm_checkout.ba_street.focus();
			
			return false;
		}

		if (!ba_city) {
			alert("Please type in your city/province name!");
			document.frm_checkout.ba_city.focus();
			
			return false;
		}

		if (!ba_country) {
			alert("Please type in your country name!");
			document.frm_checkout.ba_country.focus();
			
			return false;
		}

		if (!ba_phone) {
			alert("Please type in your phone number!");
			document.frm_checkout.ba_phone.focus();
			
			return false;
		}
		
		if (!chk_same) {
			if (!sa_firstname) {
				alert("Please type in your first name!");
				document.frm_checkout.sa_firstname.focus();
				
				return false;
			}
	
			if (!sa_lastname) {
				alert("Please type in your last name!");
				document.frm_checkout.sa_lastname.focus();
				
				return false;
			}
			
			if (!sa_email.match(/^([-\d\w][-.\d\w]*)?[-\d\w]@([-\w\d]+\.)+[a-zA-Z]{2,6}$/)) {
				alert("Invalid email! Please try again.");
				document.frm_checkout.sa_email.focus();
				
				return false;
			}
			
			if (!sa_street) {
				alert("Please type in your street address!");
				document.frm_checkout.sa_street.focus();
				
				return false;
			}
	
			if (!sa_city) {
				alert("Please type in your city/province name!");
				document.frm_checkout.sa_city.focus();
				
				return false;
			}
	
			if (!sa_country) {
				alert("Please type in your country name!");
				document.frm_checkout.sa_country.focus();
				
				return false;
			}
	
			if (!sa_phone) {
				alert("Please type in your phone number!");
				document.frm_checkout.sa_phone.focus();
				
				return false;
			}
		}

		return true;
	}	
	
	this.checkUserUpdateForm = function() {
		var email = new String(document.frm_user.email.value);
		var fullname = document.frm_user.fullname.value;
		
		if (!email.match(/^([-\d\w][-.\d\w]*)?[-\d\w]@([-\w\d]+\.)+[a-zA-Z]{2,6}$/)) {
			alert("Invalid email! Please try again.");
			document.frm_user.email.focus();
			
			return false;
		}
		
		if (!fullname) {
			alert("Please type in your full name!");
			document.frm_user.fullname.focus();
			
			return false;
		}
		
		return true;
	}

	this.checkCategoryForm = function() {
		var name = document.frm_category.name.value;
		
		if (!name) {
			alert("Invalid category name! Try again...");
			
			document.frm_category.name.focus();
			
			return false;
		}
		
		return true;
	}
	
	this.checkGemForm = function() {
		var name = document.frm_gem.name.value;
		
		if (!name) {
			alert("Invalid gem name! Try again...");
			
			document.frm_gem.name.focus();
			
			return false;
		}
		
		return true;
	}
	
	this.checkProductForm = function() {
		var name = document.frm_product.name.value;
		var gems_length = document.frm_product.gems.options.length;
		
		var width = document.frm_product.width.value;
		var height = document.frm_product.height.value;
		var price = document.frm_product.price.value;
		
		var gems_selected = 0;
		var selected_gems = "";
		
		for (i = 0; i < gems_length; i ++) {
			if (document.frm_product.gems.options[i].selected) {
				gems_selected ++;
				selected_gems += document.frm_product.gems.options[i].value + "|";
			}
		}
		
		if (!name) {
			alert("Invalid product name! Try again...");
			document.frm_product.name.focus();
			
			return false;
		}
		
		if (gems_selected < 1) {
			alert("You must select at least one gemstone!");
			document.frm_product.gems.focus();
			
			return false;
		}
		
		if (isNaN(width)) {
			alert("Product width must be a number!");
			document.frm_product.width.focus();
			
			return false;
		}

		if (isNaN(height)) {
			alert("Product height must be a number!");
			document.frm_product.height.focus();
			
			return false;
		}

		if (isNaN(price)) {
			alert("Product price must be a number!");
			document.frm_product.price.focus();
			
			return false;
		}

		// Assign values to hidden input type.
		document.frm_product.selected_gems.value = selected_gems;
		
		return true;
	}
	
	
}

