/* vim: set expandtab tabstop=3 shiftwidth=3: */
/**
*
* DAV001 Davey Inc JS functionality.
*
* @author Neil <neil@neoco.com>
* @copyright Copyright (c) Neoco; www.neoco.com
* @version SVN: $Id: functionality.js 2770 2008-09-30 08:30:31Z dave $
*
*/

//var urlbase = '/www.morethanexchange.com';
var urlbase = '';

/* ************************************************************************* */
// register event handlers; traditional model

add_event_simple(window, 'load', initialise);
//add_event_simple(window, 'unload', mapUnload);

/* ************************************************************************* */
// function to initialise entire functionality
function initialise()
{
   if (!document.getElementById)
      return true;

   // init clickheat
   initialise_clickheat();

   // init any swfs
   initialise_swfs();
   
   // init any headerfooter
   initialise_headerfooter();
   
   // init Google maps
   initialise_googlemaps();   

} // end FUNCTION

/* ************************************************************************* */
// newsletter subscribe submit
function nls_submit(e)
{

   var targ;
   if (!e) var e = window.event;
   if (e.target) targ = e.target;
   else if (e.srcElement) targ = e.srcElement;
   if (targ.nodeType == 3) // defeat Safari bug
      targ = targ.parentNode;

   while (targ.tagName.toUpperCase() != 'FORM' && targ.parentNode)
      targ = targ.parentNode;
   if (targ.tagName.toUpperCase() != 'FORM')
      return true;   // can't do because no form :(

   var loader = document.getElementById('loader');
   if (!loader)
   {
      var loader = document.createElement('img');
      loader.id = 'loader';
      loader.src = urlbase+'/images/loader.gif';
      loader.alt = 'loading...';
      targ.appendChild(loader);
   }

   // compile post request
   var postdata = 'ajax=1';
   var nlsname = document.getElementById('nlsname');
   var nlsdname = document.getElementById('nlsdname');
   var nlsemail = document.getElementById('nlsemail');
   var nlsdemail = document.getElementById('nlsdemail');
   if (nlsname && nlsdname && nlsname.value != nlsdname.value)
      postdata += '&nlsname='+escape(nlsname.value);
   if (nlsemail && nlsdemail && nlsemail.value != nlsdemail.value)
      postdata += '&nlsemail='+escape(nlsemail.value);
      
   // send req
   sendRequest(targ.action, nls_response, postdata);
   
   return false;
} // end FUNCTION

/* ************************************************************************* */
// newsletter subscribe response
function nls_response(req)
{

   if (req.status != 200)
      return true;
   var response = eval('(' + req.responseText + ')');

   // get rid of loader
   var loader = document.getElementById('loader');
   if (loader)
      loader.parentNode.removeChild(loader);

   
   //Set the div class...
   var nls = document.getElementById('nls'); 
   if (response.success)
   {
      nls.className = 'mailing thanks';
   }
   else
   {
      nls.className = 'mailing error';      
   }
   
   // Set the <p> text...
   var name = document.getElementById('nlsname');
   var responsemessage = document.getElementById('nlsrm');
   if (responsemessage)
   {
      if (response.success)
         responsemessage.className = 'thanks';
      else
         responsemessage.className = 'error';
      responsemessage.innerHTML = response.message;
   }   
   
   // clear form
   if (response.clearform)
   {
      var nlsname = document.getElementById('nlsname');
      var nlsdname = document.getElementById('nlsdname');
      if (nlsname && nlsdname)
         nlsname.value = nlsdname.value;
      var nlsemail = document.getElementById('nlsemail');
      var nlsdemail = document.getElementById('nlsdemail');
      if (nlsemail && nlsdemail)
         nlsemail.value = nlsdemail.value;
   }

   // focus
   if (response.focus && response.focus != '')
   {
      var focuson = document.getElementById(response.focus);
      if (focuson)
         focuson.focus();
   }   
   
} // end FUNCTION

/* ************************************************************************* */
// Setup Google Maps

function initialise_googlemaps()
{

   var map = document.getElementById("map");
   if (!map)
      return true;
      
   gmap = new GMap2(map);
   
   gmap.setCenter(new GLatLng(51.515233, -0.129519), 16,G_NORMAL_MAP); 
   //gmap.setCenter(new GLatLng(51.510759042195, -0.132200717926), 16,G_NORMAL_MAP);
   
   gmap.addControl(new GMapTypeControl());
   gmap.addControl(new GSmallMapControl()); 
   
   var postcode_point = new GLatLng(51.515233, -0.129519); 
   //var postcode_point = new GLatLng(51.510759042195, -0.132200717926);
   
   var markerIcon = new GIcon(G_DEFAULT_ICON);
   
   gmap.addOverlay( new GMarker(postcode_point, markerIcon) );

}

/* ************************************************************************* */
// initialise footer
function initialise_headerfooter()
{

   var search = document.getElementById('search');
   if (search)
   {
      search.onfocus = function (){ var search = document.getElementById('search'); if (!search) return true; if (this.value == search.value) this.value = ''; }
      search.onblur = function () { var search = document.getElementById('search-default'); if (!search) return true; if (this.value == '') this.value = search.value; }
   }
   
   var nlsemail = document.getElementById('nlsemail');
   if (nlsemail)
   {
      nlsemail.onfocus = function (){ var nlsemail = document.getElementById('nlsemail'); if (!nlsemail) return true; if (this.value == nlsemail.value) this.value = ''; }
      nlsemail.onblur = function () { var nlsemail = document.getElementById('nlsdemail'); if (!nlsemail) return true; if (this.value == '') this.value = nlsemail.value; }
   }      
   
   var nlsname = document.getElementById('nlsname');
   if (nlsname)
   {
      nlsname.onfocus = function (){ var nlsname = document.getElementById('nlsname'); if (!nlsname) return true; if (this.value == nlsname.value) this.value = ''; }
      nlsname.onblur = function () { var nlsname = document.getElementById('nlsdname'); if (!nlsname) return true; if (this.value == '') this.value = nlsname.value; }
   }    
   
   var mailingform = document.getElementById('mailing');
   if (mailingform)
      mailingform.onsubmit = nls_submit;   

} // end FUNCTION

