//Global variables
var oldbrowser = (navigator.userAgent.indexOf('MSIE 5') != -1 && navigator.userAgent.indexOf('Mac') != -1);
var W3CDOM = (!oldbrowser && document.getElementsByTagName && document.createElement && document.getElementById);
var idArray = ["rf","pll","tls","phn","emi","non","lin","vna","vsa","tst","iq","gsm","edg","sys"];
var txtArray = [
'<div class="word">acronym RF&#58;</div> Radio Frequency, electromagnetic waves having a frequency from kHz to GHz.',
'<div class="word">acronym PLL&#58;</div> Phase locked loop, a control loop used to <a href="synth.html">synthesize</a> a frequency from a reference source',
'<div class="word">Telestrian&#58;</div> An RF and wireless design consultancy based in the UK.<br />Pronounced Tel&#183;es&#183;tri&#183;an.',
'<div class="word">Phase noise&#58;</div> Predominant noise mechanism in signal sources, caused by phase modulation due to source imperfections.',
'<div class="word">acronym EMI&#58;</div> Electromagnetic interference, unwanted RF signals causing interference in wanted signals.',
'<div class="word">Non linear simulator&#58;</div> A simulation technique usually based on harmonic balance or volterra series <a href="software.html">simulation</a> attempting to successfully model non-linear behaviour.',
'<div class="word">Linear simulator&#58;</div> A <a href="software.html">simulation</a> technique based on linear S-parameters of circuit blocks.',
'<div class="word">Vector network analyzer&#58;</div> Test equipment capable of measuring both magnitude and phase of one and two port devices enabling display of S -parameters.',
'<div class="word">Vector spectrum analyzer&#58;</div> Equipment that measures frequency domain and modulation domain of a signal. This equipment demodulates and analyzes many industry modulation standards.',
'<div class="word">Highlighted text&#58;</div> mouse-over definitions will appear here.',
'<div class="word">acronym IQ&#58;</div> In phase and quadrature. A method of accurately generating digital modulation by the use of IQ modulation / demodulation.',
'<div class="word">acronym GSM&#58;</div> Global system for Mobile Communications, the second generation system of mobile phones using GMSK modulation of digital data for security, allowing enhanced features over analog systems.',
'<div class="word">acronym EDGE&#58;</div> Enhanced Data Rates for GSM Evolution, sometimes known as 2.5G. An improved data rate digital system using 8PSK modulation, retaining a modulation frequency spectra similar to GSM.',
'<div class="word">System simulator&#58;</div> Simulates modulated signal behaviour across a system. Noise, compression, phase noise and other system degradations may be simulated.'];
var loc = '';
var sCnt = 0;
var cookieName = 'defn';
var cookn = 0;

//Code starts here
window.onload = init;

//Functions start here
function init(){
if (W3CDOM){
if (window.onerror){window.onerror= error;}
locatePath();
if (self.xtra){self.xtra();}
pageStart();
testCookie(cookieName);
writeDate();
window.onunload = cleanUp;
}
}

//Check for server response
function cleanUp(){
if (cookn){
var cke1 = document.cookie.indexOf(cookieName);
if (cke1 == -1 && cookn == 1){createCookie(cookieName,'0',30);}
else if (cke1 != -1 && cookn == 2){eraseCookie(cookieName);}
}
}

//Modify path
function locatePath(){
if (location.pathname && location.pathname.match){
var obj = location.pathname;
if (obj.match('cgi-bin')) {loc = 'http://www.telestrian.co.uk/';}
if (obj.match('w3c')) {loc = '../';}
}
else{
loc = 'http://www.telestrian.co.uk/';
}
}

