/*
   Portions Copyright(c) 2009-2010, AddonInteractive - All Rights Reserved.
*/

var sendReq = getXmlHttpRequestObject();

var mTimer;          // Message Queue Check Timer
var iTimer;          // Idle Timeout Timer
var sTimer;          // Session Timer

var fd = -1;
var username = "Guest";
var original_username = "Not Set";
var technician = "";
var department = "Support";
var netport = 8001;
var account = 0;
var min_interval = 2000;         // 2 second poll interval (default)
var max_interval = 10000;        // 10 second poll interval (maxium)
var interval_d = 200;            // Increase by 200ms Between intervals (=40 updates before maxium poll interval is reached)
var interval = min_interval;
var idle = 0;
var session_time = 0;
var max_idle = 120;              // 2 Minute Default Idleout (Waiting for connection)
var max_idle_in_session = 900;   // 15 Minute Default Idleout (In session)
var in_session = false;
var background_color;
var autoconnect = 0;
var rawlog = "";
var htmllog = "";
var email_logs_sent = 0;
var max_session_time = 0;
var session_warn_time = 15;
var tcontent = { };

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

function getText(strItem, strVars)
{      
   var retval;
   
   if( (typeof(strVars) != "object") )   
      return tcontent[strItem];

   else
   {
      retval = tcontent[strItem];
      for(property in strVars)
      {
         var pattern = new RegExp('\\$' + property);
         retval = retval.replace(pattern, strVars[property]);
      }      
      return retval;
   }
}

function setTextContent(tcontentV)
{
   tcontent = tcontentV;
}

function setIdleTimeoutValues(max_idleV, max_idle_in_sessionV)
{
   max_idle = max_idleV;
   max_idle_in_session = max_idle_in_sessionV;
}

function setSessionTimeoutValues(max_session_timeV, tokensV, sessionWarnV)
{
   max_session_time = (max_session_timeV * tokensV);
   session_warn_time = sessionWarnV;
}

function buttonHover(buttonName)
{
   document.getElementById(buttonName).className = 'button_hover'; 
   return true;
}

function buttonOut(buttonName)
{
   document.getElementById(buttonName).className = 'button'; 
   return true;
}

function buttonClick(buttonName)
{
   var tdStamp;
   
   document.getElementById(buttonName).className = 'button_click'; 
   
   switch(buttonName)
   {
      case 'quit':            window.close(); 
                              break;
                   
      case 'chatrefresh':     document.getElementById('div_chat').innerHTML = '';
                              break;
                              
      case 'chatclose':       disconnect();
                              setPane('pane_goodbye');
                              break;
                              
      case 'log_print':       window.print();
                              break;                              
                              
      case 'log_email':       // This will work for content between 4000 to 16000 bytes. 
                              /* cdate = new Date();
                                 tdStamp = monthString(cdate.getMonth()) + ' ' + cdate.getDate() + ', ' + cdate.getFullYear();                                                          
                                 window.location = "mailto:?subject=Log" + encodeURI(" - " + tdStamp) + "&body=" + encodeURI(rawlog);
                              */
                              if(email_logs_sent < 3)
                                 document.getElementById('log_email_popup').style.display = 'block';
                              break;
                              
      case 'log_save':        var saveLogForm = document.createElement("form");                                 
                              saveLogForm.method = "POST";
                              saveLogForm.action = "log.php";
                              logContent = document.createElement("input");
                              logContent.setAttribute("name", "content");
                              logContent.setAttribute("value", htmllog);
                              saveLogForm.appendChild(logContent);
                              document.body.appendChild(saveLogForm);
                              saveLogForm.submit();
                              document.body.removeChild(saveLogForm);                              
                              break;                                                                                    
   }
   
   document.getElementById(buttonName).className = 'button'; 
   return true;      
}

