String.prototype.trim = function () {
  return this.replace(/^\s*/, "").replace(/\s*$/, "");
};

dojo.provide("lattiss.lang");
dojo.declare("lattiss.lang", null,{
  constructor : function () {}
});

lattiss.lang.hitch = function (thisObject, method, args) {
  for (var x = 5; x < args.length; x++) {
    args.push(args[x]);
  }
  var fcn = (dojo.isString(method) ? thisObject[method] : method) || function () {
  };
  return function () {
    var ta = args.concat([]);
    for (var x = 0; x < args.length; x++) {
      ta.push(args[x]);
    }
    return fcn.apply(thisObject, ta);
  };
};

// common
lattiss.lang.clickElement = function (id, doc)
{
  if (null == doc)
    doc = document;
    
  var element = doc.getElementById(id);
    
  if (null != element)
  {
    if (element.click)
      element.click();
    else
    {
      var evt = doc.createEvent('MouseEvents');
      evt.initMouseEvent('click', true, true, element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
      element.dispatchEvent(evt);
    }
  }
}

lattiss.lang.isDisplayed = function (element)
{
  var currentStyle = dojo.getComputedStyle(element);
  if (null == currentStyle)
    return true;
  
  if (currentStyle.display == 'none')
    return false;
  
  return true;
}

lattiss.lang.setDisplay = function (element, display)
{
  element.style.display = display;
}

lattiss.lang.toggleDisplay = function (divId)
{
  var divElement = document.getElementById(divId);
  if (lattiss.lang.isDisplayed(divElement))
  {
    divElement.style.display = 'none';
  } else
  {
    divElement.style.display = 'block';
  }
}

lattiss.lang.swapImage = function (imgId, swapWith, swapOrig)
{
  var img = dojo.byId(imgId);
  if (null == swapWith)
  {
    lattiss.lang.toggleOnOffImage (img);
  } else if (null == swapOrig) {  
    img.src = swapWith;
  } else
  {
    lattiss.lang.toggleImages (img, swapWith, swapOrig);
  }
}

lattiss.lang.toggleImages = function (element, img1, img2)
{
  if (element.src.toLowerCase().indexOf(img1.toLowerCase())>=0)
  {
    element.src = img2;
  } else
  {
    element.src = img1;
  }
}

lattiss.lang.toggleOnOffImage = function (img)
{
  var src = img.src;
  var regex = /\-on\./i;
  var foundOn = src.match(regex);
  if (null == foundOn)
  {
    regex = /\-off\./i;
    var foundOff = src.match(regex);
    if (null != foundOff)
    {
      img.src = src.replace("-off", "-on");
      return;
    }
  
    var dotPos = src.lastIndexOf(".");
    img.src = src.substring(0, dotPos) + "-off" + src.substring(dotPos);
  } else
  {
    img.src = src.replace("-on", "-off");
  }
}

lattiss.lang.show = function (id)
{
  var divElement = document.getElementById(id);
  divElement.style.display = "block";
}

lattiss.lang.hide = function (id)
{
  var divElement = document.getElementById(id);
  divElement.style.display = "none";
}

lattiss.lang.showElement = function (element)
{
  element.style.display="block";
}

lattiss.lang.hideElement = function (element)
{
  element.style.display = "none";
}

lattiss.lang.insertCssFile = function (url)
{
  var head = document.getElementsByTagName("head")[0];
  var linkNodes = head.getElementsByTagName("link");
  var foundMatch = false;
  for (var i=0; i< linkNodes.length; i++)
  {
    if (linkNodes[i].getAttribute("href") == url)
      foundMatch = true;
  }
    
  if (!foundMatch)
  {
    var fileref=document.createElement("link");
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("href", url);
    fileref.setAttribute("type", "text/css");
    fileref.setAttribute("media", "screen,projection,print");
    head.appendChild(fileref);
  }
};

lattiss.lang.insertJsFile = function (url)
{
  var head = document.getElementsByTagName("head")[0];
  var nodes = head.getElementsByTagName("script");
  var foundMatch = false;
  for (var i=0; i< nodes.length; i++)
  {
    if (nodes[i].getAttribute("src") == url)
      foundMatch = true;
  }
    
  if (!foundMatch)
  {
    var fileref=document.createElement("script");
    fileref.setAttribute("type", "text/javascript");
    fileref.setAttribute("src", url);
    head.appendChild(fileref);
  }
}

lattiss.lang.urlEncode = function (clearString)
{
  var output = '';
  var x = 0;
  clearString = clearString.toString().trim();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
      output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}

lattiss.lang.stripJSessionId = function (url)
{
  var regex = /;jsessionid=(\w+)/;
  return url.replace(regex, '');
}

lattiss.lang.isValidEmail = function (strEmail)
{
  var validRegExp = /^[^@]+@[^@]+\.[a-z]{2,}$/i;

  // search email text for regular exp matches
  if (strEmail.search(validRegExp) == -1) 
  {
    return false;
  } 
  return true; 
}

dojo.provide("lattiss.util");

dojo.require("lattiss.lang");
dojo.declare("lattiss.util", null,
{  
  constructor : function () {}
});

lattiss.util.updateTzOffset = function ()
{
  // get wall clock offset from browser
  var curdate = new Date()
  var wcOffset = -1 * curdate.getTimezoneOffset() * 60000;
  var offsetElement = document.getElementById('p_hidden_frmTZSetup:offset');
  offsetElement.value = wcOffset;

  lattiss.lang.clickElement('p_hidden_frmTZSetup:update');
};

lattiss.util.logViewportSize = function ()
{
  var viewport = dijit.getViewport();
  if (null != viewport)
  {
    var sizeElement = dojo.byId('frmLogViewport:viewportSize');
    sizeElement.value = viewport.w + " x " + viewport.h;
    lattiss.lang.clickElement('frmLogViewport:logViewportSize');
  }
};

lattiss.util.submitHiddenBlock = function ()
{
  var viewport = dijit.getViewport();
  if (null != viewport)
  {
    var sizeElement = dojo.byId('frmHiddenBlock:viewportSize');
    sizeElement.value = viewport.w + " x " + viewport.h;
  }

  // get wall clock offset from browser
  var curdate = new Date()
  var wcOffset = -1 * curdate.getTimezoneOffset() * 60000;
  var offsetElement = document.getElementById('frmHiddenBlock:offset');
  offsetElement.value = wcOffset;

  lattiss.lang.clickElement('frmHiddenBlock:update');
};

