﻿/// <reference path="jquery-1.3.2-vsdoc2.js" />
//
//  URBAN SUMMER DIGITAL CREATIVE
//
//  @ Project : AUDI
//  @ File Name : Widgets.js
//  @ Date : 20/9/2009
//  @ Author : Otávio Augusto Soares
//
//
Widget = {
    cookieName: 'audiIndexadorOrder',
    //cookieName : 'audiIndexadorOrderNew',
    presentationTitle: 'Apresentação Audisfera',
    //presentationTitle: 'Audi R8 in Maranello',
    presentationUrl: 'http://www.youtube.com/v/WvwJiX5ierM&hl=pt&fs=1',
    //presentationUrl: 'http://www.youtube.com/v/QcDdfrYDVqY&hl=pt_BR&fs=1&',
    cookieExpiry: 365,
    boxTotalWidth: 448,
    numCollumns: 2,
    isUpdate: false,
    contentLoaded: false,
    updateInterval: 300, //segundos
    aba: null,
    keywords: '',
    searchAll: true,
    abaObject: null,
    moreQtde: 24,
    allowedChars: 50,
    initiatize: function(tipo) {
        this.defineResolution();

        $(window).resize(function() {
            if (resizeTimer) clearTimeout(resizeTimer);
            var resizeTimer = setTimeout(Widget.defineResolution, 100);
        });

        this.aba = tipo;
        this.abaObject = $('.conteudoPrincipal.' + this.aba);

        this.create();

        $("#divConteudoGeral").show();
        this.call();
    },
    create: function() {
        var order = this.restoreOrder();
        var column = $(".column");
        $.each(order, function(i) {
            if (this != "" && null != this)
                column.append(Widget.getTemplate(this));
        });
    },
    call: function() {
        setTimeout(function() {
            Widget.list(Widget.load(), null, Widget.show);
        }, 500);
    },
    show: function() {
        Widget.applySortable();
        Widget.highlight("dl.widget ul", this.abaObject);
        Widget.applyScroll(".widgetScroll", this.abaObject);

        Widget.update();
        $(".widget-loading").hide();
    },
    checkExists: function(arr, id) {
        if (arr.length < 1) return true;

        var ret = true;

        $.each(arr, function() {
            if (parseInt(this) == id) {
                ret = false;
                return false;
            }
        });
        return ret;
    },
    list: function(item, scrollContainer, callback) {
        var container, tab, obj, otherobj;
        tab = this.aba == 'audi' ? 1 : 2;
        obj = this.abaObject;

        try {
            $.each(item, function(i) {
                var container = obj;
                Widget.insert(Widget.areas[this.Type.toLowerCase()], this, container);
            });
        }
        catch (Error) { }
        this.update(scrollContainer);
        this.contentLoaded = true;

        if (typeof (callback) === 'function')
            callback.call();
    },
    insert: function(elem, item, container) {
        try {
            var newitem = $('<li></li>');
            if (item.Exclusivo) newitem.addClass('exclusivo');
  
            switch (item.Type.toLowerCase()) {
                case "youtube":
                    var videoplayer = $(this.areas.videoplayer, container);
                    if ($("dd", videoplayer).children().hasClass('widget-loading')) {
                        if (this.firstAccess())
                            this.setVideo(this.presentationUrl, this.presentationTitle, container);
                        else
                            this.setVideo(item.Url, item.Title, container);
                    }
                    newitem
					.append($('<a></a>')
						.attr('href', item.Url)
						.attr('title', item.Title)
						.append($('<img />')
							.attr('src', item.Thumb)
							.attr('alt', item.Title)
						)
						.append($('<span></span>')
							.addClass('videoLength')
							.text(item.Time)
						)
						.append($('<span></span>')
							.addClass('maskVideo')
						)
					);
                    break;
                default:
                    if (item.Thumb) {
                        newitem
						.append($('<span></span>')
							.addClass('img')
							.append($('<a></a>')
								.attr('href', item.Url)
								.attr('target', '_blank')
								.attr('title', item.Type.toLowerCase() == 'twitter' ? item.Creator : item.Title)
								.append($('<img />')
									.attr("src", item.Thumb ? item.Thumb : links.img)
									.attr("alt", item.Type.toLowerCase() == 'twitter' ? item.Creator : item.Title)
								)
							)
						);
                    }

                    newitem
					.append($('<h3></h3>')
						.append($('<a></a>')
							.attr('href', item.Url)
							.attr('target', '_blank')
							.attr('title', item.Type.toLowerCase() == 'twitter' ? item.Creator : item.Title)
							.attr('id', item.Id)
							.text(item.Type.toLowerCase() == 'twitter' ? this.limitCharacters(item.Creator, this.allowedChars) : this.limitCharacters(item.Title, this.allowedChars))))
					.append($('<p></p>')
						.append($('<strong></strong>')
							.append($('<a></a>')
								.attr('href', item.Url)
								.attr('target', '_blank')
								.attr('title', item.Title)
								.attr('id', item.Id)
								.html(this.limitCharacters(item.Content, this.allowedChars))
							)
						)
					)
                    break;
            }

            $(elem, container).append(newitem);
        } catch (Error) { }
    },
    applyScroll: function(elem, cont) {
        $(elem, cont).jScrollPane({
            scrollbarWidth: 15,
            scrollbarMargin: 0,
            showArrows: true,
            dragMinHeight: 46,
            dragMaxHeight: 46,
            percentLoadMore: 0.8,
            onContentEnd: function(scroll, container) {

                var type = container.closest("dl.widget").attr("id");

                $(".widget-loading", container.closest("dd")).show();
                Widget.currentPages[type]++;

                var service = new ServiceSearch();
                var ret = service.paginar(Widget.currentPages[type], Widget.moreQtde, Widget.keywords, "APROVADO", type.toUpperCase(), "AUDI");

                if (null != ret) {
                    Widget.isUpdate = true;
                    Widget.list(ret, container);
                } else { Widget.currentPages[type]--; }

                $(".widget-loading").hide();
                setTimeout(function() {
                    scroll.data('loadingMore', false);
                }, 1000);
            }
        });

    },
    applySortable: function() {
        $(".column", this.abaObject).sortable({
            connectWith: '.column',
            handle: 'dt',
            helper: 'clone',
            cursor: 'move',
            appendTo: 'body',
            update: function() { Widget.saveOrder(); }
        });
        $("dl.widget", this.abaObject).addClass("ui-widget ui-widget-content ui-helper-clearfix")
			.find("dt")
				.addClass("ui-widget-header")
			.find("dd")
				.addClass("ui-widget-content")


        $(".column", this.abaObject).disableSelection();

        $("dl.widget > dt a", this.abaObject).unbind("click").click(function(e) {
            e.preventDefault();
            Widget.toggle($(this).parents("dl.widget"));
        });
    },
    toggle: function(elem) {
        $("dd", elem).slideToggle(function() {
            $("dt", elem).toggleClass("on");
        });
    },
    highlight: function(elem) {

        $("li", $(elem))
			.removeClass("on")
			.unbind("hover")
			.hover(
			function() {

			    $("li", $(this).parent()).removeClass("on");
			    $(this).addClass("on");
			},
			function() {
			    if ($(this).parents().hasClass("garagemaudi")) {
			        $(this).removeClass("on");
			    }
			}
		);
        $("li:first", $(elem)).addClass("on");
    },
    load: function() {
        var service = new ServiceSearch();
        return service.list(this.keywords, "APROVADO", this.searchAll);
    },
    getTemplate: function(widgetID) {

        var item = $('<dl></dl>')
						.addClass('widget')
						.attr('id', widgetID)
					.append($('<dt></dt>'))
					.append($('<dd></dd>')
						.append($('<div></div>')
							.addClass("widget-loading")));

        var opt = this.widgetTitles[widgetID];

        if (opt.imgTitle && typeof (opt.imgTitle) == 'boolean') {
            $("dt", item).append($('<img />')
				.attr('src', opt.src)
				.attr('width', opt.width)
				.attr('height', opt.height)
				.attr('alt', opt.alt));
        }
        else {
            $("dt", item).text(opt.imgTitle);
        }

        if (opt.canHide) {
            $("dt img", item).wrap('<a href="" title="Fechar"></a>');
        }

        if (opt.scrollable) {
            $("dd", item).append($("<div></div>")
								.addClass("widgetScroll")
								.append($('<ul></ul>')));
        }
        return item;

    },
    widgetTitles: {
        'videoplayer': {
            'src': null,
            'width': null,
            'height': null,
            'alt': null,
            'scrollable': false,
            'canHide': false,
            'imgTitle': "Vídeo Player"
        },
        'youtube': {
            'src': '/Util/Img/sobreAudi/titVideosRelacionados.gif',
            'width': 155,
            'height': 14,
            'alt': 'Vídeos relacionados',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'news': {
            'src': '/Util/Img/sobreAudi/titNews.gif',
            'width': 38,
            'height': 11,
            'alt': 'News',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'lemans': {
            'src': '/Util/Img/sobreAudi/titLeMans.gif',
            'width': 57,
            'height': 11,
            'alt': 'Le Mans',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'garagemaudi': {
            'src': '/Util/Img/sobreAudi/titGaragemAudi.gif',
            'width': 101,
            'height': 11,
            'alt': 'Garagem Audi',
            'scrollable': true,
            'canHide': false,
            'imgTitle': true
        },
        'blog': {
            'src': '/Util/Img/sobreAudi/titBlogs.gif',
            'width': 42,
            'height': 11,
            'alt': 'Blogs',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'twitter': {
            'src': '/Util/Img/sobreAudi/titTwitter.gif',
            'width': 58,
            'height': 11,
            'alt': 'Twitter',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'auditradition': {
            'src': '/Util/Img/sobreAudi/titAudiTradition.gif',
            'width': 108,
            'height': 11,
            'alt': 'Audi Tradition',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'audimagazine': {
            'src': '/Util/Img/lifeStyle/titAudiMagazine.gif',
            'width': 108,
            'height': 11,
            'alt': 'Audi Magazine',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'mural': {
            'src': '/Util/Img/sobreAudi/titMuralRecados.gif',
            'width': 129,
            'height': 11,
            'alt': 'Mural de Recados',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        },
        'lifestyle': {
            'src': '/Util/Img/sobreAudi/titLifestyle.gif',
            'width': 66,
            'height': 11,
            'alt': 'Lifestyle',
            'scrollable': true,
            'canHide': true,
            'imgTitle': true
        }
    },
    currentPages: {
        'youtube': 1,
        'news': 1,
        'lemans': 1,
        'garagemaudi': 1,
        'blog': 1,
        'twitter': 1,
        'auditradition': 1,
        'audimagazine': 1,
        'mural': 1,
        'lifestyle': 1
    },
    saveOrder: function() {
        $.cookie(this.cookieName + 'AudiCol', $('.column', this.abaObject).sortable("toArray"), { expires: this.cookieExpiry, path: "/" });
    },
    restoreOrder: function() {
        var order = new Array();
        var cookieCol;

        cookieCol = $.cookie(this.cookieName + 'AudiCol');

        if (cookieCol != null) {
            order = cookieCol.split(",");
        }
        else {
            order = Array('videoplayer', 'garagemaudi', 'youtube', 'blog', 'news', 'twitter', 'lemans', 'auditradition', 'audimagazine', 'lifestyle');
        }
        return order;
    },
    reset: function(showAll) {
        this.contentLoaded = false;

        $.each(this.currentPages, function(i) {
            Widget.currentPages[i] = 1;
        });

        $.each(this.areas, function(i, val) {
            if (showAll == true || (showAll == false && i != 'lemans' && i != 'lifestyle' && i != 'audimagazine' && i != 'auditradition')) {

                switch (i) {
                    case 'videoplayer':
                        var videoplayer = $(Widget.areas.videoplayer);
                        $("dt *", videoplayer).remove();
                        $("dt", videoplayer).text('Vídeo Player');
                        $("dd *", videoplayer).remove();
                        $("dd", videoplayer).append($('<div class="widget-loading"></div>'));
                        break;
                    default:
                        $(val).parents('.jScrollPaneContainer').replaceWith('<div class="widgetScroll"><ul></ul></div>');
                        break;
                }
            }
        });
        $(".widget-loading").show();
    },
    search: function(keywords, showAll) {
        this.reset(showAll);
        this.keywords = keywords;
        this.searchAll = showAll;
        this.call();
    },
    limitCharacters: function(text, qtde) {
        text = text.replace(/<[^>]*>/g, "");
        return text.length > qtde ? text.substring(0, qtde) + '...' : text;
    },
    setVideo: function(url, titulo, cont) {
        var videoplayer = $(this.areas.videoplayer, cont);
        $("dt", videoplayer).text(this.limitCharacters(titulo, 45));
        $("dd", videoplayer).html('<object width="428" height="264"><param name="movie" value="' + url + '&autoplay=1"></param><param name="allowFullScreen" value="true"><param name="wmode" value="transparent"></param><param name="allowscriptaccess" value="always"></param><embed src="' + url + '&autoplay=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="428" height="264"></embed></object>');
    },
    update: function(scrollCont) {
        if (this.isUpdate) {
            this.highlight("dl.widget ul", this.abaObject);
            this.applyScroll(".widgetScroll", scrollCont);
            this.isUpdate = false;
        }
        this.check();
    },
    areas: {
        'videoplayer': 'dl#videoplayer',
        'youtube': 'dl#youtube ul',
        'blog': 'dl#blog ul',
        'twitter': 'dl#twitter ul',
        'lemans': 'dl#lemans ul',
        'auditradition': 'dl#auditradition ul',
        'garagemaudi': 'dl#garagemaudi ul',
        'news': 'dl#news ul',
        'audimagazine': 'dl#audimagazine ul',
        'mural': 'dl#mural ul',
        'lifestyle': 'dl#lifestyle ul'
    },
    check: function() {
        var childs, elem;
        $.each(this.areas, function(i, val) {
            childs = -1;
            switch (i) {
                case 'videoplayer':
                    var videoplayer = $(Widget.areas.videoplayer, Widget.abaObject);
                    childs = $("dd", videoplayer).children().length - 1; // -1 pq a div de loading está dentro dele				
                    if (childs <= 0) {
                        $("dd", videoplayer).append($('<div></div>').addClass('nocontent').text('Nenhum conteúdo encontrado'));
                    }
                    break;
                default:
                    childs = $(val, Widget.abaObject).children().length;
                    if (childs <= 0) {
                        $(val, Widget.abaObject).append($('<li></li>').addClass('nocontent').text('Nenhum conteúdo encontrado'));
                    }
                    break;
            }
        });
    },
    firstAccess: function() {
        var ret = false;
        firstAccess = $.cookie('audiIndexadorAccess');

        if (null == firstAccess) {
            ret = true;
            $.cookie('audiIndexadorAccess', Date(), { expires: 365, path: "/" });
        }

        return ret;
    },
    defineResolution: function() {
        var win_w = $(window).width();
        var visible = parseInt(win_w / Widget.boxTotalWidth);
        $("#divConteudoGeral").width(visible * Widget.boxTotalWidth);
        $(".contentWrapper").width((visible * Widget.boxTotalWidth) + 20);
    }
}