function sendLog()
{
   var emailLogForm  = document.createElement("form");
   var sendAddress   = document.getElementById("email_address").value;      
   var logReq        = getXmlHttpRequestObject();
   var params        = "content=" + encodeURI(htmllog)+ "&" +
                       "rawcontent=" + encodeURI(rawlog) + "&" + 
                       "sendto=" + encodeURI(sendAddress);
   var url           = "logsend.php";
   
   logReq.open("POST", url, true);
   logReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   logReq.setRequestHeader("Content-length", params.length);
   logReq.setRequestHeader("Connection", "close");
   logReq.onreadystatechange = logSent;
   logReq.send(params);

   document.getElementById('log_email_popup').style.display = 'none';
   document.getElementById('log_email_popup_confirm').style.display = 'block';
   
   email_logs_sent++;
   if(email_logs_sent >= 3)
      document.getElementById('log_email').style.display = 'none';
   
   return false;
}

/* Ignore XML Response When Sending Logs For The Moment.. */
function logSent() { }

function init()
{
   document.getElementById("txt_message").onkeydown = messageEnterEvent;   
   background_color = $style('body', 'background-color');
   setPane('pane_login');   
}

function messageEnterEvent(e) 
{
   if (!e) var e = window.event;
   var code = e.keyCode;

   if ( (code == 13) || (code == 10) )
   {
      sendChatText();
      return false;
   }
      
   return true;
}

function initSessionTimer()
{
   sTimer = setInterval('updateSessionTimer();', 1000);
}

function updateSessionTimer()
{
   var chat_div = document.getElementById('div_chat');
   var innerHTML = "";  
   
   if(in_session)
   {
      session_time++;   
      
      if( (max_session_time != 0) && (session_warn_time != 0) && (session_time == (max_session_time - session_warn_time)) )
      {
         innerHTML += '<div class="chat_notice">';
         innerHTML += getText('session_warn_notice', { time: session_warn_time });
         innerHTML += '</div>';
         chat_div.innerHTML += innerHTML;
         document.getElementById('txt_message').focus();
      }
      
      if( (max_session_time != 0) && (session_time >= max_session_time) )
      {
         setPane('pane_goodbye');
         disconnect();
      }      
   }   
}

function resetSessionTimer()
{
   disableSessionTimer();
   initSessionTimer();
}

function disableSessionTimer()
{
   clearInterval(sTimer);
   session_time = 0;
}

function initIdleTimer()
{
   iTimer = setInterval('updateIdle();', 1000);
}

function updateIdle()
{  
   idle++;
      
   if( (!in_session) && (idle >= max_idle) )
   {
      disconnect();      
      setPane('pane_idleout');         
      return;
   }
   
   if( (in_session) && (idle >= max_idle_in_session) )
   {
      disconnect();      
      setPane('pane_idleout_insession');
      return;   
   }
}

function resetIdle()
{
   clearInterval(iTimer);
   idle = 0;
   initIdleTimer();
}

function setPort(newport)
{
   netport = newport;
}

function setAccount(newaccount)
{
   account = newaccount;
}

function autoConnect(autoconnectValue)
{
   autoconnect = autoconnectValue;
   
   if(autoconnect > 0)
   {
      doLogin();
   }
}

function doLogin()
{
   username   = document.getElementById("username").value;
   department = document.getElementById("department").value;

   fd = -1;
   
	if (sendReq.readyState == 4 || sendReq.readyState == 0) {
		sendReq.open("GET", 'chattunnel.php?login=1&fd=' + fd + '&port=' + netport + '&username=' + username + '&department=' + department + '&account=' + account, true);
		sendReq.onreadystatechange = handleReceiveChat; 
		sendReq.send(null);
	}	 
   
   setPane('pane_connecting');
   initIdleTimer();
   initSessionTimer();
   resetInterval();
   in_session = false;
   
   return false;
}

