var timer = new Timeout(Updater.toLambda(), 2000, false);
var updater = null;
var $tabs = null;
var $firstLoad = 1;
var $lockUpdate = 0;

$.fn.scrollMax = function(){
    if( $(this)[0] == undefined ){
        return -1;
    }
    var max = $(this)[0].scrollHeight - $(this).outerHeight();
    return (max > 0)?max:0;
}

$.fn.canScroll = function(){
    if( $(this)[0] == undefined ){
        return false;
    }
    //debug("canScroll = " + $(this).attr('id') + " Pos = "  + $(this).scrollTop() + " Max = " + $(this).scrollMax() );
    return $(this).scrollTop() >= $(this).scrollMax();
}

$.fn.scrollBottom = function(){
    $(this).scrollTop($(this).scrollMax() + 40); //40 pour la barre de scrolling horizontale
}

/**/
String.prototype.padLeft = function(strChar, intLength){
    var str = this + '';
    while (str.length < intLength) {
        str = strChar + str;
    }
    return str;
}

String.prototype.trim = function(){
    var str = this + '';
    return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

String.prototype.isInt = function()
{
    var oRegExp = new RegExp(/\d+/);
    return oRegExp.test(this);
}

if(!Array.indexOf){
    Array.prototype.indexOf = function(obj, from){
        if( from == undefined || from == null ){
            from = 0;
        }
        for(var i=from; i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

Array.prototype.exists = function(objValue){
    return (this.indexOf(objValue, 0) >= 0);
}


function xmlentities(text){
    if( !text ){
        text = "undefined";
    }

    if(typeof(text)!="string"){
        text=text.toString();
    }
    text=text.replace(/&/g, "&amp;") ;
    //text=text.replace(/"/g, "&quot;") ;
    text=text.replace(/</g, "&lt;") ;
    text=text.replace(/>/g, "&gt;") ;
    //text=text.replace(/'/g, "&#146;") ;
    return text;
}


function xmlToString(xmlNode){
    try {
        // Gecko-based browsers, Safari, Opera.
        return (new XMLSerializer()).serializeToString(xmlNode);
    }
    catch (e) {
        try {
            // Internet Explorer.
            return xmlNode.xml;
        }
        catch (e)
        {//Strange Browser ??
            debug('Xmlserializer not supported');
        }
    }
    return false;
}


function scrollMessagesHandler(elt, room_name){
    Room.__scrollPos[room_name] = elt.scrollTop();
    Room.__scrollMax[room_name] = elt.scrollMax();
}

function strpos (haystack, needle, offset) {
    var i = (haystack+'').indexOf(needle, (offset || 0));
    return i === -1 ? false : i;
}

function debug(value, append){ // pour ajouter une stacktrace
    if( $WM.isDev() ){
        var canScroll = $('#iDebug').canScroll();
        _debug(value, append);
        if( canScroll ){
            $('#iDebug').scrollTop($('#iDebug').scrollMax() + 20); //20 pour la barre de scrolling horizontale
        }
    }
}

function _debug(value, append){
    if( typeof(value) == 'object'){
        value = jsDump.parse(value);
    }
    if( append == undefined || append == true ){
        $('#iDebug').append(value);
    }
    else{
        $('#iDebug').html(value);
    }
    $('#iDebug').append('<br/>');
}

var $debugParams = {
    'iDebug': {},
    'iAjax': {},
    'iAjax2': {}
};

function toggleDebug()
{
    var divs = [ 'iAjax', 'iAjax2', 'iDebug'];
    var div = null;
    var i = 0;
    
    if( $('#iDebug').css('display') == 'block'){

        for( i =0; i < divs.length; i++ ){
            div = divs[i];

            $debugParams[div]['height'] = $('#' + div).css('height');
            
            $('#' + div).toggle('blind', {}, 500, function(){
                $('#' + div).css('height', '0px');
                $WM.resizeChat();
            });
        }

        Cookie.set('show_debug', false);
        
    }
    else{
        for( i =0; i < divs.length; i++ ){
            div = divs[i];

            $('#' + div).css('height', $debugParams[div]['height']);

            $('#' + div).toggle('blind', {}, 500, function(){
                $WM.resizeChat();
                $('#iDebug').scrollBottom();
            });
        }
        Cookie.set('show_debug', true);
    }
}

function Load(javascript){
    var script = $('<script src="' + javascript +'" type="text/JavaScript"></script>');
    $('body').append(script);
}

function sluggify(string){
    return string;
}