(function ($) {
    $.xparoTwitter = {
        defaults: {
            username: "XparoGmbH", /* TwitterName */
            tweetcount: 5, /* Anzahl der Tweets die geladen werden sollen */
            mention: true, /* links zu den Mentions erstellen true/false */
            targetid: "posts1",
            container: " ",
            image: false, /* Profilbild anzeigen true/false */
            hash: "",
            userid: "",
            template: "js", /* js/html */
            templateID: "ItemTemplate", /* ID des Templates das verwendet werden soll */
            mode: "standard" /* standard - feed anzeigen, search - suche anzeigen (hashtag und user). mentions - verwendung des Usernamens
    /* url: Standard Userfeed , option userfeed mit hashtag */
        }
    };
    $.fn.extend({
        xparoTwitter: function (config, callbackFnk) {

            var config = $.extend({}, $.xparoTwitter.defaults, config);
            //    var url_s = "http://search.twitter.com/search.json?q=%23Energie+from%3"+config.username;
            //    var url_m = "http://search.twitter.com/search.json?q=%23Energie+from%3+config.username;
            config.container = this.attr("id");
            config.targetid = this.attr("id");
            switch (config.mode) {
                case "standard":
                    twitterFeed(config);
                    // console.log("standard");
                    break;
                case "search":
                    /* FIXME Wenn es keine Suchergebnisse gibt */
                    twitterSearch(config)
                    console.log("search");
                    break;
                case "mentions":
                    twitterMention(config);
                    console.log("mentions");
                    break;
                default:
                    twitterFeed(config);
                    console.log("default");
            }
            if (typeof callbackFnk == 'function') {
                callbackFnk.call(this, config);
            }

            return true;
        }
    });

    function twitterFeed(config) {
        var url = "http://twitter.com/status/user_timeline/" + config.username + ".json?count=" + config.tweetcount + "&callback=?";
        var test = $.getJSON(url, function (data) {
            if (config.template == "js") {
                $.template("twittertmpl", $("#" + config.templateID).html());
                // console.log($("#" + config.templateID).html());
            }
            var storetmpl = "";
            $.each(data, function (i, post) {
                if (i == 1) {
                    config.userid = post.user["id"];
                }
                post.text = replaceLink(post.text);
                post.text = replaceAt(post.text);
                post.text = replaceHash(post.text);
                var inreplyto = "";

                if (post.in_reply_to_screen_name != null) {
                    inreplyto = post.in_reply_to_screen_name
                }


                if (config.template == "js") {
                    // Template mit templatejs
                    /*
                    Beispiel:
                
                    <script id="ItemTemplate" type="text/x-jquery-tmpl">
                    <div class="item" id="${id}">
	                    <p class="tweet"><span>{{html text}}</span></p>
	                    <p class="account"><a href="http://www.twitter.com/${username}" target="_blank">@${username}</a></p>
	                    <p class="info">${date} via {{html source}}
                            {{if reply != null}}
                            in response to <a href="http://www.twitter.com/${reply}" target="_blank">${reply}</a>
                            {{else}}
                            {{/if}}
                        </p>
                    </div>
                    </script>
                    */
                    var dataObject = new Object;
                    dataObject.text = post.text;
                    dataObject.id = post.id;
                    dataObject.username = config.username;
                    dataObject.date = transformTime(post.created_at, post.user['utc_offset']);
                    dataObject.source = post.source;
                    
                    dataObject.reply = post.in_reply_to_screen_name;

                    // Template Plugin jquery.tmpl.js
                     console.log(dataObject);
                    $.tmpl("twittertmpl", dataObject).appendTo("#" + config.targetid);

                } else {
                    // Normales html Template ohne templatejs
                    /*
                    Beispiel:                
                    <script id="ItemTemplate2" type="text/html">
                    <div class="item" id="|TweetNumber|">
					    <p class="tweet"><span>|tweet|</span></p>
					    <p class="account"><a href="http://www.twitter.com/|username|" target="_blank">@|username|</a></p>
					    <p class="info">|date| via |source| <a href="http://www.twitter.com/|reply|" target="_blank">|reply|</a> </p>
                    </div>

                    </script>
                    */
                                    if (config.image == true) {
                                        $("#" + config.targetid).append($("#" + config.templateID).html().replace(/\|image\|/gi, '<img alt="" src="' + post.user['profile_image_url'] + '" />').replace(/\|username\|/gi, config.username).replace(/\|TweetNumber\|/gi, post.id).replace(/\|name\|/gi, post.id).replace(/\|tweet\|/gi, post.text).replace(/\|date\|/gi, transformTime(post.created_at, post.user['utc_offset'])).replace(/\|source\|/gi, post.source).replace(/\|reply\|/gi, inreplyto));
                                    }
                                    else {
                                        $("#" + config.targetid).append($("#" + config.templateID).html().replace(/\|image\|/gi, '').replace(/\|username\|/gi, config.username).replace(/\|TweetNumber\|/gi, post.id).replace(/\|name\|/gi, post.id).replace(/\|tweet\|/gi, post.text).replace(/\|date\|/gi, transformTime(post.created_at, post.user['utc_offset'])).replace(/\|source\|/gi, post.source).replace(/\|reply\|/gi, inreplyto));
                                    }
                }


            });
            // myretweet(config);
        });
    };



    function cityJoin(separator) {
        return this.data.cities.join(separator || ", ");
    }

    function getName() {
        return this.data.firstName + " " + this.data.lastName;
    }

    function index(array) {
        return $.inArray(this.data, array) + 1;
    }



    function setImage(insertImage) {
        if (insertImage == true) {
        } else {
        }

    }

    function myretweet(config) {
        //console.log("myretweet");
        //        var test = $.getJSON("http://api.twitter.com/" + config.userid + "/statuses/retweeted_by_me.json?count=5", function (data) {
        //            console.log(data);
        //        });
    }
    function twitterSearch(config) {

        var search = "";
        if (config.hash != "" && config.username != "") {
            search = config.hash + "+from%3A" + config.username;
        } else if (config.hash == "" && config.username != "") {
            search = config.username;
        } else if (config.hash != "" && config.username == "") {
            search = config.hash;
        }
        var url = "http://search.twitter.com/search.json?q=" + search + "&callback=?";
        $.getJSON(url, function (data) {
            //            console.log(data);
            $.each(data.results, function (i, results) {
                results.text = replaceLink(results.text);
                results.text = replaceAt(results.text);
                results.text = replaceHash(results.text);
                var inreplyto = "";
                if (result.in_reply_to_screen_name != null) {
                    inreplyto = result.in_reply_to_screen_name
                }

                if (config.image == true) {
                    $("#" + config.targetid).append($("#" + config.templateID).html().replace(/\|image\|/gi, '<img alt="" src="' + results.profile_image_url + '" />').replace(/\|username\|/gi, config.username).replace(/\|TweetNumber\|/gi, results.id).replace(/\|name\|/gi, results.from_user).replace(/\|tweet\|/gi, results.text).replace(/\|date\|/gi, transformTime(results.created_at)).replace(/\|source\|/gi, results.source).replace(/\|reply\|/gi, inreplyto));
                }
                else {
                    $("#" + config.targetid).append($("#" + config.templateID).html().replace(/\|image\|/gi, '').replace(/\|username\|/gi, config.username).replace(/\|TweetNumber\|/gi, results.id).replace(/\|name\|/gi, results.from_user).replace(/\|tweet\|/gi, results.text).replace(/\|date\|/gi, transformTime(results.created_at)).replace(/\|source\|/gi, results.source).replace(/\|reply\|/gi, inreplyto));
                }

            });
        });
        // anzahl der Objekte?
    };
    function twitterMention(config) {

    };

    function transformTime(mytime, offset) {
        /* FIXME SEARCH CREATE_AT */
        var dd = new Date();
        var test = dd.setTime(Date.parse(mytime.replace(/^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, "$1 $2 $4 $3 UTC")));
        //	alert(dd.getTime()+"---"+test+ "+" + offset + "="+(test+offset));
        test = test + offset;

        var min = '' + dd.getMinutes();
        if (min.length < 2) min = '0' + min;
        var mon = '' + (dd.getMonth() + 1);
        if (mon.length < 2) mon = '0' + mon;
        return dd.getDate() + '.' + mon + '.' + dd.getFullYear() + ' ' + dd.getHours() + ':' + min + ' Uhr';
    }


    /* jQuery Twitter */
    function replaceHash(text) {
        var regexp = /(?:^| )[\#]+([A-Za-z0-9-_]+)/gi;
        return text.replace(regexp, ' <a href="http://search.twitter.com/search?q=%23$1&lang=all" target=\"_blank\">#$1</a>');
    }
    function replaceAt(text) {
        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
        return text.replace(regexp, "<a href=\"http://twitter.com/$1\" target=\"_blank\">@$1</a>");
    }
    function replaceLink(text) {
        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        return text.replace(regexp, "<a href=\"$1\" target=\"_blank\">$1</a>");
    }
    function replaceEmail(text) {
        /* FIXME */
        //    var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        //    return text.replace(regexp,"<a href=\"$1\">$1</a>");
    }


})(jQuery);