function disconnect()
{
	if (sendReq.readyState == 4 || sendReq.readyState == 0) {
		sendReq.open("GET", 'chattunnel.php?logout=1&fd=' + fd + '&port=' + netport, true);
		sendReq.onreadystatechange = null; 
      // sendReq.onreadystatechange = function() {};
		sendReq.send(null);
	}	 
   clearInterval(mTimer);
   clearInterval(iTimer);
   disableSessionTimer();
   fd=-1;
   in_session = false;
}

function setPane(newPane)
{
   document.getElementById('pane_loading').style.display = 'none';
   document.getElementById('pane_login').style.display = 'none';
   document.getElementById('pane_chat').style.display = 'none';
   document.getElementById('pane_cxnlost').style.display = 'none';
   document.getElementById('pane_connecting').style.display = 'none';
   document.getElementById('pane_waiting').style.display = 'none';
   document.getElementById('pane_idleout').style.display = 'none';
   document.getElementById('pane_waitqueue').style.display = 'none';
   document.getElementById('pane_idleout_insession').style.display = 'none';
   document.getElementById('pane_goodbye').style.display = 'none';
   document.getElementById('pane_log').style.display = 'none';
   document.getElementById('pane_noajax').style.display = 'none';
   
   if(newPane == 'pane_log')
   {
      document.bgColor = "#ffffff";
      document.getElementById('body').setAttribute('style', "background-color: #ffffff");
   }
   else
   {
      document.bgColor = background_color;
      document.getElementById('body').setAttribute('style', "background-color: " + background_color);
   }
   
   document.getElementById(newPane).style.display = 'block';
}

function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		setPane('pane_noajax');
	}
}

function getChatText() {
	if (sendReq.readyState == 4 || sendReq.readyState == 0) {
		sendReq.open("GET", 'chattunnel.php?recvonly=1&fd=' + fd + '&port=' + netport, true);
		sendReq.onreadystatechange = handleReceiveChat; 
		sendReq.send(null);
	}			
}

function autoScroll()
{
	var chat_div = document.getElementById('div_chat');
   var log_div = document.getElementById('div_log');
   
   var sTop = chat_div.scrollTop;
   var sHeight = chat_div.scrollHeight;
   var eHeight = chat_div.clientHeight;   
   
   var log_sTop = log_div.scrollTop;
   var log_sHeight = log_div.scrollHeight;
   var log_eHeight = log_div.clientHeight;    
   
   chat_div.scrollTop = sHeight - eHeight;
   log_div.scrollTop = log_sHeight - log_eHeight;
   
   document.getElementById('txt_message').focus();
}

