/* Script by http://dxSoft.ru/ */

var dxsoft_library = {
    CreateMethod:function(handler,method)
    {        
        return function(){
        return method.apply(handler,arguments);
        }
    },
    GetElement:function(elem_id)
    {
        if (document.layers) 
            return document.layers[elem_id];
        else if (document.all)
            return document.all[elem_id];
        else if (document.getElementById)
            return document.getElementById(elem_id);
    },                                
    DoTask:function(target, functionref, tasktype){        
        var tasktype=(window.addEventListener)? tasktype : "on"+tasktype;
        if (target.attachEvent)
            target.attachEvent(tasktype, functionref);
        else
        if (target.addEventListener)                    
            target.addEventListener(tasktype, functionref, false);
            
    },
    ClearTask:function(target,functionref,tasktype){
        var tasktype=(window.addEventListener)? tasktype : "on"+tasktype;
        if (target.detachEvent)
            target.detachEvent(tasktype, functionref);
        else
        if (target.removeEventListener)                    
            target.removeEventListener(tasktype, functionref, false);
    },    
    ContainElem:function(a,b){
        if (b!==null)
        while (b.parentNode)
            if ((b = b.parentNode) == a)
                return true;
        return false;
    },
    IsCursorOverElem:function(elem,x,y){
        var vt = elem.offsetTop;
        var vl = elem.offsetLeft;
        var w = elem.offsetWidth;
        var h = elem.offsetHeight;
        var a = elem.parentNode;
        while(a)
        {
            vt+=a.offsetTop;
            vl+=a.offsetLeft;
            a=a.parentNode;            
        }
        if(x>=vl && x<=(vl+w) && y>=vt && y<=(vt+h))
            return true;
        return false;        
    },
    MoveToCenter:function(obj_elem)
    {
           var win_w, win_h,scroll_top;           
           if (window.innerHeight){
                win_w = window.innerWidth;
                win_h = window.innerHeight;
                scroll_top = window.pageYOffset;
            } else  if (document.documentElement && document.documentElement.clientHeight) {
                win_w = document.documentElement.clientWidth;
                win_h = document.documentElement.clientHeight;
                scroll_top = document.documentElement.scrollTop;
            } else if (document.body) {
                win_w = document.body.clientWidth;
                win_h = document.body.clientHeight;
                scroll_top = document.body.scrollTop;
            }
           obj_elem.style.left = (win_w-obj_elem.offsetWidth)/2+"px";           
           obj_elem.style.top = (win_h-obj_elem.offsetHeight)/2+scroll_top+"px";
    },
    SetOpacity:function(elem,value)
    {        
        elem.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity="+value+");";
        elem.style.opacity = value/100;
        elem.style.mozOpacity = value/100;
        elem.style.KhtmlOpacity = value/100;
    },
    DoPostBack:function(target,argument)
    {           
        var forms = document.getElementsByTagName("form");    
        if(forms && forms.length>0)
        {        
            dxsoft_library.GetElement("__eventtarget").value = target;
            dxsoft_library.GetElement("__eventargument").value = argument;
            forms[0].submit();
        }
    },
    CreateCookie:function(name,value,days)
    {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+escape(value)+expires+"; path=/";
    },
    CreateBackLayer:function(color,opacity)
    {
        var upper = document.createElement("DIV");            
        upper.style.cssText = "position:absolute; z-index:100; left:0; top:0; float:left;background:"+color+";";
        upper.innerHTML = "&nbsp;";
        dxsoft_library.SetOpacity(upper,opacity);
        
        upper.OnBodyResize=function()
        {
            if(this.style.display!='none' && this.style.visibility!="hidden")
            {                                
                var win_w, win_h,scroll_top,scroll_left;           
                if (window.innerHeight){                    
                    win_w = window.innerWidth;
                    win_h = window.innerHeight;
                    scroll_top = window.pageYOffset;                    
                    scroll_left = window.pageXOffset;                  
                }else
                if (document.documentElement && document.documentElement.clientHeight) {
                win_w = document.documentElement.clientWidth;
                win_h = document.documentElement.clientHeight;
                scroll_top = document.documentElement.scrollTop;   
                scroll_left = document.documentElement.scrollLeft;             
                } else if (document.body) {
                    win_w = document.body.clientWidth;
                    win_h = document.body.clientHeight;
                    scroll_top = document.body.scrollTop;   
                    scroll_left = document.body.scrollLeft;                  
                }                
               this.style.width = (win_w+scroll_left)+"px";
               this.style.height = (win_h+scroll_top)+"px";
            }
        }                         
        dxsoft_library.DoTask(window,dxsoft_library.CreateMethod(upper ,upper.OnBodyResize),"resize"); 
        dxsoft_library.DoTask(window,dxsoft_library.CreateMethod(upper ,upper.OnBodyResize),"scroll");
        document.body.insertBefore(upper,document.body.firstChild);  
        upper.OnBodyResize();
        return upper;
    },
    //отмена выделения
    BeforeDrag:function()
    {        
        if(!document.body.OnCancelEvent)
            document.body.OnCancelEvent = function(){return false;}
        // в IE
        dxsoft_library.DoTask(document.body, document.body.OnCancelEvent,"selectstart");
        dxsoft_library.DoTask(document.body, document.body.OnCancelEvent,"dragstart");
        // в Firefox
        document.body.style.MozUserSelect = 'none';        
        document.body.style.KhtmlUserSelect= 'none';
        document.body.unselectable="on"
        // в Opera
        dxsoft_library.DoTask(document.body, document.body.OnCancelEvent,"mousedown");            
    },
    //отмена отмены выделения :-)
    AfterDrag:function()
    {                  
        dxsoft_library.ClearTask(document.body, document.body.OnCancelEvent,"selectstart");
        dxsoft_library.ClearTask(document.body, document.body.OnCancelEvent,"dragstart");
        
        document.body.style.MozUserSelect = '';
        document.body.style.KhtmlUserSelect= '';
        document.body.unselectable="off";
        
        dxsoft_library.ClearTask(document.body, document.body.OnCancelEvent,"mousedown");           
    },
    // создаем xmlrequest для AJAX
    CreateXMLRequest:function()
    {
        var xmlreq = null;
        if (window.XMLHttpRequest)            
            xmlreq = new XMLHttpRequest();
        else
        if (typeof ActiveXObject != "undefined")            
            xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
        return xmlreq;
     },     
     // запустить функцию после того, как объект будет создан
     ExecuteAfterInit:function(func_ref,object_id)
     {                      
        setTimeout(function(){ 
                    if(dxsoft_library.GetElement(object_id))
                        func_ref();
                    else
                        dxsoft_library.ExecuteAfterInit(func_ref,object_id);
                },10);
     },
     // получить абсолютные координаты (относительно document.body)
     GetAbsolutePos:function(elem,end_elem)
     {
        var coords = {x:0,y:0};
        coords.x = elem.offsetLeft;
        coords.y = elem.offsetTop;
        var parent = elem.parentNode;
        while(parent && parent!=end_elem)
        {
            coords.x+=parent.offsetLeft;
            coords.y+=parent.offsetTop;
            parent = parent.parentNode;
        }
        return coords;
     },     
    TrimString:function(string)
    {
        return string.replace(/(^\s+)|(\s+$)/g, "");
    },
     // всатвляет innerText и выполняет скрипты
     InsertInnerText:function(html,container,before_elem)
     {
        var div = document.createElement("DIV");
        var re = /<script[^>]*>[^<]*<\/script[^>]*>/gim;
        var script = html.match(re);
        html = html.replace(re,"");
        div.innerHTML = html;
//        var chn = div.childNodes;
        while(div.firstChild)
            container.insertBefore(div.firstChild,before_elem);
        
//        for(var i=0;i<chn.length;++i)
//            container.insertBefore(chn[i],before_elem);
        
        if(script)
        {
            for(var i=0;i<script.length;++i)
            {           
                var s = script[i].replace(/<script[^>]*>/ig,"");
                s = s.replace(/<\/script[^>]*>/ig,"");
                dxsoft_library.EvalThread(s);
                //eval(s); 
            }
        }        
     },
     // то же самое, но вставляет вконец
     AppendInnerText:function(html,container)
     {        
        var div = document.createElement("DIV");
        var re = /<script[^>]*>[^<]*<\/script[^>]*>/gim;
        var script = html.match(re);
        html = html.replace(re,"");
        div.innerHTML = html;
//        var chn = div.childNodes;
        //for(var i=0;i<chn.length;++i)
        while(div.firstChild)
            container.appendChild(div.firstChild);
        
        if(script)
        {            
            for(var i=0;i<script.length;++i)
            {                           
                var s = script[i].replace(/<script[^>]*>/ig,"");
                s = s.replace(/<\/script[^>]*>/ig,"");
                dxsoft_library.EvalThread(s);
            }
        }        
     },
     EvalThread:function(s)
     {
        setTimeout(function(){eval(s); },1);       
     },
     EncodeText:function(text)
     {
      //  var s = encodeURI(text.replace(/\r\n/ig,"__newline__").replace(/\n/ig,"__newline__").replace(/&/ig,"___and___"));
        return encodeURI(text.replace(/\r\n/ig,"__newline__").replace(/\n/ig,"__newline__").replace(/&/ig,"__and__").replace(/\+/ig,"__plus__"));        
     },
     DecodeText:function(text)
     {                
        if(!text)
            return text;
        var tmp = unescape(decodeURI(text));
        return tmp.replace(/__space__/ig," ");                
     },
     // создать уникальный UID
     MakeUID:function()
     {
           var dt = new Date();           
           return (dt.getFullYear().toString()+dt.getMonth().toString()+dt.getDay().toString()+dt.getHours().toString()+
               +dt.getMinutes().toString()+dt.getSeconds().toString()+dt.getMilliseconds().toString());
     },
     // выставляет z-index по убыванию
     RevertZIndex:function(container)
     {
        var chld = container.childNodes;
        var zi = chld.length+50;
        for(var i=0;i<chld.length;++i)
            chld[i].style.zIndex=zi-i;
     },
     
     // Функция конвертации String в XML
     XmlFromString:function(text)
     {
        try //Internet Explorer
        {
          xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async="false";
          xmlDoc.loadXML(text);
          return xmlDoc; 
        }
        catch(e)
        {
          try //Firefox, Mozilla, Opera, etc.
          {
            parser=new DOMParser();
            xmlDoc=parser.parseFromString(text,"text/xml");
            return xmlDoc; 
          }
          catch(e)
          {            
            return null;
          }
        }
     }    
}



