function slice_args(args, count){
	return Array.prototype.slice.apply(args, [count]);
}

function alert_all(params,sep){
	var f_log = alert;
	if (sep == null) sep = "";
	f_log(params.join(sep));
}

function ws_to_html(s){
	return s
		.replace(new RegExp("\n","g"), "<br />")
		.replace(new RegExp("\t","g"), "&nbsp;&nbsp;");
}

function link_to_html(s){
	var re = /(http:\/\/[\S]*)/g;
	return s
		.replace(re, "<a href='$1' target='_blank'>$1</a>");
}

String.prototype.trim = function() {
	return this.replace(/^\s*(.*)/, "$1").replace(/(.*)\s*$/, "$1");
}

String.prototype.template = function(vars){
	var _string = this;
	foreach_dict(vars, function(name,value){
		_string = _string.replace( new RegExp("\{(" + name + ")\}","g"), value);
	});
	return _string;
}

function foreach(list, f_each){
	if (list == null) return;
	
	if ((list.length == null) || (typeof list == "string")){
		f_each(list);
		return;
	}

	for(var i=0; i < list.length; i++) 
		// If f_each returns true, stop iterating
		if ( f_each(list[i]) ) return;
}

function foreach_dict(object, f_each){
	for(property in object)
		// If f_each returns true, stop iterating
		if ( f_each(property,object[property]) ) return;
}

// Create a new array, calling f_each for each element of stuff	
function collect(stuff, f_each){
	var values = new Array();
	foreach(stuff, function(item){
		values.push(f_each(item));
	});
	return values;
}
	
// Create a new array of elements from stuff for which pred returns true
function filter(stuff, pred){
	var values = new Array();
	foreach(stuff, function(thing){
		if (pred(thing)) values.push(thing);
	});
	return values;
}

var List = {
	extend: function(list /*, arguments... */){
		foreach(arguments, function(anArray){
			foreach(anArray, grab);
		});
	}
};

Array.prototype.add = function() {
	var theArray = this;

	foreach(arguments, function(anArray){
		foreach(anArray, function(item){
			theArray.push(item)
		})
	})
}

Array.Create = function() {
	var newArray = new Array();
	newArray.add.apply(newArray, arguments);
	return newArray;
}

Array.prototype.remove = function(item){
	for(var i=0; i < this.length; i++){
		if (this[i] == item){
			this.splice(i,1);
			return;
		}
	}
}

Function.prototype.partial = function(/* args */) {
	var method = this;
	var args = arguments;
	return function(){return method.apply(null,  Array.Create(args, arguments));}
}

// Could be called "bind_partial"
Function.prototype.bind = function(obj /* , args */) {
	var method = this;
	var args = slice_args(arguments,1);
	return function(){
		return method.apply(obj, Array.Create(args, arguments));
	}
}


/*
	Return elements in the current document with the given className.
	If tagName is given, the selection is limited to those tags.
*/
function getElementsByClass(className, tagName){
	tagName = tagName || "*";
	
	return filter(document.getElementsByTagName(tagName),
		function(elem){
			return elem.className == className;
		}
	);
}

function setStatus(text){window.status=text;return true;}

function register_external_links(){
	foreach(getElementsByClass("out","a"),  function(link){
		link['onmouseover'] = setStatus.partial("An external link to: "+ link.href);
		link['onmouseout'] = setStatus.partial("");
	});
}

var Browser = {
	setStatus: function(text){
			return function(){
				window.status=text;
				return true;
			}
	},
	
	clearStatus: function(){ return Browser.setStatus("");},

	register_external_links: function(){
		foreach(getElementsByClass("out","a"), function(link){
			link['onmouseover'] = Browser.setStatus.partial("An external link to: "+ link.href);
			link['onmouseout'] = Browser.clearStatus;
		});
	}	
};

function register_onload(){
	function run(f){return f();}
	var args = arguments;	

	if (!window.onload) {
		window.onload = function(){foreach(args, run);}
	}
	else {
		var old_onload = window.onload;
		window.onload = function(){
			old_onload();
			foreach(args, run);
		};
	}
}

function using(namespaces, new_scope){
	new_scope = new_scope || window;

	var property;
	foreach(namespaces, function(namespace_){
		for(name in namespace_){
			property = namespace_[name];
			if (typeof property == "function")
				new_scope[name]=property;
		}
	})
}

var Hash = {
	dump:function(o, sep){
		sep = sep || "\n";
		var props = new Array();
		for(var key in o){
			props.push(key + ': "' + o[key]);
		}
		return props.join(sep);
	},
	
	keyName: function(obj, value){
		for(prop in obj){
			if (obj[prop]==value) return prop.toString();
		}
		
		return "";
	}
};


function array_items(o){
	var items = new Array();
	if (o.length == null)
		items.push(o.toString());
	else
		for(var i=0; i < o.length; i++){
			items.push('"'+o[i].toString()+'"');
		}
	return "[" + items.join(", ") + "]";
}

// HTML replace
function replaceHTML(idName, content)
{
    var target = document.getElementById(idName);    
    target.innerHTML = content; 
}

