
dojo.require("dojo.event.*");

window.onload=init;

function init()
{
  document.body.style.cursor = "default";
  externalLinks();
  focusForm();
}

// Makes HTML XHTML 1.0 Strict compliant while popping new windows as desired.

function externalLinks()
{
  if (!document.getElementsByTagName) return;
  var anchors = document.getElementsByTagName("a");
  for (var idx=0; idx < anchors.length; idx++)
  {
    var anchor = anchors[idx];
    if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
      anchor.target = "_blank";
  }
}

// Forces focus to first form element, if present.

function focusForm()
{
  if (!document.getElementsByTagName) return;
  var inputs = document.getElementsByTagName("input");
  if (inputs.length > 0)
    inputs[0].focus();
}

// AJAX content handler.  Updates "mainContent" innerHTML.

function getContentByTitle (title)
{
  getContent("TITLE",title);
}

function getContentById (id)
{
  getContent("ID",id);
}

function getContent (type, title)
{
  document.body.style.cursor = "wait";

  // Dynamically build associative array for input into dojo.io.bind() call.
  var bindMap = new Object();
  bindMap["url"] = '/ContentHandler';
  bindMap["handler"] = contentCallback;
  bindMap["method"] = "POST";
  var contentMap = new Object();
    contentMap["TYPE"] = type;
    contentMap["VALUE"] = title;
  bindMap["content"] = contentMap;
  bindMap["mimetype"] = "text/html";
  bindMap["transport"] = "XMLHTTPTransport";

  // dumpMap(bindMap,dojo.byId('mainContent'));

  dojo.io.bind(bindMap);

}

function contentCallback(type, data, evt)
{
  if (type != 'error')
  {
    var obj = dojo.byId('mainContent');
    obj.innerHTML = data;
  }

  document.body.style.cursor = "default";

}

// AJAX content handler for login.  Updates "mainContent" innerHTML.

function login (loginForm)
{
  document.body.style.cursor = "wait";

  // Dynamically build associative array for input into dojo.io.bind() call.
  var bindMap = new Object();
  bindMap["url"] = '/Login';
  bindMap["handle"] = loginCallback;
  bindMap["method"] = "POST";
  var contentMap = new Object();
    contentMap["EMAIL"] = loginForm.email.value;
    contentMap["PASSWORD"] = loginForm.password.value;
  bindMap["content"] = contentMap;
  bindMap["mimetype"] = "text/html";
  bindMap["transport"] = "XMLHTTPTransport";

  // dumpMap(bindMap,dojo.byId('mainContent'));

  dojo.io.bind(bindMap);
}

function loginCallback(type, data, evt)
{
  if (type == "load")
  {
    window.location = "/LoginForm";
  }
  else
  {
    var status = evt.status;

    if (status == 400)
      getContentByTitle('BadLogin');
    else if (status == 403)
      getContentByTitle('AccountLockout');
    else if (status == 404)
      getContentByTitle('NotFoundLogin');
  }

  document.body.style.cursor = "default";
}

// AJAX content handler for content uploads.  Updates "mainContent" innerHTML.

function uploadContent (uploadForm)
{
  document.body.style.cursor = "wait";

  // Dynamically build associative array for input into dojo.io.bind() call.
  var bindMap = new Object();
  bindMap["url"] = '/ContentManager';
  bindMap["handle"] = uploadCallback;
  bindMap["method"] = "POST";
  var contentMap = new Object();
    contentMap["CONTENT_ID"] = uploadForm.CONTENT_ID.value;
    contentMap["CONTENT_TYPE_ID"] = uploadForm.CONTENT_TYPE_ID.value;
    contentMap["RANK"] = uploadForm.RANK.value;
    contentMap["BLURB"] = uploadForm.BLURB.value;
    contentMap["EFFECTIVE_DATE"] = uploadForm.EFFECTIVE_DATE.value;
    contentMap["EXPIRATION_DATE"] = uploadForm.EXPIRATION_DATE.value;
    contentMap["TEXT"] = uploadForm.TEXT.value;
    contentMap["TITLE"] = uploadForm.TITLE.value;
    contentMap["AUTHOR"] = uploadForm.AUTHOR.value;
  bindMap["content"] = contentMap;
  bindMap["mimetype"] = "text/html";
  bindMap["transport"] = "XMLHTTPTransport";

  // dumpMap(bindMap,dojo.byId('mainContent'));

  dojo.io.bind(bindMap);
}

