var item;
var URL_PARAMS='';
var heartBeatMinutes = 15;

var timeOutID = window.setTimeout('heartBeat()', heartBeatMinutes*60*1000); //keep session alive

function fO(oE){
	if(typeof(oE)=='string'){
		if(document.getElementById){
			if(oE=document.getElementById(oE)) return oE;
		}else if(document.all){
			if(oE=document.all[oE]) return oE;
		}
	}else if(typeof(oE)=='object'){
		return oE;
	}
	return false;
}

function hO(oE){ //hO = hideObject
	oE=fO(oE);
	if(!oE) return false;
	oE.style.display='none';
	oE.style.visibility='hidden';
}

function sO(oE){ //sO = showObject
	oE=fO(oE);
	if(!oE) return false;
	oE.style.display=(typeof oE.displayMode!='undefined')?oE.displayMode:'block';
	oE.style.visibility='visible';
}

function newWindow(sUrl){
	return window.open(sUrl,'','toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes');
}

function popup(sURL,iW,iH){
	var iX=Math.floor(screen.width/2-iW/2);
	var iY=Math.floor(screen.height/2-iH/2);
	return window.open(sURL,'popup','height='+iH+',width='+iW+',left='+iX+',top='+iY+',dependent=yes,alwaysRaised=yes,menubar=no,status=yes,resizeable=no,toolbar=no,titlebar=no');
}

var toJsonString
(function () {
  toJsonString = function(o) {
    var UNDEFINED
    switch (typeof o) {
      case 'string': return '\'' + encodeJS(o) + '\''
      case 'number': return String(o)
      case 'object':
        if (o) {
          var a = []
          if (o.constructor == Array) {
            for (var i = 0; i < o.length; i++) {
              var json = toJsonString(o[i])
              if (json != UNDEFINED) a[a.length] = json
            }
            return '[' + a.join(',') + ']'
          } else if (o.constructor == Date) {
            return 'new Date(' + o.getTime() + ')'
          } else {
            for (var p in o) {
              var json = toJsonString(o[p])
              if (json != UNDEFINED) a[a.length] = (/^[A-Za-z_]\w*$/.test(p) ? (p + ':') : ('\'' + encodeJS(p) + '\':')) + json
            }
            return '{' + a.join(',') + '}'
          }
        }
        return 'null'
      case 'boolean'  : return String(o)
      case 'function' : return
      case 'undefined': return 'null'
    }
  }

  function encodeJS(s) {
    return (!/[\x00-\x19\'\\]/.test(s)) ? s : s.replace(/([\\'])/g, '\\$1').replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/[\x00-\x19]/g, '')
  }
})()

function jsonCall(sURL, oData, sListener, params, bASync) {
  if(typeof params=='undefined') var params={};
  if(typeof bASync=='undefined') var bASync=true;
  
	var oXMLHttp=new XMLHttpRequest();
	var qmas=sURL.indexOf('?')>=0?'&':'?';
	sURL+=qmas+'rnd='+Math.floor(Math.random()*Math.pow(10,10))+'&'+URL_PARAMS;
  
	oXMLHttp.onreadystatechange=function(){
		
		if(oXMLHttp.readyState==4){
		  if(params.getRawData){
		    var oResponse=oXMLHttp.responseText;
		  }else if(oXMLHttp.responseText){
		    if(typeof JSON!=="undefined"&&JSON.parse){
		      var oResponse=JSON.parse(oXMLHttp.responseText);
		    }else{
		      var oResponse=eval('('+oXMLHttp.responseText+')');
		    }
		    
		  }else{
			var oResponse={result:false};
		  }

			sListener(oResponse);
		}
	};
  
	oXMLHttp.open("POST", sURL, bASync);
	if(typeof JSON!=="undefined"&&JSON.stringify){
	  var out=JSON.stringify(oData);
	}else{
	  var out=toJsonString(oData);	  
	}
	oXMLHttp.send(out);
  
  if (bASync)
	  return oXMLHttp;
  else  
  {
    if(params.getRawData){
      var oResponse=oXMLHttp.responseText;
    }else if(oXMLHttp.responseText){
      if(typeof JSON!=="undefined"&&JSON.parse){
        var oResponse=JSON.parse(oXMLHttp.responseText);
      }else{
        var oResponse=eval('('+oXMLHttp.responseText+')');
      }
      
    }else{
      var oResponse={result:false};
    }
    
    return oResponse;
  }  
}

function heartBeat() 
{
  var vrfNum = Math.floor(Math.random() * Math.pow(10, 10));
  
  item = { 'vrfNum' : vrfNum };
  jsonCall('../json.heartbeat.php', item, function (o){
    if (o.vrfNum != vrfNum)
    {
      window.top.location.href=window.top.location.href;
    }  
    else
      timeOutID = window.setTimeout('heartBeat()', heartBeatMinutes*60*1000);
  }, {});
}

function contact() 
{
  var formElements = fO('contact-form').elements;
  var details = [];

  for(var i = 0; i < formElements.length; i++)
  {
    if ((formElements[i].id != 'email') && (formElements[i].id != 'message') && (formElements[i].type == 'text'))
    {
      details[details.length] = formElements[i].value; 
    }
  }
  
  item = { 'email' : fO('email').value, 'message' : fO('message').value, 'details' : details, 'subject' : 'Contact form submission' };
  jsonCall('../json.contact.php', item, function (o){
    if (o.success)
      alert('Thank you, your message was sent.');
    else
      alert('Sorry, your message could not be sent. Please try again later.');
  }, {});
}

