/* EVENTHANDLER FOR DOMONLOAD */
/*ADD FUNCTIONS THAT SHOULD RUN ON DOM LOAD */
/* ----------------------------------------------------*/
$(document).ready(function () {
    /*##>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>## */

    String.prototype.capitalize = function () { //v1.0
        return this.replace(/\w+/g, function (a) {
            return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
        });
    };

    /* z-index fix for IE 6 & 7 */
    $(function () {
        var zIndexNumber = 500;
        $('div#related').children().each(function () {
            $(this).css('zIndex', zIndexNumber);
            zIndexNumber -= 10;
        });
    });

    $('#quicksearch').TextfieldPlaceholders();
    $('#tools').InitTools();

    $('#nav').InitNavigation();
    $('#subscribe-email').InitSubscribePopup();
    $('#gtranslate').InitTranslationSerive();
    $('#login-box').InitLoginBox();
    $('#interviews').InitInterviews();
    $('#add-organisation').InitAddOrganisations();
    /* $('#external-resources').InitExternalResources(); */

    jQuery.preLoadImages(
			'/templates/gfx/bg-nav-overlay.png'
		);

	jQuery.CSSAddons();
	
	
    //##>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>##
});

$(window).load(function () {
    /* manage image promo area*/
    $('#promo').InitPromo();
});

/* INIT xForm
----------------------------------------------------*/
var xFormPages = 0;
var xFormActivePage = 1;
(function ($) {
    $.fn.InitXform = function () {
        var form = $(this);

        if ($('.edit-profile').length > 0) { return; }

        //Add css class to checkboxes
        $("input:checkbox").addClass("checkbox");

        //CSS for XForm Validation efter postback
        //Items with css class xformvalidator are ASP.Net validator errors
        $(".xformvalidator").parent().addClass("validationerror");
        $(".xformvalidator").parent().has(":input[type='text']").addClass("inputtext");
        $(".xformvalidator").parent().has(":input[type='textarea']").addClass("inputtextarea");
        $(".xformvalidator").parent().has(":input[type='checkbox']").addClass("inputcheckbox");
        $(".xformvalidator").parent().has(":input[type='radio']").addClass("inputradio");
        $(".xformvalidator").parent().has("select").addClass("inputselect");
        

        if ($("#id_matrix").find("hr").length < 1) { return; }

        // SUBMIT BUTTON and RECAPTCHA

        $('#article').find("#recaptcha_widget_div").css("display", "none");
        $('#article').find("'#recaptcha_widget_div").css("clear", "both");
        // BUTTONS

        var strButtons = ''+
			'<div id="group-nav-bottom"><a href="#" id="xFormPrev" class="prev" style="float:left;display:block;" onclick="$(\'#xform\').XformPage(-1);return false;">Prev</a>'+
			'<a href="#" id="xFormNext" class="next" style="float:right;display:block; text-align:right;" onclick="$(\'#xform\').XformPage(1);return false;">Next</a></div>';

        $('#article').find("'input[type=submit]").css("display", "none");
        $('#article').find("'input[type=submit]").css("float", "right");
        $('#article').find("'input[type=submit]").addClass("btn");

        $('#article').find("'input[type=submit]").before(strButtons);

        $('#article').find("'input[type=submit]").appendTo("#group-nav-bottom");

        if ($('.xformvalidator').length > 0 || ($("span#recaptcha_instructions_error").length > 0 && $("span#recaptcha_instructions_error").css("display") !== "none")){
            //When this is true the form has been submitted and there are validation errors
            //Either the xform fields or the captcha.
            //Items with css class xformvalidator are ASP.Net validator errors
            $(".xformvalidator").parent().addClass("validationError");
            $('#xform').XformPage(0, true);
        }
        else{
            $('#xform').XformPage(0);
        }

    };
    $.fn.XformPage = function (page, findFirstValidationError) {

        //Argument page is 1 or -1
        xFormActivePage = xFormActivePage + page;

        var tblTr = $("tr:not(:has(div#group-nav-bottom))", "#id_matrix"),
			hRs = 1,
			bFound = false; // = a tr with a .xformvalidator child is found

        tblTr.each(function () {
            if ($(this).find("hr").length > 0) { hRs++; }
        });
        xFormPages = hRs;

        //FindFirstValidationError
        //Find the page with the first validation error and set it to the active
        hRs = 1;
		
        if (findFirstValidationError)
        {
            tblTr.each(function () {
                if (bFound)  {return;}
                if($(".xformvalidator",$(this)).length > 0){
                    xFormActivePage = hRs;
                    bFound = true;
                }
                if ($(this).find("hr").length > 0){
                    hRs++;
                }

            });
            if (!bFound) //None found - it's the captcha on last page...
			{
				xFormActivePage = hRs; //Last page
			}
        }

        //Do the paging - hide the tr:s that are not in the active page
        hRs = 1;
        tblTr.each(function () {
            if (hRs === xFormActivePage) {
                $(this).removeClass("hiddenrow");
            }
            else {
                $(this).addClass("hiddenrow");
            }
            if ($(this).find("hr").length > 0)
			{
				hRs++;
			}
        });

        if (xFormPages === xFormActivePage) {
            $('#xFormNext').css("display", "none");
            $('#article').find("'input[type=submit]").css("display", "block");
            $('#article').find("#recaptcha_widget_div").css("display", "block");
        }
        else {
            $('#xFormNext').css("display", "block");
            $('#article').find("'input[type=submit]").css("display", "none");
            $('#article').find("#recaptcha_widget_div").css("display", "none");
        }

        if (xFormActivePage == 1)
		{
			$('#xFormPrev').css("display", "none");
		}
        else
		{
			$('#xFormPrev').css("display", "block");
		}
    };
})(jQuery);