function handleReceiveChat() {
	if (sendReq.readyState == 4) {
      var debug_div = document.getElementById('div_debug');
		var xmldoc = sendReq.responseXML;
		var packet_nodes = xmldoc.getElementsByTagName("packet"); 
		var n_packets = packet_nodes.length
		for (i = 0; i < n_packets; i++) 
      {
         var command_node              = packet_nodes[i].getElementsByTagName("command");
         var languageDirection_node    = packet_nodes[i].getElementsByTagName("languageDirection");       
         var account_node              = packet_nodes[i].getElementsByTagName("account");         
			var username_node             = packet_nodes[i].getElementsByTagName("username");
         var target_node               = packet_nodes[i].getElementsByTagName("target");
			var message_node              = packet_nodes[i].getElementsByTagName("message"); 
         var red_node                  = packet_nodes[i].getElementsByTagName("red");
         var green_node                = packet_nodes[i].getElementsByTagName("green");
         var blue_node                 = packet_nodes[i].getElementsByTagName("blue");
         
         var packet_command            = parseInt(command_node[0].firstChild.nodeValue);
         var packet_languageDirection  = languageDirection_node[0].firstChild.nodeValue;
         var packet_account            = account_node[0].firstChild.nodeValue;
         var packet_username           = username_node[0].firstChild.nodeValue;
         var packet_target             = target_node[0].firstChild.nodeValue;
         var packet_message            = message_node[0].firstChild.nodeValue;
         var packet_red                = red_node[0].firstChild.nodeValue;
         var packet_green              = green_node[0].firstChild.nodeValue;
         var packet_blue               = blue_node[0].firstChild.nodeValue;                       
         
         /* Full Debug */
         /*
         if(packet_command != 0)
         {
            debug_div.innerHTML += '[CMD:' + command_node[0].firstChild.nodeValue + ']&nbsp;';
            debug_div.innerHTML += '[ACCT:' + account_node[0].firstChild.nodeValue + ']&nbsp;';
            debug_div.innerHTML += username_node[0].firstChild.nodeValue + ' -&gt; ';
            debug_div.innerHTML += target_node[0].firstChild.nodeValue + '&nbsp;';
			   debug_div.innerHTML += message_node[0].firstChild.nodeValue + '<br />';         
         }
         */
         
         switch(packet_command)
         {         
            case 10032:                                                       /* Set Pseudo File Descriptor */
               fd = packet_account;
               original_username = username;
               username = username + " " + fd;
               resetInterval();
               resetIdle();
               break;       

            case 0:                                                           /* Empty Message, Re-adjust interval */  
               increaseInterval();    
               break;             

            case 10018:                                                       /* Room Enter OK -- Proceed */
               setPane('pane_waiting');
               resetInterval();
               resetIdle();
               break;
               
            case 10027:                                                       /* Update Department */
               if(username == packet_username)
               {
                  department = packet_message;
               }
               break;

            case 10073:                                                       /* Session Initiated... */
               if(username == packet_username)
               {                  
                  email_logs_sent = 0;
                  technician = packet_message;                  
                  setPane('pane_chat');                  
                  setSessionDescription(getText('talking_with', { opname : technician }));
                  resetInterval();
                  resetIdle();      
                  resetSessionTimer();            
                  in_session = true;                  
                  initiateLogNotice();
                  document.getElementById('txt_message').focus();
               }
               break;
               
            case 10074:                                                       /* Return to Queue */
               if(username == packet_username)
               {            
                  email_logs_sent = 0;
                  setPane('pane_waitqueue');
                  resetInterval();
                  resetIdle();
                  in_session = false;
               }
               break;               

            case 10044:                                                       /* Message Received */
               showMessage(packet_username, packet_message);
               resetInterval();
               resetIdle();
               autoScroll();
               break;
               
            case 10084:                                                       /* Push URL */
               window.open(packet_message, '_blank', 'resizable=1,toolbar=1,width=800,height=600,location=1,menubar=1,scrollbars=1,top=25,left=25');
               showLaunchMessage(packet_username, packet_message);
               break;

            case 10031:                                                       /* Connection Closed -- Intentional Disconnect */
               setPane('pane_goodbye');
               disconnect();
               return;
               break;                                                                  
            
            case 10028:                                                       /* Server Reset; Presently Impossible to Capture */
            case 10003:                                                       /* Connection Lost, or Server Unavailable */
               email_logs_sent = 0;
               setPane('pane_cxnlost');
               disconnect();
               return;
               break;
               
            case 10006: /* SC_LOGIN_OK             -- Ignorable */
            case 10008: /* SC_ROOM_PRESENT         -- Ignorable */                        
            case 10009: /* SC_USER_PRESENT         -- Ignorable */
            case 10013: /* SC_ROOM_CLOSE           -- Ignorable */
            case 10019: /* SC_USER_IN_ROOM         -- Ignorable */
            case 10023: /* SC_USER_EXITED_ROOM     -- Ignorable */
            case 10034: /* SC_DEFINE_PRIVILEGES    -- Ignorable */
            case 10046: /* SC_MSG_PRIVATE_ECHO     -- Ignorable */                                    
            case 10078: /* SC_USER_IS_ADMIN        -- Ignorable */
            case 10097: /* SC_NICK_SILENT          -- Can be used to set current nick as set by server, checking for socket matches in ACCT */                     
               increaseInterval();
               resetIdle();                
               break;
               
            case 1337:
               /*var challenge_code = packet_languageDirection;
               var response_code = ((challenge_code % 1337) * (Math.floor(parseInt(challenge_code / 2)) % 27));
               doVerify(response_code);*/
               break;

            /* Debug Monitor */
            default:
               /*debug_div.innerHTML += '[CMD:' + command_node[0].firstChild.nodeValue + ']&nbsp;';
               debug_div.innerHTML += '[ACCT:' + account_node[0].firstChild.nodeValue + ']&nbsp;';
               debug_div.innerHTML += username_node[0].firstChild.nodeValue + '&nbsp;';
			      debug_div.innerHTML += message_node[0].firstChild.nodeValue + '<br />';*/
               increaseInterval();
               resetIdle();               
               break;
         }                  
		}
		mTimer = setTimeout('getChatText();', interval);
	}
}