//Add dynamic content
function pageStart(){
var n0 = document.getElementById('n0');
var n3 = document.getElementById('n3');
var ca = document.getElementById('ca');
if (n3 && n0 && !ca){
n3.innerHTML = '<img id="ball" src="'+ loc +'gra/balls.gif" usemap="#balls" alt="navigation" /><map id="balls" name="balls"><area shape="circle" coords="59,40,22" alt="search" id="sea" href="javascript: submitForm()" /><area shape="circle" coords="20,62,19" alt="sitemap" id="sit" href="'+ loc +'sitemap.html" /><area shape="circle" coords="18,18,14" alt="back" id="bac" href="javascript:history.go(-1)" /></map>';
n0.innerHTML += '<form method="get" id="frm" action="http://cgi.www.telestrian.co.uk/cgi-bin/www.telestrian.co.uk/search.pl"><fieldset class="sml"><input type="text" id="f1" name="terms" /></fieldset></form>';
}
var sit = document.getElementById('sit');
var sea = document.getElementById('sea');
var bac = document.getElementById('bac');
var ball = document.getElementById('ball');
if (sea && sit && bac && ball && !ca){
sea.onmouseover = function(){ball.src = loc + 'gra/search.gif';};
sea.onmouseout = function(){ball.src = loc + 'gra/balls.gif';};
bac.onmouseover = function(){ball.src = loc + 'gra/back.gif';};
bac.onmouseout = function(){ball.src = loc + 'gra/balls.gif';};
sit.onmouseover = function(){ball.src = loc + 'gra/sitemap.gif';};
sit.onmouseout = function(){ball.src = loc + 'gra/balls.gif';};
}
if (window.focus && document.forms && document.forms[0] && document.forms[0].elements[1]){
var fe = document.forms[0].elements[1];
if (fe.type == "text"){
fe.focus();
}
}
var m2 = document.getElementById('m2');
var moovr = document.getElementById('moovr');
if (m2 && moovr){
m2.innerHTML += '<div id="pop"><div id="crs">x</div><div id="dfn"></div></div>';
}
}

//sumbit search
function submitForm(){
document.getElementById('frm').submit();
}

//Write the date
function writeDate(){
var obj = document.getElementById('date');
if (obj && Date){
var month=["January","February","March","April","May","June","July","August","September","October","November","December"];
var time=new Date();
var txtmonth=month[time.getMonth()];
var date=time.getDate();
var year=time.getYear();
if(year < 2000){year=year+1900;}
obj.innerHTML = txtmonth + ' ' + date + ', ' + year;
obj.className = 'oldskl';
}
}

//check if status set by cookie
function testCookie(cName){
var obj = document.getElementById('moovr');
if(obj){
obj.innerHTML = '<input type="checkbox" id="chbx" onClick="checkChange()" />Enable <a href="' + loc +'javas.html">mouse-over</a> <span class="gdf">:Definitions</span>';
var cke2 = document.cookie.indexOf(cName);
if (cke2 == -1){
document.getElementById('chbx').checked = false;
}
else{
document.getElementById('chbx').checked = true;
initmouseover();
}
}
}

//start up mouse over definitions
function initmouseover(){
clear();
var obj = document.getElementsByTagName('acronym');
if (obj){
for (var i=0; i<obj.length; i++){
obj[i].className = 'acy';
}
}
for (var k=0; k<idArray.length; k++){
checkId(k);
}
}

//apply mouseover code if definitions id on page
function checkId(i){
var obj = document.getElementById(idArray[i]); 
var pop = document.getElementById('pop');
var dfn = document.getElementById('dfn');
var crs = document.getElementById('crs');
if (obj && pop && dfn && crs){
obj.onmouseover = function(e){
dfn.innerHTML = txtArray[i];
var h_sh = pop.scrollHeight;
var y = getPosition(e).y - h_sh -10;
var w_sh = document.body.scrollWidth;
var x = getPosition(e).x;
if ((w_sh - x) < 200) {x = w_sh - 220;}
pop.style.top = y  + 'px';
pop.style.left = x  + 'px';
pop.style.visibility = 'visible';
clear();
this.className = 'mo_act';
};
crs.onmousedown = function(){
pop.style.visibility = 'hidden';
clear();
};
}
}

