//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//
// this file must be included with prototype as well
//
// example:
//
//	<g:javascript library="prototype" />
//	<g:javascript library="demoFormValidation" />
//
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////


function validateEmailSynchronous() {
	// bogus definition for canoo web test
	// actual implementation is defined in _demoForm.gsp
}

function validateNewEmailSynchronous() {
	// bogus definition for canoo web test
	// actual implementation is defined in _demoForm.gsp
}

function validateScreenNameSynchronous() {
	// bogus definition for canoo web test
	// actual implementation is defined in _demoForm.gsp
}


String.prototype.trim = function() {
    return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

var baseFieldsToValidate = new Array();
var errorsToDisplay = [];
var problemCount = 0;
var snChecked = false;
var snAvailable = false;
var snMessage = "";
var emChecked = false;
var emAvailable = false;
var emMessage = "";
var neChecked = false;
var neAvailable = false;
var neMessage = "";

var skipValidation = false;

// global variables required for validatePhone, need to be replaced with the values corresponding
// for state/country
var numDigitsInPhoneFmt = null;
var phonePrefix = null;
var phonePrefixLen = null;
var origNumDigitsInPhoneFmt = null;
var usaCanadaFlag = null;


function addHiddenInputToForm(spForm, spName, spValue) {
    if ($(spName)) {
        $(spName).value = spValue;
    }
    else {
        var input;
        if (document.createElement && (input = document.createElement('input'))) {
            input.type = 'hidden';
            input.name = spName;
            input.id = spName;
            input.defaultValue = input.value = spValue;
            spForm.appendChild(input);
        }
    }
}

function addToValidateList(whatToValidate) {
    baseFieldsToValidate.push(whatToValidate); // This will add to the validation list
}

function removeFromValidateList(whatToRemove) {
    baseFieldsToValidate.pop(whatToRemove);
}

function validateFormFields(formToValidate) {
    addHiddenInputToForm(formToValidate, "paramToIgnore", "");

    var demoFormErrorDiv = $('demoFormErrors');
    var demoFormErrorUl = $('demoFormUl');
    
    problemCount = 0;
    errorsToDisplay.clear();
    demoFormErrorUl.childElements().each(function(el) { el.remove(); });

    var validateFieldInformation
    var fieldsToValidate = baseFieldsToValidate.slice();

    if (skipValidation) {
        demoFormErrorDiv.style.display = 'none';
    }

    while (fieldsToValidate.length) {
        validateFieldInformation = fieldsToValidate.shift().toString().split("|")
        var typeOfValidation = validateFieldInformation[0];

        if (validateFieldInformation.length >= 3) {
            var fieldName1 = validateFieldInformation[1];
            var fieldId1 = validateFieldInformation[2];
        }
        if (validateFieldInformation.length >= 5) {
            var fieldName2 = validateFieldInformation[3];
            var fieldId2 = validateFieldInformation[4];
        }
        if (validateFieldInformation.length >= 7) {
            var fieldName3 = validateFieldInformation[5];
            var fieldId3 = validateFieldInformation[6];
        }

        if (skipValidation && typeOfValidation != "NEWEMAIL") {
            continue;
        }

        switch (typeOfValidation) {
            case "EMAIL":
                var emailText = validateText(fieldId1, fieldName1);
                if (emailText) {
                	// validate email only if the user has entered some text
                	validateEmail(fieldId1, fieldName1, formToValidate);
                }
                break;
            case "CONFIRMEMAIL":
                validateConfirmEmail(fieldId1, fieldName1, fieldId2, fieldName2);
                addHiddenInputToForm(formToValidate, "paramToIgnore", "");
                break;

            case "EITHERFIELDREQUIRED":
                validateEitherField(fieldId1, fieldName1, fieldId2, fieldName2);
                addHiddenInputToForm(formToValidate, "paramToIgnore", "");
                break;

            case "EITHERSTATEREQUIRED":
                validateEitherState(fieldId1, fieldName1, fieldId2, fieldName2);
                break;

            case "EMAILFORMAT":
                var emailText = validateText(fieldId1, fieldName1);
                if (emailText) {
                	// validate email only if the user has entered some text
                	validateEmailFormat(fieldId1, fieldName1, formToValidate);
                }
                break;

            case "NEWEMAIL":
                var theEmailTbody = $('newEmailTbody');
                if (theEmailTbody.style.display != 'none') {
                    validateText(fieldId1, fieldName1);
                    validateNewEmail(fieldId1, fieldName1, formToValidate);
                }
                break;
            case "CREDITCARD":
                validateCreditCard(fieldId1, fieldName1);
                break;

            case "CARTTEXT":
                validateCartText(fieldId1, fieldName1);
                break;

            case "PASSWORD":
                validatePassword(fieldId1, fieldName1, fieldId2, fieldName2);
                addHiddenInputToForm(formToValidate, "paramToIgnore", "");
                break;

            case "NEWPASSWORD":
                var theTbody = $('passTbody');
                if (theTbody.style.display != 'none') {
                    validatePassword(fieldId1, fieldName1, fieldId2, fieldName2);
                    addHiddenInputToForm(formToValidate, "paramToIgnore", "");
                }
                else {
                    addHiddenInputToForm(formToValidate, "paramToIgnore", fieldId1);
                }
                break;

            case "TEXT":
                validateText(fieldId1, fieldName1);
                break;

            case "DROPDOWN":
                validateDropDown(fieldId1, fieldName1);
                break;

            case "CARTDROPDOWN":
                validateCartDropDown(fieldId1, fieldName1);
                break;

            case "CARTDATEDROPDOWN":
                validateCartDateDropDown(fieldId1, fieldName1, fieldId2, fieldName2);
                break;

            case "MULTIPLEDROPDOWN":
                validateMultipleDropDown(fieldId1, fieldName1);
                break;

            case "CHECKBOXES":
                validateCheckBoxes(fieldId1, fieldName1);
                break;

            case "TnC":
                validateCheckBox(fieldId1, fieldName1);
                break;

            case "CW2CODE":
                validateCW2Code(fieldId1, fieldName1, fieldId2, fieldName2);
                break;
        
            case "SCREENNAMEREQUIRED":
                validateRequiredScreenName(fieldId1,fieldName1);
                break;

            case "SCREENNAMEOPTIONAL":
                validateOptionalScreenName(fieldId1,fieldName1);
                break;

            case "ZIP":
                validateText(fieldId1, fieldName1);
            	// TODO: validateZip(fieldId1,fieldName1);
                break;

            case "PHONE":
            	validatePhone(fieldId1,fieldName1);
                break;
        }
    }

    // alert("problem count = " + problemCount);
    // alert(errorsToDisplay);

    if (problemCount) {
        demoFormErrorDiv.style.display = 'block';
        demoFormErrorDiv.focus();
        
        // add errorsToDisplay to the ul list
        errorsToDisplay.each(function(err) { 
        	demoFormErrorUl.appendChild(new Element('li', { 'class': 'regErrorsLI' }).update(err));
    	});
    	
        return false;
    }
    else {
        demoFormErrorDiv.style.display = 'none';

        return true;
    }
}


function freeformCheck(freeFormTextClass){
    if (!$(freeFormTextClass).checked){
        document.getElementsByClassName(freeFormTextClass)[0].value='';
    }
}

function freeformCheck1(freeFormCheckBoxId){
    if(document.getElementsByClassName(freeFormCheckBoxId)[0].value==''){
        $(freeFormCheckBoxId).checked=false;
    }else{
        $(freeFormCheckBoxId).checked=true;
    }
}

function validateEmail(fieldId, fieldName, formToValidate) {

    validateEmailFormat(fieldId, fieldName, formToValidate)
    var fieldToCheck = $(fieldId);

    if (!emChecked) {
        // synchronously validate e-mail against the DB
        validateEmailSynchronous();
    }
    if (!emAvailable) {
        problemCount++;
        errorsToDisplay.push(emMessage);
        highlightField(fieldToCheck);
    }
}

function validateEmailFormat(fieldId, fieldName, formToValidate) {
    var emailRegEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9\-\.])+\.([A-Za-z]{2,4})$/;
    var fieldToCheck = $(fieldId);
    var email = fieldToCheck.value;
    unHighlightField(fieldToCheck);
    if (!email.match(emailRegEx)) {
        problemCount++;
        errorsToDisplay.push("Please enter your full email address, including the @ sign and the domain. For example: fsmith@xyz.com");
        highlightField(fieldToCheck);
    }
    else {
        addHiddenInputToForm(formToValidate, "thisEmail", email);
    }

}