function showLaunchMessage(username, webAddress)
{
   showMessage(username, getText('url_launch', { opname: technician, url: webAddress }));
}

function initiateLogNotice()
{
   var log_div = document.getElementById('div_log');
   var logHTML;
   var message;
   
   cdate = new Date();
   
   message = getText('log_initiate', { opname: technician, dept: department, username: original_username, date: cdate.toString() });   
   
   logHTML = '<div class="log_notice">' + message + '</div>';

   log_div.innerHTML += logHTML;
   
   rawlog += "\n" + message + "\n\n";      
   htmllog += logHTML;   
}

function showMessage(username, message)
{
   var chat_div = document.getElementById('div_chat');
   var log_div = document.getElementById('div_log');
   var message_array = message.split(/\s+/);
   var i;
   var innerHTML;
   var logHTML;
   var tdStamp;
   var currentDate;
   
   cdate = new Date();
   tdStamp = monthString(cdate.getMonth()) + ' ' + cdate.getDate() + ', ' + cdate.getFullYear() + ' ' + zeroPad(cdate.getHours()) + ':' + zeroPad(cdate.getMinutes()) + ':' + zeroPad(cdate.getSeconds());
   
   innerHTML = '<div class="chat_username">' + username + ':</div><div class="chat_message">';
   logHTML = '<div class="log_timestamp">[' + tdStamp + '] <span class="log_username">' + username + '</span>:</div><div class="log_message">';
   rawlog += "[" + tdStamp + "] " + username + ": \n";
   
   if(username == document.getElementById("username").value)
      innerHTML += '<span class="chat_enduser_text">';
   else
      innerHTML += '<span class="chat_operator_text">';
      
   logHTML += '<span class="log_message">';
   
   for(i=0; i<message_array.length; i++)
   {
      if(isEmail(message_array[i]))
      {
         innerHTML += '<a class="chat_link" href="mailto:' + message_array[i] + '">' + message_array[i] + '</a>';
         logHTML += message_array[i];
         rawlog += message_array[i];
      }
      else if(isURL(message_array[i]))
      {
         if(message_array[i].indexOf('://') == -1)
            message_array[i] = "http://" + message_array[i];
            
         innerHTML += '<a class="chat_link" target="addonlivesupportlink" href="' + message_array[i] + '">' + message_array[i] + '</a>';
         logHTML += message_array[i];
         rawlog += message_array[i];
      }
      else
      {
         innerHTML += message_array[i];
         logHTML += message_array[i];
         rawlog += message_array[i];
      }
   
      if(i != (message_array.length-1)) 
      {
         innerHTML += ' ';
         logHTML += ' ';
         rawlog += ' ';
      }
   }

   innerHTML += '</span></div>'; 
   logHTML += '</span></div>';
   rawlog += "\n\n";
   
   chat_div.innerHTML += innerHTML;
   log_div.innerHTML += logHTML;
   htmllog += logHTML;

   document.getElementById('txt_message').focus();
}

function setSessionDescription(newDescription)
{
   document.getElementById('session_description').innerHTML = newDescription;
}

