/***
 * 
 * Common.js
 * 
 * Purpose: Actions that affect html pages generated for crawling
 */

//Parts to be configured

var portalServerURL="http://gos2.geodata.gov";


var overViewServlet = portalServerURL + "/E-FW/OverviewImageServlet";
var proxyServlet = portalServerURL + "/Portal/jsp/HttpProxy.jsp";
var sleepServlet = portalServerURL + "/Portal/jsp/Sleep.jsp"
var contactURL= portalServerURL + "/Portal/pMarketContact.do?act=contact&docuuid=";
var homePage= "http://www.geodata.gov";
var getNMFURL= portalServerURL + "/Portal/viewWithExternal.do";
var timeOut = 3; //use seconds(Currently not used)

//Link labels
var geodataLinkLabel = "Visit Geodata.gov";
var downloadDataLabel = "Download Data";
var documentLinkLabel = "Document Site";
var viewGlobeLabel = "View Globe";
var viewMapLabel = "View Map";
var badConnectionMsg = "Document site currently not available.";






var pIsWin = (navigator.userAgent.indexOf("Win") >= 0);
function addToArcExplorerWeb(server, service, isWMS, uuid) {
  // do not change the window name!
	var windowName = "GOSArcExplorerWeb";
	while (server.indexOf('amp;') > 0) server = server.replace('amp;', '&amp;');
	if (uuid == undefined) uuid = '';

	/* CQ00303212 */
	/* windowname in IE cannot include special characters */
	windowName = windowName.replace(/[^a-zA-Z0-9_]+/g, "");

	if (pIsWin)
		ArcExplorerWin = window.open("", windowName, "toolbar=no,resizable=yes,width=800,height=564,left=5,top=5");
	else if (!pIsWin && pIsNS)
		ArcExplorerWin = window.open('', windowName, "toolbar=no,resizable=yes,width=800,height=564,screenX=5,screenY=5");
	else if (!pIsWin && pIsIE)
		ArcExplorerWin = window.open('', windowName, "toolbar=no,resizable=yes,width=784,height=548,left=5,top=5");
	else
		ArcExplorerWin = window.open('', windowName, "toolbar=no,resizable=yes,width=800,height=564");

	if (!ArcExplorerWin.closed && ArcExplorerWin.Map == null)
		ArcExplorerWin = window.open('/arcexplorer/arcexplorer.jsp?origid=&isDefault=false', windowName, "toolbar=no,resizable=yes,width=800,height=564");

	NumOfAttempts = 0;
	timerId = setInterval('checkArcExplorerOpened("' + server + '", "' + service + '", ' + isWMS + ', "' + uuid + '")', 100);
}


function viewWithExternal(sFileExtension,sServer,sService,sType,sName,sUuid,maxX,minX,maxY,minY) {
  var elFrame = document.getElementById("frViewWithExternal");
  if ((sFileExtension != null) && (sServer != null)) {
    var nIdx = sServer.indexOf(".nmf");
    var bNmf = (nIdx > 0) && ((sServer.length - nIdx - 4) == 0);
    if (bNmf) {
      elFrame.src = sServer;
    } else {
    
      var sURL = getNMFURL;
      sUrl = sURL + "?fileExtension="+escape(sFileExtension)+"&uuid="+escape(sUuid);
      sUrl += "&server="+escape(sServer)+"&service="+escape(sService)+"&type="+escape(sType);
      sUrl += "&name="+escape(sName);
      sUrl += "&maxX="+escape(maxX) + "&minX="+escape(minX) + "&maxY="+escape(maxY) + "&minY="+escape(minY);
      elFrame.src = sUrl;
    }
  }
}


/*
 * Returns IE or Firefox compatible ajax component
 */
function getAjaxObj(){
  
  if (window.XMLHttpRequest){
	return new XMLHttpRequest();
  } else if (window.ActiveXObject) {
        return new ActiveXObject('Microsoft.XMLHTTP');
  } else return null;
  
}


var ajaxObj;
var minX;
var minY;
var maxX;
var maxY;

/*
 * Loads an extent image onto the page
 */
function loadImage(uminX, uminY, umaxX, umaxY){

  ajaxObj = getAjaxObj();
  if( ajaxObj == null)
       return;

  minX = uminX;
  minY = uminY;
  maxX = umaxX;
  maxY = umaxY;

  try{
  
  ajaxObj.onreadystatechange = ajaxCallBack;
  ajaxObj.open("GET", 
                overViewServlet  + "?minX="+escape(uminX) 
                + "&minY="+escape(uminY) 
                + "&maxX="+escape(umaxX) 
                + "&maxY="+escape(maxY) 
           
                , 
              true );
  ajaxObj.send("");
  }
  catch(e){
    window.status = e;

  }
  
}

/*
 * Call back to put extent image onto page
 */
function ajaxCallBack(){
  
  if(ajaxObj.readyState == 4){

     if(ajaxObj.status == 200){
        plantImage();
     }

   }
}

/*
 * callback helper to put extent image onto page
 */
function plantImage(){
  
   var section = document.getElementById("arcwebSection");
      
   if(!section)
      return;
   
   var responseXML = ajaxObj.responseXML;
 
   if(responseXML.getElementsByTagName('Error').length > 0){
      
      window.status = responseXML.getElementsByTagName('Error').firstChild.nodevalue;
      return;   
   }
   
   var image = responseXML.getElementsByTagName('image');

   if(image.length < 1){
      window.status = 'No image recieved from XMLHttpRequest';
      return;
   }
   
   section.innerHTML = '<img align="center" style="display:block; margin-left:auto; margin-right:auto; vertical-align: middle;" src="' 
                       + image[0].firstChild.nodeValue + '"/>' ;
}

