(function ($) {
        $.fn.tgDdWidget = function (options) {
            return this.each(function (i, tgObj) {
                var self = $(this);
                var settings = {
                    dataSrc : {
                        baseURL : '/sampleData/',
                        prfx : 'EPG101_TVChannel',
                        regionID_prfx : '_region_id',
                        eventID_prfx : '_',
                        channel_prfx : '_',
                        regionConfig : 'offset_config.JSON'
                    },
                    region_list : '.region_id',
                    region_id : 73,
                    channel : 1,
                    channel_sports : undefined,
                    channel_container : '.channel-bg-container',
                    dataURL : '/test-data-dd.asp',
//                    dateTimeOveride : new Date(2010,11,15,11,00,00,00),
                    dataMethod : ''
                };
                var guideData = {};
                // If options exist, merge them with default settings
                if (options) {
                    if (options.dataSrc) {
                        $.extend( settings.dataSrc, options.dataSrc );
                        options.dataSrc = undefined;
                    }
                    $.extend( settings, options );
                }
                function getCurrentTime() {
                    var tmpDate = new Date(); tmpDate.setTime((new Date()).getTime() + settings.timeOffset);
                    return tmpDate;
                };
                function getDataSrcName(channel) {
                    var out = settings.dataSrc.baseURL;
                    var tzos_mins = 0;
                    var reg_id = ($(settings.region_list, self).children('[class="current"]').attr("val") || settings.region_id);
                    $.ajax({
                        async : false,
                        cache: false,
                        dataType: "json",
                        url: settings.dataSrc.baseURL + settings.dataSrc.regionConfig,
                        success: function(data, textStatus, XMLHttpRequest) {
                            tzos_mins = 0;
                            $(data.Time_offsets).each(function(i, item) {
                                if (item.Region_id == reg_id)
                                    tzos_mins = item.Offset_h * 60;
                            });
                        },
                        complete: function(XMLHttpRequest, statusText) {
                            var serverDT = new Date(XMLHttpRequest.getResponseHeader("Date"));
                            if (settings.dateTimeOveride != null && typeof(settings.dateTimeOveride) == 'object')
                                serverDT = new Date(settings.dateTimeOveride);
                            serverDT.setMinutes(serverDT.getMinutes() - tzos_mins);
                            settings.timeOffset = (serverDT).getTime() - (new Date()).getTime();
                            settings.now = getCurrentTime();
                            out +=
                                settings.dataSrc.prfx +
                                settings.dataSrc.channel_prfx + channel +
                                settings.dataSrc.regionID_prfx + ($(settings.region_list, self).children('[class="current"]').attr("val") || settings.region_id) +
                                settings.dataSrc.eventID_prfx + dtf(settings.now,'yyyy-mm-dd') +
                                '.JSON';
                        }
                    });
                    return out;
                };
                function callback(data) {};
                $(tgObj).bind('getData', function(event) { getData(getDataSrcName(settings.channel)); });
                function getData(dataSrc) {
                    var sportSrc = getDataSrcName(settings.channel_sports);
                    $.ajax({
                        async : false,
                        cache : false,
                        dataType : "json",
                        url: dataSrc,
                        success : function(data) {
                            if (data != null) {
                                if (sportSrc != dataSrc) {
                                    guideData = data;
                                } else {
                                    $(data.Services).each(function(i, service) {
                                        guideData.Services[guideData.Services.length] = service;
                                    });
                                }
                                // remove href if no link provided
                                $(guideData.Services).each(function(i, service) {
                                    $(service.Events).each(function(i, sevent) { sevent.Event_URL = sevent.Event_URL == null || sevent.Event_URL.length < 1 ? undefined : sevent.Event_URL; });
                                    service.Full_schedule.URL = service.Full_schedule.URL == null || service.Full_schedule.URL.length < 1 ? undefined : service.Full_schedule.URL;
                                });
                                $(tgObj).trigger('updateRegions');
                                $(tgObj).trigger('updateEventList');
                            }
                        },
                        complete: function(XMLHttpRequest, statusText) {
                            if (settings.channel_sports) {
                                if (dataSrc != sportSrc) {
                                    getData(sportSrc);
                                }
                            }
                        },
                        error : function(XMLHttpRequest, data, e) {
                            $(channel_container, self).append(
                                $('<div/>', {
                                    "class" : 'errMsg',
                                    html : 'An error has occured\n<!--\n' + e.toString() + '\n-->'
                                }).css({
                                    'text-align' : 'center',
                                    width : '100%'
                                })
                            );
                        }
                    });
                };
                $(tgObj).bind('updateRegions', function(event) {
                    var regions = guideData.Regions;
                    var selected_region_id = guideData.Selected_region_id || guideData.Regions[0].Id;
                    $(settings.region_list, self).empty();
                    $(regions).each(function(i, region) {
                        $('<a/>').text(region.Short_name).attr('href', "#").attr('val', region.Id)
                        .unbind().bind('click', function() {
                            $(this).addClass('current').siblings().removeClass('current');
                            $(tgObj).trigger('getData');
                            return false;
                        })
                        .addClass(region.Id == selected_region_id ? 'current' : '')
                        .appendTo($(settings.region_list, self));
                        if (i+1 < $(regions).length) $('<span/>').text('|').appendTo($(settings.region_list, self));
                    });
                });
                $(tgObj).bind('updateEventList', function(event) {
                    $('.channel-bg-container', self).filter(':visible').slideUp(function() {
                        $('.channel-bg-container', self).empty();
                        $(guideData.Services).each(function(i, service) {
                            var $channel_container = $('<div/>', { "class" : service.Name + " channel-container clearfix" }).appendTo($(settings.channel_container));
                            $('<div/>', { "class" : "channel-head" }).text(service.Name == 'TEN' ? 'Sport on' : 'Showing on').appendTo($channel_container);
                            var $event_list = $('<ul/>', { "class" : "event_list" }).appendTo($(settings.channel_container));
                            $(guideData.Services[i].Events).each(function(j, sevent) {
                                $('<li/>')
                                .append($('<span/>', { "class" : "time-desc" }).text(sevent.Event_date_time))
                                .append($('<a/>', { "href" : sevent.Event_URL }).text(sevent.Event_title))
                                .appendTo($event_list);
                            });
                            if (service.Full_schedule.URL != null) { $('<li/>').append($('<a/>', { "href" : service.Full_schedule.URL }).text(service.Full_schedule.Text).addClass("full-sched")).appendTo($event_list); }
                            $event_list.appendTo($channel_container);
                        });
                        $('.channel-bg-container', self).slideDown();
                     });
                 });
                try {
                    $(tgObj).trigger('getData');
                } catch (e) {
                    $(channel_container, self).append(
                        $('<div/>', {
                            "class" : 'errMsg',
                                    html : 'An error has occured\n<!--\n' + e.toString() + '\n-->'
                        }).css({
                            'text-align' : 'center',
                            width : '100%'
                        })
                    );
                }
            });
        };
    })(jQuery);

    // Main TV Guide
    (function ($) {
        $.fn.tgWidget = function (options) {
            return this.each(function (i, tgObj) {
                var self = $(this);
                var settings = {
                    dataSrc : {
                        baseURL : '/sampleData/',
                        prfx : 'EPG101_TVGuide',
                        regionID_prfx : '_region_id',
                        eventID_prfx : '_event_id',
                        channel_prfx : '_channel',
                        regionConfig : 'offset_config.JSON'
                    },
                    region_id : 73,
                    region_list : '.region_id',
                    event_data_list : '.event_date',
                    event_date_display : '.event_date_display',
                    eddFormat : 'dd mmm yyyy',
                    scroller : false,
                    guide : '.guide',
                    guideClass : 'event-listing',
                    altRowClass : 'alt',
                    dataURL : '/test-data.asp',
                    dataMethod : '',
                    fullSchedLink : '.full-sched',
//                    dateTimeOveride : new Date(2010,11,15,11,00,00,00),
                    channel:1
                };
                var guideData = {};
                // If options exist, merge them with default settings
                if (options) {
                    if (options.dataSrc) {
                        $.extend( settings.dataSrc, options.dataSrc );
                        options.dataSrc = undefined;
                    }
                    $.extend( settings, options );
                }
                function getCurrentTime() {
                    var tmpDate = new Date(); tmpDate.setTime((new Date()).getTime() + settings.timeOffset);
                    return tmpDate;
                };
                function getDataSrcName() {
                    var out = settings.dataSrc.baseURL;
                    var tzos_mins = 0;
                    var reg_id = ($(settings.region_list, self).children().first().attr("val") || settings.region_id);
                    $.ajax({
                        async : false,
                        cache: false,
                        dataType: "json",
                        url: settings.dataSrc.baseURL + settings.dataSrc.regionConfig,
                        success: function(data, textStatus, XMLHttpRequest) {
                            tzos_mins = 0;
                            $(data.Time_offsets).each(function(i, item) {
                                if (item.Region_id == reg_id)
                                    tzos_mins = item.Offset_h * 60;
                            });
                        },
                        complete: function(XMLHttpRequest, statusText) {
                            var serverDT = new Date(XMLHttpRequest.getResponseHeader("Date"));
                            if (settings.dateTimeOveride != null && typeof(settings.dateTimeOveride) == 'object')
                                serverDT = new Date(settings.dateTimeOveride);
                            serverDT.setMinutes(serverDT.getMinutes() - tzos_mins);
                            settings.timeOffset = (serverDT).getTime() - (new Date()).getTime();
                            settings.now = getCurrentTime();
                            out +=
                                settings.dataSrc.prfx +
                                settings.dataSrc.regionID_prfx + ($(settings.region_list, self).children().first().attr("val") || settings.region_id) +
                                settings.dataSrc.eventID_prfx + ($(settings.event_data_list, self).children().first().attr("val") || dtf(settings.now,'yyyy-mm-dd')) +
                                settings.dataSrc.channel_prfx + settings.channel +
                                '.JSON';
                        }
                    });
                    return out;
                };
                function callback(data) {};
                $(tgObj).bind('getData', function(event) {
                    $.ajax({
                        async : false,
                        cache: false,
                        dataType: "json",
                        url: getDataSrcName(),
                        success: function(data){
                            if (data != null) {
                                guideData = data;
                                guideData.Selected_event_date = dateFromStr(guideData.Selected_event_date || guideData.Event_dates[0]);
                                $(guideData.Event_dates).each(function(i, item) {
                                    guideData.Event_dates[i] = dateFromStr(item);
                                });
                                $(guideData.Events).each(function(i, item) {
                                    guideData.Events[i].Event_date_time = dateFromStr(item.Event_date_time);
                                    guideData.Events[i].Event_URL = item.Event_URL == null || item.Event_URL.length < 1 ? undefined : item.Event_URL;
                                });
                                $(tgObj).trigger('updateRegions');
                                $(tgObj).trigger('updateEventDates');
                                $(tgObj).trigger('updateEventList');
                                if (guideData.Full_schedule.Url != null) { $(settings.fullSchedLink, self).attr('href', guideData.Full_schedule.Url).text(guideData.Full_schedule.Text).show(); }
                                else { $(settings.fullSchedLink, self).hide(); }
                            }
                        },
                        error : function(XMLHttpRequest, data, e) {
                            $(settings.guide, self).append(
                                $('<div/>', {
                                    "class" : 'errMsg',
                                    html : 'An error has occured\n<!--\n' + e.toString() + '\n-->'
                                }).css({
                                    'text-align' : 'center',
                                    width : '100%'
                                })
                            );
                        }
                    });
                });
                $(tgObj).bind('updateRegions', function(event) {
                    var regions = guideData.Regions;
                    var selected_region_id = guideData.Selected_region_id || guideData.Regions[0].Id;
                    $(settings.region_list, self).empty();
                    $(settings.region_list, self).append($('<li/>').css({ display : 'none' }).append($('<ul/>').css({ position : 'absolute' })));
                    $(regions).each(function(i, region) {
                        var $li = $('<li/>');
                        $li.text(region.Name).attr('val', region.Id).addClass(region.Id == selected_region_id || $(regions).length < 2 ? 'current' : '').appendTo($('ul', $(settings.region_list, self)));
                        if (region.Id == selected_region_id || $(regions).length < 2) {
                            $li.clone(true).insertBefore($(settings.region_list, self).children().first())
                            .unbind().bind('click', function() { $li.addClass('current'); });
                        }
                    });
                    if ($.browser.msie && $.browser.version < 8) {
                        $('ul', $(settings.region_list, self)).css({ top : '-10px', left : '-32px' });
                    }
                    applyListEvents($(settings.region_list, self));
                });
                $(tgObj).bind('updateEventDates', function(event) {
                    var event_dates = guideData.Event_dates;
                    var selected_date = guideData.Selected_event_date;
                    $(settings.event_data_list, self).empty();
                    $(settings.event_data_list, self).append($('<li/>').css({ display : 'none' }).append($('<ul/>').css({ position : 'absolute' })));
                    $(event_dates).each(function(i, event_date) {
                        var d = event_date;
                        var $li = $('<li/>');
                        $li.text(days(d.getDay())).attr('val', dtf(event_date, "yyyy-mm-dd")).addClass(d.getTime() == selected_date.getTime() || $(event_dates).length < 2 ? 'current' : '').appendTo($('ul', $(settings.event_data_list, self)));
                        if (d.getTime() == selected_date.getTime() || $(event_dates).length < 2) {
                            $li.clone(true).insertBefore($(settings.event_data_list, self).children().first())
                            .unbind().bind('click', function() { $li.addClass('current'); });
                        }
                    });
                    if ($.browser.msie && $.browser.version < 8) {
                        $('ul li', $(settings.event_data_list, self)).css({ left : '-32px' });
                        $('ul', $(settings.event_data_list, self)).css({ top : '-10px' });
                    }
                    applyListEvents($(settings.event_data_list, self));
                });
                $(tgObj).bind('updateEventList', function(event) {
                    var now = getCurrentTime();
                    var events = guideData.Events;
                    var $guide_table = $('<table/>', { 'class' : 'event-listing' });
                    var mostRecentTime = new Date();
                    $(settings.event_date_display, self).text(dtf(guideData.Selected_event_date, settings.eddFormat));
                    $(events).each(function(i, sevent) {
                        var ed = sevent.Event_date_time;
                        if (now.getTime() >= ed.getTime()) { mostRecentTime = ed; }
                        $guide_table
                        .append(
                            $('<tr/>', { id : dtf(ed, "HH-MM") })
                            .append($('<td/>', {
//                                valign : 'top',
                                text : dtf(ed, "HH:MM ap"),
                                'class' : 'event-time'
                            }))
                            .append($('<td/>', {
//                                valign : 'top',
                                'class' : 'event-title'
                            })
                            .append($('<a/>', {
                                text : sevent.Event_title,
                                href : sevent.Event_URL,
                                target : '_top'
                            }))
                            ).addClass(i % 2 > 0 ? settings.altRowClass : '')
                        );
                    });
                    $(settings.guide, self).empty().append($guide_table);
                    var newPos = {top : $('#'+dtf(mostRecentTime, "HH-MM")).position().top - $('#'+dtf(mostRecentTime, "HH-MM")).parent().position().top, left : $('#'+dtf(mostRecentTime, "HH-MM")).position().left };
                    if ($('#'+dtf(mostRecentTime, "HH-MM")).length > 0) {
                        document.location.hash = "#" + dtf(mostRecentTime, "HH-MM");
                        $(settings.guide, self).scrollTo(newPos);
                        $('#'+dtf(mostRecentTime, "HH-MM") + " a").append($('<span/>', { text : ' (On Now)' }));
                        $('#'+dtf(mostRecentTime, "HH-MM")).addClass('most-recent');
                    } else $(settings.guide, self).scrollTo(0, 0);
                    if (settings.scroller) $(settings.guide, self).scrollBars();
                });
                try {
                    $(tgObj).trigger('getData');
                } catch (e) {
                    $(settings.guide, self).append(
                        $('<div/>', {
                            "class" : 'errMsg',
                            html : 'An error has occured\n<!--\n' + e.toString() + '\n-->'
                        }).css({
                            'text-align' : 'center',
                            width : '100%'
                        })
                    );
                }
                function dateFromStr(str) {
                    if (typeof(str) != "string") return str;
                    var dt = str.split(/[ :-]/);
                    if (dt.length < 3 ) return zeroDT(new Date());
                    else if (dt.length < 4 ) return new Date(dt[0], parseInt(dt[1])-1, dt[2], 0, 0, 0, 0);
                    else if (dt.length < 7 ) return new Date(dt[0], parseInt(dt[1])-1, dt[2], dt[3], dt[4], dt[5], 0);
                }
                function zeroDT(dateObj) {
                    dateObj = new Date(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate(), 0, 0, 0, 0);
                    return dateObj;
                }
                function applyListEvents(theList) {
                    $(theList).children().first()
                    .bind('click', function() {
                        if ($(this).next(':hidden').length > 0) $(this).next(':hidden').fadeIn('fast');
                        else $(this).next(':visible').fadeOut('fast');
                        $('li', $(this).next()).siblings().removeClass('hover');
                    });
                    $('ul li', theList).each(function(){
                        $(this).unbind().bind('click', function() {
                            var self = this;
                            $(theList).children().first().remove();
                            $(this).clone(true).insertBefore($(theList).children().first())
                            .unbind().bind('click', function() {
                                $(this).next().toggle('fast');
                                $(self).addClass('current');
                            }).addClass('current').removeClass('hover').next().fadeOut('fast');
                            $(tgObj).trigger('getData');
                        }).bind('mouseover', function() {
                            clearTimeout($(theList).data('hideTOID'));
                            $(this).siblings().removeClass('hover').removeClass('current');
                            $(this).addClass('hover');
                        }).bind('mouseout', function() {
                            $(this).removeClass('hover');
                        });
                    });
                    $(theList).unbind().bind('mouseleave', function() {
                        clearTimeout($(theList).data('hideTOID'));
                        $(theList).data('hideTOID', setTimeout(function() {
                            $(theList).children().last().fadeOut('fast');
                        }, 750));
                    }).bind('mouseover', function() {
                        clearTimeout($(theList).data('hideTOID'));
                    });
                }
            });
        }
    })(jQuery);

    function dtf(date, format) {
        var f = format;
        var h = date.getHours();
        if (f.indexOf('ap') > -1)
            h = date.getHours() == 0 ? 12 : date.getHours() > 12 ? date.getHours() -12 : date.getHours();
        f = f.replace(/HH/g, (h < 10 ? '0' : '') + h);
        f = f.replace(/MM/g, (date.getMinutes() < 10 ? '0' : '') + date.getMinutes());
        f = f.replace(/SS/g, (date.getSeconds() < 10 ? '0' : '') + date.getSeconds());
        f = f.replace(/ap/g, date.getHours() < 12 ? 'am' : 'pm');
        f = f.replace(/yyyy/g, date.getFullYear());
        f = f.replace(/mmm/g, months(date.getMonth()));
        f = f.replace(/mm/g, (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1));
        f = f.replace(/ddd/g, contractions(date.getDate()));
        f = f.replace(/dd/g, (date.getDate() < 10 ? '0' : '') + date.getDate());
        return f;
        function contractions(val) {
            var str = val + "";
            str = str.replace(/(11|12|13)$/, "$1th");
            str = str.replace(/1$/, "1st");
            str = str.replace(/2$/, "2nd");
            str = str.replace(/3$/, "3rd");
            str = str.replace(/(\d)$/, "$1th");
            return str;
        }
    }
    function days(idx) {
        var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
        if (idx != undefined && idx >= 0 && idx < 7) return days[idx];
        return days;
    }
    function months(idx) {
        var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
        if (idx != undefined && idx >= 0 && idx < 12) return months[idx];
        return months;
    }

    (function ($) {
        $.fn.scrollBars = function (options) {
            return this.each(function (i, tgObj) {
                //get the original height
                var scrollArea = $(this);
                var origHeight = scrollArea.height();
                scrollArea.height("auto");
        
                //prepare the container for new scrollbar
                scrollArea.css("overflow", "hidden");
                scrollArea.css("padding-right", parseInt(scrollArea.css("padding-right")));
                scrollArea.width(parseInt(scrollArea.width()));
                scrollArea.append("<div class=\"v_scrollbar\"><div class=\"v_scrollbar_move\"></div></div>");
        
                //get the scrollable height
                var scrollHeight = scrollArea.innerHeight();
                scrollArea.height(origHeight);
        
                //variable declarations
                var scrollbar = scrollArea.find(".v_scrollbar");
                var mover = scrollbar.find(".v_scrollbar_move");
                var scrollerHeight = parseInt(scrollbar.outerHeight(true));
        
                //EVENTS
                scrollbar.bind("mouseover", function(e) { $(this).stop(); });
        
                scrollbar.bind("mouseleave", function(e) { if (!mover.data("dragged")) $(this).stop(); });
        
                mover.bind("mousedown", function(e) { $(this).data("clickY", e.pageY-this.offsetTop); });
        
                mover.bind("dragstart", function(e) { $(this).data("dragged",true); });
        
                mover.bind("drag", function(e) {
                    var newHeight = parseInt($(this).css("top")) + parseInt(e.pageY-this.offsetTop) - parseInt($(this).data("clickY"));
                    updatePosition(newHeight);
                });
        
                function updatePosition(newHeight) {
                    newHeight = Math.max(newHeight, 0);
                    newHeight = Math.min(newHeight, parseInt(scrollbar.innerHeight())-parseInt(mover.outerHeight(true)));
                    mover.css("top",  newHeight);
        
                    var contentHeight = (newHeight/(scrollerHeight-parseInt(mover.height()))) * (scrollHeight-scrollerHeight);
                    scrollbar.css("top", contentHeight);
                    scrollArea.scrollTop(contentHeight);
                };
        
                mover.bind("dragend", function(e) {
                    $(this).data("dragged",false);
                    scrollbar.stop();
                });
        
                scrollArea.bind("mousewheel", function(event, delta) {
                    var scrollPos = mover.position().top;
                    scrollPos -= delta*15;
                    updatePosition(scrollPos);
                    return false;
                });
        
                //START
                //defaults
                scrollbar.css("top", 0);
                scrollArea.css("top",  0);
                scrollArea.scrollTop(0);
                mover.css("top", 0);
//                  mover.height(((scrollerHeight/scrollHeight)*100) + "%");
                mover.height("70px");
                mover.data("dragged",false);
        
                //turn scrollbar on/off
                if (scrollerHeight>=scrollHeight) {
                    scrollArea.css("padding-right", parseInt($(this).css("padding-right")));
                    scrollArea.width(parseInt($(this).width()));
                    scrollbar.hide();
                }
            });
        
        }
    })(jQuery);
    function getUrlVars() {
        var vars = [], hash;
        var hashes = (window.location.search.substring(1)).split('&');
        for(var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    }

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); 