function validateNewEmail(fieldId, fieldName, formToValidate) {
    var emailRegEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9\-\.])+\.([A-Za-z]{2,4})$/;
    var fieldToCheck = $(fieldId);
    var email = fieldToCheck.value;
    unHighlightField(fieldToCheck);
    if (!email.match(emailRegEx)) {
        problemCount++;
        errorsToDisplay.push("Please enter your full email address, including the @ sign and the domain. For example: fsmith@xyz.com");
        highlightField(fieldToCheck);
    }
    else {
        addHiddenInputToForm(formToValidate, "newEmail", email);
    }

    if (!neChecked) {
    	// synchronously validate e-mail against the DB
		validateNewEmailSynchronous();
	}
    if (!neAvailable) {
        problemCount++;
        errorsToDisplay.push("The new email is already in use");
        highlightField(fieldToCheck);
    }
}

function validatePassword(fieldId1, fieldName1, fieldId2, fieldName2) {
    var illegalPassChars = /[\W_]/; // allow only letters and numbers
    var fieldToCheck1 = $(fieldId1);
    var fieldToCheck2 = $(fieldId2);
    unHighlightField(fieldToCheck1);
    unHighlightField(fieldToCheck2);

    validateText(fieldId1, fieldName1);
    validateText(fieldId2, fieldName2);

    if (illegalPassChars.test(fieldToCheck1.value)) {
        problemCount++;
        errorsToDisplay.push("The password contains illegal characters. It must be alphanumeric");
        highlightField(fieldToCheck1);
        highlightField(fieldToCheck2);
    }
    if (fieldToCheck1.value.length > 0 && fieldToCheck1.value.length < 6) {
        problemCount++;
        errorsToDisplay.push("Please re-enter your password. It must be at least 6 characters");
        highlightField(fieldToCheck1);
        highlightField(fieldToCheck2);
    }
    if (fieldToCheck1.value != fieldToCheck2.value) {
        problemCount++;
        errorsToDisplay.push(fieldName1 + " and " + fieldName2 + " don't match. Please re-enter");
        highlightField(fieldToCheck1);
        highlightField(fieldToCheck2);
    }
}
function validateConfirmEmail(fieldId1, fieldName1, fieldId2, fieldName2) {
    var fieldToCheck1 = $(fieldId1);
    var fieldToCheck2 = $(fieldId2);
    unHighlightField(fieldToCheck2);
    validateText(fieldId2, fieldName2);
    if (fieldToCheck1.value != fieldToCheck2.value) {
        problemCount++;
        errorsToDisplay.push(fieldName1 + " and " + fieldName2 + " don't match. Please re-enter");
        highlightField(fieldToCheck1);
        highlightField(fieldToCheck2);
    }
}

