// vDate
// USO: vDate(ano, mes, dia)
function vDate(y, m, d) {
    with (D = new Date(y, --m, d)) {
        return (getMonth() == m && getDate() == d) ? true : false;
    }
}

// replace
// USO: replace(src, srt1, str2)
function replace(pSource, pOut, pIn) {
	while(pSource.indexOf(pOut) > -1) {
		var pos = pSource.indexOf(pOut);
		pSource = (pSource.substring(0, pos) + pIn + pSource.substring((pos + out.length), pSource.length));
	}
	return pSource;
}

// delCookie
// USO: delCookie(name)
function delCookie(name) {
	if(getCookie(name)) {
		document.cookie = name + "=" +
		";expires=Fri, 03-Jul-81 02:20:02 GMT+3";
	}
}

// setCookie
// USO: setCookie(name, value)
function setCookie(name, value){
	document.cookie = name + "=" + escape (value);
}

// getCookie
// USO: getCookie('nome')
function getCookie(name){
	var dcookie = document.cookie;
	var cname = name + "=";
	var clen = dcookie.length;
	var cbegin = 0;
	while (cbegin < clen){
		var vbegin = cbegin + cname.length;
		if (dcookie.substring(cbegin, vbegin) == cname){
			var vend = dcookie.indexOf (";", vbegin);
			if (vend == -1) vend = clen;
			return unescape(dcookie.substring(vbegin, vend));
		}
		cbegin = dcookie.indexOf(" ", cbegin) + 1;
		if (cbegin == 0) break;
	}
	return false;
}

// scriptLoader
// USO: scriptLoader(jsPath)
function scriptLoader(url) {
	try {
		var objScript = document.createElement("script");
		objScript.type = "text/javascript";
		objScript.src = url;
		var objHead = document.getElementsByTagName("head");
		objHead[0].appendChild(objScript);
	}
	catch(e) {
		document.write("<script type=\"text\/javascript\" src=\"" + url + "\"><\/script>");	
	}
}

// trim
// USO: trim(obj.value)
function trim(str){
	return str.replace(/^\s*(\w+)*\s*$/,"$1");
}

// email
// USO: campo.value.isEmail
String.prototype.isEmail = function(){
	var er = /^[a-z0-9._-]+@([a-z0-9]+[a-z0-9_-]*)+(\.[a-z0-9]+)+$/;
	return er.test(this);
}

// CNPJ
// USO: campo.value.isCNPJ
String.prototype.isCNPJ = function(){
	var d = this.split("");
	var m1 = [d[0]*5,d[1]*4,d[2]*3,d[3]*2,d[4]*9,d[5]*8,d[6]*7,d[7]*6,d[8]*5,d[9]*4,d[10]*3,d[11]*2];
	var s1 = 0;
	for(i in m1){ s1 += m1[i]; }
	var d1 = (s1%11<2)?0:11-(s1%11);
	var m2 = [d[0]*6,d[1]*5,d[2]*4,d[3]*3,d[4]*2,d[5]*9,d[6]*8,d[7]*7,d[8]*6,d[9]*5,d[10]*4,d[11]*3,d1*2];
	var s2 = 0;
	for(i in m2){ s2 += m2[i]; }
	var d2 = (s2%11<2)?0:11-(s2%11);
	return (d1 == d[12] && d2 == d[13])?true:false;
} 

// CPF 
// USO: campo.value.isCPF
String.prototype.isCPF = function(){
	if(this.split(this.charAt(0)).join("")=="") return false;
	var d = this.split("");
	var m1 = [d[0]*10,d[1]*9,d[2]*8,d[3]*7,d[4]*6,d[5]*5,d[6]*4,d[7]*3,d[8]*2];
	var s1 = 0;
	for(i in m1){ s1 += m1[i]; }
	var d1 = (s1%11<2)?0:11-(s1%11);
	var m2 = [d[0]*11,d[1]*10,d[2]*9,d[3]*8,d[4]*7,d[5]*6,d[6]*5,d[7]*4,d[8]*3,d1*2];
	var s2 = 0;
	for(i in m2){ s2 += m2[i]; }
	var d2 = (s2%11<2)?0:11-(s2%11);
	return (d1 == d[9] && d2 == d[10])?true:false;
}

// numeros e barra
// USO: onkeypress="return setDate(event)"
function setdate(e) {
	var w3DOM = window.addEventListener;
	var key = '';
	var strCheck = "0123456789/";
	var whichCode = (window.Event) ? e.which : e.keyCode;
	if (whichCode == "\t" || whichCode == "\n" || whichCode == "\b" || whichCode == 8) return true; // Tab, Enter e backspace
	if(e['ctrlKey']) return true;
	key = String.fromCharCode(whichCode);  // Pega o codigo da tecla precionada
	if (strCheck.indexOf(key) == -1){ // tecla não valida
		if(w3DOM){
			e.preventDefault();
		}
		else{
			return false;
		}
	}
}

// numeros
// USO: onkeypress="return setNumeric(event)"
function setNumeric(e) {
	var w3DOM = window.addEventListener;
	var key = '';
	var strCheck = "0123456789";
	var whichCode = (window.Event) ? e.which : e.keyCode;
	if (whichCode == "\t" || whichCode == "\n" || whichCode == "\b" || whichCode == 8) return true; // Tab, Enter e backspace
	if(e['ctrlKey']) return true;
	key = String.fromCharCode(whichCode);  // Pega o codigo da tecla precionada
	if (strCheck.indexOf(key) == -1){ // tecla não valida
		if(w3DOM){
			e.preventDefault();
		}
		else{
			return false;
		}
	}
}

function getTarget(e) {
	var obj = e;
	var w3DOM = window.addEventListener;
	if(w3DOM){
		if(e.currentTarget) {
			obj = e.currentTarget;
		}
	}
	else {
		if(e.srcElement) {
			obj = e.srcElement;
		}
	}
	return obj;
}

// addEvent
// USO: addEvent(objeto, tpEvento, funcao)
function addEvent(obj, evType, fn){
	var w3DOM = obj.addEventListener;
	var ieDOM = obj.attachEvent;
	if (w3DOM)  obj.addEventListener(evType, fn, true)
	if (ieDOM)  obj.attachEvent("on"+evType, fn)
}

// removeEvent
// USO: removeEvent(objeto, tpEvento, funcao)
function removeEvent(obj, type, fn) {
	if(obj.detachEvent) {
		obj.detachEvent( 'on'+type, obj[type+fn]);
		obj[type+fn] = null;
	}
	else {
		obj.removeEventListener( type, fn, false);
	}
}

// getParent
// USO: getParent(el, pTagName)
function getParent(el, pTagName) {
	if (el == null) {
		return null;
	}
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
		return el;
	}
	else {
		return getParent(el.parentNode, pTagName);
	}
}

function getElementsByClass(searchClass, node, tag) {
	var classElements = new Array();
	if(node == null) {
		node = document;
	}
	else if(typeof(node) == "string") {
		node = document.getElementById(node);
	}
	if(tag == null) {
		tag = '*';
	}
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for(i = 0; i < elsLen; i++) {
		if(pattern.test(els[i].className)) {
			classElements.push(els[i]);
		}
	}
	return classElements;
}

scriptLoader("_javascript/xmlHttpRequest.js");
//scriptLoader("_javascript/dom-drag.js");
