$j = jQuery;

if (
    !dyn_css_rule(".to_hide", "display: none")
    || !dyn_css_rule(".to_show", "display: block")
) {
    $j(document).ready(function() {
        $j(".to_hide").hide();
        $j(".to_show").show();
    });
}

(function($){  
    $.fn.autoscroll = function() {
        $('html,body').animate(
            {
                scrollLeft: this.offset().left,
                scrollTop: this.offset().top
            },
            500
        );
        return this;
    };  
})(jQuery);
   
self.SectorSelectorManager = {
    init: function() {
        var oSelf = self.SectorSelectorManager;
        $j("#id_chosen_creative_sector").change(function() {
            var sSector = $j(this).val();
            if (sSector) {
                window.redirect("/creative-sector/" + sSector + "/");
            } else {
                window.redirect("/");
            }
            return false;
        });
    },
    destruct: function() {
        self.SectorSelectorManager = null;
    }
};

self.ActivityManager = {
    init: function() {
        var oSelf = self.ActivityManager;
        if ($j("#dyn_profiles").children("li").length > 2) {
            var aSelectors = [
                "li.navi_add_portfolio_image_" + window.settings.lang + " a",
                "li.navi_add_profile_image_" + window.settings.lang + " a",
                "li.navi_add_blog_entry_" + window.settings.lang + " a"
            ];
            $j(aSelectors.join(",")).click(oSelf.choose_profile);
        }
    },
    choose_profile: function() {
        var oSelf = self.ActivityManager;
        var $oLink = $j(this);
        self.open_popup(
            gettext("Choose profile"),
            532, "auto",
            "/helper/popup-window/choose-profile/",
            false,
            false,
            {
                onsubmit: function() {return oSelf.goto_profile($oLink);}
            }
        );
        return false;
    },
    goto_profile: function($oLink) {
        var oSelf = self.ActivityManager;
        $oProfileLink = $j("#dyn_go_to_profile");
        var oM = $oLink.parent().attr("class").match(
            /\bnavi_(\S+?)_\S\S\b/
        );
        if (oM) {
            var sUrl = $oProfileLink.val();
            switch (oM[1]) {
                case "add_portfolio_image":
                    window.redirect(sUrl + settings.URL_ID_PORTFOLIO + "/add/");
                    break;
                case "add_profile_image":
                    window.redirect(sUrl + "#edit_avatar");
                    break;
                case "add_blog_entry":
                    window.redirect(sUrl + "blog/new/");
                    break;
            }
        }
        return false;
    },
    destruct: function() {
        self.ActivityManager = null;
    }
};

self.AboutManager = {
    init: function() {
        var oSelf = self.AboutManager;
        $j("li.navi_about_" + window.settings.lang + " a").click(oSelf.show_info);
    },
    show_info: function() {
        var oSelf = self.AboutManager;
        var $oLink = $j(this);
        self.open_popup(
            "",
            532, "auto",
            "/about/",
            false,
            false,
            {}
        );
        return false;
    },
    destruct: function() {
        self.AboutManager = null;
    }
};

self.AjaxSearchManager = {
    sInProgress: '<img id="search_progress" alt="' + gettext("in progress...") + '" src="' + settings.media_url + 'js/jquery/indicator.gif" />',
    iRequests: 0,
    init: function() {
        var oSelf = self.AjaxSearchManager;
        $j("#dyn_search select").change(oSelf.sync_related);
    },
    sync_related: function() {
        var oSelf = self.AjaxSearchManager;
        var sId = $j(this).attr("id");
        var oToUpdate = $j("#" + sId + "_d");
        if (oToUpdate.length) {
            sField = sId.replace(/^id_search-/, "") + "_d";
            if (!$j("#search_progress").length) {
                $j("#dyn_search .buttons").before(oSelf.sInProgress);
            }
            var aValues = []
            $j("#dyn_search").find(":input").each(function() {
                var oElem = $j(this);
                if (oElem.attr("name")) {
                    aValues[aValues.length] = oElem.attr("name") + "=" + oElem.val();
                }
            });
            oSelf.iRequests++;
            $j.get(
                "/helper/ajax-search/"+settings.lang+"/?" + aValues.join("&"),
                self.AjaxSearchManager.update
            );
        }
    },
    update: function(sData) {
        var oSelf = self.AjaxSearchManager;
        oSelf.iRequests--;
        if (!oSelf.iRequests) {
            $j("#dyn_search_selections").html(sData);
            $j("#dyn_search select").change(oSelf.sync_related);
            $j("#search_progress").remove();
        }
    },
    destruct: function() {
        window.self.AjaxSearchManager = null;
    }
}

