



var showSideFeatInfo = function(cntImg, cntInfo){			    	
    $('#sideFeatureThumbs a').each(function(){
        $(this).removeClass('current');
    });

    $('#sideFeatureExcerpt .feat').each(function(){
        $(this).css('display','none');
    });

    $(cntImg).addClass("current");
    $(cntInfo).css('display', 'block');
};

function toggleLayer( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}

function checkThisForm(formname, submitbutton, errors) {
  if (errors == '') {
   // eval(formname+'.'+submitbutton+'.disabled=true');
    eval('document.'+formname+'.submit()');
  } else {
    alert(errors);
  }
}

function checkText(formname, textboxname, displaytext) {
  var localerror = '';
  if(Trim(eval('document.'+formname+'.'+textboxname+'.value'))=='') {
    localerror =  '- '+displaytext+' is Required.\n';
  } else localerror = '';
  return localerror;
}

function checkNum(formname, textboxname, displaytext) {
  var localerror = '';
  if(isNaN(eval('document.'+formname+'.'+textboxname+'.value'))) {
    localerror =  '- '+displaytext+' Should Be A Number With No Spaces.\n';
  } else localerror = '';
  return localerror;
}

function checkSpaces(formname, textboxname, displaytext) {
  var valid = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'; // define valid characters
  var localerror = '';
  if(!isValid(Trim(eval('document.'+formname+'.'+textboxname+'.value')), valid)) {
    localerror =  '- '+displaytext+' Should Not Contain Spaces.\n';
  } else localerror = '';
  return localerror;
}

function checkSelect(formname, selectboxname, displaytext) {
  var localerror = '';
  if(eval('document.'+formname+'.'+selectboxname+'.selectedIndex')==0) {
    localerror =  '- '+displaytext+' is Required.\n';
  } else localerror = '';
  return localerror;
}

function getRadio(formname, radioname, displaytext) {
  for (var i=0; i < eval('document.'+formname+'.'+radioname+'.length'); i++) {
    if (eval('document.'+formname+'.'+radioname+'[i].checked')) {
      var rad_val = eval('document.'+formname+'.'+radioname+'[i].value');
      return rad_val;
    }
  }
}

function checkRadio(formname, radioname, displaytext) {
  var localerror = '';
  var rad_val    = '';
  for (var i=0; i < eval('document.'+formname+'.'+radioname+'.length'); i++) { //check every radio button by that name
    if (eval('document.'+formname+'.'+radioname+'[i].checked'))  { //if it is checked
      rad_val += '-';
      }	else rad_val += '';
      }
    if (rad_val=='') {
      localerror =  '- '+displaytext+' is Required.\n';
    }
  return localerror;
}

function autoComplete (field, select, property) {
/*onKeyUp="autoComplete(this,this.form.selectboxname,'value',false)" - add this to textbox where you are typing*/
  var found = false;
  for (var i = 0; i < select.options.length; i++) {
    if (select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) {
      found=true; break;
    }
  }
  if (found) {
    select.selectedIndex = i;
  } else {
    select.selectedIndex = -1;
  }
  if (field.createTextRange) {
    if (!found) {
      field.value=field.value.substring(0,field.value.length-1);
      return;
    }
    var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
    if (cursorKeys.indexOf(event.keyCode+";") == -1) {
      var r1 = field.createTextRange();
      var oldValue = r1.text;
      var newValue = found ? select.options[i][property] : oldValue;
      if (newValue != field.value) {
        field.value = newValue;
        var rNew = field.createTextRange();
        rNew.moveStart('character', oldValue.length) ;
        rNew.select();
      }
    }
  }
}

function Trim(s) {
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r')) {
    s = s.substring(1,s.length);
  }
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r')) {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function isValid(string,allowed) {
//  var valid = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // define valid characters
    for (var i=0; i< string.length; i++) {
      if (allowed.indexOf(string.charAt(i)) == -1) return false;
    }
    return true;
}


