


function DomReady(fn) {
     //W3C
      if(document.addEventListener) { document.addEventListener("DOMContentLoaded", fn, false); }
      //IE
      else {document.onreadystatechange = function(){readyState(fn)} }
}
function readyState(fn) {
      //dom is ready for interaction
      if(document.readyState == "interactive") {  fn();  }
    }
window.onDomReady = DomReady;



function delComment(id){
  if(confirm("Вы уверены, что хотите удалить комментарий ?")){

    ajax.load({
    'onSuccess': function(ret){
                    var onSuccess='';
                    if(ret.ok==1){
                        //alert(ret.id);
                       onSuccess = function(ret) {var div = node('comment_'+ret.id);
                       div.parentNode.removeChild(div);

                       }
                    }
                    showNotice(ret.notice,onSuccess,ret);
                 },
    'method':"GET",
    'data':'',
    'retType':'json',
    'url': base+'comments/del/'+id+file_ext
    });
  }
  return false;
}

function addComment(ret){
  var html = noticeOnHideParams.html;
  var div = node('commentsList');
  div.innerHTML+=html;
  //var forma = node('commentform');
  //forma.reset();
}

function download(type,param){

  window.location = base+'download/'+type+'/'+param+file_ext;
  return true;

}


function denied(){
  showNotice('К сожалению у вас не достаточно прав для просмотра этой страницы');
}

/*
function var_dump () {

    var output = "", pad_char = " ", pad_val = 4, lgth = 0, i = 0, d = this.window.document;    var getFuncName = function (fn) {
        var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
        if (!name) {
            return '(Anonymous)';
        }        return name[1];
    };

    var repeat_char = function (len, pad_char) {
        var str = "";        for (var i=0; i < len; i++) {
            str += pad_char;
        }
        return str;
    };    var getScalarVal = function (val) {
        var ret = '';
        if (val === null) {
            ret = 'NULL';
        }        else if (typeof val === 'boolean') {
            ret = 'bool('+val+')';
        }
        else if (typeof val === 'string') {
            ret = 'string('+val.length+') "'+val+'"';        }
        else if (typeof val === 'number') {
            if (parseFloat(val) == parseInt(val, 10)) {
                ret = 'int('+val+')';
            }            else {
                ret = 'float('+val+')';
            }
        }
        else if (val === undefined) {            ret = 'UNDEFINED'; // Not PHP behavior, but neither is undefined as value
        }
        else if (typeof val === 'function') {
            ret = 'FUNCTION'; // Not PHP behavior, but neither is function as value
        }        return ret;
    };

    var formatArray = function (obj, cur_depth, pad_val, pad_char) {
        var someProp = '';        if (cur_depth > 0) {
            cur_depth++;
        }

        var base_pad = repeat_char(pad_val*(cur_depth-1), pad_char);        var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
        var str = "";
        var val='';

        if (typeof obj === 'object' && obj !== null) {            if (obj.constructor && getFuncName(obj.constructor) === 'PHPJS_Resource') {
                return obj.var_dump();
            }
            lgth = 0;
            for (someProp in obj) {                lgth++;
            }
            str += "array("+lgth+") {\n";
            for (var key in obj) {
                if (typeof obj[key] === 'object' && obj[key] !== null) {                    str += thick_pad + "["+key+"] =>\n"+thick_pad+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
                } else {
                    val = getScalarVal(obj[key]);
                    str += thick_pad + "["+key+"] =>\n"+thick_pad + val + "\n";
                }            }
            str += base_pad + "}\n";
        } else {
            str = getScalarVal(obj);
        }        return str;
    };

    output = formatArray(arguments[0], 0, pad_val, pad_char);
    for (i=1; i < arguments.length; i++) {        output += '\n'+formatArray(arguments[i], 0, pad_val, pad_char);
    }

    if (d.body) {
    return output;
        this.echo(output);    }
    else {
        try {
            d = XULDocument; // We're in XUL, so appending as plain text won't work
            this.echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">'+output+'</pre>');        }
        catch (e) {
            this.echo(output); // Outputting as plain text may work in some plain XML
        }
    }

 }

*/


var UTF8 = {

  // public method for url encoding
  encode : function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

      var c = string.charCodeAt(n);

      if (c < 128) {
        utftext += String.fromCharCode(c);
      }
      else if((c > 127) && (c < 2048)) {
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128);
      }
      else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128);
      }

    }

    return utftext;
  },

  // public method for url decoding
  decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

      c = utftext.charCodeAt(i);

      if (c < 128) {
        string += String.fromCharCode(c);
        i++;
      }
      else if((c > 191) && (c < 224)) {
        c2 = utftext.charCodeAt(i+1);
        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
        i += 2;
      }
      else {
        c2 = utftext.charCodeAt(i+1);
        c3 = utftext.charCodeAt(i+2);
        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
        i += 3;
      }

    }

    return string;
  }

}


var JSON = JSON || {};

// implement JSON.stringify serialization
JSON.encode = JSON.stringify || function (obj) {

  var t = typeof (obj);
  if (t != "object" || obj === null) {

    // simple data type
    if (t == "string") obj = '"'+obj+'"';
    return String(obj);

  }
  else {
 
    // recurse array or object
    var n, v, json = [], arr = (obj && obj.constructor == Array);

    for (n in obj) {
      v = obj[n]; t = typeof(v);

      if (t == "string") v = '"'+v+'"';
      else if (t == "object" && v !== null) v = JSON.encode(v);

      json.push((arr ? "" : '"' + n + '":') + String(v));
    }

    return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
  }
};


// implement JSON.parse de-serialization
JSON.decode = JSON.parse || function (str) {
  if (str === "") str = '""';
  eval("var p=" + str + ";");
  return p;
};


function clone(o) {
  if(!o || "object" !== typeof o)  {
    return o;
  }
  var c = "function" === typeof o.pop ? [] : {};
  var p, v;
  for(p in o) {
    if(o.hasOwnProperty(p)) {
      v = o[p];
      if(v && "object" === typeof v) {
        c[p] = clone(v);
      }
    else c[p] = v;
    }
  }
  return c;
}