function validateEitherField(fieldId1, fieldName1, fieldId2, fieldName2) {
    var fieldToCheck1 = $(fieldId1);
    var fieldToCheck2 = $(fieldId2);
    unHighlightField(fieldToCheck1);
    unHighlightField(fieldToCheck2);
    if(fieldToCheck1.value.trim()=="" && fieldToCheck2.value.trim()=="") {
        problemCount++;
        errorsToDisplay.push(fieldName1 + " or " + fieldName2 + " is required. Please re-enter");
        highlightField(fieldToCheck1);
        highlightField(fieldToCheck2);
    }
}

function validateEitherState(fieldId1, fieldName1, fieldId2, fieldName2) {
    var fieldToCheck1 = $(fieldId1);
    var fieldToCheck2 = $(fieldId2);
    unHighlightField(fieldToCheck1);
    unHighlightField(fieldToCheck2);
    if(fieldToCheck1.value.trim()=="" && fieldToCheck2.value.trim()=="") {
        problemCount++;
        errorsToDisplay.push(" Please enter your "+ fieldName1);
        highlightField(fieldToCheck1);
        highlightField(fieldToCheck2);
    }
}

function validateText(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);

    if (fieldToCheck.value.trim() == "") {
        problemCount++;
        errorsToDisplay.push("Please enter your " + fieldName);
        highlightField(fieldToCheck);
        return false;
    }
    
    return true;
}