function AjaxObject(urlLocation, callbacFunction){
	
  var ajaxObject = getAjaxObject();
  //tempObj = this.ajaxObject;
  var ajaxTimer = null;
  var timer = null;
  var recieved = false;
  
  this.timeOutFunc = null;
  this.sendGet = sendGet;
  this.sendTimedGet = sendTimedGet;
  this.timedOut = timedOut;
  var callback = callbacFunction;
  
  function getAjaxObject(){
  
     if (window.XMLHttpRequest){
	   return new XMLHttpRequest();
     } else if (window.ActiveXObject) {
        return new ActiveXObject('Microsoft.XMLHTTP');
     } else return null;
  
  }
  
 
  function sendGet(asynchronous){
    
  	if(ajaxObject ){
  		
  		ajaxObject.open("GET", urlLocation, asynchronous);
  		ajaxObject.onreadystatechange = function(){
  		
  		  if(ajaxObject.readyState == 4){
  			
  			    recieved = true;	
  				if(timer)
  				   clearTimeout(timer);
  				if(ajaxTimer)
  				   ajaxTimer.abort();
  				
  				callback(ajaxObject);
  			}
  		}
  		ajaxObject.send(null);
  	}
  	
  }
  
  function sendTimedGet(callbackFunction, time){
  	this.sendGet(callbackFunction);
  	
  	ajaxTimer = getAjaxObject();
  	timer = setTimeout(function(thisObject){thisObject.timedOut();}, 
  	                   timeOut * 1000,
  	                   this);
  	if(recieved == false){
  	  ajaxTimer.open("GET",sleepServlet + "?seconds=" + timeOut ,false);
  	  ajaxTimer.onreadystate = function(){};
  	  ajaxTimer.send(null);
  	}
  }
  
  function timedOut(){
  	
  	if(ajaxObject && ajaxObject.readyState != 4){
  		
  		ajaxObject.abort();
  		ajaxTimer.abort();
  		timer = null;
  		  		
  	}
  }
  
  function isAjaxEnabled(){
  	
  	if(ajaxObject)
  		return true;
  	return false;
  	
  }
}		

function makeLinkLabel(linkID, labelString){
	
	if(linkID && (typeof linkID.innerText == 'undefined')){
      linkID.textContent = labelString;
    } else if (linkID && (typeof linkID.textContent == 'undefined') ){
      linkID.innerText = labelString;
    }
}  

/**
 * 
 * When goto site has been clicked, we have to verify site is up
 */

var goToSiteElem;  
var goToSiteAnswer = false;
var tempObj;
var code;
var imageDisplayElem;
var mapImage;

/*
 * Called when body loads
 */
function bodyLoaded(){
    makeLinkLabel(document.getElementById("geodataLink"), geodataLinkLabel);
    makeLinkLabel(document.getElementById("downloadData"), downloadDataLabel);
    makeLinkLabel(document.getElementById("documentLink"), documentLinkLabel);
    makeLinkLabel(document.getElementById("viewGlobe"), viewGlobeLabel);
    makeLinkLabel(document.getElementById("viewMap"), viewMapLabel);
	
	goToSiteElem = document.getElementById("documentLink");
	imageDisplayElem = document.getElementById("imageDisplay");
	if(imageDisplayElem){
	  mapImage = imageDisplayElem.firstChild;
	  var imageAjax = new AjaxObject(proxyServlet + "?remoteURL=" 
	                                 + escape(mapImage.src), removeImage);
	  imageAjax.sendGet(true); 
	}
	
	if(goToSiteElem){
	
	    goToSiteElem.target = "_blank";
	    goToSiteElem.href = goToSiteElem.href.split(",", 1);
        goToSiteElem.onclick = function(){
    
         
     	 /* var ajaxObjLink = new AjaxObject(proxyServlet + "?remoteURL=" 
     	                             + escape(goToSiteElem.href),
     	                             goToSiteF);
     	  ajaxObjLink.sendGet(false);
     	  
     	  if(goToSiteAnswer == false){
     	     alert(badConnectionMsg);
     	     window.status = "HTTP ErrorCode " + code;
     	  }
     	*/
  	      return true;	
  	    }
   }
}



function goToSiteF(requestObj){
	
	try{
	if(requestObj.readyState == 4 && 
	   requestObj.status < 400 || 
	   requestObj.status == 401){
	     goToSiteAnswer = true;
	}
	code = requestObj.status;
	}catch(error){
		window.status = "Error whie verifying document site";
	}		
}

function removeImage(requestObj){

    try{
    var cType;
    
    if(requestObj.readyState == 4)
    	cType = requestObj.getResponseHeader("Content-Type");
    	
    if((requestObj && requestObj.readyState == 4) &&
       (requestObj.status && requestObj.status == 200) &&
       (cType && cType.match("*image/*"))
       ){
    	return;
    } else if (requestObj && requestObj.readyState == 4){
    	imageDisplayElem.removeChild(mapImage);
    }
    }catch(error){
    	window.status="Error while attempting to remove image from page."
    	if(requestObj.readyState == 4)
    	   imageDisplayElem.removeChild(mapImage);
    }
       
 
}



