function useLoadingMessage() {
  var loadingMessage = "Loading... Please Wait!";

  dwr.engine.setPreHook(function() {
    var div = document.getElementById('progressStatus');
    div.innerHTML = loadingMessage;
	div.style.display = 'inline';
  });

  dwr.engine.setPostHook(function() {
	var div = document.getElementById('progressStatus');
    div.innerHTML = "";
	div.style.display = 'none';
  });
}

function errorHandler(message){
	var div = document.getElementById('progressStatus');
    div.innerHTML = "Error while fetching data";
	div.style.display = 'inline';
};

function loadOrganizations(){			
	ajaxUtil.getOrganizations({
	  callback:function(data) { 					
				if(data != null){
					var id = "organization";
					var sel = dwr.util.getValue(id);						
					dwr.util.addOptions(id, data);
				}
			},
	  errorHandler: errorHandler
	});
}
	
function loadOrganizationUnits(){		
	var id = "organization";
	var sel = dwr.util.getValue(id);
	dwr.util.removeAllOptions("organizationUnits");	
	if(sel != ""){
		ajaxUtil.getOrganizationsUnits(sel,{
		  callback:function(data) {				
					if(data != null){
						id = "organizationUnits";
						dwr.util.removeAllOptions(id);
						dwr.util.addOptions(id, data);
					}
				},
		  errorHandler: errorHandler
		});
	} else {
		dwr.util.removeAllOptions("organizationUnits");
	}
}

function isValidSelection(){
	var id = "organization";
	var sel = dwr.util.getValue(id);
	if(sel == ""){
		alert("Please Select Certifying Authority");
		return false;
	}
	id = "organizationUnits";
	sel = dwr.util.getValue(id);
	if(sel == ""){
		alert("Please Select Organization Unit");
		return false;
	}

	return true;
}

function searchCommonName(){
	clearData();
	var organizationUnits = dwr.util.getValue("organizationUnits");
	var organization = dwr.util.getValue("organization");
	var cn = dwr.util.getValue("commonName");
	
	if(isValidSelection()){
		if(cn == ""){
		alert("Please enter Common Name to search");
		return false;
		}
		ajaxUtil.searchByCN(organization,organizationUnits,cn,{
		  callback:function(ldapData) {
					if(ldapData == null){
						displayData("No data found");
					}else {
						displayDataLDAPData(ldapData);
					}
				},
		  errorHandler: errorHandler
		});
	}		
}

function searchEmail(){
	clearData();
	var organizationUnits = dwr.util.getValue("organizationUnits");
	var organization = dwr.util.getValue("organization");
	var email = dwr.util.getValue("email");
	if(isValidSelection()){
		if(email == ""){
		alert("Please enter email to search");
		return false;
		}		
		ajaxUtil.searchByEMail(organization,organizationUnits,email,{
		  callback:function(ldapData) {
					if(ldapData == null){
						displayData("No data found");
					}else {
						displayDataLDAPData(ldapData);
					}
				},
		  errorHandler: errorHandler
		});	
	}
	
}

