
     function isIE()
     {
     	//Detect IE5.5+
		version=0
		if (navigator.appVersion.indexOf("MSIE")!=-1)
		{
			return true
		} else
		{
			return false;
		}    	
     }
     
     function isFireFox()
     {
     	if(navigator.userAgent.indexOf("Firefox")!=-1)
     	{
     		return true;	
     	} else
     	{
     		return false;
     	}    	
     }

    
     function fireOnChangeEvent(element)
     {
     	if(isIE())
		{
			element.fireEvent('onChange');
		} else if (isFireFox())
		{
			//alert("fire event");
			 var evt = document.createEvent('HTMLEvents');
			 evt.initEvent('change', true, true);
			 element.dispatchEvent(evt);
		}
     }
     
       function setSelectListToValue(value, selectId)
      {
	      var i, si, v, args=setSelectListToValue.arguments;
	      if ((obj=document.getElementById(args[1])) != null)
	      {
		      v = args[0];
		      for(i=0; i<obj.length; i++)
		      {
			      if(obj.options[i].value == v)
			      {	
			   	   si = i;	
			      }	
		      }	
		      obj.selectedIndex = si;	
	      }

      }
     /*
      * Remove options from a select list element.
      */
     function removeAllOptions(selectbox)
	{
		var i;
		for(i=selectbox.options.length-1;i>=0;i--)
		{
			selectbox.remove(i);
		}
	}
  var MILLS_IN_15MINS = 15*60*1000;
  var MILLS_IN_10MINS = 10*60*1000;
  var CACHE_LIMIT = 24;
  var THE_TMP = "../tmp/";
  var DOT_JPG = ".jpg";
  
  /*
   * Remove text from a html element (assuming the element contains 
   * only one text node.
   */
   function removeText(element)
   {
   		if(element!=null && element.childNodes.length>0)
   		{
   			element.removeChild(element.childNodes[0]);
   		}
   }
   
  /*
   * Add text to a html element 
   */
   function addText(element, text)
   {
		var txtNode = document.createTextNode( text);
		element.appendChild(txtNode);
   }
   
   function addImageToDiv(imgUrl, imgId, imgStyle,divId)
   {
   		var imgE = document.createElement("img");
	  	imgE.setAttribute('src',imgUrl);
	  	imgE.setAttribute('id', imgId);
	  	imgE.setAttribute('style', imgStyle);
	  	var divE = document.getElementById(divId);
	  	divE.appendChild(imgE);
   }
   
    function trim(sString)
    {
		while (sString.substring(0,1) == ' ')
		{
		sString = sString.substring(1, sString.length);
		}
		while (sString.substring(sString.length-1, sString.length) == ' ')
		{
		sString = sString.substring(0,sString.length-1);
		}
		return sString;
	
    }
    
    function getCurrentUTCDateTime()
    {
    	var now = new Date();
       	var nowInUTC = new Date();
       	nowInUTC.setFullYear(now.getUTCFullYear());
       	nowInUTC.setMonth(now.getUTCMonth());
       	nowInUTC.setDate(now.getUTCDate());
       	nowInUTC.setHours(now.getUTCHours());
       	nowInUTC.setMinutes(now.getUTCMinutes());
       	nowInUTC.setSeconds(now.getUTCSeconds());
       	return nowInUTC;
    }

//-------------------- mContentLoader.js
var net = new Object();

net.READY_STATE_UNINITIALIZED= 0;
net.READY_STATE_LOADING      = 1;
net.READY_STATE_LOADED       = 2;
net.READY_STATE_INTERACTIVE  = 3;
net.READY_STATE_COMPLETE     = 4;

net.ContentLoader = function( component, url, method, requestParams ) {
   this.component     = component;
   this.url           = url;
   this.requestParams = requestParams;
   this.method        = method;
}

