if(!Array.prototype.push) {
	Array.prototype.push = function() {
		var startLength = this.length;
		for (var i = 0; i < arguments.length; i++)
			this[startLength + i] = arguments[i];
		return this.length;
	}
}

if(!Array.prototype.remove) {
	Array.prototype.remove = function(pos) {
		if(isNaN(pos) || pos < 0 || pos >= this.length) return false;
		for(var i=0, n=0; i<this.length; i++)
			if(i!=pos) this[n++] = this[i];
		this.length -= 1;
   };
}

UA =  {
	
	indexOf: function(array, item) {
		for(var i=0, ln=array.length; i<ln; i++)
			if(array[i]==item)
				return i;
		return -1;
	},
	
	indexOfKey: function(array, keyName, item) {
		for(var i=0, ln=array.length; i<ln; i++)
			if(array[i][keyName]==item)
				return i;
		return -1;
	},
	
	removeItem: function(array, item) {
		for(var i=0, ln=array.length; i<ln; i++)
			if(array[i]==item) {
				array.remove(i);
				break;
			}
	}

};

function $(element) {
	if(typeof element == 'string')
		element = document.getElementById(element);
	return element && element.nodeType ? element : null;
}

function getStyle(element, cssProperty) {
	element = $(element);
	if(!element) return;
	if(element.currentStyle)
		return element.currentStyle[camelize(cssProperty)];
	else
		return document.defaultView.getComputedStyle(element, null).getPropertyValue(cssProperty);
}

function camelize(str) {
	if(!str) return;
	var splitted = str.split('-');
	var rslt = splitted[0];
	for(var i=1, ln=splitted.length; i<ln; i++) {
		var s = splitted[i];
		rslt += s.charAt(0).toUpperCase() + s.substring(1);
	}
	return rslt;
}

function setHeight() {
	var container = $('container');
	if(!container) return;
	container.style.height = '';
	var height = $('content').offsetHeight + 'px';
	container.style.height = height;
	var nav = $('nav');
	if(nav)	nav.style.height = height;
}

function setNoNavHeight() {
	var container = $('container');
	if(!container) return;
	container.style.height = '';
	var height = $('nonav_content').offsetHeight + 'px';
	container.style.height = height;
}

function setSHeight() {
	var container = $('container');
	if(!container) return;
	container.style.height = '';
	var height = $('s_center').offsetHeight + 'px';
	container.style.height = height;
}

function show0Select(select, element) {
	element = $(element);
	select = $(select);
	if(!(select && element)) return;
	element.style.display = select.value=='0' ? '' : 'none';
	setHeight();
}

function showOnCheck(checkbox, element) {
	checkbox = $(checkbox);
	element = $(element);
	if(!(checkbox && element)) return;
	element.style.display = checkbox.checked ? '' : 'none';
	setHeight();
}

function submitForm(action, curpage, doValidate, onSubmit) {
	var form = $('form');
	var cp = $('curpage');
	if(!(form && cp)) return;
	cp.value = curpage;
	if(doValidate) {
		var reqList = [];
		var error = validate(reqList);
		if(reqList.length != 0) {
			var msg = 'Please fill in the following required fields:\n\n';
			for(var i=0, ln=reqList.length; i<ln; i++)
				msg += '- ' + reqList[i] + '\n';
			alert(msg);
			return;
		}
		if(error) {
			alert(error);
			return;
		}
	}
	if(onSubmit) onSubmit();
	form.action = action;
	form.submit();
}

function trim(str) {
	return str.replace(/^\s+|\s+$/, '');
}

function validateText(input, fieldDesc, errList, div) {
	input = $(input);
	if(!input) return;
	if(!div) div = input.id + 'div';
	if(!input || getStyle(div, 'display') == 'none') return;
	input.value = trim(input.value);
	if(input.value != '') return;
	errList.push(fieldDesc);
}

function validateSelect(input, fieldDesc, errList, div) {
	input = $(input);
	if(!input) return;
	if(!div) div = input.id + 'div';
	if(!input || getStyle(div, 'display') == 'none') return;
	if(input.selectedIndex != 0) return;
	errList.push(fieldDesc);
}

function validateDate(input, fieldDesc, errList, div, noday) {
	var m = $(input + '_m');
	if(!noday) var d = $(input + '_d');
	var y = $(input + '_y');
	if(!(m && (noday || d) && y) || getStyle(div, 'display') == 'none') return;
	if(m.selectedIndex != 0 && (noday || d.selectedIndex != 0) && y.selectedIndex != 0) return;
	errList.push(fieldDesc);
}

function validateEMail(input, notrequired) {
	input = $(input);
	if(!input || getStyle(input, 'display') == 'none') return true;
	var value = input.value = trim(input.value);
	if(notrequired && value == '') return true;
	var re = /^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	if(!re.test(value)) {
		input.focus();
		input.select();
		return false;
	}
	return true;
}

function adjustSelect(select) {
	if(select.selectedIndex == 1) select.selectedIndex = 0;
}

function tryThese() {
	var result;
	for(var i=0; i<arguments.length; i++) {
		try {
			result = arguments[i]();
			break;
		} catch (e) {}
	}
	return result;
}

function detectAcrobatReader() {
	var isInstalled = false;
	var version = null;
	if (window.ActiveXObject) 
		return tryThese(
			function() {return new ActiveXObject('PDF.PdfCtrl')},
			function() {return new ActiveXObject('AcroPDF.PDF')}
		) || false;
	return navigator.plugins && (
		navigator.plugins["Adobe Acrobat"] || navigator.plugins["Adobe PDF Plug-in"]);
}

