$(document).ready(function(){

    // elastic viewport
    function adjust_body(){
        var cols = $('#viewport_inner').find('.article_column, .item_column');
        var ww = $(window).width();
        var tw = (cols.size()*($(cols.get(0)).outerWidth()+10))+70;
        tw += $('.widget_column').outerWidth();
        if(tw>ww) $('body').css('width', tw+'px');
    }
    adjust_body();

    // labeled inputs
    $.fn.labeledInput = function(){
        return $(this).each(function(){
            var me = $(this);
            me.data('caption', me.val());
            me.focus(function(){
                if(me.val() == me.data('caption')) me.val('');
            }).blur(function(){
                if(me.val() == '') me.val(me.data('caption'));
            });
        });
    };
    $('.labeled_input').labeledInput();

    // calendar
    $('.cal_widget_prev, .cal_widget_next').live('click', function(){
         $.get($(this).attr('href'), function(response){
            if(response&&response.html) {
                $('.calendar_box_body').html(response.html);
            }
        }, 'json');
        return false;
    });

    // ajax search
    var ax_search_t;
    $('#search_trigger').focus(function() {
        var me = $(this);
        me.keyup(function(e) {
            if((e.which>=20&&e.which<=90)||e.which==8) {
                clearTimeout(ax_search_t);
                ax_search_t = setTimeout(function() {
                    var query = me.val();
                    if(query!='') {
                        $('#search_results').empty();
                        $('#search_loader').show();
                        $.post(me.parent('form').attr('action'), {'ajax':'1', 'query': query}, function(response){
                            $('#search_loader').hide();
                            $('#search_results').replaceWith($(response));
                        }, 'html');
                    }
                }, 500);
            }
        });
    }).blur(function(){$(this).unbind('keyup');});

    // submit_on_enter
    $('.labeled_input').keyup(function(e) {
        if(e.which == 13) $(this).parent('form').submit();
    });

    // popup
    $.closePopup = function(){
        $('#popup').hide();
        $('#dimming').fadeOut();
        return false;
    };
    $.fn.loadInPopup = function(pw, callback){
        $(this).click(function(){
            var wh = $(window).height();
            var ww = $(window).width();
            $('#dimming').css({'height': wh+'px', 'width': ww+'px'}).fadeIn();
            $('#popup').css({'width': pw+'px'}).load($(this).attr('href'), function(){
                $(this).show().css({'top':((wh-$(this).outerHeight())/2)+'px', 'left':((ww-pw)/2)+'px'});
                if(callback) callback($(this));
            });
            return false;
        });
    };
    $('#dimming').click($.closePopup);

     // subscribe
    $($('#top_right_menu1').find('a').get(1)).loadInPopup(350, function(popup){
        popup.find('.subscribe_email_field').labeledInput();
        popup.find('.subscribe_submit_btn').click(function(){
            $.post($(this).attr('href'), {email: popup.find('.subscribe_email_field').val()}, function(response){
                response = $.parseJSON(response);
                if(response.code=='ok') popup.find('.subscribe_body').html('<div>'+response.message+'</div>');
                else popup.find('.subscribe_feedback').html('<div>'+response.message+'</div>');
            });
            return false;
        });
    });
    
    // aaa
    var font_step = 0;
    var font_max = 2;
    $('#aaa').click(function() {
        font_step++;
        if(font_step > font_max) {
             $('.body').animate({'font-size':'8pt'});
            font_step = 0;
        } else $('.body').animate({'font-size':(8+font_step)+'pt'});
        return false;
    });

    // menu
    var sub_navbar = $('#sub_navbar');
    $('#main_menu').each(function(){
        var menu = $(this);
        var items = menu.find('li a');
        var sub_menus = sub_navbar.find('.main_menu_sub');
        /*
        items.click(function() {
            var cur_item = $(this);
            var sub_menu = $('#'+cur_item.attr('id').replace('sub_menu_trigger', 'main_menu_sub'));
            if(sub_menu.is('ul')) {
                if(cur_item.hasClass('current')) {
                    sub_navbar.slideUp();
                    cur_item.removeClass('current');
                } else {
                    sub_menus.hide();
                    sub_menu.show();
                    menu.find('a.current').removeClass('current');
                    cur_item.addClass('current');
                    sub_navbar.slideDown(function(){
                        var nh = sub_navbar.height();
                        var mh = sub_menu.height();
                        if(nh<mh) sub_navbar.height(mh+4);
                    });
                }
                return false;
            }
        });
        */
    });
    $('.main_menu_sub:visible').each(function() {
        var nh = sub_navbar.height();
        var mh = $(this).height();
        if(nh<mh) sub_navbar.height(mh+4);
    });
    
    $.fn.tooltip = function() {
        return $(this).each(function(){
            var me = $(this);
            var content = me.attr('title');
            me.attr('title', '');
            if(content != '') {
                var tt = $('#tooltip');
                var tt_c = $('#tooltip_c');
                $(this).hover(function() {
                    var x = me.offset().left+me.outerWidth();
                    var y = me.offset().top+me.outerHeight();
                    tt_c.html($('<div>'+content+'</div>'));
                    tt.css({ top: y+'px', left: x+'px'}).show();
                    return false;
                }, function(){
                    $('#tooltip').hide();
                });
            }
        });
    };
    $('.tooltip').tooltip();
    
    // fixed layers
    var BrowserDetect = {
		init: function () {
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{
				string: navigator.userAgent,
				subString: "Chrome",
				identity: "Chrome"
			},
			{ 	string: navigator.userAgent,
				subString: "OmniWeb",
				versionSearch: "OmniWeb/",
				identity: "OmniWeb"
			},
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari",
				versionSearch: "Version"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{
				string: navigator.vendor,
				subString: "Camino",
				identity: "Camino"
			},
			{		// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 		// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.userAgent,
				subString: "iPhone",
				identity: "iPhone/iPod"
		    },
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]
	
	};
	BrowserDetect.init();
	window.$.client = { os : BrowserDetect.OS, browser : BrowserDetect.browser };	
    (function($,sr){
		var debounce = function (func, threshold, execAsap) {
		  var timeout;
		  return function debounced () {
		      var obj = this, args = arguments;
		      function delayed () {
		          if (!execAsap)
		              func.apply(obj, args);
		          timeout = null; 
		      };
		      if (timeout)
		          clearTimeout(timeout);
		      else if (execAsap)
		          func.apply(obj, args);
		      timeout = setTimeout(delayed, threshold || 100); 
		  };
		}
		jQuery.fn[sr] = function(fn){  return fn ? this.bind('scroll', debounce(fn)) : this.trigger(sr); };
	 
	})(jQuery,'smartscroll');
    $('.fixed_layer').each(function() {
	    $(this).width($(window).width()-parseInt($(this).css('paddingLeft')));
	});
    if($.client.browser=='Safari') {
    	$(window).scroll(function (event) {
    		$('.fixed_layer').css('left', $(window).scrollLeft()+'px');
	    });
    } else {
	    $(window).smartscroll(function (event) {
			$('.fixed_layer').animate({'left': $(window).scrollLeft()+'px'}, 300);
	    });
    }
    
});