net.ContentLoader.prototype = {

   getTransport: function() {
      var transport;
      if ( window.XMLHttpRequest ){
         transport = new XMLHttpRequest();
      }
      else if ( window.ActiveXObject ) {
         try {
            transport = new ActiveXObject('Msxml2.XMLHTTP');
         }
         catch(err) {
            transport = new ActiveXObject('Microsoft.XMLHTTP');
         }
      }
      return transport;
   },

   sendRequest: function() {

      //if ( window.netscape && window.netscape.security.PrivilegeManager.enablePrivilege)
      //   netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');

      var requestParams = []
      for ( var i = 0 ; i < arguments.length ;  i++ )
       {
         var arg = arguments[i];
         //alert(arg);
         requestParams.push(arg);
		}
      var oThis = this;
      var request = this.getTransport();
      request.open( this.method, this.url, true );
      request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');
      request.onreadystatechange = function() { oThis.handleAjaxResponse(request) };
      request.send( this.queryString(requestParams) );
  },

  queryString: function(args) {

     var requestParams = [];
     for ( var i = 0 ; i < this.requestParams.length ; i++ )
     {
     	var tmpArg = this.requestParams[i];
     	//alert(tmpArg);
        requestParams.push(tmpArg);
     }   
     
     requestParams.push('timeInput=' + document.getElementById('timeInput').value);
     
     for ( var j = 0 ; j < args.length ; j++ )
        requestParams.push(args[j]);

     var queryString = "";
     if ( requestParams && requestParams.length > 0 ) {
        for ( var i = 0 ; i < requestParams.length ; i++ )
           queryString += requestParams[i] + '&';
        queryString = queryString.substring(0, queryString.length-1);
     }
     //alert(queryString);
     return queryString;
  },

  handleAjaxResponse: function(request) {
     if ( request.readyState == net.READY_STATE_COMPLETE ) {
     	if ( this.isSuccess(request) ){
           xmlDoc1=request.responseXML;
           x= xmlDoc1.getElementsByTagName("latestImgUrls");
           var len = x.length;
           
           if (len == 0){               
           	   x= xmlDoc1.getElementsByTagName("img");
           }                     
           
           retval=x[0].childNodes[0].nodeValue;
           theImgUrls = retval.split(DOT_JPG);
           var progressDivE = document.getElementById('progress');
           if (progressDivE.childNodes[0] != null){
	    		progressDivE.removeChild(progressDivE.childNodes[0]);
	       }                            
           
           var img=document.images.show;  
           //var img=document.getElementById("show");                      
           var len = theImgUrls.length;                    
           img.src=THE_TMP + theImgUrls[len - 2] + DOT_JPG;           
           img.align="middle";
           img.style.display="";                
           document.getElementById('downloadBtn').disabled = false;
           document.getElementById('slide').disabled = false;           
           document.getElementById('calLink').disabled = false;
           document.getElementById('calImg').disabled = false;
           document.getElementById('timeInputDisplayed').disabled = false;
           document.getElementById('getMagRateOfChange').disabled = false;
           document.getElementById('slidebutton').disabled = false;
           document.getElementById('player_first').disabled = false;
           document.getElementById('player_previous').disabled = false;
           document.getElementById('player_next').disabled = false;
           document.getElementById('player_last').disabled = false;
           this.component.ajaxUpdate(request);
        }
        else{
           this.component.handleError(request);
        }
     }
  },

  isSuccess: function(request) {
    return  request.status == 0 
        || (request.status >= 200 && request.status < 300);
  }

};


function GeomagRateOfChange(latestBtn, btnId,fieldId, url, options ) {
   this.latestSubmitBtn = document.getElementById(latestBtn);
   this.submitBtn = document.getElementById(btnId);
   this.field = document.getElementById(fieldId);
   this.options    = options;
   this.inputUTCTime = 0;
   this.imgUrls;
   this.imgTitles;
   //alert(options.requestParameters[0]);
   this.ajaxHelper = new net.ContentLoader( this, url, "POST", options|| [] );

   this.initializeBehavior();
}