function wdwpopup(url,name,w,h)
{
	window.open(url,'popup','width='+w+',height='+h+',scrollbars=no, location=no,statusbar=no');
}

function swapimg(img,what)
{
	document.getElementById(img).src = what
}

function playMediaClip(mediaClipId) {
 var winL = (screen.width - 300) / 2;
 var winT = (screen.height - 200) / 2;
 window.open( '/inc/playmedia.asp?id=' + mediaClipId , 'playMediaClip' , 'width=300, height=200, top=' + winT + ', left=' + winL + ', resizable=yes, scrollbars=no, toolbar=no, location=no, directories=no, status=no, menubar=no, copyhistory=no');
 return false;
}

// JavaScript File
function emailCheck (emailStr) {

var checkTLD=1;

var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

var emailPat=/^(.+)@(.+)$/;

var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

var validChars="\[^\\s" + specialChars + "\]";

var quotedUser="(\"[^\"]*\")";

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

var atom=validChars + '+';

var word="(" + atom + "|" + quotedUser + ")";

var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

var matchArray=emailStr.match(emailPat);

if (matchArray==null) {

alert("Email address seems incorrect (check @ and .'s)");
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
alert("Ths username contains invalid characters.");
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
alert("Ths domain name contains invalid characters.");
return false;
   }
}

if (user.match(userPat)==null) {

alert("The username doesn't seem to be valid.");
return false;
}

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
alert("Destination IP address is invalid!");
return false;
   }
}
return true;
}

var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
alert("The domain name does not seem to be valid.");
return false;
   }
}

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
alert("The address must end in a well-known domain or two letter " + "country.");
return false;
}

if (len<2) {
alert("This address is missing a hostname!");
return false;
}

// If we've gotten this far, everything's valid!
return true;
}

//  End -->

function getHTTPObject(xd) {
var xd = false;
if (window.ActiveXObject){
	try{xd = new ActiveXObject("Msxml2.XMLHTTP");}
catch(e) {
	try{xd = new ActiveXObject("Microsoft.XMLHTTP");}
catch(e) {xd = false;}
	}
} 
else if (window.XMLHttpRequest) {try{xd = new XMLHttpRequest();}
	catch(e) {xd=false;}
}
return xd;
}

function grabFile(file,div,xd) {
var request = getHTTPObject(xd);
if (request) {
	request.onreadystatechange = function() {
		displayResponse(request,div);
	};
	request.open("GET",file,true);
	request.send(null);
	}
}

function displayResponse(request,div) {
//alert(request.readystate);
if (request.readyState == 4) {
	document.getElementById(div).innerHTML = request.responseText;
}
}


function rptAjax(file,div,tmr)
{
	grabFile(file,div,div);
	setTimeout("rptAjax('" + file + "','" + div + "','" + tmr + "')",tmr); // Time in ms - 30000 = 30 Seconds
}

function loadgal(id) {
for (x=1;x<=8;x++)
	{
	if (document.getElementById('gal'+x).style.display == '')
		{
		document.getElementById('gal'+x).style.display='none';
		//Effect.Fade('gal'+x,{queue:'front',duration:0.1});
		}
	}
	document.getElementById('gal'+id).style.display='';
	//Effect.Appear('gal'+id,{queue:'end',duration:0.1});
}
function loadHeros(id) {
	for (x=1;x<=4;x++) {
	if (document.getElementById('hero'+x).style.display == '') {
		document.getElementById('hero'+x).style.display='none';
		Effect.Fade('gal'+x,{queue:'front',duration:0.1});
		}
	}
	document.getElementById('hero'+id).style.display='';
	//Effect.Appear('gal'+id,{queue:'end',duration:0.1});
}


