var Agent = {
    ua : navigator.userAgent.toLowerCase()
};

Agent.isIE = (Agent.ua.indexOf("msie") != -1 && Agent.ua.indexOf("opera") == -1 && Agent.ua.indexOf("webtv") == -1);
Agent.isIE8 = (Agent.ua.indexOf("msie 8.") != -1);
Agent.isIE7 = (Agent.ua.indexOf("msie 7.") != -1);
Agent.isIE6 = (Agent.ua.indexOf("msie 6.") != -1);
Agent.isOpera = (Agent.ua.indexOf("opera") != -1);
Agent.isGecko = (Agent.ua.indexOf("gecko") != -1);
Agent.isSafari = (Agent.ua.indexOf("safari") != -1);
Agent.isKonqueror = (Agent.ua.indexOf("konqueror") != -1);
Agent.isChrome = (Agent.ua.indexOf("chrome") != -1);

function getFlashObject(id) {
	return (isIE ? window : document)[id];
}


//  userAgent       
var ua = navigator.userAgent.toLowerCase();
//  Internet Explorer
var isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1);
// Opera
var isOpera = (ua.indexOf("opera") != -1);
// Gecko = Mozilla + Firefox + Netscape
var isGecko = (ua.indexOf("gecko") != -1);
// Safari,   MAC OS
var isSafari = (ua.indexOf("safari") != -1);
// Konqueror,   UNIX-
var isKonqueror = (ua.indexOf("konqueror") != -1);

if(isGecko) { 
	HTMLElement.prototype.removeNode = function(removeChildren) {
		if (Boolean(removeChildren)) return this.parentNode.removeChild(this);
		else {
			var r=document.createRange();
			r.selectNodeContents(this);
			return this.parentNode.replaceChild(r.extractContents(),this);
		}
	}
}



function round_dec(on, dec) {
	var r1=on*Math.pow(10,dec);
	var r2=Math.round(r1);
	var r3=r2/Math.pow(10,dec);
	return r3;
}

function setOpacity(obj,opc) {
	if (obj.filters) {
		obj.style.filter = "alpha(opacity="+(opc*100)+")"; 
	} else obj.style.opacity=opc;	
}

function setClass(obj, class_name) {
	if(Agent.isIE6 || Agent.isIE7) obj.setAttribute("className",class_name);
	else if(Agent.isGecko || Agent.isIE8) obj.setAttribute("class",class_name);
	else if(Agent.isOpera) obj.className = class_name;
	
}


function getElementComputedStyle(elem, prop) {
    if (typeof elem!="object") elem = document.getElementById(elem);
 
    // external stylesheet for Mozilla, Opera 7+ and Safari 1.3+
    if (document.defaultView && document.defaultView.getComputedStyle) {
        if (prop.match(/[A-Z]/)) prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
        return document.defaultView.getComputedStyle(elem, "").getPropertyValue(prop);
    }
  
    // external stylesheet for Explorer and Opera 9
    if (elem.currentStyle) {
        var i;
        while ((i=prop.indexOf("-"))!=-1) prop = prop.substr(0, i) + prop.substr(i+1,1).toUpperCase() + prop.substr(i+2);
        return elem.currentStyle[prop];
    }
  
  return "";
}

function createHttpRequest() {
    var xmlHttp = false;
    
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e2) {
            xmlHttp = false;
        }
    }
    @end @*/

    if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
        xmlHttp = new XMLHttpRequest();
    }
    
    return xmlHttp;
}

function file_get_contents(url) {
    var req = createHttpRequest();

    if (!req) throw new Error('XMLHttpRequest not supported');
 
    req.open("GET", url, false);
    req.send(null);
 
    return req.responseText;
}

function trim( str, charlist ) {
    charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
    var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
    return str.replace(re, '');
}

function getElementPosition(elem) {
   
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
    
    var l = 0;
    var t = 0;
    
    while (elem) {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }

    return {"left":l, "top":t, "width": w, "height":h};
}

function includeCSS(filename, media) {
    if (!media) {
        media = 'All';
    }
    var js = document.createElement('link');
    js.setAttribute('type', 'text/css');
    js.setAttribute('href', filename);
    js.setAttribute('rel', 'stylesheet');
    js.setAttribute('media', media);
    document.getElementsByTagName('HEAD')[0].appendChild(js);
 
    return true; 
}

function include( filename ) {
    var js = document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', filename);
    document.getElementsByTagName('HEAD')[0].appendChild(js);
 
    // save include state for reference by include_once
    var cur_file = {};
    cur_file[window.location.href] = 1;
 
    if (!window.php_js) window.php_js = {};
    if (!window.php_js.includes) window.php_js.includes = cur_file;
    if (!window.php_js.includes[filename]) {
        window.php_js.includes[filename] = 1;
    } else {
        window.php_js.includes[filename]++;
    }
 
    return window.php_js.includes[filename];
}

function include_once( filename ) {

    var cur_file = {};
    cur_file[window.location.href] = 1;
 
    if (!window.php_js) window.php_js = {};
    if (!window.php_js.includes) window.php_js.includes = cur_file;
    if (!window.php_js.includes[filename]) {
        return this.include(filename);
    } else{
        return window.php_js.includes[filename];
    }
}