self.BookmarkManager = {
    init: function() {
        $j("#save_bookmark").click(function() {
            self.BookmarkManager.addBookmark(website.path);
            return false;
        });
        $j("#save_list_link a").click(function() {
            self.BookmarkManager.toggleAdding(1);
            return false;
        });
        $j("#cancel_bookmark").click(function() {
            self.BookmarkManager.toggleAdding(0);
            return false;
        });
    },
    toggleAdding: function(action) {
        // action == 0 - hide form fields for adding
        // action == 1 - show form fields for adding
    	if (action == 1) {
            $j("#save_list_link").hide();
            $j("#save_list_as").show();
    	} else {
            $j("#save_list_link").show();
            $j("#save_list_as").hide();
            $j("#error_msg").hide();
    	}
	},
    toggleRenaming: function(counter, action) {
        // action == 0 - hide form fields for renaming
        // action == 1 - show form fields for renaming
    	var oLink = $j("#bookmark_link_" + counter);
    	var oTitle = $j("#bookmark_title_" + counter);
    	if (action == 1) {
            $j("#main_functions_" + counter).hide();
            $j("#renaming_functions_" + counter).show();
    		oLink.hide();
    		oTitle.show().val(oLink.text());
    	} else {
            $j("#main_functions_" + counter).show();
            $j("#renaming_functions_" + counter).hide();
    		oLink.show();
    		oTitle.hide();
    	}
	},
	toggleDeleting: function(counter, action) {
		var sMessage = '<div class=\"errorBox\">' + gettext("Do you really want to delete this bookmark?") + '</div>';
    	var oDeletingFuncs = $j("#delete_functions_" + counter).get(0);
    	var oMainFuncs = $j("#main_functions_" + counter).get(0);
    	if (action == 1) {
    		oMainFuncs.style.display = "none";
    		oDeletingFuncs.style.display = "block";

			var oRow = $j('#bookmark_row_' + counter).get(0);
			var oRowClass = oRow.className;
			oRow.style.borderTop = '0';
			
			var confirmRow = $j('#bookmark_management').get(0).insertRow(oRow.rowIndex);
			
			var confirmColumn = document.createElement('td');
			var colspan = document.createAttribute('colspan');
			colspan.nodeValue = '2';
			confirmColumn.setAttributeNode(colspan);
			
			confirmRow.appendChild(confirmColumn);
			confirmColumn.innerHTML = sMessage;
			
			confirmRow.className = oRowClass;
            $j(confirmColumn).children("div.errorBox").hide().slideDown("normal");
            
    	} else {
	    	oMainFuncs.style.display = "block";
    		oDeletingFuncs.style.display = "none";

			var oRow = $j('#bookmark_row_' + counter).get(0);
			oRow.style.borderTop = '1px solid #E6ECF0';
            $j(oRow).prev("tr:first").find("div.errorBox").slideUp("normal", function() {
                $j(oRow).prev("tr:first").remove();
            });
    	}
	},
    addBookmark: function(sUrlPath) {
    	var sTitle = $j("#bookmark_title").val();
        $j.get(
            "/helper/bookmark/",
            {
                title: sTitle,
                url_path: sUrlPath,
                action: "add"
            },
            self.BookmarkManager.showAddingResults
        );
    },
    showAddingResults: function(sData) {
        var oSelf = self.BookmarkManager;
        eval("var oData = " + sData);
        // check for errors ...
        if (oData.error) {
	        $j("#error_msg").text(oData.error).show();
	        oSelf.toggleAdding(1);
        } else {
            var $oLi = $j('<li>').addClass("list");
            var $oA = $j('<a>').attr("href", oData.url_path).addClass("active");
            $oA.append(
                '<span class="pic">'
            ).append(
                document.createTextNode(oData.title)
            );
            $oLi.append($oA).insertBefore("#save_list_link");
	        // everything is ok, hide errors
           	$j("#error_msg").hide();
           	oSelf.toggleAdding(0);
	    }
	},
    renameBookmark: function(id, counter) {
    	var sTitle = $j("#bookmark_title_" + counter).val();
        $j.get(
            "/helper/bookmark/",
            {
                title: sTitle,
                id: id,
                action: "rename"
            },
            new Function("sData", "self.BookmarkManager.showRenamingResults(sData, "+ counter + ")")
        );
    },
    showRenamingResults: function(sData, counter) {
    	var oLink = $j("#bookmark_link_" + counter).get(0);
        var oErrorMsg = $j("#error_msg_" + counter).get(0);
        eval("oData = " + sData);
        // check for errors ...
        if (oData.error) {
        	oErrorMsg.style.display="block";
        	if (oErrorMsg.firstChild)
	        	oErrorMsg.removeChild(oErrorMsg.firstChild)
	        oErrorMsg.appendChild(document.createTextNode(oData.error));
	        self.BookmarkManager.toggleRenaming(counter, 1);
        } else {
            oLink.innerHTML = oData.title;
	        // everything is ok, hide errors
           	oErrorMsg.style.display="none";
           	self.BookmarkManager.toggleRenaming(counter, 0);
	    }
	},
    deleteBookmark: function(id, counter) {
        $j.get(
            "/helper/bookmark/",
            {
                id: id,
                action: "delete"
            },
            new Function("sData", "self.BookmarkManager.showDeletingResults(sData, "+ counter + ")")
        );
    },
    showDeletingResults: function(sData, counter) {
	    var oBookmarkRow = $j("#bookmark_row_" + counter).get(0);
	    var oErrorMsg = $j("#error_msg_" + counter).get(0);
        eval("oData = " + sData);
        // check for errors ...
        if (oData.error) {
        	oErrorMsg.style.display = "block";
        	if (oErrorMsg.firstChild)
	        	oErrorMsg.removeChild(oErrorMsg.firstChild)
	        oErrorMsg.appendChild(document.createTextNode(oData.error));
        } else {
            $j(oBookmarkRow).prev("tr:first").find("div.errorBox").slideUp("normal", function() {
                $j(oBookmarkRow).prev("tr:first").andSelf().remove();
                // everything is ok, hide errors
                oErrorMsg.style.display="none";
                var oTable = $j('#bookmark_management').get(0);
                if (oTable.rows.length) {
                    j = 0;
                    for (i=0, l=oTable.rows.length; i<l; i++) {
                        if (i>0 && !oTable.rows[i-1].id) {
                            j++;
                        }
                        if (j%2==0) {
                            oTable.rows[i].className = "list-item odd";
                        } else {
                            oTable.rows[i].className = "list-item even";
                        }
                        j++;
                    }
                } else {
                    $j('#no_bookmarks').css({display: "block"});
                }
            });
	    }
	},
    destruct: function() {
        self.BookmarkManager = null;
    }
};