function validateCartText(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unhighlightAndUnbold(fieldToCheck);

    if (fieldToCheck.value.trim() == "") {
        problemCount++;
        errorsToDisplay.push("Please enter your " + fieldName);
        highlightAndBold(fieldToCheck);
        return false;
    }

    return true;
}

function validateDropDown(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);

    if (fieldToCheck[0].selected) {
        problemCount++;
        errorsToDisplay.push("Please select a " + fieldName);
        highlightField(fieldToCheck);
    }
}

function validateCartDropDown(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unhighlightAndUnbold(fieldToCheck);

    if (fieldToCheck[0].selected) {
        problemCount++;
        errorsToDisplay.push("Please select a " + fieldName);
        highlightAndBold(fieldToCheck);
    }
}

function validateCartDateDropDown(fieldId1, fieldName1, fieldId2, fieldName2) {
    var fieldToCheck1 = $(fieldId1);
    var fieldToCheck2 = $(fieldId2);

    unhighlightAndUnbold(fieldToCheck1);

    if (fieldToCheck1[0].selected || fieldToCheck2[0].selected) {
        problemCount++;
        errorsToDisplay.push("Please select the " + fieldName1);
        highlightAndBold(fieldToCheck1);
    }
}


function validateCreditCard(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unhighlightAndUnbold(fieldToCheck);

    if (!isCreditCardValid($(fieldId).value)) {
        errorsToDisplay.push("Please enter a valid " + fieldName);
        highlightAndBold(fieldToCheck);
    }
}

function isCreditCardValid(s){
       if(s=="") return false;
// remove non-numerics
        var v = "0123456789";
        var w = "";
        for (i=0; i < s.length; i++) {
            x = s.charAt(i);
            if (v.indexOf(x,0) != -1)
                w += x;
        }
// validate number
        j = w.length / 2;
        if (j < 6.5 || j > 8 || j == 7) return false;
        k = Math.floor(j);
        m = Math.ceil(j) - k;
        c = 0;
        for (i=0; i<k; i++) {
            a = w.charAt(i*2+m) * 2;
            c += a > 9 ? Math.floor(a/10 + a%10) : a;
        }
        for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
        return (c%10 == 0);
}


function validateMultipleDropDown(fieldId, fieldName){
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);
    for(var i=1;i<fieldToCheck.options.length;i++){
        if(fieldToCheck.options[i].selected){
            return true;
        }
    }
    problemCount++;
    errorsToDisplay.push("Please select a " + fieldName);
    highlightField(fieldToCheck);
    return false;
}


function checkCw2CodeWithCard(fieldToCheck1,fieldToCheck2){
    if(fieldToCheck1.value == 'AX'){
            return (fieldToCheck2.value.length==4);
    }else{
            return (fieldToCheck2.value.length==3);
    }
}

function validateCW2Code(fieldId1, fieldName1, fieldId2, fieldName2){
    var fieldToCheck1 = $(fieldId1);  // Card Type [AX,MC,VS,DS ....]
    var fieldToCheck2 = $(fieldId2); // CW2 code
    unhighlightAndUnbold(fieldToCheck2);
    if (!checkCw2CodeWithCard(fieldToCheck1,fieldToCheck2)) {
        problemCount++;
        errorsToDisplay.push("Please enter a Valid " + fieldName2);
        highlightAndBold(fieldToCheck2);
        return false;
    }
    return true;
}

function validateCheckBox(fieldId, fieldName){ //for Terms and conditions
    var fieldsToCheck = document.getElementsByName(fieldId);
    unhighlightAndUnbold(fieldsToCheck[0]);
    for(var i=0;i<fieldsToCheck.length;i++){
        if(fieldsToCheck[i].checked){
            return true;
        }
    }
    problemCount++;
    errorsToDisplay.push("Please accept the " + fieldName);
    highlightAndBold(fieldsToCheck[0]);
    return false;
}

