
// search javascript

function fnSubmit(searchUrl,searchBoxId)
{
	try
	{
		var _textArea = document.getElementById(searchBoxId);
		if(bfnValidate(_textArea.value))
		{
			//ret=openext1(searchUrl + "?k=" + _textArea.value);
			ret=openext1(searchUrl + "/?IW_DATABASE=NTU%20Websites&IW_FIELD_WEB_STYLE=" + trimspace(_textArea.value))

		}
	}
	catch (e)
	{
    		alert(e.message);
	}
	finally
	{
	}
	return false;
}

function bfnValidate(str)
{
	if (trim(str) != '')
	{
		return true;
	}
	else 
	{
		alert('Please enter a search keyword.');
		return false;
	}
	return false;
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}

function trimspace(str)
{
   var encoded_string;
   encoded_string = str.replace(/%/g,"%25");
   encoded_string = encoded_string.replace(/ /g,"%20");
   encoded_string = encoded_string.replace(/\$/g,"%24");
   encoded_string = encoded_string.replace(/&/g,"%26");
   encoded_string = encoded_string.replace(/,/g,"%2C");
   encoded_string = encoded_string.replace(/\+/g,"%2B");
   encoded_string = encoded_string.replace(/\//g,"%2F");
   encoded_string = encoded_string.replace(/:/g,"%3A");
   encoded_string = encoded_string.replace(/;/g,"%3B");
   encoded_string = encoded_string.replace(/=/g,"%3D");
   encoded_string = encoded_string.replace(/\?/g,"%3F");
   encoded_string = encoded_string.replace(/@/g,"%40");
   encoded_string = encoded_string.replace(/\"/g,"%22");
   encoded_string = encoded_string.replace(/</g,"%3C");
   encoded_string = encoded_string.replace(/>/g,"%3E");
   encoded_string = encoded_string.replace(/#/g,"%23");
   encoded_string = encoded_string.replace(/{/g,"%7B");
   encoded_string = encoded_string.replace(/}/g,"%7D");
   encoded_string = encoded_string.replace(/\|/g,"%7C");
   encoded_string = encoded_string.replace(/\\/g,"");
   encoded_string = encoded_string.replace(/\^/g,"%5E");
   encoded_string = encoded_string.replace(/~/g,"%7E");
   encoded_string = encoded_string.replace(/\[/g,"%5B");
   encoded_string = encoded_string.replace(/\]/g,"%5D");
   //encoded_string = encoded_string.replace(/\`/g,"");
   encoded_string = encoded_string.replace(/\(/g,"%28");
   encoded_string = encoded_string.replace(/\)/g,"29");
   encoded_string = encoded_string.replace(/\*/g,"%2A");
   encoded_string = encoded_string.replace(/\-/g,"%2D");
   encoded_string = encoded_string.replace(/\./g,"%2E");
   encoded_string = encoded_string.replace(/\_/g,"%5F");
   return encoded_string;
}

function openext1(externalURL,replacewindow)
{
	//externalURL=escape(externalURL);
	//var url = 'http://www.ntu.edu.sg/nr/publicportal/includes/ExternalPage.asp?URL=' + externalURL;
	var url = externalURL;
	var replace;

	if (replacewindow=='undefined')
	   replace='_second';
	else
	   replace=replacewindow;

	scrWidth = window.screen.availWidth - 50;
	scrHeight = window.screen.availHeight - 100;
	scrLeft = 0;
	scrTop=0;
	var strFeatures = "scrollbars=yes,status=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes,left=" + scrLeft + ",top=" + scrTop + ",height=" +  scrHeight + ",width=" + scrWidth
	//url = url.toLowerCase() ;

	window.open(url, replace, strFeatures, 0);
	return;
}

//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblclick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}


// initialize the quicklink menu

function initQuickLinkMenu()
{
	var elements = document.getElementsByTagName("LI");
	for (var i = 0 ; i < elements.length ; i ++)
	{
		if (elements[i].className == "quicklinks_dropdown_hide")
		{
			elements[i].onmouseover = function()
			{
				this.className = "quicklinks_dropdown";
			}
			elements[i].onmouseout = function()
			{
				this.className = "quicklinks_dropdown_hide";
			}
		}
		else
		if (elements[i].className == "quicklinks_dropdown_item")
		{
			elements[i].onmouseover = function()
			{
				this.className = "quicklinks_dropdown_item_hi";
			}
			elements[i].onmouseout = function()
			{
				this.className = "quicklinks_dropdown_item";
			}
		}
	}
}

// general validation script

function Validator( form )
{
	this.form = form;
	this.validate = function( parameters )
	{
		var name = parameters.name;
		var field = this.form.elements[ parameters.field != undefined ? parameters.field : name ];
		var mandatory = parameters.mandatory != undefined  && parameters.mandatory;
		var syntax = parameters.syntax != undefined ? parameters.syntax : "none";		
		var max = parameters.max != undefined ? parameters.max : -1;		
		if ( field.type == "text" || field.type == "password" || field.type == "textarea" )
		{
			field.value = this._trim( field.value );
			try
			{
				if ( mandatory && field.value == "" )
				{
					var message = "Please enter a value for " + name;					
					throw new Error( message );
				}
				if ( max != -1 && field.value.length > max )
				{
					var message = "Please enter no more than " + max + " number of characters for " + name;				
					throw new Error( message );
				}
				if ( syntax == "date" && !this._isValidDate( field.value ) )
				{
					var message = "Please enter a valid date for " + name;
					throw new Error( message );
				}
				if ( syntax == "number" && !this._isValidNumber( field.value ) )
				{
					var message = "Please enter a valid number for " + name;
					throw new Error( message );
				}
				if ( syntax == "phonenumber" && !this._isValidPhoneNumber( field.value ) )
				{
					var message = "Please enter a valid " + name;
					throw new Error( message );
				}

				if ( syntax == "percent" && !this._isValidPercentage( field.value ) )
				{
					var message = "Please enter a valid percentage for " + name;
					throw new Error( message );
				}
				if ( syntax == "email" && !this._isValidEmail( field.value ) )
				{
					var message = "Please enter a valid email address for " + name;
					throw new Error( message );
				}
				if ( syntax == "emails" && !this._isValidEmails( field.value ) )
				{
					var message = "Please enter a valid email address for " + name;
					throw new Error( message );
				}
			}
			catch ( e )
			{
				if ( parameters.beforeAlert != undefined )
				{
					eval( parameters.beforeAlert );
				}			
				alert( e.message );
				field.focus();
				throw e;
			}
		}
		else
		if ( field.type == "select-one" )
		{
			try
			{
				if ( mandatory && field.options[ field.selectedIndex ].value == "" )
				{
					var message = "Please select a value for " + name;					
					throw new Error( message );
				}
			}
			catch ( e )
			{
				if ( parameters.beforeAlert != undefined )
				{
					eval( parameters.beforeAlert );
				}			
				alert( e.message );
				field.focus();
				throw e;
			}
		}
		else
		if ( field.type == "hidden" )
		{
			// not checking involved for this project
		}
		else
		{
			var message = "Unresolved field type: " + field.type
			alert( message );
			throw new Error( message );
		}
	}
	this._trim = function( s )
	{
		while ( s.charAt( 0 ) == " " )
		{
			s = s.replace( s. charAt( 0 ),"" );
		}

		while ( s.charAt( s.length - 1 ) == " " )
		{
			s = s.substring( 0, s.length - 1 );
		}
		return s;
	}
	this._isValidDate = function( s )
	{
		if ( s == "" )
		{
			return true;
		}
		var parts = s.split( "/" );
		if ( parts.length != 3 )
		{
			return false;
		}
		for ( var i = 0 ; i < parts.length ; i ++ )
		{
			if ( parts[ i ].charAt( 0 ) == "0" )
			{
				parts[ i ] = parts[ i ].substring( 1 );
			}
		}
		var year = parseInt( parts[ 2 ] );
		var month = parseInt( parts[ 1 ] ) - 1;
		var day = parseInt( parts[ 0 ] );		
		var date = new Date( year, month, day );		
		return date.getFullYear() == year && date.getMonth() == month && date.getDate() == day;
	}
	this._isValidNumber = function( s )
	{
		for ( var i = 0 ; i < s.length ; i ++ )
		{
			if ( "0123456789".indexOf( s.charAt( i ) ) == -1 )
			{
				return false;
			}
		}
		return true;
	}
	this._isValidPhoneNumber = function( s )
	{
		var containsNumber = false;
		for ( var i = 0 ; i < s.length ; i ++ )
		{
			if ( "0123456789 -+()".indexOf( s.charAt( i ) ) == -1 )
			{
				return false;
			}
			if ( "0123456789".indexOf( s.charAt( i ) ) != -1 )
			{
				containsNumber = true;				
			}
		}
		return containsNumber;
	}
	this._isValidPercentage = function( s )
	{
		if ( s == "" ) return true;
		if ( !this._isValidNumber( s ) ) return false;
		var percent = parseInt( s );
		if ( percent < 0 || percent > 100 ) return false;
		return true;
	}
	this._isValidEmail = function( s )
	{
		if ( s == "" ) return true;
		return s.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
	}
	this._isValidEmails = function( s )
	{
		if ( s == "" ) return true;
		var emails = s.split(";");
		for (var i = 0 ; i < emails.length ; i ++)
		{
			if (!this._isValidEmail(this._trim(emails[i])))
			{
				return false;
			}
		}
		return true;
	}

}

/* 19 feb 2009 - new functions added for enhancement */

function goHome()
{
	location = '/';
}

var Utility =
{
	addEventHandler: function(eventTarget, eventName, handler)
	{
		if (eventTarget.addEventListener) 
		{
			eventTarget.addEventListener(eventName, handler, false);
		}
		else
		if (eventTarget.attachEvent)
		{
			eventTarget.attachEvent("on" + eventName, handler);
		}
	}
};


Utility.addEventHandler(window, "load", function() 
{
	for (var i = 0 ; i < document.links.length ; i ++)
	{
		var link = document.links[i];
		if (link.href.substr(0, 7) == "mailto:")
		{			
			link.onclick = function()
			{
				var email = this.href.substr(7);
				window.open('/Pages/Contact.aspx?RecipientEmail=' + email, '_blank');
				//location = '/Pages/Contact.aspx?RecipientEmail=' + email;
				return false;
			}
		}
	}
} );


