window.onerror = function () {}

/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
/*--------------------------------------------------------------------------*/
//note: stripped down version of prototype, to be used with moo.fx by mad4milk (http://moofx.mad4milk.net).

var Class = {
	create: function() {
		return function() {
			this.initialize.apply(this, arguments);
		}
	}
};

Object.extend = function(destination, source) {
	for (var property in source) destination[property] = source[property];
	return destination;
};

Function.prototype.bind = function(object) {
	var __method = this;
	return function() {
		return __method.apply(object, arguments);
	}
};

if (!Array.prototype.forEach){
	Array.prototype.forEach = function(fn, bind){
		for(var i = 0; i < this.length ; i++) fn.call(bind, this[i], i);
	};
}

Array.prototype.each = Array.prototype.forEach;

String.prototype.camelize = function(){
	return this.replace(/-\D/gi, function(match){
		return match.charAt(match.length - 1).toUpperCase();
	});
};

var $A = function(iterable) {
	var nArray = [];
	for (var i = 0; i < iterable.length; i++) nArray.push(iterable[i]);
	return nArray;
};

function $() {
	if (arguments.length == 1) return get$(arguments[0]);
	var elements = [];
	$c(arguments).each(function(el){
		elements.push(get$(el));
	});
	return elements;

	function get$(el){
		if (typeof el == 'string') el = document.getElementById(el);
		return el;
	}
};

if (!window.Element) var Element = {};

Object.extend(Element, {

	remove: function(element) {
		element = $(element);
		element.parentNode.removeChild(element);
	},

	hasClassName: function(element, className) {
		element = $(element);
		return !!element.className.match(new RegExp("\\b"+className+"\\b"));
	},

	addClassName: function(element, className) {
		element = $(element);
		if (!Element.hasClassName(element, className)) element.className = (element.className+' '+className);
	},

	removeClassName: function(element, className) {
		element = $(element);
		if (Element.hasClassName(element, className)) element.className = element.className.replace(className, '');
	}

});

document.getElementsByClassName = function(className){
	var elements = [];
	var all = document.getElementsByTagName('*');
	$A(all).each(function(el){
		if (Element.hasClassName(el, className)) elements.push(el);
	});
	return elements;
};
//based on prototype's ajax class
//to be used with prototype.lite, moofx.mad4milk.net.

ajax = Class.create();
ajax.prototype = {
	initialize: function(url, options){
		this.transport = this.getTransport();
		this.postBody = options.postBody || '';
		this.method = options.method || 'post';
		this.onComplete = options.onComplete || null;
		this.update = $(options.update) || null;
		this.request(url);
	},

	request: function(url){
		this.transport.open(this.method, url, true);
		this.transport.onreadystatechange = this.onStateChange.bind(this);
		if (this.method == 'post') {
			this.transport.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			if (this.transport.overrideMimeType) this.transport.setRequestHeader('Connection', 'close');
		}
		this.transport.send(this.postBody);
	},

	onStateChange: function(){
		if (this.transport.readyState == 4 && this.transport.status == 200) {
			if (this.onComplete) 
				setTimeout(function(){this.onComplete(this.transport);}.bind(this), 10);
			if (this.update)
				setTimeout(function(){
				  var ndnm=this.update.nodeName.toLowerCase();
          if(ndnm == 'textarea' || ndnm == 'input' || ndnm == 'button')
            this.update.value = this.transport.responseText;
          else
            this.update.innerHTML = this.transport.responseText;
        }.bind(this), 10);
			this.transport.onreadystatechange = function(){};
		}
	},

	getTransport: function() {
		if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP');
		else if (window.XMLHttpRequest) return new XMLHttpRequest();
		else return false;
	}
};

//-----------------------------------------
var d=document;

var sounds=null;
var ss=null;

function playSound(sndid) {
  var soundobj=ss[sndid];
  //var thissound=d.getElementById(soundobj);
  if(typeof(soundobj) != 'object' && typeof(soundobj) != 'function') return;
  if (!document.getElementById && !document.all && !document.layers) return;

  try{soundobj.DoPlay();} catch (e) {try{soundobj.Play();} catch (e) {}}
}

//add sound effects to menuitems
function enable_snds(){
  sounds=d.getElementById('sounds');
  if(!sounds) return;
  for(var i=0; i<snd.length; i++) {
    sounds.innerHTML += '<embed class="no" src="'+snd[i]+'" autostart="false" type="audio/x-wav" width="1" height="1" id="s'+i+'" enablejavascript="true" />';
  }
  ss=sounds.getElementsByTagName('embed');
  
  var mi=d.getElementById('menu').getElementsByTagName('a');
  for(var i=0; i<mi.length; i++) {
    if(mi[i].className != 'snd') continue;
    mi[i].onmouseover=function(){if(playSound) playSound(0);};
    //mi[i].onclick=function(){playSound('s2');};
  }
}

//disable img right click
function disable_rc_imgs(){
  var imgs=d.getElementsByTagName('img');
  for(var i=0; i<imgs.length; i++) {
    if(document.layers){
      imgs[i].captureEvents(Event.MOUSEDOWN);
      imgs[i].onmousedown=function(){if(event.button==2) return false;};
    }
    else if(document.all&&!document.getElementById){
      imgs[i].onmousedown=function(){if(event.button==2) return false;};
    }
    imgs[i].oncontextmenu=function(){return false;};
  }
}

