function togglePostBody(postURI) {
	var postBodyEl = $("#"+escapeJquery(postURI+"_body"));
	var postToggleEl = $("#"+escapeJquery(postURI+"_toggle"));

	if(postBodyEl != null) {

		if(postBodyEl.hasClass("result_body_collapsed")) {
			
			postBodyEl.removeClass('result_body_collapsed');
			postBodyEl.addClass('result_body_expanded');
			
			postToggleEl.text("Less ...");
		} else if(postBodyEl.hasClass("result_body_expanded")) {
			postBodyEl.removeClass('result_body_expanded');			
			postBodyEl.addClass('result_body_collapsed');
			
			postToggleEl.text("More ...");
		}  
	}
}

function escapeJquery(jquery) {
	
	jquery = jquery.replace(/\./gi, "\\.");
	jquery = jquery.replace(/:/gi, "\\:");
	jquery = jquery.replace(/\//gi, "\\/");
	jquery = jquery.replace(/#/gi, "\\#");
	jquery = jquery.replace(/\*/gi, "\\*");
	jquery = jquery.replace(/\+/gi, "\\+");
	jquery = jquery.replace(/~/gi, "\\~");
	jquery = jquery.replace(/=/gi, "\\=");
	jquery = jquery.replace(/\?/gi, "\\?");
	jquery = jquery.replace(/\&/gi, "\\&");

	return jquery;
}

function showSignUp() {

	var options = {
			title: "Sign up",
			bgiframe: true,
			resizable: true,
			height:300,
			width:410,
			modal: true,
			overlay: {
				backgroundColor: '#000',
				opacity: 0.5
			},
			buttons: {
				'OK': function() {
					var msgAreaId = "signup-msg";
				
					var fname = $.trim($("#signup-fname").val());
					var lname = $.trim($("#signup-lname").val()); 
					var email = $.trim($("#signup-email").val());
					var pass = $.trim($("#signup-pass").val());
					var repass = $.trim($("#signup-repass").val());
					
					if(fname == "" || lname == "" || email == "" || pass == "" || repass == "") {
						Util.showErrorMessage(msgAreaId,"You have to fill all fields.");
						return;
					}
					
					if(!isEmailAddress(email)) {
						Util.showErrorMessage(msgAreaId,email + " is not a valid email address.");
						return;
					}
					
					if(pass != repass) {
						Util.showErrorMessage(msgAreaId,"Passwords doesn't match");
						return;
					}
					
					if(pass.length < 6) {
						Util.showErrorMessage(msgAreaId,"Password must be more than 6 characters.");
						return;						
					}
					var tmz = (-new Date().getTimezoneOffset());
					var url = "user";
					var params = {
							type: "signUp", 
							"email": encodeURIComponent(email),
							"fname": encodeURIComponent(fname),
							"lname": encodeURIComponent(lname),
							"password": encodeURIComponent(pass),
							"timezone": tmz											
					}
					var self = this;
					$.post(url, params, function(data) {
						
						if(data.status == "user exists") {
							Util.showErrorMessage(msgAreaId,"This email address is already in use");
							return;
						} else if(data.status == "ok") {
							var text = "<div>Congratulations, you have successfully registered in WebLoadTester and other Monitis services.<div>";														
							
							var opt = {
									title: "Successful registration",
									bgiframe: true,
									resizable: true,
									height:140,
									width:340,
									modal: true,
									overlay: {
										backgroundColor: '#000',
										opacity: 0.5
									}
							}
							
							
							$(text).dialog(opt);
							
							$(self).dialog('destroy');
							$("#tbl-signup").remove();														
						}
												
					}, "json");
					
					
				},
				'Cancel': function() {						
					$(this).dialog('destroy');
					$("#tbl-signup").remove();
				}					
			}
		};
	
	var html = getSignUpDialogHTML();
	
	$(html).dialog(options); 	
}

function getSignUpDialogHTML() {
	var html = [];
	
	html.push("<table id='tbl-signup' width='100%' cellpadding='0' cellspacing='0'>");
	html.push(	"<tr>");
	html.push(		"<td colspan='2'>");
	html.push(			"To register for an account, please fill out the form below. You can use your account for all Monitis services.");
	html.push(		"</td>");	
	html.push(	"</tr>");
	html.push(	"<tr>");
	html.push(		"<td width='35%' style='padding-top: 20px;'>");
	html.push(			"First Name");
	html.push(		"</td>");
	html.push(		"<td width='55%'>");
	html.push(			"<input id='signup-fname' style='width: 95%' type='text' value='' />*");	
	html.push(		"</td>");		
	html.push(	"</tr>");
	html.push(	"<tr>");
	html.push(		"<td width='35%'>");
	html.push(			"Last Name");
	html.push(		"</td>");
	html.push(		"<td width='55%'>");
	html.push(			"<input id='signup-lname' style='width: 95%' type='text' value='' />*");	
	html.push(		"</td>");		
	html.push(	"</tr>");
	html.push(	"<tr>");
	html.push(		"<td width='35%'>");
	html.push(			"Email");
	html.push(		"</td>");
	html.push(		"<td width='55%'>");
	html.push(			"<input id='signup-email' style='width: 95%' type='text' value='' />*");	
	html.push(		"</td>");		
	html.push(	"</tr>");
	html.push(	"<tr>");
	html.push(		"<td width='35%'>");
	html.push(			"Password");
	html.push(		"</td>");
	html.push(		"<td width='55%'>");
	html.push(			"<input id='signup-pass' style='width: 95%' type='password' value='' />*");	
	html.push(		"</td>");		
	html.push(	"</tr>");
	html.push(	"<tr>");
	html.push(		"<td width='35%'>");
	html.push(			"Retype Password");
	html.push(		"</td>");
	html.push(		"<td width='55%'>");
	html.push(			"<input id='signup-repass' style='width: 95%' type='password' value='' />*");	
	html.push(		"</td>");		
	html.push(	"</tr>");	
	html.push(	"<tr>");
	html.push(		"<td width='100%' colspan='2'>");
	html.push(			"<div id='signup-msg' class='msgArea'>&nbsp;</div>");
	html.push(		"</td>");	
	html.push(	"</tr>");	
	html.push("</table>");
	
	return html.join("");	
}

var isEmailAddress = function(emailStr){
    var error = "";
    
    if (emailStr == "") {
        // user is not valid
        //error = assocArray['mailExists']
        error = 'You must fill in e-mail field';
       // alert(error);
        return false;
    }
    /* The following pattern is used to check if the entered e-mail address
     fits the user@domain format.  It also is used to separate the username
     from the domain. */
    var emailPat = /^(.+)@(.+)$/
    /* The following string represents the pattern for matching all special
     characters.  We don't want to allow special characters in the address.
     These characters include ( ) < > @ , ; : \ " . [ ]    */
    var specialChars = "\\(\\)<>,;:\\\\\\\"\\.\\[\\]'!#$%&*^"
    /* The following string represents the range of characters allowed in a
     username or domainname.  It really states which chars aren't allowed. */
    var validChars = "\[^\\s" + specialChars + "\]"
    /* The following pattern applies if the "user" is a quoted string (in
     which case, there are no rules about which characters are allowed
     and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
     is a legal e-mail address. */
    var quotedUser = "(\"[^\"]*\")"
    /* The following pattern applies for domains that are IP addresses,
     rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
     e-mail address. NOTE: The square brackets are required. */
    var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    /* The following string represents an atom (basically a series of
     non-special characters.) */
    var atom = validChars + '+'
    /* The following string represents one word in the typical username.
     For example, in john.doe@somewhere.com, john and doe are words.
     Basically, a word is either an atom or quoted string. */
    var word = "(" + atom + "|" + quotedUser + ")"
    // The following pattern describes the structure of the user
    var userPat = new RegExp("^" + word + "(\\." + word + ")*$")
    /* The following pattern describes the structure of a normal symbolic
     domain, as opposed to ipDomainPat, shown above. */
    var domainPat = new RegExp("^" + atom + "(\\." + atom + ")*$")
    
    
    /* Finally, let's start trying to figure out if the supplied address is
     valid. */
    /* Begin with the coarse pattern to simply break up user@domain into
     different pieces that are easy to analyze. */
    var matchArray = emailStr.match(emailPat)
    if (matchArray == null) {
        /* Too many/few @'s or something; basically, this address doesn't
         even fit the general mould of a valid e-mail address. */
        error = "Email address seems incorrect (check @ and .'s)";
        //error = assocArray['emailAddressIncorrect'];
      //  alert(error);
        return false;
    }
    var user = matchArray[1]
    var domain = matchArray[2]
    
    // See if "user" is valid
    if (user.match(userPat) == null) {
        // user is not valid
        error = "The username in email address doesn't seem to be valid";
      //  alert(error);
        //error = assocArray['userNameInEemailAddressIncorrect'];
        //writeErrMessage("mail",error);
        return false;
    }
    
    /* if the e-mail address is at an IP address (as opposed to a symbolic
     host name) make sure the IP address is valid. */
    var IPArray = domain.match(ipDomainPat)
    if (IPArray != null) {
        // this is an IP address
        for (var i = 1; i <= 4; i++) {
            if (IPArray[i] > 255) {
                error = "Email address destination IP address is invalid";
           //     alert(error);
                //error = assocArray['destinationEmalIP'];
                //writeErrMessage("mail",error);
                return false;
            }
        }
        
    }
    
    // Domain is symbolic namecheckCaptchaValue
    var domainArray = domain.match(domainPat)
    if (domainArray == null) {
        error = "The email address domain name doesn't seem to be valid.";
     //   alert(error);
        //error = assocArray['domainEmail'];
        //    writeErrMessage("mail",error);
        return false;
    }
    
    /* domain name seems valid, but now make sure that it ends in a
     three-letter word (like com, edu, gov) or a two-letter word,
     representing country (uk, nl), and that there's a hostname preceding
     the domain or country. */
    /* Now we need to break up the domain to get a count of how many atoms
     it consists of. */
    var atomPat = new RegExp(atom, "g")
    var domArr = domain.match(atomPat)
    var len = domArr.length
    if (domArr[domArr.length - 1].length < 2 ||
    domArr[domArr.length - 1].length > 3) {
        // the address must end in a two letter or three letter word.
        error = "The address must end in a three-letter domain, or two letter country.";
      //  alert(error);
        //error = assocArray['domainThreeAndTwo'];
        //document.getElementById("mailmsg").innerHTML=error;
        return false;
    }
    
    // Make sure there's a host name preceding the domain.
    var errStr = "";
    if (len < 2) {
        errStr = "This email address is missing a hostname"
        //errStr = assocArray['missingHostName'];
        error = errStr;
    //    alert(error);
        //writeErrMessage("mail",error);
        return false;
    }
    
    return true;
}
