/// <reference path="jquery-1.5.2-vsdoc.js" />

// FAQ Single List begins... //
var popupMOM;
function showPopup(e, elemID, txtWhen, txtWhere) 
{
	if (txtWhen=='') 
		txtWhen = 'All Day';
	popupMOM = document.createElement('div');
	popupMOM.className = 'tooltip';
	//popupMOM.style.cssText = 'position: absolute; border: 2px groove #b3b3b3; left: 0px; top: 0px; padding: 2px;';
	if ( txtWhen.length > 0 )
		popupMOM.innerHTML = '<span class="when">When: </span>' + txtWhen + '<br />';
		
	if ( txtWhere.length > 0 )
		popupMOM.innerHTML += '<span class="where">Where: </span>' + txtWhere;
		
	document.body.appendChild(popupMOM);
	positionPopup(e, elemID);
}	

function positionPopup(e, elemID) 
{
	var docb = document.body;
	if (popupMOM == null) return;

	var newLeft = ((e.clientX + docb.scrollLeft) + 4);
	var newTop = ((e.clientY + docb.scrollTop) + 4);
	
	if (newLeft + popupMOM.offsetWidth > (docb.clientWidth+docb.scrollLeft)) 
	{
		var newerLeft = ((e.clientX + docb.scrollLeft) - 4) - popupMOM.offsetWidth;
		if (newerLeft > 0) newLeft = newerLeft;
	}
	
	if (newTop + popupMOM.offsetHeight > (docb.clientHeight + docb.scrollTop)) 
	{
		var newerTop = ((e.clientY + docb.scrollTop) - 4) - popupMOM.offsetHeight;
		if (newerTop > 0) newTop = newerTop;
	}
	
	var popStyle = popupMOM.style;
	popStyle.left = newLeft + 'px';
	popStyle.top = newTop + 'px';
}	

function hidePopup() 
{
	if (popupMOM == null) return;
	document.body.removeChild(popupMOM);
	popupMOM = null;
}

function ToggleElement(elementId)
{
	element = document.getElementById(elementId);
	if ( element != null )
		element.style.display = (element.style.display == "none" ? "block" : "none");
}

// ...Ends FAQ Single List //

// XMLHTTP Object //
function xmlHttp_Get(xmlhttp, url)
{
	xmlhttp.open('GET', url, true);
	xmlhttp.setRequestHeader("If-Modified-Since", "Fri, 31 Dec 1999 23:59:59 GMT");//This line of code solves the cache issue in IE. 
	xmlhttp.send(null);
}

function GetXmlHttpObject(handler)
{
	var objXmlHttp = null;
	if (navigator.userAgent.indexOf('MSIE') >= 0) // is IE
	{
		// Check IE5 or later. 
		var strObjName = (navigator.appVersion.indexOf("MSIE 5.5")!=-1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP';
		try
		{
			objXmlHttp = new ActiveXObject(strObjName);
			objXmlHttp.onreadystatechange = handler;
		}
		catch(e)
		{
			alert('IE detected, but object could not be created. Verify that active scripting and activeX controls are enabled');
			return;
		}
	}
	else if ((navigator.userAgent.indexOf("Opera6")!=-1)||(navigator.userAgent.indexOf("Opera/6")!=-1))
	{
		// Opera
		alert('Opera detected. The page may not behave as expected.'); 
		return;
	}
	else
	{
		// Mozilla | Netscape | Safari 
		objXmlHttp = new XMLHttpRequest(); 
		objXmlHttp.onload = handler; 
		objXmlHttp.onerror = handler;
	}
	
	return objXmlHttp;
}

var subject_prefix = "";
var params_array = new Array();
var active_dialog = -1;
var commentsCharLimit = 1000;
var dlg = null;
var useReCaptcha = false;

$(document).ready(function () {
	$("#dialog:ui-dialog").dialog("destroy");

	useReCaptcha = $("[id$='hdnUseReCaptcha']").val().toLowerCase() === "true";

	dlg = $("#dlg_Comment").dialog({
		autoOpen: false,
		height: 'auto',
		width: 500,
		modal: true,
		resizable: false,
		scrollable: false,
		buttons: {
			Send: function () {
				SubmitCaptcha();
			},
			Cancel: function () {
				$(this).dialog("close");
			}
		},
		open: function () {
			// initialize fields
			UpdateTips("All fields are required.");
			$(this).find("#email").val("");
			$(this).find("#name").val("");
			$(this).find("#subject").val("");
			$(this).find("#comments").val("");
			$(".response_field", ".captcha-wrapper").val("");
			if (useReCaptcha == true) {
				CreateCaptcha();
			}
			else {
				$("#LBD_CaptchaIcons a[title$='Change the code']", ".captcha-wrapper").click();
			}
			$("#dlg_Comment").find("input:text").first().focus()
		},
		close: function () { }
	});

	$('.content a[href^="mailto"]').each(function () {
		var params_array_length = params_array.length;
		var params = {
			recipients: $.url($(this).attr("href").replace("mailto:", "")).attr("authority"),
			subject: $.url($(this).attr("href")).param('subject'),
			label: $(this).text()
		};

		params_array[params_array_length] = params;

		$(this).replaceWith("<a onclick=\"OpenSubmitCommentsDialog('" + params_array_length + "');\" style=\"cursor:pointer;\" >" + params.label + "</a>");
	});

	$('#remainingCharacters').html(commentsCharLimit);

	$("#comments").bind('keyup', function () {
		var charactersUsed = $(this).val().length;

		if (charactersUsed > commentsCharLimit) {
			charactersUsed = commentsCharLimit;
			$(this).val($(this).val().substr(0, commentsCharLimit));
			$(this).scrollTop($(this)[0].scrollHeight);
		}

		var charactersRemaining = commentsCharLimit - charactersUsed;

		$('#remainingCharacters').html(charactersRemaining);
	});
});

function CreateCaptcha() {
    Recaptcha.create("6LfkWgoAAAAAABHDt5jpZlXr3kne1JtyhsCnYzZG",
                "captcha-wrapper",
                {
                    theme : 'clean',lang: 'en',custom_theme_widget: 'recaptcha_widget'
                }
              );
}

function SubmitCaptcha() {
	UpdateTips("Validating...");
	if (ValidateFields()) {
		if (useReCaptcha) {
			$.ajax({
				type: "POST",
				url: "Index.aspx/ValidateCaptcha",
				data: "{'challenge':'" + Recaptcha.get_challenge() + "', 'response':'" + Recaptcha.get_response() + "'}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: SubmitCaptchaCompleted,
				error: SubmitCaptchaFailed
			});
		}
		else {
			var c = $("[id$='hdnCaptchaId']").val();
			var i = $("[id$='hdnCaptchaInstanceId']").val();
			var a = $(".response_field").val();
			
			$.ajax({
				type: "POST",
				url: "Index.aspx/ValidateLanapCaptcha",
				data: "{'c':'" + c + "', 'i':'" + i + "', 'a':'" + a + "'}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: SubmitCaptchaCompleted,
				error: SubmitCaptchaFailed
			});
		}
	}
}

function SubmitCaptchaCompleted(msg) {
    if (msg.d.Success)
        SubmitComment($("#dlg_Comment"));
    else
        SubmitCaptchaFailed(msg);    
}

function SubmitCaptchaFailed(msg) {
    UpdateTips("Your captcha didn't match. Please try again.");
    if (useReCaptcha) {
    	Recaptcha.reload();
    	Recaptcha.focus_response_field();
    }
	else
	{
		$("#LBD_CaptchaIcons a[title$='Change the code']", ".captcha-wrapper").click();
		$(".response_field", ".captcha-wrapper").val("").focus();
	}
}

function OpenSubmitCommentsDialog(id) {
	active_dialog = id;
	$("#dlg_Comment").dialog("open");
}

function ValidateFields() {
	var email = $(dlg).find("#email"),
        name = $(dlg).find("#name"),
	    subject = $(dlg).find("#subject"),
        comments = $(dlg).find("#comments"),
	    allFields = $([]).add(email).add(name).add(subject).add(comments);

	allFields.removeClass("ui-state-error");

	var isValid = true;

	isValid = isValid && CheckLength(email, "email", 6) && CheckRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "Invalid email address (eg. joe@company.com)");
	isValid = isValid && CheckLength(name, "name", 3) && CheckRegexp(name, /^[a-z]([a-z\s])+$/i, "Invalid name. Letters and spaces only.");
	isValid = isValid && CheckLength(subject, "subject", 5);
	isValid = isValid && CheckLength(comments, "comments", 5, commentsCharLimit);

	return isValid;
}

