function selectTab(tab){
    switch(tab){
        case 1:
            location.href  = Application["ApplicationPath"] + "/Page/Services-ShippingPersonalEffects.aspx";
            break;
        case 2:
            location.href  = Application["ApplicationPath"] + "/Page/Services-InfrequentProjectandSupply.aspx";
            break;
        case 3:
            location.href  = Application["ApplicationPath"] + "/Page/Services-FrequentPacificTrade.aspx";   
            break;
    }
}

function goToQuote(){
    location.href = Application["ApplicationPath"] + "/Quote.aspx";
}

function goToSubscribe(){
    location.href = Application["ApplicationPath"] + "/Subscription.aspx";
}

function goToBooking(){
    location.href = Application["ApplicationPath"] + "/Booking.aspx";
}

function goToCompetition(){
    location.href = Application["ApplicationPath"] + "/ArtCompetition.aspx";
}

function MouseHover(x){
	if (typeof(x) == "undefined") {
		x = this;
	}
	
	x.oldClassName = x.className;
	x.className = x.className + "Hover";
}

function MouseOffHover(x){
	if (typeof(x) == "undefined") {
		x = this;
	}
	x.className = x.oldClassName;
}

function formatHTML(str) {
	if (str == null)
		return str;
		
	str = new String(str);
		
	str = str.replace(/"/g, "&quot;");
	//str = str.replace(/ /g, "&nbsp;");
	str = str.replace(/</g, "&lt;");
	str = str.replace(/>/g, "&gt;");
	str = str.replace(/\r\n/g, "<br>");
	
	return str;
}
function scentenceCase(word){
    if(word.length > 1 ){
        word = word.toLowerCase();
        word = word.substring(0, 1).toUpperCase() + word.substring(1); 
    }
    return word;
}


function openWindow(page, pagename, width, height, windowfeatures) {
	if (windowfeatures != "") {
		//windowfeatures = "," + windowfeatures + ",status";
		windowfeatures = "," + windowfeatures;
	}
	
	var left = screen.availWidth/2 - width/2;	
	var top = screen.availHeight/2 - height/2;
	
	pagename = pagename.toString().replace(/[\s-&.]/g, "");

	var w  = window.open(page, pagename,"LEFT=" + left + ",TOP=" + top + ",HEIGHT=" + height + ",WIDTH=" + width + windowfeatures);
	var browser = browserSniff();
	
	if (browser != "NS" && browser != "OPR") {
		eval("try {w.focus();} catch(e) {}");
	}
	
	return w;
}

function browserSniff() {
	if (document.layers) {
		return "NS";
	}
	if (document.all) {
		var agt = navigator.userAgent.toLowerCase();
		var is_opera = (agt.indexOf("opera") != -1);
		
		if(is_opera) {
			return "OPR";
		} else {
			return "IE";
		}
	}
	if (document.getElementById) {
		return "MOZ";
	}
	return "OTHER";
}

function centreWindow(w, width, height) {
	w.resizeTo(width, height);
	w.moveTo(screen.availWidth/2 - width/2, screen.availHeight/2 - height/2);
}

function setFocus(element) {
	if (!element.disabled) {
		try {
			element.focus();
			if (element.type == "text") {
				element.select();
			}
		} catch (e) {}
	}
}


//*****************************************   Load/Discharge Port *****************
function refreshDischargePorts(){
    jsrsExecute(Application["ApplicationPath"] + "/ServerScript/Schedules.aspx", refreshDischargePorts_return, "DischargePorts", new Array("" + frmHead.cboLoadPort.value));
}

function refreshDischargePorts_return(obj){
  
    //Clear
    while(frmHead.cboDischargePort.length > 0){
        frmHead.cboDischargePort.remove(frmHead.cboDischargePort.length - 1);
    }
    
    
    //Insert Results
    frmHead.cboDischargePort.options[0] = new Option("", "");
    if (obj.length > 0){
        for (var i = 0; i < obj.length; i ++){
            frmHead.cboDischargePort.options[i + 1] = new Option(obj[i][1], obj[i][0]);
            
            if (frmHead.txtSelectedDestinationPortCode.value == obj[i][0]){
                frmHead.cboDischargePort.selectedIndex = i + 1;
            }
        }
    }
} 

function emailCheck(emailStr)
{

	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */

	var checkTLD = 1;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat = /^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address. 
	These characters include ( ) < > @ , ; : \ " . [ ] */

	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a 
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars = "\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser = "(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom = validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word = "(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze. */

	var matchArray = emailStr.match(emailPat);

	if (matchArray == null)
	{
		/* Too many/few @'s or something; basically, this address doesn't
		even fit the general mould of a valid e-mail address. */

		alert("Email address " + emailStr + " seems incorrect (check @ and .'s)");
		return false;
	}
	
	var user = matchArray[1];
	var domain = matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	for (i = 0; i  <user.length; i++)
	{
		if (user.charCodeAt(i) > 127)
		{
			alert("Email address " + emailStr + " contains invalid characters.");
			return false;
		}
	}
	
	for (i = 0; i < domain.length; i++)
	{
		if (domain.charCodeAt(i) > 127)
		{
			alert("Email address " + emailStr + " contains invalid characters.");
			return false;
		}
	}

	// See if "user" is valid 

	if (user.match(userPat) == null)
	{
		// user is not valid

		alert("The username in " + emailStr + " doesn't seem to be valid.");
		return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var IPArray = domain.match(ipDomainPat);
	
	if (IPArray != null)
	{
		// this is an IP address
	
		for (var i = 1; i <= 4; i++)
		{
			if (IPArray[i] > 255)
			{
				alert("Destination IP address is invalid in " + emailStr + ".");
				return false;
			}
		}
		
		return true;
	}

	// Domain is symbolic name. Check if it's valid.
	 
	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;
	
	for (i = 0; i < len; i++)
	{
		if (domArr[i].search(atomPat) == -1)
		{
			alert("The domain name does not seem to be valid in " + emailStr + ".");
			return false;
		}
	}

	/* domain name seems valid, but now make sure that it ends in a
	known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding 
	the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length != 2 && domArr[domArr.length-1].search(knownDomsPat) == -1)
	{
		alert("The address " + emailStr + " must end in a well-known domain or two letter " + "country.");
		return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len < 2)
	{
		alert("Email address " + emailStr + " is missing a hostname!");
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}
 