function dhtml(){
	//Browser Information
	this.User_agent = navigator.userAgent.toLowerCase();
	this.version    = this.User_agent;
	this.Opera    	= ( window.opera );
	this.IE       	= ( ( this.User_agent.indexOf("msie") != -1 ) && ( !this.Opera ) );
	this.MAC      	= ( this.User_agent.indexOf("mac") != -1 );
	this.Gecko    	= ( navigator.product == "Gecko" );
	this.Mozilla  	= this.Gecko;
	
	if (this.IE){
		//mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; .net clr 1.1.4322)
		pos = this.User_agent.indexOf('msie')+5;
		this.version = this.User_agent.substring(pos,pos+3)
	} else if (this.Opera) {
		//mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; en) opera 8.0
		pos = this.User_agent.indexOf('opera')+6;
		this.version = this.User_agent.substring(pos,pos+3)
	} else if (this.Gecko) {
		//mozilla/5.0 (windows; u; windows nt 5.1; ru-ru; rv:1.7.12) gecko/20050919 firefox/1.0.7
		pos = this.User_agent.indexOf('gecko')+6;
		this.version = this.User_agent.substring(pos,pos+8)
	} else if (this.MAC) {
		pos = this.User_agent.indexOf('safari')+7;
		this.version = this.User_agent.substring(pos,pos+3)
	}
	
	//Show Object
	this.show = function(id) {
		if (elem = $(id)) {
			elem.style.visibility = 'visible';
			elem.style.display = 'block';
		}
	}
	//Hide Object
	this.hide = function(id) {
		if (elem = $(id)) {
			elem.style.visibility = 'hidden';
			elem.style.display = 'none';
		}
	} 

	// Check is class exist!
	this.match_class = function (obj, Class_name) {
		return ( Class_name && obj.className && obj.className.length && obj.className.match( new RegExp("(^|\\s+)(" + Class_name +")($|\\s+)") ) );
	}

	// Adding new class into object
	// Can replace old class if Instead is set
	// Instead = className which need to repalce
	this.set_class = function ( obj, Class_name, Instead ){
		if( obj ){
			Class_name = ( Class_name.length ) ? Class_name.replace( /(^\s+|\s+$)/, "" ) : "";
			if( obj.className.length ){
				var Old = Class_name;
				if( Instead && Instead.length ){
					Instead = Instead.replace( /\s+(\S)/g, "|$1" );
					if( Old ){
						Old += "|";
					}
					Old += Instead;
				}
				obj.className = obj.className.replace( new RegExp("(" + Old +")", "g"), "" ).trim();
			}
			obj.className += ( obj.className.length && Class_name ? " " : "" ) + Class_name;
		}
	}
	
	// Replace class with "";
	this.remove_class = function( obj, Class_name ){
		this.set_class( obj, "", Class_name );
	}
	
	return this;
}

/*****************
 * Init
 ****************/
var dhtml = new dhtml(); 
var use_enhanced_js;
var REAK_DEBUG = true;
var REAK_DEBUG_CONTAINER = '';
var PAGE_LOADED = false;
/****************
 * Can we use fancy JS? IE6, Safari, Moz
 * and opera 7.6 
 ***************/
if (( dhtml.IE      && dhtml.version >= 6.0 ) ||
	( dhtml.Gecko   && dhtml.version >= 20030312 ) ||
	( dhtml.Opera   && dhtml.version >= 7.6 ) ||
	( dhtml.MAC     && dhtml.version >= 120 ))
{
	use_enhanced_js = 1;
} else {
	use_enhanced_js = 0;
}

/****************
 * Prototypes
 ***************/
/*
 * Utility. Like pop(), but does not affect the length
 * of the array
 */
Array.prototype.lastItem =
function() { return this[ this.length - 1 ] }
/*
 * Utility. Removes leading and trailing white space
 * from a string
 */
String.prototype.trim = 
function() { return this.replace( /^[\s\n\r\t]+|[\s\n\r\t]+$/g, "" ) } 

/* simple emulation for IE4 */ 
if (dhtml.IE && document.getElementById == null) {	// ie4
	document.getElementById = function(sId) { return document.all[sId] }
}


/****************
 * Utilities
 ***************/
