/************************************************************************************************************************************
 *    fb.wall                Facebook Wall jQuery Plguin
 *
 *    @author:            Daniel Benkenstein / neosmart GmbH
 *    @version:            1.2.5
 *    @Last Update:        09.03.2011
 *    @licence:            MIT (http://www.opensource.org/licenses/mit-license.php)
 *                        GPL    (http://www.gnu.org/licenses/gpl.html)
 *    @documentation:        http://www.neosmart.de/social-media/facebook-wall
 *    @feedback:            http://www.neosmart.de/blog/jquery-plugin-facebook-wall
 *
 ************************************************************************************************************************************/

/*
 * seriously modified!  CANNOT be replaced with a simple upgrade!
 * 2011-06-09: added accessToken
 *
 */

(function ($) {

    $.fn.fbWall = function (options) {

        var opts = $.extend({}, $.fn.fbWall.defaults, options);
        var meta = this;

        return meta.each(function () {
            $this = $(this);
            var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
            var output = '';
            var avatarBaseURL;
            var baseData;
            var graphURL = "https://graph.facebook.com/";

            /******************************************************************************************************
             * Load base data
             ******************************************************************************************************/

                //meta.addClass('fb-wall').addClass('loading').html('');
            $.ajax({
                url:graphURL + o.id + '?access_token=' + o.accessToken,
                dataType:"jsonp",
                success:function (data, textStatus, XMLHttpRequest) {
                    initBase(data);
                }
            });

            /******************************************************************************************************
             * Load feed data
             ******************************************************************************************************/

            var initBase = function (data) {
                baseData = data;

                if (data == false) {
                    meta.html('The alias you requested do not exist: ' + o.id);
                    return false;
                }
                ;

                if (data.error) {
                    meta.html(data.error.message);
                    return false;
                }
                ;
                //@todo: optimize.... (sf)
                if (o.type == 'start') {
                    o.max = 10;
                }

                $.ajax({
                    url:graphURL + o.id + "/feed?limit=" + o.max + '&access_token=' + o.accessToken,
                    dataType:"jsonp",
                    success:function (data, textStatus, XMLHttpRequest) {
                        if (o.type == 'news') {
                            initWallNews(data);
                        } else if (o.type == 'start') {
                            initWallStart(data);
                        }
                    }
                });
            }


            var initWallNews = function (input) {
                var data = input.data,
                    length = data.length,
                    max = o.chars, // war 150,
                    content;

                var count = 0;
                for (var k = 0; k < length; k++) {
                    if (data[k].message && data[k].from.name == "Uniplan" && count < 3) {

                        content = linkify(data[k].message);
                        content = ( (content != 'undefined' && content.replace(/<(?:.|\s)*?>/g, '').length > max) ? content.substring(0, max) + '...' : content );

                        output += '<li>';
                        output += '<span class="date">' + formatDate(data[k].created_time) + '</span>';
                        output += '<p><span>' + data[k].from.name + '</span> ' + content + '</p>';
                        output += '</li>';

                        count++;
                    }
                }

                meta.hide().html(output + meta.html()).fadeIn();

                $(".container.facebook ul").find('li').each(function (i) {
                    $(this).prepend('<a href="http://www.facebook.com/Uniplan" class="a" target="_blank"></a>');
                });

            }


            var initWallStart = function (input) {


                var data = input.data,
                    length = data.length,
                    obj = meta.children('div'),
                    max = o.chars, // war 150
                    content;
                var _i = 0;
                $.each(data, function (_count) {
                    if (data[_count].from.name == "Uniplan" && _i < 1) {
                        content = linkify(data[_count].message);
                        content = ( content.replace(/<(?:.|\s)*?>/g, '').length > max ? content.substring(0, max) + '...' : content );

                        output += '<h4><span>' + data[_count].from.name + '</span> ' + content + '</h4>';
                        output += '<span class="date">' + formatDate(data[_count].created_time) + '</span>';
                        _i ++;
                    }
                });
                obj.html(obj.html() + output).fadeIn();
            }


            function linkify(text) {
                if (!text) return text;
                return text.replace(
                    /((https?\:\/\/|ftp\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi,
                    function (url) {
                        return '<a target="_blank" href="' + url + '">' + getHostname(url) + '</a>';
                    }
                );
            }


            function getHostname(url) {
                var re = new RegExp('^(?:f|ht)tp(?:s)?\://([^/]+)', 'im');
                var found = (url.match(re)) ? url.match(re)[1] : false;
                if (found) {
                    return found.replace('www.', '').toString();
                }
                return url.toString();
            }


            function formatDate(dateStr) {
                var year, month, day, hour, minute, dateUTC, date, d, time;
                var pmam = ( o.lang == 'de' ? 24 : 12 );

                var date = new Date(
                    Date.UTC(
                        dateStr.substr(0, 4),
                        parseInt((dateStr.substr(5, 1) == '0') ? dateStr.substr(6, 1) : dateStr.substr(5, 2)) - 1,
                        dateStr.substr(8, 2),
                        dateStr.substr(11, 2),
                        dateStr.substr(14, 2)
                    )
                );

                day = (date.getDate() < 10) ? '0' + date.getDate() : date.getDate();
                month = date.getMonth() + 1;
                month = (month < 10) ? '0' + month : month;
                hour = date.getHours();
                minute = (date.getMinutes() < 10) ? '0' + date.getMinutes() : date.getMinutes();

                if (pmam == 12) {
                    ampm = (hour < 12) ? 'am' : 'pm';
                    if (hour == 0)hour == 12;
                    else if (hour > 12)hour = hour - 12;
                    if (hour < 10)hour = '0' + hour;
                }

                var weekday = new Array(7);

                /* DE */
                if (o.lang == 'de') {
                    weekday[0] = 'Montag';
                    weekday[1] = 'Dienstag';
                    weekday[2] = 'Mittwoch';
                    weekday[3] = 'Donnerstag';
                    weekday[4] = 'Freitag';
                    weekday[5] = 'Samstag';
                    weekday[6] = 'Sonntag';

                    if (o.type == 'news') {
                        return day + '.' + month + '.' + date.getFullYear();
                    } else {
                        return weekday[date.getDay()] + ' um ' + hour + ':' + minute;
                    }

                    /* EN */
                } else {
                    weekday[0] = "Sunday";
                    weekday[1] = "Monday";
                    weekday[2] = "Tuesday";
                    weekday[3] = "Wednesday";
                    weekday[4] = "Thursday";
                    weekday[5] = "Friday";
                    weekday[6] = "Saturday";

                    if (o.type == 'news') {
                        return (date.getFullYear() + '-' + month + '-' + day).substr(2);
                    } else {
                        return weekday[date.getDay()] + ' at ' + hour + ':' + minute + ' ' + ampm;
                    }
                }
            }

        });
    };

    /******************************************************************************************************
     * Defaults
     ******************************************************************************************************/

    $.fn.fbWall.defaults = {
        avatarAlternative:'avatar-alternative.jpg',
        avatarExternal:'avatar-external.jpg',
        id:'uniplan',
        max:5,
        translateAt:'at',
        translateLikeThis:'like this',
        translateLikesThis:'likes this',
        translateErrorNoData:'has not shared any information.',
        translatePeople:'people',
        timeConversion:12,
        useAvatarAlternative:false,
        useAvatarExternal:false,
        accessToken:'206158599425293|c930d207d7639bc78f2512c7.1-1644284296|4ZkTXcnOGB5zsNCrx_k05PdqsRo'
    };

})(jQuery);