function selall()
{
var objCheckBoxes = document.forms['frmEmailSubscription'].elements['interest'];
	var countCheckBoxes = objCheckBoxes.length;
	if(!countCheckBoxes)
		objCheckBoxes.checked = true;
	else
		// set the check value for all check boxes
		for(var i = 0; i < countCheckBoxes; i++)
			{
			if (objCheckBoxes[i].checked)
				{
				objCheckBoxes[i].checked = false;
				}
			else
				{
				objCheckBoxes[i].checked = true;
				}
			};
	document.frmEmailSubscription.interest.checked = false;
}

function getTweets(amount) {
	var url = "http://search.twitter.com/search.json?callback=?&q=%23artemishunters&rpp=" + amount;
	var results='';
	$.getJSON(url, function(data){ 
		$.each(data.results, function(i, item){
			var date_tweet = new Date(item.created_at);
			var date_now = new Date();
			var date_diff = date_now - date_tweet;
			var hours = Math.round(date_diff/(1000*60*60));
			
			var status = item.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(newurl) {
				return '<a href="'+newurl+'">'+newurl+'</a>';
			});
		
			$("#tweets").html("");
			
			
			results=results + "<div class='tweet'>";
				results=results + "<div class='info'>";
					results=results + "<img src='" + item.profile_image_url + "' width='48' height='48' alt='' />";
					
					results=results + "<div class='details'>";
						results=results + "<a href='http://www.twitter.com/" + item.from_user + "' target='_blank'>@" + item.from_user + "</a>";
						results=results + "<p>posted <strong>" + item.created_at + "</strong></p>";
					results=results + "</div>";
					
					results=results + "<div class='clear'></div></div>";
					
					results=results + "<div class='cnt'>";
						results=results + "<p>"+ status +"</p>";
					results=results + "</div>";
					
			results=results + "</div>";
			
			
    	    $("#tweets").html("" + results);
		});
	});
	if (results.length==0) {
		$("#tweets").html("");
		$("#tweets").html("<div class='item'><p style='font-size:1.3em;'>It would appear no-one has said anything for a while... Or the Twitter Feed is currently unavailable. Not to worry</p></div>");
	}
	//setTimeout("getTweets(5)", 45000);
}
function getTweetList(user, list, thediv, tweet_count) {
	if (list.length>0) {
		var url = 'http://api.twitter.com/1/' + user + '/lists/' + list + '/statuses.json?callback=?&per_page=' + tweet_count;
	} else {
		var url = 'http://twitter.com/statuses/user_timeline/' + user + '.json?callback=?&count=' + tweet_count;
	}
	
	var results='';
	$.getJSON(url, function(data){ 
		$.each(data, function(i, item){
			var date_tweet = new Date(item.created_at);
			var date_now = new Date();
			var date_diff = date_now - date_tweet;
			var hours = Math.round(date_diff/(1000*60*60));
			$(thediv).html("");
			
			var status = item.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
				return '<a href="'+url+'">'+url+'</a>';
			});
			
			results = results + "<div class=\"tweet\">\n";
				results = results + "<a href='http://www.twitter.com/" + item.user.screen_name + "' title=''>";
				results = results + "<img src='" + item.user.profile_image_url + "' alt='' class='twitimg' height='50' width='50' /></a>\n";
				results = results + "<div class=\"cnt\">\n";
					results = results + "<h4><a href='http://www.twitter.com/" + item.user.screen_name + "' title=''>@" + item.user.screen_name + "</a></h4>";
					results = results + "<p class='date'>" + item.created_at + "</p>\n";
					results = results + "<p>" + status + "</p>\n";
				results = results +"</div>\n";
				results = results + "<div class=\"clear\"></div>\n";
			results = results + "</div>";	
			
    	    $(thediv).html("" + results);
		});
		
	});
	//setTimeout('getTweetList(" + user +"," + list + ")', 12000);
}