//dropdown menu
//// MENUitems class

var lvls=2;
var to=new Array(lvls);
var oo=new Array(lvls);
var oif=new Array(lvls);
var mi=new Array(lvls);

for(var i=0; i<lvls; i++){
  oif[i]=d.createElement('iframe');
  oif[i].className='back';
  oif[i].frameBorder=0;
  oif[i].src='javascript:;';
  oif[i].id='ifr'+i;
  oif[i].name='ifr'+i;
}
function menu(id){
  var mnu=$(id);
  var subs=mnu.getElementsByTagName('ul');
  var lsubs=subs.length;
  var psub=null;
  var lvl=null;
  var j=0;
  for(var i=0;i<lsubs;i++){
    psub=subs[i].parentNode;
    if(psub.nodeName.toLowerCase()=='li'){
      lvl=subs[i].className=='mitems'?0:1;
      eval('psub.onmouseover=function(){show(this,'+j+','+lvl+');};');
      eval('psub.onmouseout=function(){to['+lvl+']=setTimeout(\'hide('+lvl+')\',500);};');
      j++;
    }
  }
}

function show(obj, mit, lvl) {
  if(mit != mi[lvl] && oo[lvl] != null) hide(lvl);
  clearTimeout(to[lvl]);
  if(mit == mi[lvl]) return;
  mi[lvl]=mit;
  oo[lvl]=obj.getElementsByTagName('ul')[0];
  
  oo[lvl].parentNode.insertBefore(oif[lvl],oo[lvl]);
  oo[lvl].style.display='block';
  var tmp=oif[lvl].style;
  tmp.height=oo[lvl].offsetHeight+'px';
  tmp.width=oo[lvl].offsetWidth+'px';
  tmp.left=oo[lvl].offsetLeft+'px';
  tmp.top=oo[lvl].offsetTop+'px';
  tmp.display='block';
}

function hide(lvl) {
  oo[lvl].style.display='none';
  oif[lvl].style.display='none';
  oo[lvl]=null;
  mi[lvl]=-1;
}

//clear/populate input
function cp_in(obj,e){
  if(!obj.title) return;
  if(e=='f' && obj.value==obj.title) obj.value='';
  else if(e=='b' && obj.value=='') obj.value=obj.title;
}

function prnt(){
  if (window.print) window.print();
}

function pop(url){
  var win=window.open(url,'','width=680,height=350');
  win.focus();
  return win;
}
//progress bar for JSON operations
var pb=false;
function progressBar(show,step){
  if(!d.createElement) return;
  //pb=$('progb');
  var nBlks=10;
  if(!show && pb){//desctruct
    clearInterval(pb.tid);
    pb.parentNode.removeChild(pb);
    pb=false;
    return;
  }
  if(show && !pb){//construct
    step=0;
    pb=d.createElement('div');
    pb.id='progb';
    pb.tid=false;
    pb.style.cssText='position:absolute;z-index:5500;top:40%;left:35%;padding:10px;border:1px outset;background-color:#FF6600;';
    pb.style.top=(d.body.scrollTop+d.documentElement.scrollTop+400)+'px';
    d.getElementsByTagName('body')[0].appendChild(pb);
    var blk=d.createElement('div');
    blk.style.cssText='width: 20px; height: 30px; margin: 3px; float: left;';
    for(var i=0;i<nBlks;i++) pb.appendChild(blk.cloneNode(false));
  }
  if(show && step > -1){
    var blks=pb.getElementsByTagName('div');
    var diff=Math.round(255/nBlks);
    var blu='0';
    for(var i=0;i<nBlks;i++){
      blu=(step-i<0)?'0':diff*(step-i);
      blks[i].style.backgroundColor='rgb('+blu+','+blu+',255)';
      if(i>=step) break;
    }
    step=step>(nBlks*2)?0:step+1;
    pb.tid=setTimeout('progressBar(true,'+step+')',80);
  }
}

//populate select
function getIcaoList(table) {
  new ajax ('/actions/icao_list.json.php?tbl=cr_cat_'+table, {
	postBody: 'tbl=cr_cat_'+table, 
	onComplete: loadIcaoSelect
  }); 	//update: $('myelementid'), 
  //alert('invoked '+table);
  return true;
}
function loadIcaoSelect(request){
  var sel=$('icaosel'), txt=$('icaotxt');
  if(!sel || sel.nodeName.toLowerCase() != 'select') return false;
  //alert(request.responseText);
  try{eval('var opts='+request.responseText+';');}catch(e){alert('error in returned object');};
  
  txt.disabled=true;
  sel.disabled=false;

  sel.length=1;
  sel.options[0]=new Option('Select ICAO', 'XXXX');
  var issel=false;
  for(var i in opts) {
    issel=(selIcao==i)?true:false;
    sel.options[sel.length]=new Option(i+': '+(opts[i]==''?'...unknown':opts[i]), i, issel, issel);
  }
  txt.style.display='none';
  sel.style.display='inline';
}

//============================
function init() {
  //enable_snds();
  //disable_rc_imgs();
}

emptyfunc=function(){};
window.funcToRun=[emptyfunc];

window.addOnLoad=function(func){
  if(typeof func == 'function') this.funcToRun.push(func);
}
window.onload=function(){
  for(var i=0; i<this.funcToRun.length; i++) this.funcToRun[i]();
}
//window.addOnLoad(enable_snds);
window.addOnLoad(disable_rc_imgs);