function http_build_query( formdata, numeric_prefix, arg_separator ) {
    var key, use_val, use_key, i = 0, tmp_arr = [];
 
    if(!arg_separator){
        arg_separator = '&';
    }
 
    for(key in formdata){
        use_key = escape(key);
        use_val = escape((formdata[key].toString()));
        use_val = use_val.replace(/%20/g, '+');
 
        if(numeric_prefix && !isNaN(key)){
            use_key = numeric_prefix + i;
        }
        tmp_arr[i] = use_key + '=' + use_val;
        i++;
    }
 
    return tmp_arr.join(arg_separator);
}

function removeEvent(obj, type, fn){
    if(obj.removeEventListener) {
        obj.removeEventListener(type, fn, false);
    } else if(obj.detachEvent) {
        obj.detachEvent("on"+type, fn);
    } else {
        obj[type]=null;
    }
}


function addEvent(elm, evType, fn, useCapture) {
   	if (elm.addEventListener) {
   		elm.addEventListener(evType, fn, useCapture);
		return true;
   	}
    else if (elm.attachEvent) {
    	var r = elm.attachEvent('on' + evType, fn);
		
        return r;
    }
    else {
    	elm['on' + evType] = fn;
    }
}


function getYear() {
	var objDate=new Date();
	var tmp_y=objDate.getYear();
	if(isGecko || isOpera) {
		tmp_y+=1900;
	} else if(isIE) {
		if(tmp_y < 100) tmp_y+=1900;
	}
	return tmp_y;
}


function addHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
    throw "Incompatible browser";
}


function removeHandler(object, event, handler)
{
  if (typeof object.removeEventListener != 'undefined')
    object.removeEventListener(event, handler, false);
  else if (typeof object.detachEvent != 'undefined')
    object.detachEvent('on' + event, handler);
  else
    throw "Incompatible browser";
}

function getClientWidth() {
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight() {
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

function getDocumentHeight()
{
	var documentHeight = document.documentElement.clientHeight; // FF, Safari, IE
	if(documentHeight < document.documentElement.scrollHeight) documentHeight=document.documentElement.scrollHeight;
	
	if(documentHeight < document.body.scrollHeight) documentHeight = document.body.scrollHeight;
	return documentHeight;
}



function getDocumentWidth()
{
	return (document.body.scrollWidth > document.body.offsetWidth)?document.body.scrollWidth:document.body.offsetWidth;
}


function getBodyScrollTop()
{
	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft()
{
	return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}


function getFlashObject(id) {
	return (isIE ? window : document)[id];
}

function isstr(param) {
    return typeof(param) == 'string';
}

function $(param) {
    var obj = isstr(param) ? document.getElementById(param) : param;
	if(!obj) return false;
    obj.child = function(tagName) {
        return this.getElementsByTagName(tagName);
    }
    obj.append = function(param) {
        return this.appendChild(isstr(param) ? document.createElement(param) : param);
    }
    obj.parent = function() {
        return this.parentNode;
    }
    return obj;
}


function clearSelection() {
    if(document.selection && document.selection.empty) {
        document.selection.empty();
    } else if(window.getSelection) {
        var sel = window.getSelection();
        if(sel && sel.removeAllRanges) {
            sel.removeAllRanges();
        }
    }
}

function fixPNG(element)
{
  //Если браузер IE версии 5.5-6
  if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
  {
    var src;
	
    if (element.tagName=='IMG') //Если текущий элемент картинка (тэг IMG)
    {
      if (/\.png$/.test(element.src)) //Если файл картинки имеет расширение PNG
      {
        src = element.src;
        element.src = "/content/images/blank.gif"; //заменяем изображение прозрачным gif-ом
      }
    }
    else //иначе, если это не картинка а другой элемент
    {
	  //если у элемента задана фоновая картинка, то присваеваем значение свойства background-шmage переменной src
      src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i);
      if (src)
      {
        src = src[1]; //берем из значения свойства background-шmage только адрес картинки
        element.runtimeStyle.backgroundImage="none"; //убираем фоновое изображение
      }
    }
    //если, src не пуст, то нужно загрузить изображение с помощью фильтра AlphaImageLoader
    if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
  }
}

Date.prototype.clone = function () {
    return new Date(this.getTime());
}

Date.prototype.getHoursBetween = function(d) {
    d = d.clone();

    var diff = d.getTime() - this.getTime();
    return diff / (1000 * 60 * 60);
};

Date.prototype.MONTHNAMES = ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"];

Date.prototype.getFullMonth = function() {
    return this.MONTHNAMES[this.getMonth()];
};

Date.prototype.getStringDateTime = function() {
    return this.getFullYear() + '-' + (this.getMonth() + 1).leadZero(2) + '-' + this.getDate().leadZero(2) + ' ' + this.getHours().leadZero(2) + ':' + this.getMinutes().leadZero(2) + ':' + this.getSeconds().leadZero(2);
};

Number.prototype.leadZero = function(length){
    var sign = this < 0 ? '-' : '';
    var result = Math.abs(this).toString();
    length -= result.length;
    for (var i = 0; i < length; i++) {
        result = '0' + result;
    }
    return sign + result;
}

function getElementsByName(tag, name) {
     var elem = document.getElementsByTagName(tag);
     var arr = new Array();
     for(i = 0, iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}

