var imageChanger = (function () {
    var wrapper,
        currentPage = 1,
        slider,
        items,
        single,
        singleWidth,
        visible,
        pages;

    function repeat(str, num) {
        if (!num) return false;
        else return new Array( num + 1 ).join( str );
    }

    return {
        projectContainer: [],
        getCurrentPage: function() {
            return currentPage;
        },
        initChanger:  function() {
            this.projectContainer = document.getElementById('projectContainer');
            wrapper = document.getElementById('thumbProjects');

            // Add Navigation objects to the Page
            $(this.projectContainer).prepend('<div class="loader"><img width="18" height="18" src="/images/spinner.gif" alt="loading"/></div>\n<div class="prev" style="display:none;">prev</div>\n<div class="next" style="display:none;">next</div>');
            var that = this;

            // Setup click handlers for nav
            $('.prev, .leftProjectArrow', this.projectContainer).click(function () {
                return that.goToPage(currentPage - 1,1000);
            });
            $('.next, .rightProjectArrow', this.projectContainer).click(function () {
                return that.goToPage(currentPage + 1,1000);
            });
        },

        updateChanger: function(newWrapper) {
            if (newWrapper) {
                wrapper = document.getElementById(newWrapper);
            }

            slider = wrapper.getElementsByTagName('ul');

            items = $(slider).find('> li:not(.ignore)');
            single = $(items).filter(':first');

            singleWidth = single.outerWidth();
            visible = Math.ceil($(wrapper).innerWidth() / singleWidth);
            pages = Math.ceil(items.length / visible);
            currentPage = 1;

            if ((items.length % visible) != 0) {
                $(slider).append(repeat('<li class="empty" />', visible - ($(items).length % visible)));
                items = $(slider).find('> li');
            }

            items.filter(':first').before(items.slice(- visible).clone().addClass('cloned'));
            items.filter(':last').after(items.slice(0, visible).clone().addClass('cloned'));
            items = $(slider).find('> li');

            $(wrapper).scrollLeft(singleWidth * visible);
        },

        goToPage: function(page,time) {
            var dir = page < currentPage ? -1 : 1,
                n = Math.abs(currentPage - page),
                left = singleWidth * dir * visible * n;

            $(wrapper).filter(':not(:animated)').animate({
                scrollLeft : '+=' + left
            }, time, function () {
                if (page == 0) {
                    $(wrapper).scrollLeft(singleWidth * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    $(wrapper).scrollLeft(singleWidth * visible);
                    page = 1;
                }
                currentPage = page;
            });
            return false;
        }
    }
    

} ());


var currentAnchor = null;
var lastAnchor = null;
var lastPage = 1;


//anchors
function checkAnchor(forceRefresh, goToPageNum){
	var filter;

	if((currentAnchor != document.location.hash) || forceRefresh ){
		lastAnchor = currentAnchor;
		currentAnchor = document.location.hash;
        var projectsID = document.getElementById('projects');

		//filter
		if (currentAnchor.match('#filter=') || !currentAnchor) {
			if (!currentAnchor)
				filter = "showall";
			else
				filter = document.location.hash.substr(8);

			//get content
			$("#fullProject",imageChanger.projectContainer).hide();
			//$("#thumbProjects",imageChanger.projectContainer).css('overflow','hidden');
			$(".backToProjects",projectsID).fadeOut("fast", function(){
				$(".tags, .loader",projectsID).fadeIn("normal");
			});


			$.post("/gatekeeper/projects_callback.php", {
				filter: filter
			}, function(data){
				$(".loader",projectsID).fadeOut("fast");
				$("ul",imageChanger.projectContainer).html(data['data']);
				$("#thumbProjects",imageChanger.projectContainer).show();
                var tagLinks = $(".tags a",projectsID);
                tagLinks.removeClass("active");
                tagLinks.filter('a[href="#filter=' + filter + '"]').addClass("active");

				imageChanger.updateChanger('thumbProjects');
                if (forceRefresh) imageChanger.goToPage(goToPageNum,0);
                else if (lastPage != imageChanger.getCurrentPage()) imageChanger.goToPage(lastPage,0);
				$(".prev, .next",imageChanger.projectContainer).fadeIn("normal");
				if (typeof adminUpdate === 'function') {
					// Update admin items
					adminUpdate(data);
				}
			}, "json");
		} else {
			//project
			//$("#fullProject .notHere").remove();
			$("#projectWrapper, #fullProject .projectInfoDiv", imageChanger.projectContainer).remove();
			$("#thumbProjects", imageChanger.projectContainer).hide();
			$("#fullProject", imageChanger.projectContainer).show();
			$(".loader", projectsID).fadeIn("normal");
			$(".prev, .next", imageChanger.projectContainer).fadeOut("normal");
			$(".tags",projectsID).fadeOut("normal", function(){
				$(".backToProjects", projectsID).fadeIn("normal");
			});

            lastPage = imageChanger.getCurrentPage();

			$.post("/gatekeeper/projects_callback.php", {
				project: currentAnchor
			}, function(data){
				$(".loader",projectsID).fadeOut("fast");
				$("#fullProject",imageChanger.projectContainer).append(data['data']);

				if ($("#projectWrapper li",imageChanger.projectContainer).length > 1) {
					$('.leftProjectArrow, .rightProjectArrow', imageChanger.projectContainer).show();

                    imageChanger.updateChanger('projectWrapper');
					if (forceRefresh) imageChanger.goToPage(goToPageNum,0);
				} else {
					$('.leftProjectArrow, .rightProjectArrow',imageChanger.projectContainer).hide();
				}
                if (typeof adminUpdate === 'function') {
                    updateEdit("#fullProject ");
					// Update admin items
					adminUpdate(data);
				}
			}, "json");

		}

    }
}


$(document).ready(function(){

// fading nav
$(function() {
	// Add the divs to the list items - this way they're not in the actual markup
	$("#menu a").each(function(){
		if(this.className == $("body").attr("class")){
			$("#menuContainer .hover").prepend("<div class='"+this.className+" active'></div>");
			$(this).addClass("activeLink");
			$("#menuContainer .active").animate({
				height: "100px",
				margintop: "-50px",
				top: "-20px",
				opacity: 0.8
			}, 2000);
		} else {
			$("#menuContainer .hover").prepend("<div class='"+this.className+"'></div>");
		}
	});

	if (jQuery.browser.msie) {
		$("#menuContainer .hover").children().css("backgroundImage","url(/images/header_lights_IE.png)");
	}

	$("#menu a").hover(function(){
		var name = "#menuContainer .hover ." + this.className;
		$(name).stop().animate({
			height: "100px",
			margintop: "-50px",
			top: "-20px",
			opacity: 0.8
		}, 600);
	}, function(){
		var name = "#menuContainer .hover ." + this.className;
		$(name).stop().animate({
			height: "40px",
			margintop: "-20px",
			top: "15px",
			opacity: 0.0
		}, 600);
	});
});

// projects page
if ($("body").hasClass('projects')) {
    imageChanger.initChanger();

	if (!$('#fullProject').hasClass('noAjax')) {
		$('.backToProjects a').attr('href','#filter=showall');
		$('#thumbProjects',imageChanger.projectContainer).css('overflow','hidden');
		$('.prev, .next',imageChanger.projectContainer).show();
		$('#thumbProjects ul li a',imageChanger.projectContainer).each(function(){
			this.setAttribute('href','#'+this.getAttribute('href').split('/')[2]);
		});
		if (document.location.hash == '#filter=showall' || !document.location.hash) {
			currentAnchor = document.location.hash;
		}
		setInterval("checkAnchor(false,0)", 300);
		imageChanger.updateChanger();
	} else {
        imageChanger.updateChanger('projectWrapper');
		$('.leftProjectArrow, .rightProjectArrow').show();
		$('#projectWrapper').css('overflow','hidden');

	}
}

// Login Form
$('.loginBut').click(function () {
	$.post("/gatekeeper/login.php", {
				action: 'login'
			}, function(data){
				$("#pageContainer").append(data);
				$('#loginForm').fadeIn('slow');

				//close window
				$('#loginForm .logoutBut').click(function () {
					$('#loginForm').fadeOut("normal", function(){
						$(this).remove();
					});
					return false;
				});

				//submit form
				$('#loginForm #login').click(function () {
					var name = $("input#userName").val();
					if (name == "") {
						$("#loginForm li label#userNameLabel").append(' <span>*Required</span>');
						$("input#userName").focus();
						return false;
					} else {$("#loginForm li label#userNameLabel span").remove();}
					var password = $("input#password").val();
					if (password == "") {
						$("#loginForm li label#passwordLabel").append(' <span>*Required</span>');
						$("input#password").focus();
						return false;
					} else {$("#loginForm li label#passwordLabel span").remove();}

					$.post("/gatekeeper/login.php", {
							action: 'submit',
							name: name,
							password: password
						}, function(data){
							var returnArray = eval("("+data+")");
							if (returnArray['submit']){ //success
								$("#loginForm form").remove();
								$("#loginForm").append(returnArray['message']);
								$("#loginForm .success").fadeIn('normal');
								setTimeout(function () {
									$('#loginForm').fadeOut("normal", function(){
										$(this).remove();
										location.reload(true);
									});
								},1000);
							} else {
								$("#loginForm li:first").prepend(returnArray['message']);
							}
					});
					return false;
				});
			});
	return false;
});

$('.logoutBut').click(function () {
	$.post("/gatekeeper/login.php", {
				action: 'logout'
			}, function(data){
				location.reload(true);
			});
	return false;
});

// email address

$('a.emailAddress').each(function(){
	var replace_at = ' [at simbol] ';
	var replace_dot = ' [a dot] ';
	$(this).html(
		$(this).html().replace(replace_at, '@').replace(replace_dot, '.').replace(replace_dot, '.')
            ).attr('href', 'mailto:'+$(this).html()
	);
});

$('a.skypeAddress').each(function(){
	var replace_dot = ' [a dot] ';
	$(this).html(
		$(this).html().replace(replace_dot, '.')
            ).attr('href', 'callto://'+$(this).html()
	);
});

});