//Get objects by ids and return array of objects if more than one argument
var ELEMENTS_CACHE = {};
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (ELEMENTS_CACHE[element]){element = ELEMENTS_CACHE[element]}
		else if (typeof element == 'string'){element = document.getElementById(element)}

		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
} 
//Get objects by ClassName in parent container
function getElementsByClassName(className, parentElement) {
	var children = (parentElement || document.body).getElementsByTagName('*');
	var elements = new Array();
	for (var i = 0; i < children.length; i++) {
		var child = children[i];
		
		if (dhtml.match_class(child, className)){
			elements.push(child);
		}
	}
	return elements;
} 
//Image Preloader
var preloadImages = function(){
	var d = document;
	if(d.images){
		if(!d.pics)
			d.pics = new Array();
		var i,j = d.pics.length, a = this.preloadImages.arguments;
		for(i = 0; i < a.length; i++)
			if (a[i].indexOf("#")!=0){ 
				d.pics[j]=new Image; d.pics[j++].src=a[i]
			}
	} 
}   
// Go to argument url
function GoURL(sUrl){
  document.location.href = sUrl;
}
// Checking user input value and strip all except numbers
function _checkNumberValue(obj){
	if (isNaN(obj.value)){
		obj.value = (obj.defaultValue)?(obj.defaultValue):('')
	} else {
		obj.defaultValue = obj.value
	}
}
// Checking mail format
function CheckEmailFormat( email ){
	var s = '[A-Za-z0-9][-\\w]*(\\.[A-Za-z0-9][-\\w]*)*'
	var re = new RegExp( '^'+s+'@'+s+'\\.[a-zA-Z]{2,4}$')
	email = email.replace( new RegExp('/\(.*?\)/'), '' )
	return re.test(email)
} 

/** Generate random word **/
function generateRandomWord(){
	cons = new Array();
	vow = new Array();
	consts='bcdgklmnprst';
	vowels='aeiou';
	for (x=0; x < 6; x++) {
		rand1 = Math.random( )*consts.length;
		rand2 = Math.random( )*vowels.length;
		cons[x] = consts.substr(rand1,1);
		vow[x] = vowels.substr(rand2,1);
	}
	return cons[0]+vow[0]+cons[2]+cons[1]+vow[1]+cons[3]+vow[3]+cons[4];
}
 
/*****************************
**   Event listeners
******************************/

function checkEvent(oEvt){
	oEvt=(oEvt) ? oEvt : ( (window.event) ? window.event : null );
	if(oEvt && oEvt.srcElement && !window.opera)
		oEvt.target=oEvt.srcElement;
	return oEvt;
}

function addEvent(objElement, strEventType, ptrEventFunc) {
	if (typeof strEventType == 'object'){
		for (var i=0; i < strEventType.length; i++){
			if (objElement.addEventListener) objElement.addEventListener(strEventType[i], ptrEventFunc, false);
				else if (objElement.attachEvent) objElement.attachEvent('on' + strEventType[i], ptrEventFunc);
		}
	} else {
		if (objElement.addEventListener) objElement.addEventListener(strEventType, ptrEventFunc, false);
			else if (objElement.attachEvent) objElement.attachEvent('on' + strEventType, ptrEventFunc);
	}
}

function removeEvent(objElement, strEventType, ptrEventFunc) {
	if (objElement.removeEventListener) objElement.removeEventListener(strEventType, ptrEventFunc, false);
		else if (objElement.detachEvent) objElement.detachEvent('on' + strEventType, ptrEventFunc);
}

addEvent(window, 'load', function(){
  	PAGE_LOADED = true;
})