function unhighlightAndUnbold(fieldId){
    var txt = $($(fieldId).name + "_txt");
    if (txt) {
    	txt.style.color = "";
        txt.style.fontWeight = "";
    }
}

function highlightAndBold(fieldId){
    var txt = $($(fieldId).name + "_txt");
    if (txt) {
    	txt.style.color = "red";
        txt.style.fontWeight = "bold";
    }
}


function validateCheckBoxes(fieldId, fieldName){
    var fieldsToCheck = document.getElementsByName(fieldId);
    unHighlightField(fieldsToCheck[0]);
    for(var i=0;i<fieldsToCheck.length;i++){
        if(fieldsToCheck[i].checked){
            return true;
        }
    }
    problemCount++;
    errorsToDisplay.push("Please select a " + fieldName);
    highlightField(fieldsToCheck[0]);
    return false;
}

function validateRequiredScreenName(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);

    var validText = validateText(fieldId, fieldName);

    if (validText) {
        // there is text, now validate it's available

        if (!snChecked) {
            // synchronously validate screen name against the DB
            validateScreenNameSynchronous();
        }

        if (!snAvailable) {
            problemCount++;
            errorsToDisplay.push(snMessage);
            highlightField(fieldToCheck);
        }
    }
}

function validateOptionalScreenName(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);

    if (fieldToCheck.value == "") {
        return;
    }
    else {
        // check if Screen Name was AJAX validated

        if (!snChecked) {
            // synchronously validate screen name against the DB
            validateScreenNameSynchronous();
        }
        if (!snAvailable) {
            problemCount++;
            errorsToDisplay.push(fieldName + " is in use. Please select another");
            highlightField(fieldToCheck);
        }
    }
}

function validateZip(fieldId, fieldName) {
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);

    if (fieldToCheck.value == "") {
        problemCount++;
        errorsToDisplay.push("Please enter your " + fieldName);
        highlightField(fieldToCheck);
    }
}

function validatePhone(fieldId, fieldName) {
//	 alert("numDigitsInPhoneFmt = " + numDigitsInPhoneFmt);
//	 alert("phonePrefix = " + phonePrefix);
//	 alert("phonePrefixLen = " + phonePrefixLen);
//	 alert("origNumDigitsInPhoneFmt = " + origNumDigitsInPhoneFmt);
//	 alert("usaCanadaFlag = " + usaCanadaFlag);

    var phone = $(fieldId).value.trim();
    var fieldToCheck = $(fieldId);
    unHighlightField(fieldToCheck);

	if (!phone) {
        problemCount++;
        errorsToDisplay.push("Please enter your " + fieldName);
        highlightField(fieldToCheck);
        return;
	}
    return; // No phone validation for now other than its there. Save the validation for just in case...

    var pos = phone.toLowerCase().indexOf('x');

	// Look for extension, split phone string
	// into phone and extension parts.
	if (pos >= 0) {
		var rtnExt = getDigits(phone.substr(pos + 1))
		if (rtnExt && rtnExt.length > 7) {
            problemCount++;
            errorsToDisplay.push("Extension is > 7 digits for " + fieldName);
            highlightField(fieldToCheck);
	        return;
		}
		phone = phone.substr(0, pos);
	}

	// phone is now the part of the string prior to the extension
	if (usaCanadaFlag) {
		phone = getDigits(phone);
		if (!phone || phone == "0") { // no digits
            problemCount++;
            errorsToDisplay.push("There is an extension with no preceeding value for " + fieldName);
            highlightField(fieldToCheck);
	        return;
		}
		if (phone.charAt(0) == '1') { // 1st char a '1' ?
			phone = phone.substr(1) // strip first character
		}
		if (phone.length != 10) {
            problemCount++;
            errorsToDisplay.push("The number must have 10 digits for " + fieldName);
            highlightField(fieldToCheck);
	        return;
		}
	}

	var prfx = getPhonePrefix(phone);
	if (prfx == phonePrefix) { // phone prefix matches Think phone format prefix; remove prefix from phone.
		pos = phone.indexOf(prfx);
		phone = phone.substr(pos + phonePrefixLen)
	}

	phone = getDigits(phone)

	if (!phone || phone == '0') { // no digits
        problemCount++;
        errorsToDisplay.push("There is a prefix but no number for " + fieldName);
        highlightField(fieldToCheck);
        return;
	}

	// Check to see if the number of digits in phone exceeds the number of digits in the phone format.
	// Non-NANP phone formats were padded with ##### to make room for future growth, 3-10-08, JSG

	// Check to see if the length exceeds the minus 5 length
	if (phone.length > origNumDigitsInPhoneFmt) {
		// does beginning of phone match prefix ?
		if (phonePrefix && phone.substr(0, phonePrefixLen) == phonePrefix.substr(0, phonePrefixLen)) {
			phone = phone.substr(phonePrefixLen)
		}

		if (phone.length > numDigitsInPhoneFmt) { // still too long
            problemCount++;
            errorsToDisplay.push("There are more than " + numDigitsInPhoneFmt + " digits for " + fieldName);
            highlightField(fieldToCheck);
	        return;
		}
	}
}