/*
 * jMsAjax 0.2.2 - Microsoft Ajax jQuery Plugin
 *
 * Copyright (c) 2008 Adam Schr�der (schotime.net)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-07-12 $
 */
(function($){$.jmsajax=function(options){var defaults={type:"POST",dataType:"msjson",data:{},beforeSend:function(xhr){xhr.setRequestHeader("Content-type","application/json; charset=utf-8");},contentType:"application/json; charset=utf-8",error:function(x,s,m){alert("Status: "+((x.statusText)?x.statusText:"Unknown")+"\nMessage: "+msJSON.parse(((x.responseText)?x.responseText:"Unknown")).Message);}};var options=$.extend(defaults,options);if(options.method)
options.url+="/"+options.method;if(options.data)
{if(options.type=="GET"){var data="";for(var i in options.data){if(data!="")
data+="&";data+=i+"="+msJSON.stringify(options.data[i]);}
options.url+="?"+data;data=null;options.data="{}";}
else if(options.type=="POST")
{options.data=msJSON.stringify(options.data);}}
if(options.success)
{if(options.dataType)
{if(options.dataType=="msjson")
{var base=options.success;options.success=function(response,status)
{var y=dateparse(response);if(options.version){if(options.version>=3.5)
y=y.d;}
else{if(response.indexOf("{\"d\":")==0)
y=y.d;}
base(y,status);}}}}
return $.ajax(options);};dateparse=function(data)
{try{return msJSON.parse(data,function(key,value){var a;if(typeof value==="string"){if(value.indexOf("Date")>=0)
{a=/^\/Date\((-?[0-9]+)\)\/$/.exec(value);if(a){return new Date(parseInt(a[1],10));}}}
return value;});}
catch(e){return null;}}
msJSON=function(){function f(n){return n<10?'0'+n:n;}
//Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z';};
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapeable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapeable.lastIndex=0;return escapeable.test(string)?'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;}
return'\\u'+('0000'+
(+(a.charCodeAt(0))).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
if (value.toUTCString) { return '"\\/Date(' + (value.getTime()) + ')\\/"'; }
gap+=indent;partial=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value,rep);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value,rep);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
return{stringify:function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});},parse:function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+
(+(a.charCodeAt(0))).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');}};}();})(jQuery);
