// SERVE LA FUNZIONE user_ico_class IN js/functions/
;(function( $ ){
	
    var functions = {
        parseStr: function (RTMdata) {
            var str = RTMdata.val;
            if (str.indexOf(" ") >= 0) {
                var mystr = str.split(' ');
            } else {
                var mystr = new Array(''+str+'');
            }
            var line = "";
            for (i = 0; i < mystr.length; i++) {
                new_str = mystr[i];
                new_str = functions.parseLink(new_str, RTMdata);
                line += new_str + ' ';
            }
            return line;
        },
        parseLink: function (str, RTMdata) {
			
            // controlla la parola se è una mail o un link e aggiunge l'ancora
            var mailRegexp = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
			
            if (mailRegexp.test(str)) { // è una mail?
                //var str = $('<a href="mailto:' + str + '" target="_blank">(link E-mail)</a>').css({ 'color':RTMdata.col , 'font-weight':RTMdata.weight , 'font-style':RTMdata.style });
                var str = '[ <a style="color:'+RTMdata.col+'; font-weight:'+RTMdata.weight+'; font-style:'+RTMdata.style+'" href="mailto:' + str + '" target="_blank">e-mail</a> ]';
                return str;
            } else { // è un link?
				
                var linkRegexp = /(^ftp|^http|^https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
				
                if (linkRegexp.test(str)) {
                    //str = $('<a href="' + str + '" target="_blank">(link Url)</a>').css({ 'color':RTMdata.col , 'font-weight':RTMdata.weight , 'font-style':RTMdata.style });
                    str = '[ <a style="color:'+RTMdata.col+'; font-weight:'+RTMdata.weight+'; font-style:'+RTMdata.style+'" href="' + str + '" target="_blank">link</a> ]';
                    return str;
                } else { // divide le parole più lunghe di 20 caratteri
                    var maxlenght = 20;
                    if(str.length > maxlenght){
                        for (var i = 0; i < Math.floor((str.length-(1+i))/maxlenght); i++) str = str.substring(0,str.length-((maxlenght+1)*i+maxlenght)) + " " + str.substring(str.length-((maxlenght+1)*i+maxlenght));
                    }
                    return str;
                }
            }
        },
        setDateTime : function(UTCmillisec){
			
            var now = new Date();
			
            // conv è la data UTC settata sul server (aggiongo 60000 millisec x ora di differenza della mia timezone)
            var conv = new Date(UTCmillisec - now.getTimezoneOffset()*60000);
			
            //console.log(now.getMonth(), conv.getMonth())
            if(now.getFullYear() == conv.getFullYear() && now.getMonth() == conv.getMonth()){
                var time = conv.toLocaleTimeString().split("GMT")[0].substr(0,5); //conv.getHours()+":"+conv.getMinutes();

                if(now.getDate() == conv.getDate())
                    return "oggi "+time;
                else if(now.getDate()-1 == conv.getDate())
                    return "ieri "+time;
                else
                    return conv.toLocaleString().split("GMT")[0];
            }else{
                return conv.toLocaleString().split("GMT")[0];
            }
        }
    };
	
    var methods = {
        init : function( rtm ) {
            
            return this.each(function(){
				
                //$(this).data('rtm', rtm);
				
                // LINE LAYOUT ///////////////////////////////

                $(this).addClass('chatline');
				
                if (rtm.data.brd) $(this).css( {
                    'border-style':'solid' ,
                    'border-color':rtm.data.brd
                    } );
                if (rtm.data.bg) $(this).css( "background-color" , rtm.data.bg );
				
                // NAME ///////////////////////////////
				
                $(this).append( $("<a href='#' class='light "+user_ico_class(rtm.from)+"'>"+rtm.from.name+": </a>") );
				
                // DATE ///////////////////////////////		
                if(rtm.data.date){
                    var datetime = functions.setDateTime(rtm.data.date);
                    $(this).append( $("<span class='date'>"+datetime+"</span>") );
                }
				
                // CONTENT ///////////////////////////////
				
                if(rtm.data.img) { // is an image?
					
                    //console.log("is an image", rtm.data.img );
					
                    switch(rtm.data.img){
                        case "error":
                            img = "<a target='_blank' href='"+rtm.data.val+"'><img src='global/img/image_error.png' width='100' height='100' title='"+rtm.data.val+"' onload='$(this).tipsy({ gravity: \"w\", type: \"light\", maxWidth: \"auto\", html: true });' /></a>";
                            break;
							
                        case "abort":
                            img = "<a target='_blank' href='"+rtm.data.val+"'><img src='global/img/image_error.png' width='100' height='100' title='"+rtm.data.val+"' onload='$(this).tipsy({ gravity: \"w\", type: \"light\", maxWidth: \"auto\", html: true });' /></a>";
                            break;
							
                        default:
                            img = "<a target='_blank' href='"+rtm.data.val+"'>"+"<img src='"+rtm.data.img+"' width='"+rtm.data.width+"' height='"+rtm.data.height+"' title='"+rtm.data.val+"<br />"+rtm.data.width+" x "+rtm.data.height+"' onload='$(this).tipsy({ gravity: \"w\", type: \"light\", maxWidth: \"auto\", html: true });' /></a>";
	
                    }
					
                    $(this).append(img);
				
                }else { // is a text
		
                    // controllo se è/contiene un link o una mail e se non contiene parole troppo lunghe
                    rtm.data.val = functions.parseStr(rtm.data);
					
                    var message = $("<span>"+rtm.data.val+"</span>").css({
                        'color':rtm.data.col ,
                        'font-weight':rtm.data.weight ,
                        'font-style':rtm.data.style
                        });
					
                    $(this).append(message);
					
                }
                    
            });
		
        },
        destroy : function( ) {
            return this.each(function(){
                $(this).removeData('rtm');
            });
        }
    };
	
    $.fn.chatline = function( method ) {
        if ( methods[method] )
        {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        }
        else if ( typeof method === 'object' || ! method )
        {
            return methods.init.apply( this, arguments );
        }
        else
        {
            $.error( 'Method ' +  method + ' does not exist on jQuery.chatline' );
        }
	
    };

})( jQuery );