function increaseInterval()
{
   if(interval >= max_interval) return;   
   interval += interval_d;   
   if(interval >= max_interval) interval = max_interval;
   if(interval <= min_interval) interval = min_interval;
}

function resetInterval()
{
   interval = min_interval;
}

function sendChatText() 
{
   if(document.getElementById('txt_message').value.trim() == '')
      return;
      
	if (sendReq.readyState == 4 || sendReq.readyState == 0) 
   {
      showMessage(original_username, document.getElementById('txt_message').value.trim());
	
   	sendReq.open("POST", 'chattunnel.php', true);
		sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		sendReq.onreadystatechange = handleSendChat; 
		var param = 'message=' + document.getElementById('txt_message').value.trim();
		param += '&username=' + username;
      param += '&target=' + technician;
      param += '&fd=' + fd;
      param += '&port=' + netport;
		sendReq.send(param);
      
      autoScroll();
	   document.getElementById('txt_message').value = '';
      document.getElementById('txt_message').focus();   
      
      
      return true;
	}			
   autoScroll();
   document.getElementById('txt_message').focus();   
   
   return false;				
}

function handleSendChat() 
{
	clearTimeout(mTimer);
	//getChatText();
   handleReceiveChat();
}

function makeArray(IntarrSize) 
{
  for (var n = 0; n < IntarrSize; n++)
    this[n] = "";

  return this;
}

/* http://www.tneoh.zoneit.com/javascript/js_func.htm */
function customSplit(strvalue, separator, arrayName) {
  var n = 0;

  if (separator.length != 0) {
    while (strvalue.indexOf(separator) != -1) {
      eval("arr"+n+" = strvalue.substring(0, strvalue.indexOf(separator));");
      strvalue = strvalue.substring(strvalue.indexOf(separator)+separator.length,
          strvalue.length+1);
      n++;
    }
    eval("arr" + n + " = strvalue;");
    arraySize = n+1;
  }
  else {
    for (var x = 0; x < strvalue.length; x++) {
      eval("arr"+n+" = \"" + strvalue.substring(x, x+1) + "\";");
      n++;
    }
    arraySize = n;
  }

  eval(arrayName + " = new makeArray(arraySize);");

  for (var i = 0; i < arraySize; i++)
    eval(arrayName + "[" + i + "] = arr" + i + ";");

  return arraySize;
}