function lmSignUp() 
{
  var name = (fO('lm-name').value == fO('lm-name').defaultValue) ? '' : fO('lm-name').value;
  var phone = (fO('lm-phone').value == fO('lm-phone').defaultValue) ? '' : fO('lm-phone').value;

  item = { 'email' : fO('lm-email').value, 'name' : name, 'phone' : phone };
  jsonCall('../json.listmessenger.php', item, function (o){
    if (o.success)
      alert('Thank you, subscription completed.');
    else
      alert('Sorry, you could not be added at this time. Please try again later.');
  }, {});
}

function mbSignUp()       
{
  var formElements = fO('mb-form').elements;
  var details = [];

  for(var i = 0; i < formElements.length; i++)
  {
    if ((formElements[i].id != 'mb-email') && (formElements[i].id != 'mb-message') && (formElements[i].type == 'text'))
    {
      details[details.length] = formElements[i].value; 
    }
  }
  
  item = { 'email' : fO('mb-email').value, 'message' : fO('mb-message').value, 'details' : details, 'subject' : 'Membership form submission'  };
  jsonCall('../json.contact.php', item, function (o){
    if (o.success)
      alert('Thank you, your application was sent.');
    else
      alert('Sorry, your application could not be sent. Please try again later.');
  }, {});
}

function $(v) { return(document.getElementById(v)); }
function $S(v) { return($(v).style); }
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function isset(v) { return((typeof(v)=='undefined' || v.length==0)?false:true); }
function XYwin(v) { var z=agent('msie')?Array(document.body.clientHeight,document.body.clientWidth):Array(window.innerHeight,window.innerWidth); return(isset(v)?z[v]:z); }

function sexyTOG() { document.onclick=function(){ $S('sexyBG').display='none'; $S('sexyBOX').display='none'; document.onclick=function(){}; }; }
function sexyBOX(v,b,c)
{
  setTimeout("sexyTOG()",100);
  $S('sexyBG').height=XYwin(0)+'px';
  $S('sexyBG').display='block';
  $('sexyBOX').innerHTML=v+'<div class="sexyX">'+fO(c).innerHTML+"<\/div>";
  $S('sexyBOX').left=Math.round((XYwin(1)-b)/2)+'px';
  $S('sexyBOX').width=b+'px';
  $S('sexyBOX').display='block';
}

function showWait(workingText)
{ 
  fO('workingBox').innerHTML = workingText;
  fO('workingBox').style.visibility = 'visible';
  fO('readOnlyBox').style.visibility = 'visible';
}
function hideWait()
{ 
  fO('workingBox').style.visibility = 'hidden';
  fO('readOnlyBox').style.visibility = 'hidden';
}

function sendContactForm()
{
  var retval = isValidEmail(fO('email').value);

  if (!retval)
    alert('Please check your e-mail address.');
  else
    contact();  
    
  return false;
}
function newsLetterSignUp()
{
  var retval = isValidEmail(fO('lm-email').value);

  if (!retval)
    alert('Please check your e-mail address.');
  else
    lmSignUp();  
    
  return false;
}
function membershipSignUp()
{
  var retval = isValidEmail(fO('mb-email').value);
  
  if (retval)
    retval = (fO('mb-name').value == fO('mb-name').defaultValue) ? false : true;

  if (retval)
    retval = (fO('mb-phone').value == fO('mb-phone').defaultValue) ? false : true;

  if (retval)
    retval = (fO('mb-message').value == fO('mb-message').defaultValue) ? false : true;
    
  if ((fO('mb-name').value.length < 2) || (fO('mb-phone').value.length < 2) || (fO('mb-message').value.length < 2))
    retval = false;

  if (!retval)
    alert('Please check your input.');
  else
    mbSignUp();  
    
  return false;
}
function isValidEmail(email)
{
  if (email==null)
    return false;

  if (email.length==0)
    return false;

  if (!allValidChars(email))
      return false;

  if (email.indexOf('@') < 1) { //  must contain @, and it must not be the first character
      return false;
  } else if (email.lastIndexOf('.') <= email.indexOf('@')) {  // last dot must be after the @
      return false;
  } else if (email.indexOf('@') == email.length) {  // @ must not be the last character
      return false;
  } else if (email.indexOf('..') >=0) { // two periods in a row is not valid
    return false;
  } else if (email.indexOf('.') == email.length) {  // . must not be the last character
    return false;
  }
  return true;
}

function allValidChars(str) {
  var parsed = true;
  var validchars = 'abcdefghijklmnopqrstuvwxyz0123456789@.-_';

  for (var i=0; i < str.length; i++) {
    var letter = str.charAt(i).toLowerCase();
    if (validchars.indexOf(letter) != -1)
      continue;
    parsed = false;
    break;
  }
  return parsed;
}

if( !window.XMLHttpRequest ) XMLHttpRequest = function(){
	try{ return new ActiveXObject("MSXML3.XMLHTTP") }catch(e){}
	try{ return new ActiveXObject("MSXML2.XMLHTTP.3.0") }catch(e){}
	try{ return new ActiveXObject("Msxml2.XMLHTTP") }catch(e){}
	try{ return new ActiveXObject("Microsoft.XMLHTTP") }catch(e){}
	throw new Error("Could not find an XMLHttpRequest alternative.")
};