(function ($) {
    $.CSSAddons = function () {
		$('div#article div.article-links ul li:nth-child(3n+1)').css('clear','left');
	};
})(jQuery); 

/* INIT NAVIGATION
----------------------------------------------------*/
(function ($) {
    $.fn.InitNavigation = function () {
        var nav = $(this);
        var navItem = nav.find('li');
        var closeTimeOut = null;
        nav.find('a').css('z-index', '999');
        navItem.bind('mouseenter', function (navEvent) {

            var thisMenuItemId = $(this).find('a').attr('rel');
            var currMenuItemId = $('#nav-dropmenu').attr('class');

            $("#nav-dropmenu").css('z-index', '899');

            if (thisMenuItemId != currMenuItemId) {
                $('#nav-dropmenu').fadeOut('fast').delay(500).remove();
                nav.find('li').removeClass('active');
                $(this).toggleClass('active');
                var maxOffset = 950;
                var pos = $(this).position();
                var leftOffset = pos.left;
                var menuId = $(this).find('a').attr('rel');
                var currNavItem = $('#menufolds .' + menuId).clone();
                var dropMenu = $('<div id="nav-dropmenu" class="' + menuId + '"><div></div></div>');
                dropMenu.hide();
                dropMenu.css('left', leftOffset);
                dropMenu.css('z-index', '899');
                dropMenu.find('div').append(currNavItem);
                $('form').append(dropMenu);
                var menuWidth = (dropMenu.width());
                var currOffset = (0 + leftOffset + menuWidth);
                if (currOffset > maxOffset) {
                    var diff = (currOffset - maxOffset);
                    dropMenu.css('width', menuWidth - diff);
                }
                //dropMenu.fadeIn('fast');
                dropMenu.show();

                $.data(dropMenu, 'currLi', $(this));

                // Reorder
                nav.find('a').css('z-index', '900');

                $(this).find('a').bind('mouseenter', function () {
                    clearTimeout(closeTimeOut);
                });

                var closeMenu = function () {
                    dropMenu.remove();
                    $.data(dropMenu, 'currLi').removeClass('active');
                };

                dropMenu.bind('mouseleave', function (e) {
                    clearTimeout(closeTimeOut);
                    closeTimeOut = setTimeout(closeMenu, 400);
                });

                $('#header, #header .logo').bind('mouseenter', function (e) {
                    clearTimeout(closeTimeOut);
                    closeTimeOut = setTimeout(closeMenu, 400);
                });

                dropMenu.bind('mouseenter', function (e) {
                    clearTimeout(closeTimeOut);
                });
            }
            return false;
        });

        $(document).bind('click', function () {
            $('#nav-dropmenu').fadeOut('fast').delay(500).remove();
            $('#nav').find('li').removeClass('active');
        });
    };
})(jQuery);


/* INIT PAGETOOLS
----------------------------------------------------*/
(function ($) {
    $.fn.InitTools = function () {
        var tools = $(this);

        tools.find('#language').find('li:gt(0)').fadeTo(0, 0.4);
        tools.find('#language').find('li:gt(1)').fadeTo(0, 0.2);
        tools.find('#language').find('li:gt(2)').hide(0);

        tools.find('#language ul').bind('mouseenter', function () {
            tools.find('#language').addClass('active');
            $(this).find('li').fadeTo('fast', 1);
            tools.find('#language').css('z-index', '1000');
            $('#login-box').css('z-index', '900');
        }).bind('mouseleave', function () {
            tools.find('#language').removeClass('active');
            $(this).find('li:gt(0)').fadeTo(0, 0.4);
            $(this).find('li:gt(1)').fadeTo(0, 0.2);
            $(this).find('li:gt(2)').hide(0);
            tools.find('#language').css('z-index', '100');
        });

        tools.find('#worldwide').bind('mouseenter', function () {
            $(this).addClass('active');
            $('div#tools').css('z-index', '1000');
        }).bind('mouseleave', function () {
            $(this).removeClass('active');
        });

    };
})(jQuery);