function SubmitComment(dialog) {
    UpdateTips("Submitting your comments...");

    var email = $(dialog).find("#email"),
        name = $(dialog).find("#name"),
	    subject = $(dialog).find("#subject"),
        comments = $(dialog).find("#comments"),
	    allFields = $([]).add(email).add(name).add(subject).add(comments);

    allFields.removeClass("ui-state-error");

    if (ValidateFields()) {
    	var r = JSON2.stringify(params_array[active_dialog].recipients);
    	var e = JSON2.stringify(email.val());
    	var n = JSON2.stringify(name.val());
    	var s = JSON2.stringify('[' + params_array[active_dialog].subject + '] - ' + subject.val());
    	var c = JSON2.stringify(comments.val());

    	$.ajax({
    		type: "POST",
    		url: "Index.aspx/SubmitComment",
    		data: '{"to":' + r + ', "from":' + e + ', "name":' + n + ', "subject":' + s + ', "contents":' + c + '}',
    		contentType: "application/json; charset=utf-8",
    		dataType: "json",
    		success: SubmitCommentCompleted,
    		error: SubmitCommentFailed
    	});
    }
    else {
    	Recaptcha.reload();    	
	}
}

function SubmitCommentCompleted(msg) {
    if (msg.d.Success) {
        UpdateTips("Thank you for your interest in the City of Greensboro. We will respond to your e-mail as quickly as possible.");

        setTimeout(function () {
            $("#dlg_Comment").dialog("close")
        }, 5000);
    }
    else
        SubmitCommentFailed(msg);
}

function SubmitCommentFailed(msg) {
	UpdateTips("We apologize, but your e-mail was not received. Please try again.");
	Recaptcha.reload();
	Recaptcha.focus_response_field();
}

function CheckLength(o, n, min, max) {

    if (!max) {
        if (o.attr("maxlength").length > 0)
            max = o.attr("maxlength");
        else
            max = 100;
    }
    if (o.val().length > max || o.val().length < min) {
        o.addClass("ui-state-error");
        UpdateTips("Length of " + n + " must be between " + min + " and " + max + ".");
        return false;
    } 
    else {
        return true;
    }
}

function CheckRegexp(o, regexp, n) {
    if (!(regexp.test(o.val()))) {
        o.addClass("ui-state-error");
        UpdateTips(n);
        return false;
    } else {
        return true;
    }
}

function UpdateTips(t) {
    $(".validateTips").text(t).addClass("ui-state-highlight");
    setTimeout( function () { $(".validateTips").removeClass("ui-state-highlight", 1500); }, 1000);
}