function getTweetSearch(amount) {
	var url = "http://search.twitter.com/search.json?callback=?&q=%23aoasolo&rpp=" + amount;
	var results='';
	$.getJSON(url, function(data){ 
		$.each(data.results, function(i, item){
			var date_tweet = new Date(item.created_at);
			var date_now = new Date();
			var date_diff = date_now - date_tweet;
			var hours = Math.round(date_diff/(1000*60*60));
			
			var status = item.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(newurl) {
				return '<a href="'+newurl+'">'+newurl+'</a>';
			});
		
			$("#tweets").html("");
			
			results = results + "<div class=\"tweet\">\n";
				results = results + "<a href='http://www.twitter.com/" + item.from_user + "' title=''>";
				results = results + "<img src='" + item.profile_image_url + "' alt='' class='twitimg' height='50' width='50' /></a>\n";
				results = results + "<div class=\"cnt\">\n";
					results = results + "<h4><a href='http://www.twitter.com/" + item.from_user + "' title=''>@" + item.from_user + "</a></h4>";
					results = results + "<p class='date'>" + item.created_at + "</p>\n";
					results = results + "<p>" + status + "</p>\n";
				results = results +"</div>\n";
				results = results + "<div class=\"clear\"></div>\n";
			results = results + "</div>";	
			
    	    $("#tweets").html("" + results);
		});
	});
	if (results.length==0) {
		$("#twits .wrap").html("");
		$("#twits .wrap").html("<div class='item'><p style='font-size:1.3em;'>It would appear no-one has said anything for a while... Or the Twitter Feed is currently unavailable. Not to worry</p></div>");
	}
	setTimeout("getTweetSearch(4)", 45000);
}
function getTweetSearch2(amount) {
	var url = "http://search.twitter.com/search.json?callback=?&q=%23aoasolo&rpp=" + amount;
	var results='';
	$.getJSON(url, function(data){ 
		$.each(data.results, function(i, item){
			var date_tweet = new Date(item.created_at);
			var date_now = new Date();
			var date_diff = date_now - date_tweet;
			var hours = Math.round(date_diff/(1000*60*60));
			
			var status = item.text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(newurl) {
				return '<a href="'+newurl+'">'+newurl+'</a>';
			});
		
			$("#tweets").html("");
			
			results = results + "<div class=\"tweet\">\n";
				results = results + "<a href='http://www.twitter.com/" + item.from_user + "' title=''>";
				results = results + "<img src='" + item.profile_image_url + "' alt='' class='twitimg' height='50' width='50' /></a>\n";
				results = results + "<div class=\"cnt\">\n";
					results = results + "<h4><a href='http://www.twitter.com/" + item.from_user + "' title=''>@" + item.from_user + "</a></h4>";
					results = results + "<p class='date'>" + item.created_at + "</p>\n";
					results = results + "<p>" + status + "</p>\n";
				results = results +"</div>\n";
				results = results + "<div class=\"clear\"></div>\n";
			results = results + "</div>";	
			
    	    $("#tweets").html("" + results);
		});
	});
	/*
	if (results.length==0) {
		$("#tweets .wrap").html("");
		$("#tweets .wrap").html("<div class='item'><p style='font-size:1.3em;'>It would appear no-one has said anything for a while... Or the Twitter Feed is currently unavailable. Not to worry</p></div>");
	}*/
	setTimeout("getTweetSearch2(3)", 45000);
}








/* DATE / TIME CALCULATIONS */
function relative_time(time_value) {
  var values = time_value.split(" ");
  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  delta = delta + (relative_to.getTimezoneOffset() * 60);

  if (delta < 60) {
    return 'less than a minute ago';
  } else if(delta < 120) {
    return 'about a minute ago';
  } else if(delta < (60*60)) {
    return (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (120*60)) {
    return 'about an hour ago';
  } else if(delta < (24*60*60)) {
    return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
    return '1 day ago';
  } else {
    return (parseInt(delta / 86400)).toString() + ' days ago';
  }
}
