var Utils = {};
Utils.PeriodicalFunction = function(ainterval, afunction) {
	this.func = afunction;
	this.period = ainterval || 1000;
	this.run();
}
Utils.PeriodicalFunction.prototype.run = function() {
	this.func();
	var that = this;
	window.setTimeout(function() {that.run()}, this.period);
}
Utils.checkAll = function(aformname, aelname, acheck, ignore_disabled) {
	if (!ignore_disabled) ignore_disabled = false;
	var el = document.forms[aformname].elements[aelname];
	var arr = [];
	if (!el.length) {
		if (el.checked != acheck && !(ignore_disabled && el.disabled)) {
			arr.push(el);
			el.checked = acheck;
		}
	}
	else for(var i = 0; i < el.length; i++) {
		if (el[i].checked != acheck && !(ignore_disabled && el[i].disabled)) {
			arr.push(el[i]);
			el[i].checked = acheck;
		}
	}
	return arr;
}
Utils.collectProperty = function(arr, property) {
	var arr2 = [];
	for(var i = 0; i < arr.length; i++) {
		arr2.push(arr[i][property]);
	}
	return arr2;
}

if (window.GControl) {
Utils.GHtmlControl = Class.create();
Utils.GHtmlControl.prototype = Object.extend(new GControl(), {
	initialize: function(innerHTML, opt) {
		this.initialize = this.initialize_GMap;
		this.innerHTML = innerHTML;
	},
	initialize_GMap: function(map) {
		var container = document.createElement("div");
		container.innerHTML = this.innerHTML;
		map.getContainer().appendChild(container);
		return container;	
	}
});
}

Utils.GMapEventHandler = function(map, fn) {
	var that = this;
	var infoWindow = map.getInfoWindow();
	var events = [
		{event: 'closeclick', object: infoWindow},
		{event: 'maximizeclick', object: infoWindow},
		{event: 'maximizeend', object: infoWindow},
		{event: 'restoreclick', object: infoWindow},
		{event: 'restoreend', object: infoWindow},
		{event: 'infowindowopen', object: map},
		{event: 'infowindowbeforeclose', object: map},
		{event: 'infowindowclose', object: map}
	];
	
	events.each(function(a) {
		that[a.event] = (fn && fn[a.event]) ? fn[a.event] : function() {};
		GEvent.addListener(a.object, a.event,  function() {
			if (that[a.event]) that[a.event]();
		});
	});
}