// прелоадер для разных действий
var dxpreloader = function()
{
    this.preloader = document.createElement("DIV"); 
    this.preloader.style.cssText="position:absolute; left:0; top:0; display:none; background:#fff;";
    this.preloader.innerHTML = "<img src=\"/img/decoration/preloader_wh.gif\" style=\"margin:0;padding:0;width:37px; height:37px;\" />";
    dxsoft_library.SetOpacity(this.preloader,80);
}

dxpreloader.prototype = {
    Show:function(parent){
        parent.appendChild(this.preloader);
        this.preloader.style.width = parent.offsetWidth+"px";
        this.preloader.style.height = parent.offsetHeight+"px";        
        // кутящийся индикатор размером 37 на 37
        // делаем его по центру
        var mt=(parent.offsetHeight-37)/2;
        var ml=(parent.offsetWidth-37)/2;
        // размеры прелоадера не могут быть меньше картинки
        if(mt<0)
        {
            mt=0;
            this.preloader.style.height="37px";    
        }
        if(ml<0)
        {
            ml=0;
            this.preloader.style.width="37px";    
        }

        var img = this.preloader.getElementsByTagName("IMG")[0];
        img.style.marginTop = mt+"px";
        img.style.marginLeft = ml+"px";
        this.preloader.style.display="block";
    },
    Hide:function()
    {
        this.preloader.style.display="none";
    }
}