/* INIT PROMO
----------------------------------------------------*/
(function ($) {
    $.fn.InitPromo = function () {

        var promo = $(this);
        var autoSwicthSeconds = 5;

        var promoDTs = promo.find('dt');
        var promoDDs = promo.find('dd');
        promoDDs.hide();
        promoDTs.hide();

        /* Create page numbers based on number of elements */
        var pages = "<ul>";
        var i = 0;
        promoDDs.each(function () {

            i++;
            var color = "";

            switch (i) {
                case 1: color = "p1"; break;
                case 2: color = "p2"; break;
                case 3: color = "p3"; break;
                case 4: color = "p4"; break;
            }

            var anchorClass = "";
            if (i == 1)
                { anchorClass = "current"; }

            pages += '<li class="' + color + '"><a href="#" class="' + anchorClass + '">' + i + '</a></li>';
        });
        pages += "</ul>";

        promo.append(pages);

        var paging = promo.find('ul a');

        var current = promo.find('ul li a.current');
        var currentIndex = paging.index(current);
        var currentClassName = current.parent().attr('class') + ' ' + current.attr('class');
        var currentDT = promo.find('dt:eq(' + currentIndex + ')');
        var currentDD = promo.find('dd:eq(' + currentIndex + ')');

        promo.find('dt:eq(' + 0 + ')').addClass('p1');
        promo.find('dd:eq(' + 0 + ')').addClass('p1');
        promo.find('dt:eq(' + 1 + ')').addClass('p2');
        promo.find('dd:eq(' + 1 + ')').addClass('p2');
        promo.find('dt:eq(' + 2 + ')').addClass('p3');
        promo.find('dd:eq(' + 2 + ')').addClass('p3');
        promo.find('dt:eq(' + 3 + ')').addClass('p4');
        promo.find('dd:eq(' + 3 + ')').addClass('p4');

        currentDT.addClass(currentClassName);
        currentDT.next().addClass('current');
        currentDT.show();
        currentDD.show();

        var switchPromo = function (newIndex) {

            var old = promo.find('ul li a.current');
            var oldIndex = paging.index(old);

            paging.removeClass('current');
            promoDTs.removeClass('current');
            promoDDs.removeClass('current');

            newPageNum = paging.eq(newIndex).addClass('current');

            var oldDT = promo.find('dt:eq(' + oldIndex + ')');
            var oldDD = promo.find('dd:eq(' + oldIndex + ')');

            var currentDT = promo.find('dt:eq(' + newIndex + ')');
            var currentDD = promo.find('dd:eq(' + newIndex + ')');

            if (oldIndex != newIndex) {
                oldDT.hide();
                oldDD.fadeOut('slow');

                currentDT.addClass('current');
                currentDD.addClass('current');

                currentDT.show();
                currentDD.fadeIn('slow');
            }

            return false;
        };

        /* Auto swicth page */
        var curPage = 1;
        var numPages = i - 1;
        var intervalSwitch = function () {
            switchPromo(curPage);
            /*curPage >= numPages ? curPage = 0 : curPage++;*/
			if(curPage >= numPages)
			{
				curPage = 0;
			}
			else{ curPage++; }
        };

        var autoInterval = setInterval(intervalSwitch, autoSwicthSeconds * 1000);

        paging.bind('click', function () {
            var currentIndex = paging.index($(this));
            switchPromo(currentIndex);

            // Reset interval
            //curPage = currentIndex + 1;
            //clearInterval(autoInterval);
            //autoInterval = setInterval(intervalSwitch, autoSwicthSeconds * 1000);
        });

        promo.bind('mouseenter', function () {
            clearInterval(autoInterval);
        });

        promo.bind('mouseleave', function () {
            autoInterval = setInterval(intervalSwitch, autoSwicthSeconds * 1000);
        });
    };
})(jQuery);

/* INIT SUBSCRIPTION POPUP
----------------------------------------------------*/
(function ($) {
    $.fn.InitSubscribePopup = function () {

        var subscribe = $(this);
        var popup = $('#subscribe-popup');
        popup.hide();

        popup.find('div.close').bind('click', function () {
            //popup.fadeTo('fast', 0);
            popup.hide();
        });

        subscribe.find('a').bind('click', function () {
            popup.css('position', 'absolute');
            //popup.fadeTo('fast', 1);
            popup.show();
        });

    };
})(jQuery);