function uploadCallback(type, data, evt)
{
  if (type == "load")
  {
    // Display updated content in main page section.
    var obj = dojo.byId('mainContent');
    obj.innerHTML = data;
  }
  else
  {
    var status = evt.status;

    if ((status == 401) || (status == 403))
      window.location = "/LoginForm";
    else if (status == 400)
      getContentByTitle('BadContent');
    else if (status != 200)
      getContentByTitle('Sorry');
  }

  document.body.style.cursor = "default";
}

// AJAX content handler for contact form submission.

function sendContact (contactForm)
{
  document.body.style.cursor = "wait";

  // Dynamically build associative array for input into dojo.io.bind() call.
  var bindMap = new Object();
  bindMap["url"] = '/ContactUs';
  bindMap["handle"] = contactCallback;
  bindMap["method"] = "POST";
  var contentMap = new Object();
    contentMap["NAME"] = contactForm.name.value;
    contentMap["EMAIL"] = contactForm.email.value;
    contentMap["PHONE"] = contactForm.phone.value;
    contentMap["SUBJECT"] = contactForm.subject.value;
    contentMap["MESSAGE"] = contactForm.message.value;
  bindMap["content"] = contentMap;
  bindMap["mimetype"] = "text/html";
  bindMap["transport"] = "XMLHTTPTransport";

  // dumpMap(bindMap,dojo.byId('mainContent'));

  dojo.io.bind(bindMap);
}

function contactCallback(type, data, evt)
{
  if (type == "load")
    getContentByTitle('ThankYou');
  else
    getContentByTitle('Sorry');

  document.body.style.cursor = "default";
}

// For debugging...

function dumpMap (map, divObj)
{
  var temp = "";
  for(var property in map)
  {
     var value = map[property];
     temp += property;
     temp += " = ";
     temp += value;
     temp += "<br/>";
     if (value instanceof Object)
     {
      for(var subproperty in value)
       {
       var subvalue = value[subproperty];
       temp += "&nbsp;&nbsp;";
       temp += subproperty;
       temp += " = ";
       temp += subvalue;
       temp += "<br/>";
       }
     }
  }

  divObj.innerHTML = temp;

  alert("Map dumped.");
}

function isEmpty(elem, alertMsg)
{
	if(elem.value.length == 0)
  {
		alert(alertMsg);
		elem.focus();
    if (elem.value.length > 0)
      elem.select();

		return false;
	}
	return true;
}

function emailValidator(elem, alertMsg)
{
	var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	if(elem.value.match(emailExp))
  {
		return true;
	}
  else
  {
		alert(alertMsg);
		elem.focus();
    if (elem.value.length > 0)
      elem.select();

		return false;
	}
}

function isAlphabet(elem, alertMsg)
{
	var alphaExp = /^[a-zA-Z ]+$/;
	if(elem.value.match(alphaExp))
  {
		return true;
	}
  else
  {
		alert(alertMsg);
		elem.focus();
    if (elem.value.length > 0)
      elem.select();

		return false;
	}
}

function lengthCheck(elem, min, max, alertMsg)
{
  if(alertMsg.length == 0)
    alertMsg = "Please enter between " + min + " and " + max + " characters."

  if ((elem == null) || (elem.value == null))
  {
		alert("Message element is null.");
    return false;
  }

	var content = elem.value;
	if(content.length >= min && content.length <= max)
  {
		return true;
	}
  else
  {
		alert(alertMsg);
		elem.focus();
    if (elem.value.length > 0)
      elem.select();

		return false;
	}
}

function validateContactForm ()
{
	var name = document.getElementById('name');
	var phone = document.getElementById('phone');
	var email = document.getElementById('email');
	var subject = document.getElementById('subject');
	var message = document.getElementById('message');

	if(lengthCheck(name,3,50,"Please enter your name."))
  {
  	if(isAlphabet(name,"Please enter your name only."))
			if(emailValidator(email, "Please enter a valid email address"))
  	  	if(lengthCheck(phone,7,16,"Please enter a contact phone number."))
          if(isEmpty(subject,"Please enter a subject for the message."))
      	  	if(lengthCheck(message,2,32768,"Please enter your message."))
              if (message.value == message.defaultValue)
              {
                alert("Please type your message.");
                message.focus();
                message.select();
              }
              else
                return true;
  }

	return false;
}