if (!dyn_css_rule("#dyn_rotating_banner p", "display: none;")
    || !dyn_css_rule("#dyn_rotating_banner p.first-child", "display: block")
) {
    $j(document).ready(function() {
        $j("#dyn_rotating_banner p").hide();
        $j("#dyn_rotating_banner p.first-child").show();
    });
}

self.RotatingBanner = {
    current: 0,
    $banners: [],
    timeout_handler: null,
    init: function() {
        var oSelf = self.RotatingBanner;
        oSelf.$banners = $j(
            "#dyn_rotating_banner .hidable p:has(a)"
        ).addClass("rotating_unit");
        $j("#dyn_rotating_banner .hidable a").click(function(e) {
            if (self.open_new_window) {
                self.open_new_window(e);
                return false;
            }
        });
        if (oSelf.$banners.length > 1) {
            var $current = $j(oSelf.$banners[oSelf.current]);
            $current.addClass("current_rotating_unit");
            oSelf.timeout_handler = setTimeout(
                "self.RotatingBanner.show_another()",
                5000
            );
        }
    },
    show_another: function() {
        var oSelf = self.RotatingBanner;
        var $current = $j(oSelf.$banners[oSelf.current]);
        oSelf.current++;
        if (oSelf.$banners.length==oSelf.current) {
            oSelf.current = 0;
        }
        var $another = $j(oSelf.$banners[oSelf.current]);
        $another.hide().addClass("next_rotating_unit").fadeIn("slow", function() {
            $current.hide().removeClass("current_rotating_unit");
            $another.removeClass("next_rotating_unit").addClass("current_rotating_unit");
        });
        oSelf.timeout_handler = setTimeout("self.RotatingBanner.show_another()", 5000);
    },
    destruct: function() {
        clearTimeout(self.RotatingBanner.timeout_handler);
        self.RotatingBanner = null;
    }
};

self.SocialProfilesManager = {
    init: function() {
        $j("#block_social-profiles_en .hidable a,"
            + "#block_social-profiles_de .hidable a"
        ).click(function(e) {
            if (self.open_new_window) {
                self.open_new_window(e);
                return false;
            }
        });
    },
    destruct: function() {
        self.SocialProfilesManager = null;
    }
};

if (self.open_popup) {
    $j(document).ready(function() {
        self.ActivityManager.init();
        self.AboutManager.init();
    });
} else {
    $j.get(
        settings.media_url + "js/jquery/jquery.popup.js",
        function(sData) {
            eval(sData);
            $j(document).ready(function() {
                self.ActivityManager.init();
                self.AboutManager.init();
            });
        }
    );
}

$j(document).ready(function() {
    self.SectorSelectorManager.init();
    self.AjaxSearchManager.init();
    self.BookmarkManager.init();
    self.RotatingBanner.init();
    self.SocialProfilesManager.init();
});


$j(window).unload(function() {
    self.SectorSelectorManager.destruct();
    self.ActivityManager.destruct();
    self.AboutManager.destruct();
    self.AjaxSearchManager.destruct();
    self.BookmarkManager.destruct();
    self.RotatingBanner.destruct();
    self.SocialProfilesManager.destruct();
});

$j(document).ready(function() {
    var hash = window.location.hash;
    if (hash && $j(hash).length) {
        $j(hash).addClass('highlight');
    }
    $j('a[href^=#]').click(function() {
        if ($j(this).attr('href') != '#') {
            $j($j(this).attr('href')).addClass('highlight');
        }
    });
});