/* INIT TRANSLATION SERVICE
----------------------------------------------------*/
(function ($) {
    $.fn.InitTranslationSerive = function () {

        var dropDown = $(this);
        var currentLanguage = 'en';

        if ($('meta[http-equiv=Content-Language]')[0])
		{
            currentLanguage = $('meta[http-equiv=Content-Language]')[0].content;
			}
        dropDown.find('a').bind('click', function () {
            if (!dropDown.hasClass('active')) {
                dropDown.addClass('active');
                dropDown.css('z-index', '1000');
                $(document).bind('mousedown', function (e) {
                    if (e.target.nodeName != "SELECT" && e.target.nodeName != "OPTION" && e.target.nodeName != "A")
					{
                        dropDown.removeClass('active');
					}
                });
            } else {
                dropDown.removeClass('active');
            }
        });

        if (typeof google != 'undefined') {
            google.language.getBranding('google-branding');

            var translate = function (toLang) {
                $.fn.translate.defaults.returnAll = true;
                $('#section').translate(currentLanguage, toLang);
                currentLanguage = toLang;
            };

            // Init language links
            dropDown.find('ul li a').each(function () {
                var lng = this.id.split("_")[1];
                $(this).bind('click', function () {
                    translate(lng);
                });
            });

            // Init languages select list
            selectElm = dropDown.find('select');
            selectElm.bind('change', function () {
                translate(this.value);
                dropDown.removeClass('active');
            });
            for (var language in google.language.Languages) {
                selectElm.append("<option value='" + google.language.Languages[language] + "'>" + language.capitalize() + "</option>");
            }
        }

    };
})(jQuery);


/* INIT LOGIN BOX
----------------------------------------------------*/
(function ($) {
    $.fn.InitLoginBox = function () {

        var loginBox = $(this);

        loginBox.find('a').bind('click', function () {
            loginBox.addClass('active');
            loginBox.find('.normal').css('display', 'block');
            $('div#tools').css('z-index', '999');
            loginBox.css('zoom', '1');
            loginBox.css('z-index', '1000');

            if (jQuery.browser.msie)
                {$('#worldwide').css('display', 'none');
				}

            $('#login-lost-password').bind('click', function () {
                loginBox.find('.normal').css('display', 'none');
                loginBox.find('.lostpassword').css('display', 'block');
            });
        });

        loginBox.find('.login-cancel').bind('click', function () {
            loginBox.removeClass('active');

            loginBox.find('.normal').css('display', 'none');
            loginBox.find('.lostpassword').css('display', 'none');

            if (jQuery.browser.msie)
			{
                $('#worldwide').css('display', 'block');
				}
        });

        loginBox.find('input.input').bind('focus', function () {
            this.value = "";
        });

    };
})(jQuery);

/* INIT INTERVIEWS
----------------------------------------------------*/
(function ($) {
    $.fn.InitInterviews = function () {

        $(this).find('a.watch').bind('click', function () {

            var listPost = $(this).parent().parent();
            var vidDiv = listPost.find('div.video');

            var overlay = $("<div></div>");
            overlay.css('position', 'fixed');
            overlay.css('*position', 'absolute');
            overlay.css('top', '0px');
            overlay.css('left', '0px');
            overlay.css('background', '#092b38');
            overlay.css('z-index', '999');
            overlay.css('width', '100%');
            overlay.css('height', '100%');

            overlay.fadeTo(1, 0);
            overlay.fadeTo('slow', 0.7, function () {
                vidDiv.css('position', 'fixed');
                vidDiv.css('*position', 'absolute');
                vidDiv.css('z-index', '1000');
                vidDiv.css('top', '150px');
                vidDiv.css('left', $('body').width() / 2 - vidDiv.width() / 2 + 20 + 'px');
                vidDiv.css('display', 'block');

                $('body').append(vidDiv);
            });

            $('body').append(overlay);

            overlay.bind('click', function () {
                vidDiv.css('display', 'none');
                listPost.append(vidDiv);
                overlay.fadeTo('slow', 0, function () {
                    overlay.detach();
                });
            });

        });

    };
})(jQuery);

/* INIT EXTERNAL RESOURCES MENU
----------------------------------------------------*/
(function ($) {
    $.fn.InitExternalResources = function () {

        var dropDown = $(this);

        dropDown.find('a').bind('mouseenter', function () {
            dropDown.addClass('active');
        });

        dropDown.bind('mouseleave', function () {
            dropDown.removeClass('active');
        });

    };
})(jQuery);