// Debuging Layer
function debug(something){
	if (REAK_DEBUG){
		if(typeof something == 'object'){
			txt = '';
			for(key in something){
				txt += '['+key+'] => '+ something[key] + '<br/>';
			}
			REAK_DEBUG_CONTAINER += txt;
		} else {
			REAK_DEBUG_CONTAINER += something + '<br/>';
		}
		//alert(REAK_DEBUG_CONTAINER);
		if (!$('reak_debug_window')){
			DIV = document.createElement('DIV');
			DIV.innerHTML = '<div id="reak_debug_window" style="position:absolute;z-index:9999;top:0px;left:0px;width:300px;overflow:auto; border:1px solid black; background:#ffffff; color:#000000; padding:5px 5px 10px 5px">'
			  + '&nbsp;<a onmouseover="this.style.borderColor=\'#C34802\';this.style.background=\'#FDEEE6\'" onmouseout="this.style.borderColor=\'#ffffff\';this.style.background=\'#ffffff\'" style="padding:3px 5px;border:1px solid #ffffff; font:normal 11px/15px Tahoma; color:#C34802; text-decoration:none" href="#" onclick="$(\'reak_errors_debug\').style.display = ($(\'reak_errors_debug\').offsetWidth) ? \'none\':\'\';" >hide/show me!</a>'
			  + '&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onmouseover="this.style.borderColor=\'#C34802\';this.style.background=\'#FDEEE6\'" onmouseout="this.style.borderColor=\'#ffffff\';this.style.background=\'#ffffff\'" style="padding:3px 5px;border:1px solid #ffffff; font:normal 11px/15px Tahoma;color:#C34802; text-decoration:none" onclick="$(\'reak_errors_debug\').innerHTML = \'\'; REAK_DEBUG_CONTAINER=\'\'; return false;">Clear</a>'
			  + '<div id="reak_errors_debug" style="margin:10px 5px 0px 5px;padding:10px;border:1px dashed #aaaaaa; background:#fcfcfc; font:normal 11px/15px Tahoma"></div>'
			  + '</div>';
			 if (PAGE_LOADED){
			 	if (document.body) {document.body.appendChild(DIV)}
				else {document.lastChild.appendChild(DIV)}
				$('reak_errors_debug').innerHTML = REAK_DEBUG_CONTAINER ;
			 } else {
				 addEvent(window, 'load', function(){
				  	if (document.body) {document.body.appendChild(DIV)}
					else {document.lastChild.appendChild(DIV)}
					$('reak_errors_debug').innerHTML = REAK_DEBUG_CONTAINER ;
				})
			 }
		} else {
			$('reak_errors_debug').innerHTML = REAK_DEBUG_CONTAINER ;
		}
	}
}

function RePopUp(oLink, title, windowId) {
	title = (title)?title:( (oLink.title)?(oLink.title):('') );
	windowId = (windowId)?windowId:generateRandomWord(); 
	
	if (oLink.target == 'PopUp') {
		if (oLink.href.match(/(jpg)|(png)|(gif)$/i)) {
			win = makePopUp(oLink.href,400,330,false,false,windowId);
			win.document.open("text/html");
			html = '<html><head><title>'+title+'</title></head><script language="JavaScript" type="text/javascript">'
				 + 'function $(id) { return (document.getElementById) ? document.getElementById(id) : ((document.all) ? document.all[id] : eval("document."+id)); };'
				 + 'function doResize() { window.resizeTo($("img").width+10, $("img").height+';
			if (dhtml.Mozilla){
				html += '55';
			} else if (dhtml.Opera){
				html += '48';
			} else {
				html += '30';
			}
			html += '); window.moveTo((screen.availWidth - $("img").width)/2, (screen.availHeight - $("img").height)/2 ) };'
				 + '</script><body onload="doResize()" bgcolor="#ffffff" style="margin:0px;padding:0px;text-align:center">'
				 + '<a href="Close Window" onclick="window.close(); return false;">'
				 + '<img src="' + oLink.href + '" name="img" id="img" alt="' + title + '" border="0"/>'
				 + '</a></body></html>';
			win.document.write(html);
			win.focus();
			win.document.close();
		} else {
			makePopUp(oLink.href,600,450,true,true,windowId);
		}	
		return false;
	}
	return true;
}

function makePopUp(sUrl,width,height,scroll,resize,windowId) {
	resize = (resize) ? 'yes' : 'no';
	scroll = (scroll) ? 'yes' : 'no';
	windowId = (windowId)?windowId:generateRandomWord(); 
	
    var leftPos = (window.document.body.clientWidth - width) / 2;
    var topPos  = (window.document.body.clientHeight - height) / 2;

	sOption = 'width='+width+',height='+height+',scrollbars='+scroll+',resizable='+resize+',statusbar=no,location=no,titlebar=0,toolbar=0,status=0';
	
    var Popup = new Object();
	Popup = window.open(sUrl, windowId, sOption+',top=' + topPos + ',left=' + leftPos);
	Popup.window.focus();
	
	return Popup;
}

function upd_captcha(img, link){
	img = document.getElementById(img);
	random_word = generateRandomWord();
	img.src = link + '&amp;tmp=' + random_word;
}