function showHidePass(textArea, newPass, confPass) {
    var msg1 = "Click to change password.";
    var msg2 = "Don't Change My Password.";
    textArea.innerHTML = (textArea.innerHTML.toLowerCase() == msg2.toLowerCase()) ? msg1 : msg2;
    var theTbody = $('passTbody');
    theTbody.style.display = (theTbody.style.display == 'none') ? '' : 'none';
    if (theTbody.style.display == 'none') {
        $(newPass).value = '';
        $(confPass).value = '';
        $('wordPassWord').innerHTML = '<span class=\"required\">*</span>&nbsp;Password:';
    } else {
        $('wordPassWord').innerHTML = '';
    }
}

function showHideNewEmail(textArea, newEmail) {
    var msg1 = "Click to change email address.";
    var msg2 = "Don't change my email.";
    textArea.innerHTML = (textArea.innerHTML.toLowerCase() == msg2.toLowerCase()) ? msg1 : msg2;
    var theEmailTbody = $('newEmailTbody');
    var formToValidate = $(newEmail).form
    theEmailTbody.style.display = (theEmailTbody.style.display == 'none') ? '' : 'none';
    if (theEmailTbody.style.display == 'none') {
        addHiddenInputToForm(formToValidate, "newEmail", '');
        $(newEmail).value = '';
        $('checkNewEmailMsg').innerHTML = '';
    }
}

function getDigits(str) {
	return str.replace(/[^\d]/g, '');
}

/* Returns the first contiguous set of digits from the string.
 * If '1' is the first set; returns the second set.
 * Returns null if no set is found.
 */
function getPhonePrefix(phoneFmt) {
	var digits = phoneFmt.match(/(\d+)/g)
	
	if (digits.length > 0 && digits[0].length > 1 && digits[0] == '1') {
		if (digits.length > 1) {
			return digits[1]
		}
	} 
	else if (digits.length > 0 && digits[0].length > 1) { 
		return digits[0]
	}
	
	return null
}

function highlightField(fieldId) {
//    $(fieldId).style.borderColor = "red";
//    $(fieldId).style.borderWidth = "1px";
//    $(fieldId).style.borderStyle = "solid";
    
    var txt = $($(fieldId).name + "_txt");
    if (txt) {
    	txt.style.color = "red";
    }
}

function unHighlightField(fieldId) {
//    $(fieldId).style.borderColor = "#ECE9D8";
//    $(fieldId).style.borderWidth = "2px";
//    $(fieldId).style.borderStyle = "solid";
//    $(fieldId).style.border = "";

    var txt = $($(fieldId).name + "_txt");
    if (txt) {
    	txt.style.color = "";
    }
}
function callSjax(sturl, stChecked, stAvailable, stMessage) {
    if (window.XMLHttpRequest) {
        AJAX = new XMLHttpRequest();
    } else {
        AJAX = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (AJAX) {
        AJAX.open("GET", sturl, false);
        AJAX.send(null);
        respStat = AJAX.responseText.split("|");
        return respStat;
        if (respStat[1] == "true") {
            $(stAvailable) = true;
        } else {
            $(stAvailable) = false;
        }
        stMessage = respStat[2];
        stChecked = true;

    } else {
        stAvailable = false;
        stMessage = "AJAX is not available. Please enable JavaScript to continue.";
        stChecked = true;
    }
}