/* INIT ADD ORGANISATION OVERLAY
----------------------------------------------------*/
(function ($) {
    $.fn.InitAddOrganisations = function () {

        $('#gwp-wrapper').hide();

        $(this).bind('click', function (event) {
            $('#gwp-wrapper, #add-org-start').fadeIn();
            $('#add-organisation-overlay').animate({ 'height': $('#add-org-start').height() });
        });

        $('#gwp-wrapper .close').bind('click', function (event) {
            $('#gwp-wrapper, #suggest, #add-org-details, #thank-you').fadeOut();
        });

    };
})(jQuery);
(function ($) {
    $.fn.Show = function (section) {

        $('#add-org-start, #suggest, #add-org-details, #thank-you').fadeOut();
        $('#add-organisation-overlay').animate({ 'height': $('#' + section).height() });
        $('#' + section).fadeIn();
    };
})(jQuery);

/* PRELOAD IMAGES
----------------------------------------------------*/
(function ($) {
    var cache = [];
    // Arguments are image paths relative to the current page.
    $.preLoadImages = function () {
        var args_len = arguments.length;
        for (var i = args_len; i--; ) {
            var cacheImage = document.createElement('img');
            cacheImage.src = arguments[i];
            cache.push(cacheImage);
        }
    };
})(jQuery);

/* Textfield Placeholders v1.2 - jQuery Plugin
* Copyright (c) 2009 Palle Zingmark
* Author: Palle Zingmark, www.palleman.nu
*         Philip Hofstetter, www.gnegg.ch
* Released with the MIT License: http://www.opensource.org/licenses/mit-license.php
*/
(function ($) {
    $.fn.TextfieldPlaceholders = function () {
        var $hasNativeSupport = ('placeholder' in document.createElement('input'));
        return this.each(function () {
            var $parent = $(this);
            $parent.find('input:text[value=""],input:password[value=""]').each(function (i) {
                var $input = $(this);
                var $placeholder = $input.attr('placeholder');
                var $basecolors = ['#000000', 'rgb(0, 0, 0)'];
                var $color = $input.css('color');
                var $hascolor = jQuery.inArray($color, $basecolors);
				var $original_input = null;
                if (typeof $placeholder === 'undefined' || $placeholder === '') {
                    $placeholder = $parent.find('label[for="' + $input.attr('id') + '"]').text();
                }
                if (typeof $placeholder === 'string' || $placeholder !== '') {
                    if ($hasNativeSupport) {
                        $input.attr('placeholder', $placeholder);
                        return;
                    }
                    if ($input.attr('type') == 'password') {
                        var $proxy = $('<input type="text" />');
                        $original_input = $input;
                        $proxy.attr('class', $input.attr('class'));
                        $proxy.attr('style', $input.attr('style'));
                        $proxy.insertAfter($input);
                        $input.hide();
                        $input = $proxy;
                    }
                    $input.attr('value', $placeholder);
                    $input.attr('title', $placeholder);
                    if ($hascolor || $hascolor != -1) {
                        $input.css('color', '#aeaeae');
                    }
                    $input.bind('focus', function () {
                        if ($input.attr('value') == $placeholder) {
                            if ($original_input) {
                                $input.hide();
                                $original_input.show();
                                $input = $original_input;
                                $input.focus();
                            }
                            $input.attr('value', '');
                            $input.css('color', $color);
                        }
                    });
                    ($original_input || $input).bind('blur', function () {
                        if ($input.attr('value') === $placeholder || $input.attr('value') === '') {
                            if ($original_input) {
                                $original_input.hide();
                                $proxy.show();
                                $input = $proxy;
                            }
                            $input.attr('value', $placeholder);
                            if ($hascolor || $hascolor != -1) {
                                $input.css('color', '#aeaeae');
                            }
                        }
                    });
                }
            });
        });
    };
})(jQuery);


/* WRITE TO FIREBUG CONSOLE */
/* ----------------------------------------------------*/
var Console = function () {
    return {
        Log: function (msg, args) { if (typeof console == 'undefined') { return false; } if (!args) { args = ''; console.log(msg, args); } },
        Info: function (msg, args) { if (typeof console == 'undefined') { return false; } if (!args) { args = ''; console.info(msg, args); } },
        Warn: function (msg, args) { if (typeof console == 'undefined') { return false; } if (!args) { args = ''; console.warn(msg, args); } },
        Error: function (msg, args) { if (typeof console == 'undefined') { return false; } if (!args) { args = ''; console.error(msg, args); } }
    };
} ();
