var engine = ({
		chstr:(/^([a-z0-9-_]+)$/ig),
		chnum:(/^([0-9]+)$/ig),
		chem:(/^([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+$/ig),
		winloadarray:Array(),
		winload:function(){
			for(i=0;i < (engine.winloadarray).length;i++){
				(engine.winloadarray)[i](document)
			}
		},
		checkmail:function(string){
			if( (typeof string) != 'string' || string == '' ) return false;
			if( (engine.chem).test(string) ) return true;
			else return false
		},
		print_r:function(arr,level){
			var print_red_text = '';
			var level = level || 0;
			var level_padding = '';
			for(var j=0; j<level+1; j++) level_padding += '    ';
			if(typeof(arr) == 'object') {
				for(var item in arr) {
					var value = arr[item];
					if(typeof(value) == 'object') {
						print_red_text += level_padding + "'" + item + "' :\n";
						print_red_text += print_r(value,level+1);
				}else  print_red_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
				}
			}else  print_red_text = '===>'+arr+'<===('+typeof(arr)+')';
			return print_red_text;
		},
		declension:function(number,string){
			var string = string.split(' ');
			var number = Math.abs(number) % 100;
			var number1 = number % 10;
			if (number > 10 && number < 20) return string[2];
			if (number1 > 1 && number1 < 5) return string[1];
			if (number1 == 1) return string[0];
			return string[2];
		},
		addwinload:function(sfunction){
			var i = (engine.winloadarray).length;
			engine.winloadarray[i] = sfunction();
		},
		include:function(action,complete){
			var complete = complete || function(){};
			$.get(action, function(code){eval(code);complete()})
		},
		request:function(action, container){
			var container = ' '+container || '';
			$.load(action+container, function(data){return data});
		},
		check_request:function(data,complete,error){
			var error = error || function(){};
			if(data.substr(0, 5)=='error'){error(data.substr(6));return}
			if(data.substr(0, 8)=='complete'){complete(data.substr(9))}else{error(data)}
		},
		exit:function(){
			$.post('/ajax.php',{action:'exit'},function(data){
				engine.check_request(data, function(complete){
					//window.location.reload();
					window.location.href=window.location.href;
				}, function(error){
					alert(error);
				})
			});
		},
		formput:function(formpoint,defaultvalue,defcolor,readycolor){
			if((typeof formpoint)=='object') var formpoint = $(formpoint);
			else var formpoint = $('#'+formpoint);
			var defcolor = defcolor || '#afafaf';
			var readycolor = readycolor || '#000000';
			formpoint.parents().filter('form').bind('submit',function(){
				if(formpoint.val()==defaultvalue) formpoint.val('');
				return false;
			});
			formpoint[0].value=(formpoint[0].value=='' ? defaultvalue : formpoint[0].value);
			formpoint.bind('blur',function(){
				this.value=(this.value=='' ? defaultvalue : this.value);
				this.style.color=(this.value==defaultvalue ? defcolor:readycolor);
			}).bind('focus',function(){
				this.value=(this.value==defaultvalue) ? '' : this.value;
				this.style.color=readycolor;
			}).bind('change',function(){
				this.style.color=(this.value==defaultvalue ? defcolor:readycolor);
			});
		},
		init:function(){
			if(navigator.appName == 'Microsoft Internet Explorer') window.attachEvent('onload', engine.winload);
			else window.addEventListener('onload', engine.winload, false);
			$(function(){
				//$.ajaxSetup({beforeSend: function(){engine.ajaxloader(true)},complete: function(){engine.ajaxloader(false)}});
			});
		}
		
});
engine.init();
