/*
 * @version$
 * @author: Otávio Scherer Garcia
 * $Header: \CVS_JAVA/esales-portal/web/library/framework.js,v 1.3 2008/01/18 20:40:21 otavio Exp $
 */

/**
 * Atributo para armazenar um pool de mensagens que serão exibidas na popup personalizada.
 */
var messages = [];

/**
 * Adiciona uma mensagem no pool de mensagens, 
 * para que sejam exibidas no onload da janela.
 */
function addMessage(message) {
    if (messages == null) {
        messages = [];
    }
    messages.push(message);
}

/**
 * Apaga todas as mensagens do pool de mensagens.
 */
function clearMessages() {
	messages = [];
}

/**
 * Exibe as mensagens armazenadas no pool de mensagens.
 * Método chamado via onload da janela.
 */
function showMessages() {
    if (messages == null || messages.length == 0) {
        return;
    }
    
    var text = '';
    messages.each(
    	function(message) {
	    	text += message + '\n';
    	}
    );
    text += '';
    
    alert(text);
    
    messages = [];
}

/**
 * Adiciona um observer ao evento load para chamada de showMessages.
 */
Event.observe(window, 'load', showMessages, false);


/**
 * Adiciona o método trim para objetos do tipo String.
 * Chama-se via String.trim()
 */
String.prototype.trim = function trim() {
    return this.replace(/^\s+/,'').replace(/\s+$/,'');
}

//@ http://jsfromhell.com/geral/cookie [v1.0]
Cookie = {
    isSupported: function(){
        var s = "{3F2504E0-4F89-11D3-9A0C-0305E82C3301}";
        return "cookie" in document && this.write(s, "OK") && this.read(s) == "OK" && this.remove(s);
    },
    exists: function(name){
        return document.cookie.indexOf(name + "=") + 1;
    },
    write: function(name, value, expires, path, domain, secure) {
        expires instanceof Date ? expires = expires.toGMTString()
        : typeof(expires) == 'number' && (expires = (new Date(+(new Date) + expires * 1e3)).toGMTString());
        var r = [name + "=" + escape(value)], s, i;
        for(i in s = {expires: expires, path: path, domain: domain})
            s[i] && r.push(i + "=" + s[i]);
        return secure && r.push("secure"), document.cookie = r.join(";"), true;
    },
    read: function(name){
        var c = document.cookie, s = this.exists(name), e;
        return s ? unescape(c.substring(s += name.length, (c.indexOf(";", s) + 1 || c.length + 1) - 1)) : "";
    },
    remove: function(name, path, domain){
        return this.exists(name) && this.write(name, "", new Date(0), path, domain);
    }
};

/*
**************************************
* Event Listener Function v1.4       *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
addEvent = function(o, e, f, s){
    var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
    r[r.length] = [f, s || o], o[e] = function(e){
        try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
            e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
            e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
        return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
    for(var i = (e = o["_on" + e] || []).length; i;)
        if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
            return delete e[i];
    return false;
};

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/forms/masked-input [v1.0]

//========================================================
// REQUIRES http://www.jsfromhell.com/geral/event-listener
//========================================================

MaskInput = function(f, m){
    function mask(e){
        var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && patterns[i].test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
        addEvent(f, i, mask);
};


window.onerror = function tellerror(msg, url, lno) {
	var m  = 'Ocorreu um erro:\n';
	    m += 'msg:  ' + msg + '\n';
	    m += 'url:  ' + url + '\n';
	    m += 'line: ' + lno + '\n';
	alert(m);
};

window.alert = function(message) {
	try {
		var newMessage = '';
		var messageSplited = message.toString().split('\n');
		messageSplited.each(
			function(msgElement) {
				newMessage += msgElement + '<br/>';
			}
		);
		
		Modalbox.show(newMessage, {
			title: 'Alerta do sistema'
		});
		
	} catch(e) {
		//pensar em algo pra fazer aqui
		confirm(e);
	}
};

function showObject(element, flag) {
	if (flag) {
		Element.show(element);
	} else {
		Element.hide(element);
	}
}

//prototype
Element.addMethods({
  // $('elementID').append('<div>...</div>');
  // $('elementID').append(document.createElement('div'));
  append: function(element, child) {
    element = $(element);
    if (typeof child == 'string') {
      new Insertion.Bottom(element, child);
      return Element.extend(element.lastChild);
    } else
      return Element.extend(element.appendChild(child));
  },

  // $('elementID').prepend('<div>...</div>');
  // $('elementID').prepend(document.createElement('div'));
  prepend: function(element, child) {
    element = $(element);
    if (typeof child == 'string') {
      new Insertion.Top(element, child);
      return Element.extend(element.firstChild);
    } else {
      if (element.firstChild)
        return Element.extend(element.insertBefore(child, element.firstChild));
      else
        return Element.extend(element.appendchild(child));
    }
  },

  // $('elementID').after('<div>...</div>');
  // $('elementID').after(document.createElement('div'));
  after: function(element, child) {
    element = $(element);
    if (typeof child == 'string') {
      new Insertion.After(element, child);
      return Element.extend(element.next());
    } else {
      return Element.extend(element.parentNode.insertBefore(child, element.next()));
    }
  },

  // $('elementID').before('<div>...</div>');
  // $('elementID').before(document.createElement('div'));
  before: function(element, child) {
    element = $(element);
    if (typeof child == 'string') {
      new Insertion.Before(element, child);
      return Element.extend(element.previous());
    } else {
      return Element.extend(element.parentNode.insertBefore(child, element));
    }
  }
});

var $X = function(element, nodeName) {
    element = $(element);
    return element.getElementsByTagName(nodeName).item(0).firstChild.data;
}


Form.reset = function(form) {
	form = $(form);
	$A(form.getElementsByTagName('input')).each(function(el) {
		if (el.type == 'text') {
			el.value = '';
		}
	});
	$A(form.getElementsByTagName('select')).each(function(el) {
		el.selectedIndex = 0;
	});
	return form;
};