GeomagRateOfChange.prototype = {

   initializeBehavior: function() {
      var oThis = this;
      this.submitBtn.onclick = function() { oThis.getGeomagRateSubmitted(); };
      this.latestSubmitBtn.onclick = function() { oThis.getLatestSubmitted(); };
   },
   
   getLatestSubmitted: function()
   {
   		this.removeErrorMsg();
   		var imageCountE = document.getElementById('imageCount');
      	imageCountE.value=0;
   	    var original_start_timeE = document.getElementById('timeInputDisplayed');
	    original_start_timeE.disabled = false;
	    var calLink = document.getElementById('calLink');
	    calLink.href="javascript:NewCal('timeInputDisplayed','ddmmyyyy',true,24);"
	    this.submitBtn.disabled = false; 
   		document.getElementById('stopLoadingHisData').value = "true";
   		var currentUTCTime = new Date();
		var year=currentUTCTime.getUTCFullYear();
		var month = currentUTCTime.getUTCMonth();
		var day = currentUTCTime.getUTCDate();
		var hour = currentUTCTime.getUTCHours();
		var minute = currentUTCTime.getUTCMinutes();
		
		var theTime = new Date(year, month, day, hour, minute, 0);
		theTime = new Date(theTime.getTime()-25*60*1000);
		var imgUrls = "";
		//var imgTitles = new Array(CACHE_LIMIT);
		for(var i=CACHE_LIMIT-1;i>=0;i--)
		{
			var derivedTime = new Date(theTime.getTime()-i*15*60*1000);
			year=derivedTime.getFullYear();
			month=derivedTime.getMonth()+1;
			if(month<10)
			{
				month = '0'+month;
			}
			day=derivedTime.getDate();
			if(day<10)
			{
				day = '0'+day;
			}
			hour=derivedTime.getHours();
			if(hour<10)
			{
				hour = '0'+hour;
			}
			minute=derivedTime.getMinutes();
			if (minute < 15)
			{
				minute = '00';
			} else if (minute < 30 && minute >=15)
			{
				minute = 15;
			} else if (minute < 45 && minute>=30)
			{
				minute = 30;
			} else
			{
				minute = 45;
			}
			derivedTime = new Date(year, month, day, hour, minute, 0);
			imgUrls += 'dfdt_realtime_'+year+'-'+month+'-'+day+'-'+hour+'-'+minute+'-'+'00'+'.jpg'+'|';
		}
		//alert(imgUrls);
		this.ajaxHelper.sendRequest('latestImgUrls='+imgUrls+'&isRealTime=yes');
   },
     
   getGeomagRateSubmitted: function() 
   {
   	  //alert("submitted..");
   	  this.removeErrorMsg();
   	  var slideBtn = document.getElementById('slidebutton');
   	  if(slideBtn.value == "Stop")
   	  {
   	  	slideBtn.click();
   	  }
   	  
   	  if(document.getElementById('slide').length>1)
   	  {
   	  var lastBtn = document.getElementById('player_last');
      lastBtn.click();
   	  }
   	  disablePlayer();
   	  document.getElementById('downloadBtn').disabled = true;
   	  document.getElementById('stopLoadingHisData').value = '';
   	  var isValid = true;
   	  var paramValue;
   	  var paramName;
   	  var error;
      if(this.field != 'undefined')
      {
	   	  paramValue = this.field.value;
	   	  //alert("Input Time hidden: "+paramValue);
	   	  if(paramValue == null || trim(paramValue) == '')
	   	  {
	   	  	var inputTimeDisplayed = document.getElementById('timeInputDisplayed').value;
	   	  	if(inputTimeDisplayed == null || trim(inputTimeDisplayed)=='')
			{
		   	  	isValid = false;
		   	  	error = 'No input value.'; 
		   	  	//alert(error);
			}else
			{
				this.field.value =inputTimeDisplayed;
				paramValue = this.field.value;
				var formatCheckMsg = this.checkDateInput(paramValue);
		   	  	if(formatCheckMsg!="")
		   	  	{
		   	  		isValid = false;  
		   	  		error = formatCheckMsg;	
		   	  		//alert(error);
		   	  	}else
		   	  	{
		   	  		paramName= this.field.name;
		   	  	}
			}
	   	  } else
	   	  {
	   	  	var formatCheckMsg = this.checkDateInput(paramValue);
	   	  	if(formatCheckMsg!="")
	   	  	{
	   	  		isValid = false;  
	   	  		error = formatCheckMsg;	
	   	  		//alert(error);
	   	  	}else
	   	  	{
	   	  		paramName= this.field.name;
	   	  	}
	   	  }
	   	 
	   	  //alert(paramName);
      } else
      {
      	error= 'application error, no filed declared.';
      	isValid = false;
      }
      if(isValid)
      {
		addImageToDiv('loading2.gif','progressImg',null, 'progress');
		
		//disable the submit button to prevent it being clicked while loading the image.
      	this.submitBtn.disabled = true;
      	//the original input time is kept image title display
      	var original_start_timeE = document.getElementById('timeInputDisplayed');
      	original_start_timeE.disabled = true;
      	     	
     	var calLink = document.getElementById('calLink');
     	calLink.removeAttribute('href');
     	
     	var downloadLink = document.getElementById('linkDownloadAll');
     	downloadLink.removeAttribute('href');
     	
		var finalInputTime = new Date();
		finalInputTime.setTime(this.inputUTCTime);
		paramValue = finalInputTime.getDate()+'/'+(finalInputTime.getMonth()+1)+'/'+finalInputTime.getFullYear()+" "+finalInputTime.getHours()+":"+finalInputTime.getMinutes()+":"+finalInputTime.getSeconds();
		
		var imgUrls = document.getElementById('imgUrls').value;
      	this.ajaxHelper.sendRequest( paramName+'='+paramValue +"&"+original_start_timeE.name+"="+original_start_timeE.value+"&imgUrls="+imgUrls);
      	var previousTimeInputE = document.getElementById('previousTimeInput');
      	if(previousTimeInputE.value != original_start_timeE.value)
      	{
      	    var imageCountE = document.getElementById('imageCount');
      	    imageCountE.value=0;
      		updateInputTime();
      		//stop the animation if it's playing.
      		var animPlayerE = document.getElementById('slidebutton');
      		if(previousTimeInputE.value!=null && animPlayerE.value=="Stop")
      		{
        		animPlayerE.click();
        		//reset the image to the first one 
        		document.getElementById('player_first').click();
      		}
      	}
      	//alert("Final param value: "+paramValue);
      } else
      {
      	//alert("error");
      	this.displayError(error);
      	return;
      }
   },
   
   ajaxUpdate:  function(request) 
   {
      var xmlDoc = request.responseXML.documentElement;
	  //alert(request.responseText);
	  if(xmlDoc.getElementsByTagName('error') != null)
	  {
		  var errE = xmlDoc.getElementsByTagName('error')[0];
		  //alert(errE);
		  if(errE == null)
		  {
		  	this.procceedUpdate(request);
		  }else
		  {
		  	//alert(errE.nodeValue)
		  	this.handleError(request);
		  }
	  }
   
   },
   
    procceedUpdate:  function(request) 
    {
    	var xmlDoc = request.responseXML.documentElement;
		var latestImgList = xmlDoc.getElementsByTagName('latestImgUrls')[0];		
		if(latestImgList == null)
		{
			this.procceedUpdateForSubmit(request);
		} else
		{
			this.procceedUpdateForRealTimeSubmit(request);
		}
    	
    },
   
    procceedUpdateForRealTimeSubmit:  function(request) 
    {
    	var xmlDoc = request.responseXML.documentElement;
		enablePlayer();
		document.getElementById('isRealTime').value='yes';
		var currentUTCTime = new Date();
		var year=currentUTCTime.getUTCFullYear();
		var month = currentUTCTime.getUTCMonth();
		var day = currentUTCTime.getUTCDate();
		var hour = currentUTCTime.getUTCHours();
		var minute = currentUTCTime.getUTCMinutes();
		
		var theTime = new Date(year, month, day, hour, minute, 0);
		theTime = new Date(theTime.getTime()-25*60*1000);
		var imgUrls = new Array(CACHE_LIMIT);
		var imgTitles = new Array(CACHE_LIMIT);
		for(var i=CACHE_LIMIT-1;i>=0;i--)
		{
			var derivedTime = new Date(theTime.getTime()-i*15*60*1000);
			year=derivedTime.getFullYear();
			month=derivedTime.getMonth()+1;
			if(month<10)
			{
				month = '0'+month;
			}
			day=derivedTime.getDate();
			if(day<10)
			{
				day = '0'+day;
			}
			hour=derivedTime.getHours();
			if(hour<10)
			{
				hour = '0'+hour;
			}
			minute=derivedTime.getMinutes();
			if (minute < 15)
			{
				minute = '00';
			} else if (minute < 30 && minute >=15)
			{
				minute = 15;
			} else if (minute < 45 && minute>=30)
			{
				minute = 30;
			} else
			{
				minute = 45;
			}
			derivedTime = new Date(year, derivedTime.getMonth(), day, hour, minute, 0);
			imgUrls[i] = 'dfdt_realtime_'+year+'-'+month+'-'+day+'-'+hour+'-'+minute+'-'+'00'+'.jpg';
			//alert(imgUrls[i]);
			imgTitles[imgUrls[i]]=derivedTime.format('dd mmm yyyy HH:MM:ss')+' UTC';
			//imgTitles[imgUrls[i]] = day+' '+month+' '+year+' '+hour+':'+minute+':'+'00' +'UTC';
			//alert(imgTitles[imgUrls[i]]);
		}
		if(xmlDoc.getElementsByTagName('latestImgUrls')[0].childNodes[0] != null)
		{
		var imgUrlsStrReturned = xmlDoc.getElementsByTagName('latestImgUrls')[0].childNodes[0].nodeValue;
    	var imgUrlsReturned = imgUrlsStrReturned.split('|');
    	
    	var imgsReturned = imgUrlsStrReturned.split(DOT_JPG);
    	
    	
		//alert("check returned values...");
		var slideE = document.getElementById('slide');
		removeAllOptions(slideE);
		var optionsObj = [];
		var index = 0;
		var text = "";
		
		var numOfImgs = imgsReturned.length;
		for (i = 0; i < imgsReturned.length; i++){
		     if (imgsReturned[i] != null && imgsReturned[i].length > 1){
	         	text = imgsReturned[i] + DOT_JPG;
	         	optionsObj.push( new Option(text, HOST_TMP_URL+imgsReturned[i]) );
	         }	          
      	}
      	slideE.options[0]= new Option("Start...", "galogo.jpg");
      	for ( var i=0  ; i < optionsObj.length ; i++ )
      	{
      	    if(optionsObj[i].text != "undefined" && trim(optionsObj[i].text)!='')
         	slideE.options.add(optionsObj[i] );
      	}
      	
      	var lastBtn = document.getElementById('player_last');
      	lastBtn.click();
      	
      	var urlSelectedList = document.getElementById('slide');
      	var latestJpgUrl = urlSelectedList.options[urlSelectedList.selectedIndex].value;
      	
      	var zipFileUrl = latestJpgUrl.replace('.jpg', '.zip');
	    var progressDivE = document.getElementById('progress');
	    if(progressDivE.childNodes[0] != null)
	    {
	    	progressDivE.removeChild(progressDivE.childNodes[0]);
	    }
	    document.getElementById('downloadBtn').disabled = false;
	    document.getElementById('downloadBtn').value='Download all animation frames';
      	var downloandLinkE = document.getElementById('linkDownloadAll');
      	downloandLinkE.setAttribute('href',zipFileUrl);
      	
      	x= xmlDoc1.getElementsByTagName("latestImgUrls");
        retval=x[0].childNodes[0].nodeValue;
        retrvalArray = retval.split(DOT_JPG);        
        var img=document.getElementById("show");
      	img.src=THE_TMP + retrvalArray[retrvalArray.length - 2] + DOT_JPG;
        img.style.display="";
		}
    },
   
    procceedUpdateForSubmit:  function(request) 
   {
   	  var xmlDoc = request.responseXML.documentElement;
   	  document.getElementById('isRealTime').value='no';
   	  /*   	  
	  var debugDivE = document.getElementById('debugDiv');
	  removeText(debugDivE);
	  addText(debugDivE, request.responseText);
	  */
	  var imgE = xmlDoc.getElementsByTagName('img')[0];
	  var imgUrl = imgE.childNodes[0].nodeValue;

	  var textE = document.createTextNode(imgUrl);
  
	  //add map img url to hidden field
	  var imgUrlsE = document.getElementById("imgUrls");
	  var imgTitlesE = document.getElementById("imgTitles");
	  var currentValOfImgUrls;
	  var currentValOfImgTitles;
	  var originalTimeInputE = xmlDoc.getElementsByTagName('original_input_time')[0];
	  //check if input time has been changed or not
	  var originalTimeReturned = originalTimeInputE.childNodes[0].nodeValue;
	  var previousTimeInputE = document.getElementById('previousTimeInput');
	  // alert(originalTimeReturned);

	  imgUrlsE.value=imgUrl
	  //alert("imgUrl: "+imgUrl);
	  
	  var stopLoadingStr = document.getElementById('stopLoadingHisData').value;
	  //alert("stopLoadingStr = "+stopLoadingStr);
	  var isIntecepted = (new Boolean(stopLoadingStr)).valueOf();
	  
	  //alert("isIntecepted "+ isIntecepted);
	  if(! isIntecepted)
	  {
	  currentValOfImgUrls = imgUrlsE.value;

	  this.imgUrls = currentValOfImgUrls;//.split();
	  //update description for map
	  var firstImgDesc1E = document.getElementById('currentImgDesc1');
	  
	  var currentImgtitle = this.getNodeTextValue(xmlDoc,'currentImgDesc1');
	  //addText(firstImgDesc1E, "Latest map available: "+currentImgtitle);
	  
	  //set download link
	  var zipFilePath = this.getNodeTextValue(xmlDoc,'download');
	  document.getElementById('linkDownloadAll').setAttribute('href',zipFilePath);
	  document.getElementById('downloadBtn').disabled = false;
	  document.getElementById('downloadBtn').value='Download';
	  //add map img title to hidden field
	  currentValOfImgTitles = imgTitlesE.value;

	  currentValOfImgTitles = currentImgtitle;
	  //alert(currentValOfImgTitles);
	  imgTitlesE.value=currentValOfImgTitles;
	  this.imgUrls = currentValOfImgTitles;//.split('|');
	  
	  //showAnimationDF();
	  var firstImgDesc2E = document.getElementById('currentImgDesc2');
	  if(firstImgDesc2E.childNodes[0] != null)
	  {
		 //removeText(firstImgDesc2E);
	  } 
	   //addText(firstImgDesc2E, "Next map scheduled: "+this.getNodeTextValue(xmlDoc,'currentImgDesc2'));
	   
	  var slideE = document.getElementById('slide')  	;
	  removeAllOptions(slideE);
	  //slideE.options[0]= new Option("Start...", "../galogo.jpg");
	  slideE.options[0]= new Option(currentValOfImgTitles, imgUrl);
	  
	  setSelectListToValue(imgUrl, 'slide');
	  var currentImgE = document.getElementById('currentImg');
	  currentImgE.setAttribute('src', imgUrl);

      document.getElementById('slide').disabled = false;
      
	  //show the animation layer
	  document.getElementById('aniDF').style.visibility ='visible';
	  //enable submit button so that user can change the input time and re-submit.
	  this.submitBtn.disabled = false; 
	  var original_start_timeE = document.getElementById('timeInputDisplayed');
      original_start_timeE.disabled = false;
      var calLink = document.getElementById('calLink');
      calLink.href="javascript:NewCal('timeInputDisplayed','ddmmyyyy',true,24);"

	  var progressDivE = document.getElementById('progress');
	  if(progressDivE.childNodes[0] != null)
	  {
	  	progressDivE.removeChild(progressDivE.childNodes[0]);
	  }	
	  var imageCountE = document.getElementById('imageCount');
	  var count =parseInt(imageCountE.value)+1; 
	  //alert("count: "+count);
	  imageCountE.value=count;
	  }

   }, //ajaxUpdate:  function(request) 
   
   displayError: function(msg)
   {
   		var errorSpan = document.getElementById('errorSpan');
   		if(errorSpan.childNodes.length==0)
   		{
   			this.removeErrorMsg();
   		} 
   		addText(errorSpan, msg);
   },
   
   removeErrorMsg:function()
   {
   		var errorSpan = document.getElementById('errorSpan');
   		removeText(errorSpan);
   },
     
   getNodeTextValue:function(xmlDoc,nodeTagName)
   {
   	  //alert(nodeTagName);
   	  var theE = xmlDoc.getElementsByTagName(nodeTagName)[0];
	  var txt =theE.childNodes[0].nodeValue;
	  return txt;
   },
   
   checkDateInput:function(fullTimeStr)
   {
   	   //alert("checkDateInput: "+fullTimeStr);
   	   var fullYear=0;
   	   var theMonth=0;
   	   var dayOfMonth=0;
   	   var hours;
   	   var minutes;
   	   var seconds;
   	   
   	   var error = "";
   	   var isValid = true;
       var errorMessage = 'Please enter valid date as month, day, and four digit year. You must use a \'/\' to separate the date values and \':\' to separate time values. The date must be a real date. 30/2/2000 would not be accepted. Valid Format is dd/mm/yyyy HH:MM.';
       var full_time_array = fullTimeStr.split(' ');
       if(full_time_array.length!=2)
       {
       		isValid=false;
       		error += "Invalid input time value. A valid input value should contain the date and time in format of \"dd/mm/yyyy HH:MM:SS\"";
       } else
       {
	        var date_str = full_time_array[0];
	        //alert("date_str: "+date_str);
	        var datePattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
		    if (!((date_str.match(datePattern)) && (date_str!='')) )
		    {
		    	isValid=isValid&&false
				//alert( "Invalid date input. Valid format is dd/mm/yyyy.");
		    } else
		    {
		    	var D = date_str.split("/");
		    	//alert(D[0]);alert(D[1]);alert(D[2]);
		    	dayOfMonth = D[0];
		    	theMonth = D[1];
		    	//alert("dayOfMonth: "+dayOfMonth);
		    	fullYear = D[2];
		    	//check if full year is in 4 digits.
		    	if(fullYear<100)
		    	{
		    		isValid = false;
		    		//return "Input year must be in 4 digits";
		    	}
		    	//alert("fullYear: "+fullYear);
	
		    	
		    }
		    
		    var time_str = full_time_array[1];
		    //var timePattern = /^((0?\d)|(\d\d)):((0?\d)|(\d\d)):((0?\d)|(\d\d))$/; 
		     var timePattern = /^((0?\d)|(\d\d)):((0?\d)|(\d\d))$/; 
		    //var timePattern = /^((\d\d)|\d):((\d\d)|\d):((\d\d)|\d)$/
		    var T =time_str.split(":");// adaptable to other layouts

		    if(time_str.match(timePattern))
		    {
			    if (T  == null)
			    { 
			    	//alert( "Invalid time input value.");
			    	isValid=isValid&&false;
			    } // bad format
			    else if (!this.validTime(T[0], T[1])) 
			    {
			    	 error += "Time input is in invalid format."; 
			    	 //alert(error);
			    	 isValid=isValid&&false;
			    } // bad value
			    hours = T[0];
		    	minutes =  T[1];
		    	//seconds  = T[2];
		    } else
		    {
		    	//alert("Time doesn't match pattern");
		    	 isValid=isValid&&false;
		    }
		   // alert(error);	    
       }
       if(isValid)
       {
       	    var inputUTCDate = new Date();
       		inputUTCDate.setFullYear(fullYear);
       		inputUTCDate.setMonth(theMonth-1);
       		inputUTCDate.setDate(dayOfMonth);
       		inputUTCDate.setHours(hours);
       		inputUTCDate.setMinutes(minutes);
       		inputUTCDate.setSeconds(0);
       		//inputUTCDate.setSeconds(seconds);
       		//alert("input time in UTC: "+inputUTCDate);
       		//convert current to utc time for comparison

       		var nowInUTC = getCurrentUTCDateTime();
       		//alert("now UTC :"+nowInUTC);
       		//var inputInUTC = Date.UTC(fullYear, theMonth, dayOfMonth, hours, minutes, seconds);
       		
       		//alert("now: "+now.getTime());
       		//var nowInUTC = Date.UTC(now);
       		//alert("nowInUTC: "+nowInUTC);

       		//alert(inputUTCDate.getTime()+ " vs "+(nowInUTC.getTime()-millsOf10mins));
       		if(inputUTCDate.getTime()>nowInUTC.getTime())
       		{
       			return "Invalid time input value. Date/time must not be in future";
       		}
       		if(inputUTCDate.getTime()>(nowInUTC.getTime()-MILLS_IN_10MINS))
       		{
       			//alert("Recalculate input time");
       			this.inputUTCTime = nowInUTC.getTime()-MILLS_IN_15MINS-MILLS_IN_10MINS;
       			var inputUTCTimeDate = new Date();
       			inputUTCTimeDate.setTime(this.inputUTCTime);
       			//alert(inputUTCTimeDate);
       			return "";
       		} else
       		{
       			this.inputUTCTime = inputUTCDate.getTime();
       			var inputUTCTimeDate = new Date();
       			inputUTCTimeDate.setTime(this.inputUTCTime);
       			//alert(inputUTCTimeDate);
       		return "";
       		}
       } else
       {
       	return errorMessage;
       }

   },
   
   /*
    * check if the inpt hour, minute and second are valid.
    */
	validTime:function(h, m)
  	{ 
  		//alert(h+" "+m+" "+s);
  		var testDate = new Date(0,0,0,h,m,0);
  		return ((testDate.getHours()==h) && (testDate.getMinutes()==m)) ;
    },
      
   handleError: function(request) 
   {
      var xmlDoc = request.responseXML.documentElement;
	  //alert("handleError:"+request.responseText);
	  var progressDivE = document.getElementById('progress');
	  if(progressDivE.childNodes[0] != null)
	  {
	  	progressDivE.removeChild(progressDivE.childNodes[0]);
	  }	
	  this.displayError("System is under maintenance, please try later.");

		  var original_start_timeE = document.getElementById('timeInputDisplayed');
	      original_start_timeE.disabled = false;
	      var calLink = document.getElementById('calLink');
	      calLink.href="javascript:NewCal('timeInputDisplayed','ddmmyyyy',true,24);"
	      this.submitBtn.disabled = false; 
	 
   },

   getElementContent: function(element,tagName) {
      var childElement = element.getElementsByTagName(tagName)[0];
      return childElement.text != undefined ? childElement.text : childElement.textContent;
   }

};