//Clear all dictionary mouseovers
function clear() {
for (var j=0; j<idArray.length; j++)
{
var obj = document.getElementById(idArray[j]);
if (obj)
{
obj.className = 'mo_ina';
}
}
}

//cookie status change
function checkChange(){
var obj = document.getElementById('chbx');
if (obj){
if (obj.checked){
pollServer(1);
initmouseover();
cookn = 1;
}
else{
pollServer(0);
removemouseover();
cookn = 2;
}
}
}

//Remove definition mouse overs
function removemouseover(){
var pop = document.getElementById('pop');
var dfn = document.getElementById('dfn');
if (dfn && pop){
for (var j=0; j<idArray.length; j++){
var obj = document.getElementById(idArray[j]);
if (obj){
obj.className = 'mo_no';
obj.onmouseover = function(){};
}
dfn.innerHTML = '';
pop.style.visibility = 'hidden';
var ob1 = document.getElementsByTagName('acronym');
if (ob1){
for (var i=0;i < ob1.length;i++){
ob1[i].className = 'acn';
}
}
}
}
}

//send to server
function pollServer(qu){
script = document.createElement('script');
script.src = 'http://cgi.www.telestrian.co.uk/cgi-bin/www.telestrian.co.uk/cookie.pl?value=' + qu + '&count=' + sCnt; 
script.id = 'script' + sCnt;
sCnt += 1;
document.getElementsByTagName('head')[0].appendChild(script);
}

//response from server
function ack(sDat, sCnt){
var cke3 = document.cookie.indexOf(cookieName);
if (cke3 == -1 && sDat == 1){
var pop = document.getElementById('pop');
var dfn = document.getElementById('dfn');
var crs = document.getElementById('crs');
var chbx = document.getElementById('chbx');
if (pop && dfn && crs){
dfn.innerHTML = '<b>Cookie write error</b> Please enable cookies in your browser, if you wish your browser to remember this setting.';
pop.style.top = 40 + findPosY(chbx)  + 'px';
pop.style.left = findPosX(chbx)  + 'px';
pop.style.visibility = 'visible';
crs.onmousedown = function(){
document.getElementById('pop').style.visibility = 'hidden';
};
}
}
var milliError = 0;
setTimeout(function (serverData,milliError){var element = document.getElementById('script' + sCnt);element.parentNode.removeChild(element);},1000);
cookn = 0;
}

//Javascript cookie write
function createCookie(name,value,days){
var expires = "";
if (days){
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=/ ; domain=www.telestrian.co.uk";
}

//Javascript cookie erase
function eraseCookie(name){
createCookie(name,"",-1);
}

//On error...
function error(){
var err = ''; 
for (var i=0;i < arguments.length;i++){err += arguments[i];}
document.getElementById('val').innerHTML += '<img src="http://cgi.www.telestrian.co.uk/cgi-bin/www.telestrian.co.uk/error.pl?value=' + err + '" alt="error" />';
return false;
}

//cursor position
function getPosition(e){
var cursor = {x:0, y:0};
e = e || window.event;
if (e.pageX || e.pageY){
cursor.x = e.pageX;
cursor.y = e.pageY;
}
else{
cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - (document.documentElement.clientLeft || document.body.clientLeft);
cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - (document.documentElement.clientTop || document.body.clientTop);
}
return cursor;
}

//object position X
function findPosX(obj){
var curleft = 0;
var mrgn = 0;
if (obj.offsetParent){
while (obj.offsetParent){
curleft += obj.offsetLeft;
mrgn += obj.style.borderWidth;
obj = obj.offsetParent;
}
}
else if (obj.x){
curleft += obj.x;
}
return curleft;
}

//object position Y
function findPosY(obj){
var curtop = 0;
if (obj.offsetParent){
while (obj.offsetParent){
curtop += obj.offsetTop;
obj = obj.offsetParent;
}
}
else if (obj.y){
curtop += obj.y;
}
return curtop;
}
