﻿// <copyright file="CriteriaList.js" company="BioCentury Publications Inc."> 
// All contents Copyright © 2005-2009 BioCentury Publications, Inc. ALL RIGHTS RESERVED
// 
// http://www.biocentury.com 
// </copyright>

//-------------------------------------------------------------------------------
// Created by Mihai on 06 May 2009
// used in Save Criteria List modal popup
//-------------------------------------------------------------------------------
function ValidateSaveCriteriaDialog(criteriaName, userID) 
{
    var listName = document.getElementById(criteriaName.id).value;
    if (listName == "") 
    {
        alert("Please name your search before saving it");
        return false;
    }

   var isReserved = CriteriaAlreadyExists(listName, userID);
    if (isReserved != "undefined" && isReserved != null) 
    {
        switch (isReserved) 
        {
            case "0":
                alert('This is a reserved search name. Please choose another one.');
                return false;
            case "1":
                break;
            default:
                var isCriteriaUsedInEmailAlert = IsCriteriaUsedInEmailAlert(listName, userID);
                if (isCriteriaUsedInEmailAlert != "undefined" && isCriteriaUsedInEmailAlert != null && isCriteriaUsedInEmailAlert == "true") 
                {
                    if (!confirm('This search name already exists and it is used for at least 1 email alert. Are you sure you want to overwrite it?')) 
                    {
                        return false;
                    }
                }
                else 
                {
                    if (!confirm('This search name already exists. Are you sure you want to overwrite it?')) 
                    {
                        return false;
                    }
                }
                break;
        }
    }
    
    // if all the conditions where met, the thread will get here
    $find("ModalPopupExtenderSetEmailAlert").hide();
    return true;
}

//-------------------------------------------------------------------------------
// Created by Mihai on 06 May 2009
// Used in ValidateSaveDialog
//-------------------------------------------------------------------------------
function CriteriaAlreadyExists(criteriaName, userID) {
    try {
        var httpRequest = GetXmlHttpObject();

        var xmlSOAP = '<?xml version="1.0" encoding="utf-8"?>' +
         '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
         'xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ' +
          '<soap:Body>' +
           '<IsReservedCriteriaName xmlns="http://www.biocentury.com/webservices/">' +
            '<listName>' + htmlEncode(criteriaName) + '</listName>' +
            '<userID>' + htmlEncode(userID) + '</userID>' +
           '</IsReservedCriteriaName>' +
          '</soap:Body>' +
         '</soap:Envelope>';



        // send XML document to Web server
        //httpRequest = new ActiveXObject("Microsoft.XMLHTTP");

        httpRequest.onreadystatechange = new function() { };
        //alert(UtilitiesWSUrl);
        httpRequest.open("POST", UtilitiesWSUrl, false);

        httpRequest.setRequestHeader("SOAPAction", "http://www.biocentury.com/webservices/IsReservedCriteriaName");
        httpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        httpRequest.send(xmlSOAP);


        if (httpRequest.status == 200) {
            text = httpRequest.responseText;

            try //Internet Explorer
            {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = "false";
                xmlDoc.loadXML(text);
            }
            catch (e) {
                try //Firefox, Mozilla, Opera, etc.
                {
                    parser = new DOMParser();
                    xmlDoc = parser.parseFromString(text, "text/xml");
                }
                catch (e) {
                    alert(e.message);
                }
            }
            try {
                //  document.write("xmlDoc is loaded, ready for use");
                //document.write(xmlDoc.getElementsByTagName("IsReservedListNameResult"));
                return xmlDoc.getElementsByTagName("IsReservedCriteriaNameResult")[0].text;
            }
            catch (e) {
                alert(e.message);
            }
        }
        else {
            alert("Your search couldn't be accessed.");
        }
    }
    catch (err)
    { }
}

//-------------------------------------------------------------------------------
// Created by Mihai on 06 May 2009
// Used in ValidateSaveDialog
//-------------------------------------------------------------------------------
function IsCriteriaUsedInEmailAlert(criteriaName, userID) {
    try {
        var httpRequest = GetXmlHttpObject();

        var xmlSOAP = '<?xml version="1.0" encoding="utf-8"?>' +
         '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
         'xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ' +
          '<soap:Body>' +
           '<IsCriteriaUsedInEmailAlert xmlns="http://www.biocentury.com/webservices/">' +
            '<criteriaName>' + htmlEncode(criteriaName) + '</criteriaName>' +
            '<userID>' + htmlEncode(userID) + '</userID>' +
           '</IsCriteriaUsedInEmailAlert>' +
          '</soap:Body>' +
         '</soap:Envelope>';

        // send XML document to Web server
        //httpRequest = new ActiveXObject("Microsoft.XMLHTTP");

        httpRequest.onreadystatechange = new function() { };
        //alert(UtilitiesWSUrl);
        httpRequest.open("POST", UtilitiesWSUrl, false);

        httpRequest.setRequestHeader("SOAPAction", "http://www.biocentury.com/webservices/IsCriteriaUsedInEmailAlert");
        httpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        httpRequest.send(xmlSOAP);

        if (httpRequest.status == 200) {
            text = httpRequest.responseText;
            try //Internet Explorer
            {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = "false";
                xmlDoc.loadXML(text);
                try {
                    return xmlDoc.getElementsByTagName("IsCriteriaUsedInEmailAlertResult")[0].text;
                }
                catch (e) {
                    alert(e.message);
                }
            }
            catch (ex) {
                try //Firefox, Mozilla, Opera, etc.
                {
                    parser = new DOMParser();
                    xmlDoc = parser.parseFromString(text, "text/xml");
                    try {
                        return xmlDoc.getElementsByTagName("IsCriteriaUsedInEmailAlertResult")[0].firstChild.nodeValue;
                    }
                    catch (e) {
                        alert(e.message);
                    }
                }
                catch (er) { alert(er.message) }
            }

        }
        else {
            alert("List of email alerts couldn't be accessed.");
        }
    }
    catch (err)
    { }
}

//-------------------------------------------------------------------------------
// Add by Bela on 05/18/2009
// HTML-Encode the supplied input
// parameter: (String) source - the text to be encoded.
//-------------------------------------------------------------------------------
function htmlEncode(source)
{
	function special(source)
	{
		var result = '';
		for (var i = 0; i < source.length; i++)
		{
			var c = source.charAt(i);
			if (c < ' ' || c > '~')
			{
				c = '&#' + c.charCodeAt() + ';';
			}
			result += c;
		}
		return result;
	}
	var result = source;

	// ampersands (&)
	result = result.replace(/\&/g, '&amp;');

	// less-thans (<)
	result = result.replace(/\</g, '&lt;');

	// greater-thans (>)
	result = result.replace(/\>/g, '&gt;');
	
    // Replace quotes if it isn't for display,
    // since it's probably going in an html attribute.
    result = result.replace(new RegExp('"', 'g'), '&quot;');

	// special characters
	result = special(result);
	
	return result;
}