function isURL(argvalue) 
{
  /* Check common TLD's */
  if(argvalue.indexOf(".com") != -1)
    if(argvalue.length > 4)
       return true;
       
  if(argvalue.indexOf(".net") != -1)
    if(argvalue.length > 4)
       return true;
       
  if(argvalue.indexOf(".org") != -1)
    if(argvalue.length > 4)
       return true;
       
  if(argvalue.indexOf(".co.uk") != -1)
    if(argvalue.length > 6)
       return true;
       
  if(argvalue.indexOf(".biz") != -1)
    if(argvalue.length > 4)
       return true;   
       
  if(argvalue.indexOf(".gov") != -1)
    if(argvalue.length > 4)
       return true; 
       
  if(argvalue.indexOf(".edu") != -1)
    if(argvalue.length > 4)
       return true; 
       
  if(argvalue.indexOf(".mil") != -1)
    if(argvalue.length > 4)
       return true; 
       
  if(argvalue.indexOf(".info") != -1)
    if(argvalue.length > 5)
       return true; 
       
  if(argvalue.indexOf(".name") != -1)
    if(argvalue.length > 5)
       return true; 
       
  if(argvalue.indexOf("..co.nz") != -1)
    if(argvalue.length > 6)
       return true; 
       
  if(argvalue.indexOf(".org.uk") != -1)
    if(argvalue.length > 7)
       return true; 
       
  if(argvalue.indexOf(".us") != -1)
    if(argvalue.length > 3)
       return true; 
       
  if(argvalue.indexOf(".ca") != -1)
    if(argvalue.length > 3)
       return true; 
       
  if(argvalue.indexOf(".cn") != -1)
    if(argvalue.length > 3)
       return true; 
       
  if(argvalue.indexOf(".ru") != -1)
    if(argvalue.length > 3)
       return true; 
       
  if(argvalue.indexOf(".de") != -1)
    if(argvalue.length > 3)
       return true;   
       
  if(argvalue.indexOf(".jp") != -1)
    if(argvalue.length > 3)
       return true;  
       
  if(argvalue.indexOf(".cc") != -1)
    if(argvalue.length > 3)
       return true;  
       
  if(argvalue.indexOf(".tv") != -1)
    if(argvalue.length > 3)
       return true;                                                                                                                                  
       
  /* Check for popular www prefix */
  if(argvalue.indexOf("www.") != -1)
    if(argvalue.length >= 7)
       return true;
  
  if (argvalue.indexOf(" ") != -1)
    return false;
  else if (argvalue.indexOf("http://") == -1)
    return false;
  else if (argvalue == "http://")
    return false;
  else if (argvalue.indexOf("http://") > 0)
    return false;    

  argvalue = argvalue.substring(7, argvalue.length);
  if (argvalue.indexOf(".") == -1)
    return false;
  else if (argvalue.indexOf(".") == 0)
    return false;
  else if (argvalue.charAt(argvalue.length - 1) == ".")
    return false;

  if (argvalue.indexOf("/") != -1) {
    argvalue = argvalue.substring(0, argvalue.indexOf("/"));
    if (argvalue.charAt(argvalue.length - 1) == ".")
      return false;
  }

  if (argvalue.indexOf(":") != -1) {
    if (argvalue.indexOf(":") == (argvalue.length - 1))
      return false;
    else if (argvalue.charAt(argvalue.indexOf(":") + 1) == ".")
      return false;
    argvalue = argvalue.substring(0, argvalue.indexOf(":"));
    if (argvalue.charAt(argvalue.length - 1) == ".")
      return false;
  }

  return true;
}

function isEmail(argvalue) {

  if (argvalue.indexOf(" ") != -1)
    return false;
  else if (argvalue.indexOf("@") == -1)
    return false;
  else if (argvalue.indexOf("@") == 0)
    return false;
  else if (argvalue.indexOf("@") == (argvalue.length-1))
    return false;

  // arrayString = argvalue.split("@"); (works only in netscape3 and above.)
  var retSize = customSplit(argvalue, "@", "arrayString");

  if (arrayString[1].indexOf(".") == -1)
    return false;
  else if (arrayString[1].indexOf(".") == 0)
    return false;
  else if (arrayString[1].charAt(arrayString[1].length-1) == ".") {
    return false;
  }

  return true;
}

function zeroPad(argvalue)
{
   if(argvalue < 10) argvalue = '0' + argvalue;
   return argvalue;
}

function monthString(argvalue)
{
   switch(argvalue)
   {
      case  0: return 'Jan';
      case  1: return 'Feb';
      case  2: return 'Mar';
      case  3: return 'Apr';
      case  4: return 'May';
      case  5: return 'Jun';
      case  6: return 'Jul';
      case  7: return 'Aug';
      case  8: return 'Sep';
      case  9: return 'Oct';
      case 10: return 'Nov';
      case 11: return 'Dec';
   }
}

/* http://blogs.telerik.com/tervelpeykov/posts/08-09-16/javascript_get_any_css_property_value_of_an_object_using_style.aspx */
function $style(ElementId, CssProperty)
{
   function $(stringId)
   {
      return document.getElementById(stringId);
   }   
   
   if($(ElementId).currentStyle)
   {
      var convertToCamelCase = CssProperty.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
      return $(ElementId).currentStyle[convertToCamelCase];
   }
   else if (window.getComputedStyle)
   {
      var elementStyle = window.getComputedStyle($(ElementId), "");
      return elementStyle.getPropertyValue(CssProperty);
   }
}

