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;
}

/**
*	Tooltip control
*/
window.onerror = null;
tooltip = {
    attr_name: "tooltip",
    blank_text: "(open in new window)",
    newline_entity: "#",
    max_width: 0,
    delay: 500,

    t: document.createElement("DIV"),
    c: null,
    g: false,

    m: function(e){
        if (tooltip.g){
            oCanvas = document.getElementsByTagName(
            (document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY"
            )[0];
            x = window.event ? event.clientX + oCanvas.scrollLeft : e.pageX;
            y = window.event ? event.clientY + oCanvas.scrollTop : e.pageY;
            tooltip.a(x, y);
        }
    },

    d: function(){
        tooltip.t.setAttribute("id", "tooltip");
        //tooltip.t.style.filter = "alpha(opacity=85)";
        document.body.appendChild(tooltip.t);
        a = document.all ? document.all : document.getElementsByTagName("*");
        aLength = a.length;
        for (var i = 0; i < aLength; i++){
            if (!a[i]) continue;
            tooltip_title = a[i].getAttribute("_title");
            if (tooltip_title && typeof tooltip_title != "string") tooltip_title = "";
            tooltip_blank = a[i].getAttribute("target") && a[i].getAttribute("target") == "_blank" && tooltip.blank_text;
            if (tooltip_title || tooltip_blank){
                a[i].setAttribute(tooltip.attr_name, tooltip_blank ? (tooltip_title ? tooltip_title + " " + tooltip.blank_text : tooltip.blank_text) : tooltip_title);
                if (a[i].getAttribute(tooltip.attr_name)){
                    a[i].removeAttribute("_title");
                    tooltip.l(a[i], "mouseover", tooltip.s);
                    tooltip.l(a[i], "mouseout", tooltip.h);
                }
            }
        }
        document.onmousemove = tooltip.m;
        window.onscroll = tooltip.h;
        tooltip.a(-99, -99);
    },

    s: function(e){
        d = window.event ? window.event.srcElement : e.target;
        if (!d.getAttribute(tooltip.attr_name)) return;
        s = d.getAttribute(tooltip.attr_name);
        if (tooltip.newline_entity){
            s = s.replace(/\&/g,"&amp;");
            //s = s.replace(/\</g,"&lt;");
            //s = s.replace(/\>/g,"&gt;");
            //s = s.replace(eval("/" + tooltip.newline_entity + "/g"), "<br />");
            s=s.split('*');
                str='<div class="tooltipDiv" style="background:';
                str+=s[0];
                str+='"></div><b>';
                str+=s[1];
                str+='</b> <i>';
                str+=s[2];
                str+='</i>';
                Values=s[3].split('~');
                for (var g=0;g<Values.length;g++) {
                str+='<br>&nbsp;&nbsp;'
                str+=Values[g];
                }
            s=str;
            tooltip.t.innerHTML = s;
        }else{
            if (tooltip.t.firstChild) tooltip.t.removeChild(tooltip.t.firstChild);
            tooltip.t.appendChild(document.createTextNode(s));
        }
        tooltip.c = setTimeout("tooltip.t.style.visibility = 'visible';", tooltip.delay);
        tooltip.g = true;
    },

    h: function(e){
        tooltip.t.style.visibility = "hidden";
        if (!tooltip.newline_entity && tooltip.t.firstChild) tooltip.t.removeChild(tooltip.t.firstChild);
        clearTimeout(tooltip.c);
        tooltip.g = false;
        tooltip.a(-99, -99);
    },

    l: function(o, e, a){
        if (o.addEventListener) o.addEventListener(e, a, false);
        else if (o.attachEvent) o.attachEvent("on" + e, a);
            else return null;
    },

    a: function(x, y){
        oCanvas = document.getElementsByTagName(
        (document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY"
        )[0];
        w_width = oCanvas.clientWidth ? oCanvas.clientWidth + oCanvas.scrollLeft : window.innerWidth + window.pageXOffset;
        w_height = window.innerHeight ? window.innerHeight + window.pageYOffset : oCanvas.clientHeight + oCanvas.scrollTop;
        tooltip.t.style.width = ((tooltip.max_width) && (tooltip.t.offsetWidth > tooltip.max_width)) ? tooltip.max_width + "px" : "auto";
        t_width = tooltip.t.offsetWidth;
        t_height = tooltip.t.offsetHeight;
        tooltip.t.style.left = x + 8 + "px";
        tooltip.t.style.top = y + 8 + "px";
        if (x + t_width > w_width) tooltip.t.style.left = w_width - t_width + "px";
        if (y + t_height > w_height) tooltip.t.style.top = w_height - t_height + "px";
    }
}

var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if (root){
    if (root.addEventListener) root.addEventListener("load", tooltip.d, false);
    else if (root.attachEvent) root.attachEvent("onload", tooltip.d);
}

function m(O, A, B){
    window.location.href = "mailto:" + A + "@" + B;
}