var nm = {
	
	clearFormAfterPost : true,
	
	activatePlaceholders : function() {
	if (!nm.firstActivationWasDone) {
		nm.hideResult();
	}
	nm.firstActivationWasDone = true;
		
	var detect = navigator.userAgent.toLowerCase();
	if (detect.indexOf('safari') > 0) return false;
	var inputs = document.getElementsByTagName('input');
	for (var i=0;i<inputs.length;i++) {
		if (inputs[i].getAttribute('placeIsDone') == 'Y') continue;
		inputs[i].setAttribute('placeIsDone', 'Y');
	
	   if (inputs[i].getAttribute('type') == 'text') {
	   if (inputs[i].getAttribute('placeholder') && inputs[i].getAttribute('placeholder').length > 0) {
	   	inputs[i].setAttribute('ini_color', inputs[i].style.color)
	   	if (inputs[i].value == '' || inputs[i].value == inputs[i].getAttribute('placeholder')) {
		    inputs[i].value = inputs[i].getAttribute('placeholder');
		    inputs[i].style.color = '#bbb'
	   	}

	    inputs[i].onfocus = function() {
	     if (this.value == this.getAttribute('placeholder')) {
	      this.value = '';
	      this.style.color = this.getAttribute('ini_color');
	      this.style.borderColor = '';
	     }

	     return true;
	    }
	    // inputs[i].onkeyup = new Function ("nm.checkKeyUp(this)")
	     
	     nm.addListener(inputs[i], 'keyup', new Function("nm.checkKeyUp('"+inputs[i].id+"')"))
	     
	     inputs[i].onkeydown = function () {
	     	this.style.color = this.getAttribute('ini_color')
	     }	    
	    inputs[i].onblur = function() {
	     if (this.value.length < 1) {
	      this.value = this.getAttribute('placeholder');
	      this.style.color = '#bbb'
	      
	     }
	    }
	   }
	  }
	}
	var inputs = document.getElementsByTagName('textarea');
	for (var i=0;i<inputs.length;i++) {
		if (inputs[i].getAttribute('placeIsDone') == 'Y') continue;
		inputs[i].setAttribute('placeIsDone', 'Y');	
	   if (inputs[i].getAttribute('placeholder') && inputs[i].getAttribute('placeholder').length > 0) {
	   	inputs[i].setAttribute('ini_color', inputs[i].style.color)
	   	if (inputs[i].value == '' || inputs[i].value == inputs[i].getAttribute('placeholder')) {
		    inputs[i].value = inputs[i].getAttribute('placeholder');
		    inputs[i].style.color = '#bbb'
	   	}
	   
	    inputs[i].onfocus = function() {
	     if (this.value == this.getAttribute('placeholder')) {
	      this.value = '';
	      this.style.color = this.getAttribute('ini_color')
	      this.style.borderColor = '';
	     }
	     return true;
	    }
	     inputs[i].onkeydown = function () {
	     	this.style.color = this.getAttribute('ini_color')
	     }	    
	    inputs[i].onblur = function() {
	     if (this.value.length < 1) {
	      this.value = this.getAttribute('placeholder');
	      this.style.color = '#bbb'
	     }
	    }
	   }
	   
	  
	}
	
	var mass = document.getElementsByTagName('select');
	for (var x = 0; x < mass.length; x++) {
		var el = mass[x];
		if (el.value == '') {
			el.style.color = '#bbb'
		}
		nm.addListener(el, 'change', new Function("nm.checkPlaceHolderSelect('"+el.id+"')"))
		
	}
	
	
	
	},
	
	checkKeyUp : function (inItem) {
		if (typeof(inItem) == 'string') inItem = document.getElementById(inItem)

		if (inItem.getAttribute('nm_type') == 'int') {
			if (inItem.value.indexOf(' ') >= 0) {
				inItem.value = inItem.value.replace(/ /g, '');
			}
			if (!Number(inItem.value) && inItem.value != '0') {
				inItem.value = '';
			}
		}
		
	},
	
	checkPlaceHolderSelect : function (id) {
		var inItem = document.getElementById(id);
		if (inItem.value != '' && inItem.value != 0) {
			inItem.style.color = ''
		} else {
			inItem.style.color = '#bbb'
		}
		inItem.style.borderColor = '';
	},
	
	
	addListener : function (element, type, expression, bubbling) {
		bubbling = bubbling || false;
		if(window.addEventListener) { // Standard
			element.addEventListener(type, expression, bubbling);
			return true;
		} else if(window.attachEvent) { // IE
			element.attachEvent('on' + type, expression);
		return true;
		} else return false;
	}
	,
	doPost : function (inURL,inArr,inBack) {
	if(window.XMLHttpRequest){
	var http = new XMLHttpRequest( );
	} else if (window.ActiveXObject){
	var http=new ActiveXObject("Msxml2.XMLHTTP");
	if (! http){
	var http=new ActiveXObject("Microsoft.XMLHTTP");
	}
	}	
	var url = inURL;
	var params = '';
	for (var x in inArr) {
		params +=x+'='+encodeURIComponent(inArr[x])+'&';
	} 
	params = params.replace(/%20/g, "+")
	http.open("POST", url, true);
	http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http.onreadystatechange = function() {
		if(http.readyState == 4 && http.status == 200) {
			inBack(http.responseText);
		}
	}
	http.send(params);
}
	
	,
	
	clearForm : function (inArr) {
		
		if (!inArr) {
			inArr = nm.a_posted;
		}
	
		for (var x in inArr) {
			if (nm.clearFormAfterPost) {
				inArr[x].value = '';
				inArr[x].checked = false;
			}
			
			inArr[x].style.border = '';
		}
				
		nm.activatePlaceholders();
	},
	
	areItemsEmpty : function (inArr) {
		if (typeof(inArr) == 'string') {
			inArr = nm.getItemsArray(inArr);
		}
		
		for (var x in inArr) {
			if (inArr[x].value == '' || inArr[x].value == inArr[x].getAttribute('placeholder')) {
				continue;
			}
			return false;
		}
		
		return true;
		
	},
	
	doPostComments : function (inURL, inArr, funAfter, addArr) {
		if (nm.busy) return;
		if (!inArr) {
			var a_items = nm.getItemsArray();
			if (!nm.checkItemsBeforePost(a_items)) {
				return;
			}
		} else {
			if (typeof(inArr) == 'string') {
				inArr = nm.getItemsArray(inArr);
			}
		
			var a_items = inArr;
		}
		var a_res = {};
		for (var x in a_items) {
			var id = x;
			if (!id) id = a_items[x].name;
			if (!id) continue;
			a_res[id] = a_items[x].value;
			if (a_res[id] == a_items[x].getAttribute('placeholder')) a_res[id] = '';
			if (a_items[x].checked) {
				a_res[id] = 'on';
			}
		}
		nm.hideResult();
		nm.a_posted = a_items;
		nm.busy = true;
		nm._customAfterpostFun = funAfter;
		
		if (addArr) {
			for (var x in addArr) {
				a_res[x] = addArr[x];
			}
		}
		
		nm.doPost(inURL, a_res, nm.doAfterPost);

	},
	
	checkMail : function (str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false
		 }

 		 return true					
	},
	
	stripTags : function (oldString) {
	  return oldString.replace(/<&#91;^>&#93;*>/g, "");
	},		
	
	doAfterPost : function (inStr) {
		nm.busy = false;
		try {
			var arr = eval('('+ inStr + ')');	
		} catch(e) {
			var url = String(document.location);
			if (url.indexOf('&debug2') > 0) {
				alert (inStr);
			} else {
				document.location = document.location;
			}
			return;
		}
		if (arr['STATUS'] != 'ERR') {
			nm.clearForm();
		}
		if (nm._customAfterpostFun) {
			if (nm._customAfterpostFun(arr)) {
				nm.showResult(arr['DES'], arr['STATUS']);
			}
		} else {
			nm.showResult(arr['DES'], arr['STATUS']);
		}
	},
	
	checkItemsBeforePost : function (inArr, doNotShowRes) {
		nm.hideResult();
		var str = '';
		var res = true;
		if (typeof(inArr) == 'string') {
			inArr = nm.getItemsArray(inArr);
		}
		for (var x in inArr) {
			var el = inArr[x];	
			if ((el.getAttribute('placeholder') || el.getAttribute('req') == 'Y') && el.getAttribute('req') != 'N') {
				if (el.value == '' || el.value == el.getAttribute('placeholder')) {
					el.style.borderColor = 'red';
					str += '<b>' + el.name + '</b>, ';
					res = false;
				} else {
					el.style.borderColor = '';
				}
			}
			if (str != '') {
				var innerHTML = "You did not filled all required field(s) (" + str.substr(0, str.length - 2) + '). Please fill them and try again.';
			}			
				
		}
		
		if (res) {
			// --- check specific types like email
			for (var x in inArr) {
				var el = inArr[x];	
				if (el.name.toLowerCase().indexOf('email') >= 0) {
					if (!nm.checkMail(el.value)) {
						el.style.borderColor = 'red';
						str += '<b>' + el.name + '</b>, ';
						res = false;
					}
				}
			}
			if (str != '') {
				var innerHTML = "You entered incorrect values into following field(s): " + str.substr(0, str.length - 2) + '. Please correct values and try again.';
			}	
		}
		
		if (res) {
			// --- check specific types like email
			for (var x in inArr) {
				var el = inArr[x];	
				if (el.name.toLowerCase().indexOf('email') >= 0) {
					if (!nm.checkMail(el.value)) {
						el.style.borderColor = 'red';
						str += '<b>' + el.name + '</b>, ';
						res = false;
					}
				}
			}
			if (str != '') {
				var innerHTML = "You entered incorrect values into following field(s): " + str.substr(0, str.length - 2) + '. Please correct values and try again.';
			}	
		}		
		
		
		if (res) {
			// -- CHECH RETYPES -------------------------------
			for (var x in inArr) {
				var el = inArr[x];	
				if (el.id.indexOf('#') >= 0 && inArr[el.id.replace('#', '')]) {
					var el2 = inArr[el.id.replace('#', '')];	
				
					if (el.value != el2.value) {
						el.style.borderColor  = 'red';
						el2.style.borderColor = 'red';
						
						str += '<b>' + el2.name + ' ('+ el.name + ')</b>, ';
						res = false; 
					}
				}
			}
			if (str != '') {
				var innerHTML = "You entered incorrect values into following field(s): " + str.substr(0, str.length - 2) + '. Please correct values and try again.';
			}
			
		}
		
		if (!res && !doNotShowRes) {
			setTimeout('nm.showResult("' + innerHTML + '", "ERR")', 500);
		}
		
		
		return res;
		
	},
	
	showResult : function (html, inType) {
		if (html == '') return;
		var el = document.getElementById('nm:result');
		
			el.style.padding = '5px'
			el.style.paddingLeft = '20px';	
			el.style.backgroundColor = '#DCEF99';
			el.style.border = '1px solid #00A651';				
		
		if (inType == 'ERR') {
			el.style.backgroundColor = '#FC957C';
			el.style.border = '1px solid red';
		} else {
			
		}
		
		if (!el) return;
		if (window.$) {
			el.style.display = '';
			$('#nm\\:result').html(html)
			$('#nm\\:result').hide();
			$('#nm\\:result').slideToggle('slow');
		} else {
			el.innerHTML = html;
			el.style.display = '';
		}		
		
	},
	
	hideResult : function () {
		var el = document.getElementById('nm:result');
		if (!el) return;
		if (window.$) {
			if (!nm.firstActivationWasDone) {
				el.style.display = 'none';
			}
			$('#nm\\:result').slideUp(400);
		} else {
			el.style.display = 'none';
		}
	},
	
	needToAddThisItem : function (inID, inPalette) {
		if (inPalette == '') return true;
		var a_tmp = inPalette.split(',');
		for (var x = 0; x < a_tmp.length; x++) {
			var tmp = a_tmp[x];
			if (inID == tmp) return true;
			if (tmp.indexOf('*') > 0 && inID.indexOf(tmp.replace('*', '')) == 0) return true;
		}	
		return false;
	},
	 
	getItemsArray : function (inItems) {
		if (inItems) {
			var items = ',' + inItems + ',';
		} else {
			var items = '';
		}
		
		var a_res = {}
		var mass = document.getElementsByTagName('input');
		for (var x = 0; x < mass.length; x++) {
			if (!mass[x].name && items == '') continue;	
			if (items != '' && !nm.needToAddThisItem(mass[x].id, items)) continue;
			if (!mass[x].id && mass[x].getAttribute('type') == 'text') mass[x].id = mass[x].name;
			if (mass[x].getAttribute('type') == 'checkbox' && !mass[x].checked) continue;
			a_res[mass[x].id]	= mass[x];
		}
		var mass = document.getElementsByTagName('textarea');
		for (var x = 0; x < mass.length; x++) {
			if (!mass[x].name && items == '') continue;	
			if (items != '' && !nm.needToAddThisItem(mass[x].id, items)) continue;
			if (!mass[x].id) mass[x].id = mass[x].name
			a_res[mass[x].id]	= mass[x];		
		}
		
		var mass = document.getElementsByTagName('select');
		for (var x = 0; x < mass.length; x++) {
			if (!mass[x].name && items == '') continue;	
			if (items != '' && !nm.needToAddThisItem(mass[x].id, items)) continue;
			if (!mass[x].id) mass[x].id = mass[x].name
			a_res[mass[x].id]	= mass[x];		
		}		

		return a_res;	
	}
}
	