function displayDataLDAPData(ldapDataList){		
	var newLine = "<br/>";
	var tab = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
	var newLineTab = newLine+tab;
	var data = '<table>';
	var ldapData;
	for(var i=0; i < ldapDataList.length; i++) {
		ldapData = ldapDataList[i];
		
		if(i > 0)
			data += "<tr><td></td><td></td></tr>";
		data += "<tr><td><b>Common Name</b></td><td>"+ldapData.commonName+"</td>";
		data += "<tr><td><b>Mail ID</b></td><td>"+ldapData.mailId+"</td>";
		data += "<tr><td><b>userCertificate</b></td><td>"+ldapData.userCertificate+"</td>";			
		data += "<tr><td class='nrdc1'><b>Version</b></td><td>"+ldapData.version+"</td>";
		data += "<tr><td class='nrdc1'><b>Serial Number</b></td><td>"+ldapData.serialNumberAsString+"</td>";
		data += "<tr><td class='nrdc1'><b>Signature Algorithm</b></td><td>"+ldapData.signatureAlgorithm+"</td>";
		data += "<tr><td class='nrdc1'><b>Issuer</b></td><td></td>";
		data += "<tr><td class='nrdc'><b>Common Name</b></td><td>"+ldapData.issuer.commonName+"</td>";
		if(ldapData.issuer.email != null)
			data += "<tr><td class='nrdc'><b>EmailAddress</b></td><td>"+ldapData.issuer.email+"</td>";
		data += "<tr><td class='nrdc'><b>Organization Unit</b></td><td>"+ldapData.issuer.organizationUnit+"</td>";
		data += "<tr><td class='nrdc'><b>Organization Unit</b></td><td>"+ldapData.issuer.organizationUnitTwo+"</td>";
		data += "<tr><td class='nrdc'><b>Organization</b></td><td>"+ldapData.issuer.organization+"</td>";
		if(ldapData.issuer.location != null)
			data += "<tr><td class='nrdc'><b>Location</b></td><td>"+ldapData.issuer.location+"</td>";
		if(ldapData.issuer.state != null)
			data += "<tr><td class='nrdc'><b>State</b></td><td>"+ldapData.issuer.state+"</td>";
		if(ldapData.issuer.country != null)
			data += "<tr><td class='nrdc'><b>Country</b></td><td>"+ldapData.issuer.country+"</td>";
		data += "<tr><td class='nrdc1'><b>Valid From</b></td><td>"+ldapData.validFrom+"</td>";
		data += "<tr><td class='nrdc1'><b>Valid Until</b></td><td>"+ldapData.validUntill+"</td>";
		data += "<tr><td class='nrdc1'><b>Distinguished Name</b></td><td></td>";
		data += "<tr><td class='nrdc'><b>EmailAddress</b></td><td>"+ldapData.distinguishedName.emailAddress+"</td>";
		data += "<tr><td class='nrdc'><b>Common Name</b></td><td>"+ldapData.distinguishedName.commonName+"</td>";
		data += "<tr><td class='nrdc'><b>Organization Unit</b></td><td>"+ldapData.distinguishedName.organizationUnit+"</td>";
		data += "<tr><td class='nrdc'><b>Organization Unit</b></td><td>"+ldapData.distinguishedName.organizationUnitTwo+"</td>";
		data += "<tr><td class='nrdc'><b>Organization</b></td><td>"+ldapData.distinguishedName.organization+"</td>";
		data += "<tr><td class='nrdc'><b>Location</b></td><td>"+ldapData.distinguishedName.location+"</td>";
		data += "<tr><td class='nrdc'><b>State</b></td><td>"+ldapData.distinguishedName.state+"</td>";
		data += "<tr><td class='nrdc'><b>Country</b></td><td>"+ldapData.distinguishedName.country+"</td>";
		data += "<tr><td class='nrdc1'><b>Format</b></td><td>"+ldapData.format+"</td>";
		data += "<tr><td class='nrdc1'><b>Public Key Algorithm</b></td><td>"+ldapData.publicKeyAlgorithm+"</td>";
		data += "<tr><td class='nrdc1'><b>Thumb Print</b></td><td>"+ldapData.thumbPrint+"</td>";
		data += "<tr><td class='nrdc1'></td><td>"+ldapData.thumbPrintTwo+"</td>";
	}
	var crlData = null;		
	if(ldapData.crls != null && ldapData.crls.length > 0){
		data += "<tr><td class='nrdc1'><b><font color=red>User Certificate is revoked</b></font></td><td></td>";
		for(var i=0; i < ldapData.crls.length; i++) {
			crlData = ldapData.crls[i];
			data += "<tr><td class='nrdc1'><b>Revocation Date</b></td><td>"+crlData.revocationDate+"</td>";
			data += "<tr><td class='nrdc1'><b>Reason of Revocation</b></td><td>"+crlData.reasonForRevocation+"</td>";
		}
	}
	data += "<tr><td class='nrdc1'><b>"+ldapData.certificateStatus+"</b></td><td></td>";
	data += "</table>";
	displayData(data);
}

function clearData(){
	var dataDiv = document.getElementById('content');
	document.getElementById('searchResults').style.display = 'none';
	if(dataDiv)
		dataDiv.innerHTML = "";
}

function displayData(data){
	var dataDiv = document.getElementById('content');
	document.getElementById('searchResults').style.display = 'inline';
	if(dataDiv)
		dataDiv.innerHTML = data;
}