/* ************************************************************************* */
// function to initialise swfs
function initialise_swfs()
{
   var divs = document.getElementsByTagName('div');
   for (var d=0; d<divs.length; d++)
   {
      if (divs[d].className.search(/embedflash/gi) != -1)
      {
         // start flash player if we can
         var inputs = divs[d].getElementsByTagName('input');
         var location = '';
         var width = '';
         var height = '';
         var version = '';
         var expressinstall = '';
         var flashvars = new Object();
         var params = new Object();
         var attributes = new Object();
         for (var i=0; i<inputs.length; i++)
         {
            switch (inputs[i].name)
            {
               case 'swflocation':
                  location = inputs[i].value;
                  break;
               case 'width':
                  width = inputs[i].value;
                  break;
               case 'height':
                  height = inputs[i].value;
                  break;
               case 'version':
                  version = inputs[i].value;
                  break;
               case 'expressinstall':
                  expressinstall = inputs[i].value;
                  break;
               case 'flashvar':
                  break;
               case 'param':
                  var parts = inputs[i].value.split('|');
                  if (parts.length > 1)
                     params[parts.shift()] = parts.join('|');
                  break;
               case 'attribute':
                  break;
            }
         }
         // do we have all reqd stuff?
         if (divs[d].id != '' && location != '' && width != '' && height != '' && version != '')
         {
            if (swfobject.hasFlashPlayerVersion(version))
               swfobject.embedSWF(location, divs[d].id, width, height, version, expressinstall, flashvars, params, attributes);
            else
            {
               var body = document.getElementsByTagName('body')[0];
               if (body.className.search(/noflash/gi) == -1)
                  body.className = body.className + ' noflash';
            }
         }
         else
            alert('SWF: Bad parameter; need div#, swflocation, width, height, version');
      }
   }
} // end FUNCTION


/* ************************************************************************* */
// CLICKHEAT

var pageuid;
var projectid;
var lastclick;
var wrapperoffset;

/* ************************************************************************* */
// init clickheat tracking
function initialise_clickheat()
{
   // get pageuid
   var meta = document.getElementsByTagName('meta');
   for (var m=0; m<meta.length; m++)
   {
      if (meta[m].name == 'neoco.pageuid' && meta[m].content != '')
         pageuid = meta[m].content;
      if (meta[m].name == 'neoco.projectid' && meta[m].content != '')
         projectid = meta[m].content;
   }
   // get offset of "wrapper"
   var wrapper = document.getElementById('wrapper');
   if (wrapper)
   {
      wrapperoffset = find_pos(wrapper);
      wrapperoffset.width = wrapper.offsetWidth;
      wrapperoffset.height = wrapper.offsetHeight;
      wrapperoffset.bottom = wrapperoffset.top+wrapperoffset.height;
      wrapperoffset.right = wrapperoffset.left+wrapperoffset.width;
      add_event_simple(window, 'click', clickheat_record);
      add_event_simple(window, 'resize', clickheat_resized);
   }
} // end FUNCTION

/* ************************************************************************* */
// recalc wrapper offset
function clickheat_resized()
{
   var wrapper = document.getElementById('wrapper');
   if (wrapper)
   {
      wrapperoffset = find_pos(wrapper);
      wrapperoffset.width = wrapper.offsetWidth;
      wrapperoffset.height = wrapper.offsetHeight;
      wrapperoffset.bottom = wrapperoffset.top+wrapperoffset.height;
      wrapperoffset.right = wrapperoffset.left+wrapperoffset.width;
   }
   return true;
} // end FUNCTION

/* ************************************************************************* */
function clickheat_record(e)
{
   try
   {
      if (!e) var e = window.event;
   	if (e.pageX || e.pageY)
   	{
   		var x = e.pageX;
   		var y = e.pageY;
   	}
   	else if (document.documentElement)
   	{
         var x = e.clientX + document.documentElement.scrollLeft;
         var y = e.clientY + document.documentElement.scrollTop;
   	}
   	else if (e.clientX || e.clientY)
   	{
   		var x = e.clientX + document.body.scrollLeft;
   		var y = e.clientY + document.body.scrollTop;
   	}
      var dateobj = new Date();
      if (x < wrapperoffset.left || x > wrapperoffset.right || y < wrapperoffset.top || y > wrapperoffset.bottom || dateobj.getTime() - lastclick < 500)  // outside of window or <.5 between clicks
         return true;
      x -= wrapperoffset.left;
      y -= wrapperoffset.top;
      lastclick = dateobj.getTime();
      var requesturi = '/shared/clickheat/record.php?projectid='+projectid+'&page='+pageuid+'&x='+x+'&y='+y;
      sendRequest(requesturi, null);
		var now = new Date();
		var waituntil = now.getTime() + 100;
		while (waituntil > now.getTime())
			now = new Date();
   }
   catch(err)
   {
      alert('oh dear me');
   }
   return true;	
} // end FUNCTION

