PageSourceSearch

https://cdn.freedcamp.com/frontpage/v4/js/frontpage.js?version=2145

js freedcamp.com collected 2026-09-24 08:59:46 UTC 25,633 bytes, 627 lines download raw bytes

1var fc = fc || {};
2var freezeVp = function(e) {
3    e.preventDefault();
4};
5function stopBodyScrolling (bool) {
6    if (bool === true) {
7        document.body.addEventListener("touchmove", freezeVp, false);
8    } else {
9        document.body.removeEventListener("touchmove", freezeVp, false);
10    }
11}
12function dropdownToggleCallback(action) {
13    if (fc.isMobileVersion) {
14        if (action === "open") {
15            stopBodyScrolling(true);
16            $("html").addClass("dropdown_opened");
17        } else {
18            stopBodyScrolling(false);
19            $("html").removeClass("dropdown_opened");
20        }
21    }
22    $("#hero #login_username").click().focus();
23}
24$(function(){
25    var quotes = [
26        {
27            quote: "Freedcamp is amazing stuff. I use it everyday and it helps me to maintain my sanity. Highly recommended for those juggling projects.",
28            author: "Eric Hilliard",
29            username: "erichilliard",
30            avatar: cdn_front_url + "images/quotes/erichil.jpg",
31            link: "https://twitter.com/erichilliard"
32
33        },
34        {
35            quote: "We love your product and are so glad we can help spread the news!",
36            author: "Intellitonic‏",
37            username: "Intellitonic",
38            avatar: cdn_front_url + "images/quotes/intellitonic.jpg",
39            link: "https://twitter.com/Intellitonic"
40
41        },
42        {
43            quote: "I am crushing on Freedcamp, the free project management tool. Organize any group activity today with ease.",
44            author: "Lisa Laskey Parks",
45            username: "fit_is_ageless",
46            avatar: cdn_front_url + "images/quotes/lisa.jpg",
47            link: "https://twitter.com/fit_is_ageless"
48
49        },{
50            quote: "I'm loving @Freedcamp! Best project management system yet! #designergoals",
51            author: "Rebecca Smetak",
52            username: "rsdesigncreativ",
53            avatar: cdn_front_url + "images/quotes/rebecca.jpg",
54            link: "https://twitter.com/rsdesigncreativ"
55
56        },
57        {
58            quote: "The best Project Management App is: Freedcamp, I absolutely love them",
59            author: "Milan Vuk Stankovic",
60            username: "LanmiDCS",
61            avatar: cdn_front_url + "images/quotes/milan.jpg",
62            link: "https://twitter.com/LanmiDCS"
63
64        },
65        {
66            quote: "Freedcamp is the market leader and we are proud to be a part of your community!",
67            author: "Michael Peters",
68            username: "NewJerseySPCA",
69            avatar: cdn_front_url + "images/quotes/njspca.jpg",
70            link: "https://twitter.com/NewJerseySPCA"
71
72        }
73    ];
74    var quotes2 = [
75        {
76            quote: "Shout out to @Freedcamp - we've been using it for about a week and love it!",
77            author: "SECOND STORY",
78            username: "2ndstoryagency",
79            avatar: cdn_front_url + "images/quotes/secondstory.jpg",
80            link: "https://twitter.com/2ndstoryagency"
81
82        },
83        {
84            quote: "Started using @Freedcamp for project management.  Love it!",
85            author: "Troy Coroles",
86            username: "TroyCoroles",
87            avatar: cdn_front_url + "images/quotes/troy.jpeg",
88            link: "https://twitter.com/TroyCoroles"
89
90        },
91        {
92            quote: "PM and QA are my passion, and it is a pleasure to use Freedcamp. Thank you @Freedcamp team for all your support and generous reward!",
93            author: "Robert Okadar",
94            username: "araneanetwork",
95            avatar: cdn_front_url + "images/quotes/robert.jpeg",
96            link: "https://twitter.com/araneanetwork"
97
98        },
99        {
100            quote: "My new favorite FREE project management software. Freedcamp.com",
101            author: "Tina Sullivan",
102            username: "TinaPSullivan",
103            avatar: cdn_front_url + "images/quotes/tina.jpeg",
104            link: "https://twitter.com/TinaPSullivan"
105
106        }
107    ];
108    $.autocapitalize();
109    fkit.initiatePlugins();
110    var $template = $(".reviews .review").clone();
111    var $reviews = $(".reviews");
112    $("#all_reviews").on("click", ".load_more", function(e){
113        e.preventDefault();
114        show_more_clicked = true;
115        loadTweets(quotes2);
116        // $.extend( configList, { "maxTweets": 20 } );
117        // twitterFetcher.fetch(configList);
118    });
119    var show_more_clicked = false;
120    function loadTweets(quotes) {
121        if (!show_more_clicked) {
122            $reviews.html("");
123        }
124        for (var i = 0; i < quotes.length; i++) {
125            var $new_template = $template.clone();
126            $new_template.find(".message").text(quotes[i].quote);
127            $new_template.find(".avatar").css({"background-image":"url("+quotes[i].avatar+")"});
128            $new_template.find(".first_last").text(quotes[i].author);
129            $new_template.find(".twitter").attr("href", quotes[i].link).text("@" + quotes[i].username);
130            $reviews.append($new_template);
131            //if (!show_more_clicked) {
132                $new_template.addClass("animate");
133            //}
134        }
135        if (!show_more_clicked) {
136            setWayPoints();
137        } else {
138            $(".load_more").remove();
139        }
140    }
141    setTimeout(function(){
142        loadTweets(quotes);
143    },300);
144
145
146    $(".quick_add_project_name").on("click",function(){
147            var $th = $(this);
148            $("#project_name").val($th.find(".spaced_text").text());
149            $("#project_name").focus();
150    });
151
152    function showLoadingScreenOverlay() {
153        $('.fc_home_loading_screen').css('display', 'flex')
154            .hide()
155            .fadeIn(function () {
156                setTimeout(function () {
157                    setTimeout(function () {
158                        $('.fc_task_popover_single').first().addClass('donedone');
159                    }, 1000);
160                    setTimeout(function () {
161                        $('.fc_task_popover_single:nth-of-type(2)').addClass('donedone');
162                    }, 3900);
163                    setTimeout(function () {
164                        $('.fc_task_popover_single:nth-of-type(3)').addClass('donedone');
165                    }, 6700);
166                }, 500);
167            });
168    }
169    function hideLoadingScreenOverlay() {
170        $('.fc_home_loading_screen').hide();
171        $('.fc_task_popover_single.donedone').removeClass('donedone');
172    }
173
174    $(".register_form").submit(function(e){
175        e.preventDefault();
176        
177        if (!$(".a_js_token").length) {
178            var t = $('input[name=a_token]');
179            if (t.length) {
180                var val = t.first().val();
181                t.parents('form').append("<input class='a_js_token' type='hidden' name='a_js_token' value='" + val + "'>");
182            }
183        }
184
185        var $th = $(this);
186        var entered_email = $th.find('input[name=email]');
187        var entered_email_val = entered_email.val();
188        if(!fc.validateEmail(entered_email_val)) {
189            entered_email.addClass("error").parents(".field").addClass("error_field")
190                .parents(".group").addClass("error_group");
191            entered_email.focus();
192            return;
193        }
194        showLoadingScreenOverlay();
195        var url = base_url + "register";
196        ajaxRequest(url, $th.serializeFormJSON(), function(response) {
197            if (response.data.f_error) {
198                hideLoadingScreenOverlay();
199                $th[0].processErrors(response.data.errors,true);
200                if (response.message) {
201                    alert(response.message);
202                }
203                return;
204            }
205            window.location = response.data.redirect_to;
206        });
207    });
208    
209    if ($(".first_last").val() !== "") {
210        $(".register_form").submit();
211    }
212    var scroll_when = [
213        { elem: "#features_tasks .section_title", add_to: "#features_tasks .section_title", offset: 50},
214        { elem: "#features_tasks .feature_column_left", add_to: "#features_tasks .feature_column_left,#features_tasks .browser-container", offset: 650},
215        { elem: "#register_follow_up .section_inner", add_to: "#register_follow_up .section_inner", offset: 200},
216        { elem: "#features_apps .section_title", add_to: "#features_apps .section_title", offset: 100},
217        { elem: "#features_apps .feature_column_left", add_to: "#features_apps .feature_column_left,#features_apps .browser-container", offset: 880},
218        { elem: "#mobile .mobile_content", add_to: "#mobile .mobile_content,#mobile .iphone, #mobile .app-icon", offset: 300},
219        { elem: "#features_modules .section_title", add_to: "#features_modules .section_title", offset: 30},
220        { elem: "#features_modules .feature_list", add_to: "#features_modules .feature_list .feature", offset: 460},
221        { elem: "#main_user_review .section_inner", add_to: "#main_user_review .section_inner", offset: 100},
222        { elem: "#all_reviews .section_title", add_to: "#all_reviews .section_title", offset: 30},
223        { elem: "#all_reviews .reviews", add_to: "#all_reviews .review", offset: 461},
224        { elem: "#register_final .section_inner", add_to: "#register_final .section_inner", offset: 30},
225        { elem: "footer .section_inner", add_to: "footer .section_inner", offset: 10}
226    ];
227    function isElementInViewport (el, offset) {
228        var $el = el;
229        if (typeof jQuery === "function" && el instanceof jQuery) {
230            el = el[0];
231        }
232        if (typeof el === "undefined")
233            return;
234        var rect = el.getBoundingClientRect();
235        return (rect.top + offset >= 0 &&
236        rect.left >= 0 &&
237        rect.bottom - offset <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
238        rect.right <= (window.innerWidth || document.documentElement.clientWidth));
239    }
240    function addAnimateClass($elem, $animate, offset) {
241        if ( isElementInViewport($elem, offset) && !$animate.hasClass("animate")) {
242            $animate.addClass("animate");
243        }
244        $(window).scroll(function() {
245            if ( isElementInViewport($elem, offset) && !$animate.hasClass("animate") ) {
246                $animate.addClass("animate");
247            }
248        });
249    }
250    function setWayPoints() {
251        for ( var i = 0; i < scroll_when.length; i++ ) {
252            addAnimateClass($(scroll_when[i].elem), $(scroll_when[i].add_to), scroll_when[i].offset);
253        }
254    }
255
256    $(".feature_toggle").each(function(){
257        var self = this;
258        self.$th = $(this);
259        self.$feature_list = self.$th.find(".feature_list");
260        self.$browser = self.$th.find(".feature_screenshot_list");
261        self.$feature_list.on("click", ".feature", function(e){
262            self.$browser.find("li").hide();
263            self.$feature_list.find("li").removeClass("active");
264            $(this).addClass("active");
265            self.$browser.find("li").eq($(this).index()).css({"display":"block"}).addClass("animate");
266        });
267        self.$feature_list.find("li:first-child").click();
268    });
269
270    $(".go_to_signup").on("click", function(e){
271        e.preventDefault();
272        var $scroll_to = fc.isMobileVersion ? $("#register .register_form") : $("#hero");
273        var offset_to = fc.isMobileVersion ? -20 : 100;
274        $('html, body').animate({
275            scrollTop: $scroll_to.offset().top + offset_to
276        }, 700);
277        $("#hero .email").focus();
278    });
279    $(".go_to_login").on("click", function(e){
280        e.preventDefault();
281        $('html, body').animate({
282            scrollTop: $("#hero").offset().top
283        }, 700);
284        setTimeout(function(){
285            $(".login .fkit_dropdown_activate").trigger("click");
286            $("#hero #login_username").focus();
287        },650);
288    });
289    $("a.contact, .contact_support_now").on("click",function(e){
290        e.preventDefault();
291        window.openSupportChatBotFrontpage({
292            callback: (conversationId) => {
293                $("#contact #bot_support_conversation_id").val(conversationId);
294                showContact($(this));
295            }
296        });
297    });
298    // Hide contact form
299    $(document).on("click", "a.close_popup", function(e) {
300        e.preventDefault();
301        hideContact();
302    });
303
304    var contact_popup_orig_top = 0;
305    function showContact(elem) {
306        var url = base_url + "get_contact";
307        var location = elem.hasClass('contact') ? 'footer' : 'header';
308
309        if($('.contact_dialog').length) {//already loaded
310            $('.contact_lighten, .contact_darken').fadeIn(400);
311            $('#contact').show();
312            $('#contact_success').hide();
313            setContactPopupStyles(location, elem);
314            $('.contact_dialog').fadeIn(400);
315            return true;
316        }
317
318        ajaxRequest(url, {}, function(response) {
319            $('body').prepend(response.data.html);
320            $('.contact_lighten, .contact_darken').fadeIn(200);
321            contact_popup_orig_top = parseInt($('.contact_dialog').css('top'), 10);
322
323            setContactPopupStyles(location, elem);
324            $('.contact_dialog').fadeIn(200);
325            $("#contact").submit(function(){
326                doContact();
327                return false;
328            });
329        });
330    };
331
332    function doContact() {
333        var url = base_url + "contact";
334
335        var extra_params = {onError : function(response){
336            $("form#contact")[0].processErrors(response);
337        }};
338        ajaxRequest(url, $("form#contact").serializeFormJSON(), function() {
339            $('#contact')[0].reset();
340            $('#contact').hide();
341            $('#contact_success').show();
342            setTimeout(function(){ hideContact(); }, 6000);
343        }, extra_params);
344    };
345
346    function hideContact() {
347        $('.contact_lighten, .contact_darken').removeClass('footer');
348        $('.contact_dialog').removeClass('header footer');
349        $('.contact_dialog, .contact_lighten, .contact_darken').fadeOut(1000);
350    };
351
352    function setContactPopupStyles(location, elem) {
353        var left = ($(window).width() - $('.contact_dialog').outerWidth())/2;
354        $('.contact_dialog').css({"top":contact_popup_orig_top, "bottom":'auto', "left": left});
355    }
356
357});
358
359if(is_frontpage) {
360    $(window).load(function () {
361        if ($(".preload").length) {
362            $(".preload").addClass('active');
363        }
364    });
365}
366
367$(function () {
368    var isMobile = fc.mobilecheck();
369
370    $("#login_form").on("submit", function(e){
371        e.preventDefault();
372        var $th = $(this);
373        var data = {};
374        data.username = $('#login_username').val();
375        data.password = $('#login_password').val();
376        data.remember = $('#remember_me').is(':checked') ? 1 : 0;
377        data.a_token = $('input[name="a_token"]').val();
378
379        data.f_ajax_login = 1;
380        var location = getURLParameter('location');
381        if (location) {
382            data.location = location;
383        }
384
385        var url = base_url + "login";
386
387        $("#login_loader").show();
388
389        var extra_params = {
390            onError : function(response){
391                if (response.status === "error") {
392                    var errors = response.data;
393                    if (empty(errors)) {
394                       errors = {'global_error' : response.message};
395                    }
396                    $th[0].processErrors(errors);
397                }
398                $("#login_loader").hide();
399        }};
400
401        ajaxRequest(url, data, function(response){
402            $("#login_loader").hide();
403            window.location = response.data.redirect_to;
404        }, extra_params);
405    });
406
407
408    $("#forgot_password").click(function(){
409        var url = $(this).attr("href");
410        url += "?email=" +  encodeURIComponent($("#login_username").val());
411        window.location = url;
412        return false;
413    });
414
415    $('#add_st').hover(
416        function() {
417            $('#storage_extra').fadeIn();
418        }, function() {
419            setTimeout( function() { $('#storage_extra').fadeOut(); }, 2000);
420        }
421    );
422
423    $('.start_trial').click(function(e){
424        e.preventDefault();
425        var plan_id = $(this).data("plan-id");
426        var url = base_url + "/marketplace/subscriptions/start_trial";
427        ajaxRequest(url, {plan_id : plan_id}, function(){ }, { onError: function(response){
428            $('#start_tr_err').html(response.message);
429            $.magnificPopup.open({
430                items: {
431                    src: '#error_popup',
432                    type: 'inline'
433                }
434            });        
435            //alert(response.message);
436        } });       
437    });
438
439    $('.popup__close-btn').click(function(){
440        var magnificPopup = $.magnificPopup.instance;
441        magnificPopup.close();
442//        $(this).parents(".popup").hide();
443    });
444
445    $('.fc_for_people_link').click(function(e){
446        e.preventDefault();
447        var scrollTo = $("#for_the_people").parent().offset().top - $("#main-header").height();
448        $('html, body').animate({
449            scrollTop: scrollTo
450        }, 800);
451    });
452    $('.fc_active_users_link').click(function(e){
453        e.preventDefault();
454        var scrollTo = $("#active_users").parent().offset().top - $("#main-header").height();
455        $('html, body').animate({
456            scrollTop: scrollTo
457        }, 800);
458    });
459    $('.fc_entrp_link').click(function(e){
460        e.preventDefault();
461        var scrollTo = $("#enterprise_benefits").parent().offset().top - $("#main-header").height();
462        $('html, body').animate({
463            scrollTop: scrollTo
464        }, 800);
465    });
466    $('.core_apps').click(function(e){
467        e.preventDefault();
468        var scrollTo = $("#core_apps").parent().offset().top - $("#main-header").height();
469        $('html, body').animate({
470            scrollTop: scrollTo
471        }, 800);
472    });
473    
474    $('.dropdown-hint .pricing-cell').on('click', function(e) {
475        if($(this).hasClass('expanded')) {
476            $(this).removeClass('expanded');
477        } else {
478            $('.pricing-cell.expanded').removeClass('expanded');
479            $(this).addClass('expanded');
480        }
481    });
482
483    $('.toggle').on('click', function(e) {
484        $(this).toggleClass('is-active');
485        $('.pricing-plans').find('.plan-monthly-value, .plan-yearly-value').toggleClass('hide');
486
487        var is_annual = $(this).hasClass('is-active');
488        $('.pricing-plans').find('.button-cta.checkout').each(function(){
489            $(this).attr('href', $(this).data('href') + '/' + (is_annual ? 'annual' : 'monthly'));
490        });
491    });
492});
493
494fc.mobilecheck = function () {
495    var check = false;
496    (function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);
497    return check;
498};
499
500function getURLParameter(name) {
501    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
502}
503
504
505/* REVEAL LIST VS KANBAN */
506
507jQuery(document).ready(function($){
508    //check if the .cd-image-container is in the viewport
509    //if yes, animate it
510    checkPosition($('.cd-image-container'));
511    $(window).on('scroll', function(){
512        checkPosition($('.cd-image-container'));
513    });
514
515    //make the .cd-handle element draggable and modify .cd-resize-img width according to its position
516    $('.cd-image-container').each(function(){
517        var actual = $(this);
518        drags(actual.find('.cd-handle'), actual.find('.cd-resize-img'), actual, actual.find('.cd-image-label[data-type="original"]'), actual.find('.cd-image-label[data-type="modified"]'));
519    });
520
521    //upadate images label visibility
522    $(window).on('resize', function(){
523        $('.cd-image-container').each(function(){
524            var actual = $(this);
525            updateLabel(actual.find('.cd-image-label[data-type="modified"]'), actual.find('.cd-resize-img'), 'left');
526            updateLabel(actual.find('.cd-image-label[data-type="original"]'), actual.find('.cd-resize-img'), 'right');
527        });
528    });
529});
530
531function checkPosition(container) {
532    container.each(function(){
533        var actualContainer = $(this);
534        if( $(window).scrollTop() + $(window).height()*0.5 > actualContainer.offset().top) {
535            actualContainer.addClass('is-visible');
536        }
537    });
538}
539
540//draggable funtionality - credits to http://css-tricks.com/snippets/jquery/draggable-without-jquery-ui/
541function drags(dragElement, resizeElement, container, labelContainer, labelResizeElement) {
542    dragElement.on("mousedown vmousedown", function(e) {
543        dragElement.addClass('draggable');
544        resizeElement.addClass('resizable');
545
546        var dragWidth = dragElement.outerWidth(),
547            xPosition = dragElement.offset().left + dragWidth - e.pageX,
548            containerOffset = container.offset().left,
549            containerWidth = container.outerWidth(),
550            minLeft = containerOffset + 10,
551            maxLeft = containerOffset + containerWidth - dragWidth - 10;
552
553        dragElement.parents().on("mousemove vmousemove", function(e) {
554            leftValue = e.pageX + xPosition - dragWidth;
555
556            //constrain the draggable element to move inside his container
557            if(leftValue < minLeft ) {
558                leftValue = minLeft;
559            } else if ( leftValue > maxLeft) {
560                leftValue = maxLeft;
561            }
562
563            widthValue = (leftValue + dragWidth/2 - containerOffset)*100/containerWidth+'%';
564
565            $('.draggable').css('left', widthValue).on("mouseup vmouseup", function() {
566                $(this).removeClass('draggable');
567                resizeElement.removeClass('resizable');
568            });
569
570            $('.resizable').css('width', widthValue);
571
572            updateLabel(labelResizeElement, resizeElement, 'left');
573            updateLabel(labelContainer, resizeElement, 'right');
574
575        }).on("mouseup vmouseup", function(e){
576            dragElement.removeClass('draggable');
577            resizeElement.removeClass('resizable');
578        });
579        e.preventDefault();
580    }).on("mouseup vmouseup", function(e) {
581        dragElement.removeClass('draggable');
582        resizeElement.removeClass('resizable');
583    });
584}
585
586function updateLabel(label, resizeElement, position) {
587    if(position == 'left') {
588        ( label.offset().left + label.outerWidth() < resizeElement.offset().left + resizeElement.outerWidth() ) ? label.removeClass('is-hidden') : label.addClass('is-hidden') ;
589    } else {
590        ( label.offset().left > resizeElement.offset().left + resizeElement.outerWidth() ) ? label.removeClass('is-hidden') : label.addClass('is-hidden') ;
591    }
592}
593
594// Check if mobile device to apply special JavaScript
595if(navigator.userAgent.match(/Android/i)
596    || navigator.userAgent.match(/webOS/i)
597    || navigator.userAgent.match(/iPhone/i)
598    || navigator.userAgent.match(/iPad/i)
599    || navigator.userAgent.match(/iPod/i)
600    || navigator.userAgent.match(/BlackBerry/i)
601    || navigator.userAgent.match(/Windows Phone/i)
602){
603    // WE're IN MOBILE LAND
604    fc.isMobileVersion = true;
605    $("body").addClass("fc_mobile");
606
607}
608$(function(){
609    function checkWindowWidth() {
610        if( $(window).width() < 767 ) {
611            fc.isMobileVersion = true;
612            $("body").addClass("fc_mobile");
613        } else {
614            fc.isMobileVersion = false;
615            $("body").removeClass("fc_mobile");
616        }
617    }
618
619    $("#dismiss_update_lnk").click(function(){
620        $(".updates_block").hide();
621        fc.setCookie('f_dismiss_update', 1, 365);
622        return false;
623    });
624
625    checkWindowWidth();
626    $(window).resize(checkWindowWidth);
627});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.