// REPLACE DAS IMAGENS
function getImageFromXml( obj ) {
	var t = new Image(); t.src = "/images/img_peq.gif";
	obj.src = t.src;
	
	alert( obj );
}

// Pesquisa Orientada - preencher o campo com o valor da sugestão.
function ActualizaCampo( campo, valor ) {
	var obj = $(campo);
	
	obj.value = valor;
}

// --------------------------------------------------------------------------------------------------------
// Rotinas associadas ao zoom das imagens!

// Variaveis associadas ao sistema de zoom
var zoom_total = 0;
var zoom_index = 0;
var zoom_lista = new Array();
var zoom_xml   = "";			// Db xml a usar.
var zoom_id	   = 0;				// Id do objecto
	
// Possíveis estados das imagens. (ON/OFF/DISABLED)
var pre_off = "_of.gif";
var pre_on  = "_on.gif";
var pre_dis = "_dis.gif";

function zoomImagens(id, xmlSource) 
{
	zoom_id		= id;
	zoom_xml	= xmlSource;

	var img = $("zoom_img");
	if ( img.src == "images/ima_indisponivel1.gif" ) {
		zoom_total = 0;
		zoom_index = 0;
		return;
	}	
	var myConn = new XHConn();
	if (!myConn) return
	var fnWhenDone = 
		function (oXML) {
			processaImagemsZoom(oXML.responseText);  
		};
	myConn.connect("ajax/sugere.aspx", "GET", "tipo=zoom&xml="+xmlSource+"&id="+id, fnWhenDone);
}

function processaImagemsZoom( res ) {
    resultArray = new Array();
    if (res.length > 0) {
		resultArray = res.split('\n');
		zoom_total  = 0;
		for (var i = 0; i < resultArray.length; i++) {
			var v = resultArray[i];
			v = v.replace(/^\s*(.*)/, "$1").replace(/(.*)\s*$/, "$1")	
			if ( v == "" ) 
				continue;
			zoom_total++;
			zoom_lista[i] = v;
		}
    } else {
    	zoom_total = 0;
    } 
}

function zoomSaltaImagem( step ) {
	var pre_img = new Image();
	var img = $("zoom_img");	
	if ( step == -1 && zoom_index == 0) return;
	if ( step == 1 && zoom_index >= (zoom_total - 1) ) return;	
	
	zoom_index+= step;
	pre_img.src = "multimedia/" + zoom_xml + "/" + zoom_lista[ zoom_index ] + ".jpg"
	img.src = pre_img.src;
}

// ------------------ Pesquisa especifica  - validacao
function verifica_pesquisa_especifica() {
	var hv = $("pargs");
	var t1 = $("cond1_texto");
	var t2 = $("cond2_texto");
	var t3 = $("cond3_texto");
	var t4 = $("cond4_texto");

	var c1 = $("cond1_tipo");
	var c2 = $("cond2_tipo");
	var c3 = $("cond3_tipo");
	var c4 = $("cond4_tipo");
		
	var b2 = $("cond2_bool");
	var b3 = $("cond3_bool");
	var b4 = $("cond4_bool");
	
	var temp = "";
	
	if ( t1.value == ""  ) {
		alert("Condicao 1 : Campo de preenchumento obrigatorio.");
		t1.focus();
		return false;
	}
	
	if ( c1.value == "" && c2.value == "" && c3.value == "" && c4.value == "" ) {
		alert("Preencha pelo menos um campo de texto.");
		return false;
	}	
	
	temp = "#-|" + c1.options[c1.selectedIndex].value + "|" + t1.value;
	
	var vt, vc, vb;
	for ( i = 2; i<=4; i++ ) {
		vt = eval("t"+i+"").value;
		vc = eval("c"+i+".options[c"+ i + ".selectedIndex]").value;
		vb = eval("b"+i+".options[b"+ i + ".selectedIndex]").value;
		
		if ( vb == "-" && vc != "-" ) {
			alert("Condicao " + i + " : O campo a pesquisar deve ser definido." );
			hv.value = "";
			return false;
		}
		
		if ( vb != "-" && vc == "-" ) {
			alert("Condicao " + i + " : Deve ser escolhida uma das opcoes E/OU" );
			hv.value = "";
			return false;
		}
		
		if ( ( vb != "-" || vc != "-" ) && vt == "" )
		{
			alert("Condicao " + i + " : O campo de texto deve ser preenchido." );
			hv.value = "";
			return false;
		}
		
		temp += "#" + vb + "|" + vc + "|" + vt;
	}
	
	hv.value = temp;
		
	return true;
}

// -------------------------------- IMPRIMIR e ENVIAR IMAGEM (ZOOM)
function imprimeZoom() {

}

function envia_zoom() {
}

var imgActual = (Math.round((Math.random()*9)+1))
function mudaImagem() {
	var tmpImage = new Image();
	tmpImage.src = "images/entrada/img_" + imgActual + ".jpg";
	$("ambiente").src =  tmpImage.src;
	setTimeout("mudaImagem()", 4000);
	imgActual = imgActual + 1;
	if ( imgActual < 0 || imgActual > 2)
	{
		imgActual = 1;

	}
}