// JavaScript Document

function handleResponse(ret){
	//alert(unescape(ret));
	ret = unescape(ret);
	res = ret.split('||');
	var status = (res[0] == undefined ? null : res[0]);
	var param = (res[1] == undefined ? null : res[1]);
	var form = (res[2] == undefined ? null : res[2]);
	var msg = (res[3] == undefined ? null : res[3]);
	var extra = (res[4] == undefined ? null : res[4]);
	var msg_obj = $(form + '_msg');
	if (msg_obj){
		msg_obj.className = 'hidden';
		msg_obj.innerHTML = '';
	}
	if (status == '!error'){
		if (typeof(param) == 'string'){
			switch (param){
				case '!validation':
					if (msg != null){
						var errors = msg.split('|');
						errors.each(function(item){
							var error = item.split('?');
							if (error.length == 1){
								alert(item);
							} else{
								try {
									var field = $(form).getElementById(form + '_' + error[0]);
									if (field){
										field.getParent().getElements('div.error_desc').each(function(item,index){
											item.set('html', error[1]);
											item.setStyle('display','block');
										});
										field.getParent().addClass('error');
		
										// centrar o form verticalmente
										centerForm($(form));
									}
								} catch(e){
								}
							}
						});
					}
					break;
				
				case '!send':
				case '!token':
					if (msg != null){
						if (msg_obj){
							msg_obj.className = 'msgError';
							msg_obj.innerHTML = msg;
							var loc = window.location.href;
							window.location = loc.replace(/(#)+$/, '') + '#';
						} else{
							alert(msg);
						}
					}
					break;
				
				default:
			}
		}
	} else if (status == '!ok'){
		if (typeof(param) == 'string'){
			var param_array = param.split(',');
			for (var i=0; i<param_array.length; i++){
				switch (param_array[i]){
					case "!alert":
						if (msg != null){
							if (msg_obj){
								msg_obj.className = 'msgOK';
								msg_obj.innerHTML = msg;
								var loc = window.location.href;
								window.location = loc.replace(/(#)+$/, '') + '#';
							} else{
								alert(msg);
							}
						}
						break;
					
					case "!location":
						if (msg != null){
							window.location = msg;
						}
						break;
						
					case "!field":
						if (typeof(extra) == 'string'){
							var extra_array = extra.split('?');
							var extra_info_index = extra_array.indexOf(param_array[i]) + 1;
							var info = '';
							if (extra_info_index > 0){
								info = extra_array[extra_info_index];
							}
							var fields_array = info.split('&');
							for (var f=0; f<fields_array.length; f++){
								var field = fields_array[f].split('=');
								var id_obj = $(form + '_' + field[0]);
								if (id_obj){
									switch (id_obj.type){
										case 'select-one':
											if (typeof(res[5]) != 'undefined'){
												var info = res[5];
												info = info.split('%%sep1%%');
												var option_text = '(?)';
												var option_title = '(?)';
												for (var s=0; s<info.length; s++){
													var info_item = info[s];
													info_item = info_item.split('%%sep2%%');
													if (info_item[0] == field[1]){
														option_text = info_item[1];
														option_title = info_item[2];
														break;
													}
												}
												var new_option = new Option(option_text, field[1]);
												new_option.title = option_title;
												new_option.selected = true;
												id_obj.options[id_obj.length] = new_option;
												//id_obj.options[id_obj.length - 1].selected = true;
											} else{
												//id_obj.selectedIndex = field[1];
											}
											break;
											
										case 'hidden':
											id_obj.value = field[1];
											break;
									}
								}
							}
						}
						break;
					
					case "!function":
						try{
							var param = (res[5] == undefined ? null : res[5]);
							var theFunction = extra + '(';
							if (param != null && param != '') {
								var param_array = param.split(',');
								for(var i=0; i<param_array.length; i++) {
									theFunction += (i == 0 ? '' : ',') + "'" + param_array[i] + "'";
								}
							}
							theFunction += ')';
							eval(theFunction);
						}catch(e){
						}
						break;
						
					case "!handle":
						try{
							//alert('handle_' + form + 'Response');
							var handleFunction = eval('handle_' + form + 'Response');
							var param = '';
							switch (typeof(msg)){
								case 'undefined':
								default:
									break;
									
								case 'string':
									param = msg;
									break;
							}
							var info = null;
							switch (typeof(extra)){
								case 'undefined':
								default:
									break;
									
								case 'string':
									var extra_array = extra.split('?');
									var extra_info_index = extra_array.indexOf(param_array[i]) + 1;
									if (extra_info_index > 0){
										info = extra_array[extra_info_index];
									}
									break;
							}
							handleFunction(info, param);
						}catch(e){
						}
						break;
				}
			}
		}
	} else{
		//alert(unescape(ret));
	}
}

function clearError(obj, domain){
	try{
		if (domain == undefined || domain == 'field'){
			obj.getParent().removeClass('error');
			obj.getParent().getElements('div.error_desc').each(function(item,index){
				item.set('html', '');
				item.setStyle('display','none');
			});
		} else if (domain == 'all'){
			obj.getElements('div.error_desc').each(function(item,index){
				item.set('html', '');
				item.setStyle('display','none');
			});
			obj.getElements('div.field').each(function(item,index){
				item.removeClass('error');
			});
		}
		
		/*
		var msg_obj = $(obj.form.name + '_msg');
		if (msg_obj){
			msg_obj.className = 'hidden';
			msg_obj.innerHTML = '';
		}
		*/
	
		// centrar o form verticalmente
		centerForm(obj.form);
		initTextAreas();
	} catch(e){
	}
}

function centerForm(form){
	try{
		// centrar o form verticalmente
		if (form.hasClass('vcenter')){
			var form_height = form.getStyle('height').toInt();
			var form_wrapper_height = form.getParent().getStyle('height').toInt();
			var margin = form_wrapper_height - form_height - 4; //border = 2 + 2 = 4
			if (margin < 0){
				margin = 0;
			} else if (margin > 0){
				margin /= 2;
			}
			form.setStyles({'margin-top':margin, 'margin-bottom':margin});
		}
	} catch(e){
	}
}

function inputNumeric(event, type){
	// Set the optional parameter if needed
	if (type === undefined) {
		type = 1;
	}
	var charCode = 0;
	if (!event) var event = window.event;
	if (event.keyCode) charCode = event.keyCode;
	else if (event.which) charCode = event.which;
	//alert(type);
	if (charCode != 8 && (charCode < 48 || charCode > 57)){
		switch (type){
			case 1:
			default:
				return false;
				break;
			case 2:
				if (charCode != 44 && charCode != 46){	
					return false;
				}
				break;
			case 3:
				if (charCode != 42 && charCode != 63){	
					return false;
				}
				break;
			case 4:
				if (charCode != 45){	
					return false;
				}
				break;
		}
	}
		
	return true;
}

function initTextAreas() {
	try{
		$$('textarea').each(function(item){
			checkMaxLength(item);
		});
	} catch(e){
	}
}

function checkMaxLength(item) {
	try{
		var maxLength = parseInt(item.getAttribute('maxlength'));
		var currentLength = item.value.length;
		if ($(item.id + '_chars')){
			$(item.id + '_chars').innerHTML = (maxLength - currentLength);
		}
		if (currentLength > maxLength) {
			//alert('A breve descrição tem no máximo ' + maxLength + ' caracteres.');
			item.value = item.value.substr(0, maxLength);
		}
	} catch(e){
	}
}

function setState(item) {
	var field = item.getParent('div.field');
	if (item.value == 0){
		field.removeClass('active');
		field.addClass('inactive');
	} else{
		field.removeClass('inactive');
		field.addClass('active');
	}
}
