//DOM READY
$(function(){
    init_slider('#head .slideshow');
    init_autoInputFocusBlur('#head_search_keyword, #main_search_keyword, .hasEmptyText');
    init_likes('.like_button');
    $(".date_ago").timeago();
    setInterval(function(){$(".date_ago").timeago();},60000);
    ol_counter();
    init_social_buttons();
    if( $('#ask_deepak').length > 0 ) {
        init_askDeepak();
    }
    $('#head_search_keyword').bind('keypress',function(e){
	if ( e.which == 13 ) {
	    e.preventDefault();
	    if ( $('#head_search_keyword').val() != '' && $('#head_search_keyword').val() != $('#head_search_keyword').get(0).defaultValue ) {
		window.location.href = doc_root + 'search/text/'+$('#head_search_keyword').val();
	    }
	}
    });
    $('.commentlist').each(function(){
        new init_listPager($(this).find('ul.comm'),8);
    });
    init_search_main();
});

//LOAD
$(window).load(function(){
   $('#loading').fadeOut(500);
});

//search box
function init_search_main(){    
    $('#main form.search').submit(function(e){  
       e.preventDefault();
       $this = $(this);
       $element = $this.find('input[name="keyword"]');
       
       if( $element.val() && $element.val() != $element.attr('title')){           
           location.href = $this.attr('action')+encodeURIComponent($element.val());
       }   
       return false;
});
}

//video changer
function chVideo(k, name, id){
    $('#latestVideoName').html(name);
    $('.videoArchive h3.latestVideo').text( $('.videoArchive .items a').eq(k).attr('title') );
    $('.videoArchive .video-embed').html($('#embed_'+k).html());

    $.ajax({
        'url':'/ajax.php',
        'data':{'module':'comment_video_archive','comment_id':id},
        'async': false,
        'type':"post",
        "success":function(resp){
            
                
                $('#video_archive_comments').html(resp);
                init_likes('.like_button');
		$('.commentlist').each(function(){
		    new init_listPager($(this).find('ul.comm'),8);
		});
            
        }
    });

    return false;
}

//Comment pager
function init_listPager(selector,count){
	var $news_container = $(selector);
	var $news = $news_container.find('li').css('margin-top',0);
	var siz = $news.length;
	pback = $news_container.attr('rel');
	$news_container.attr('rel','0');
	$news_container.attr('alt',count);
	if( siz < count+1 ){
            $news_container.siblings('ul.steps').css({'visibility':'hidden'});
	}else{
            $news_container.siblings('ul.steps').css({'visibility':'visible'});
            var sizes = [];
            $news.each(function(k,v){
                $this = $(v);
                lisize = $this.height() + 
                               parseInt($this.css('padding-top')) + 
                               parseInt($this.css('padding-bottom')) +
                               parseInt($this.css('margin-top')) + 
                               parseInt($this.css('margin-bottom')) +
                               parseInt($this.css('border-bottom-width')) + 
                               parseInt($this.css('border-top-width'));
                $this.attr('value',lisize);
                sizes[k] = lisize;
            });		
            $news_container.siblings('ul.steps').find('.pageup').unbind('click').click(function(){
                    page_list($news_container, -count);
            });
            $news_container.siblings('ul.steps').find('.pagedown').unbind('click').click(function(){
                    page_list($news_container, count);
            });
            $news_container.css('overflow','hidden');
            $news.css('position','initial');
            page_list($news_container,pback?(-pback):0,true);
	}
}

function page_list($news_container,move,noanimete){    
    if(!noanimete)noanimete=false;
    to = parseInt($news_container.attr('rel')) + move;
	perPage = parseInt($news_container.attr('alt'));
    //console.log([move,to]);
    $news = $news_container.find('li');
    siz = $news.length;
    if( to < 0 ){
        if(noanimete){  
            to = 0;        
        }else{
            return false;            
        }
    }
    if( to >= siz ) return false;
	currentPage = Math.floor(to/perPage);
	//console.log(['current',currentPage]);
	fullPage = Math.floor(siz/perPage) - ( siz%perPage == 0?1:0 );
	//console.log(['max',fullPage]);
	$pgr = $news_container.siblings('.steps');
	//console.log(['Pager',$pgr]);
	$pgr.find('.numPager').remove();
	$nxtLi = $pgr.find('.pagedown');	
	//console.log(['nxtPager',$nxtLi]);    
    start = Math.min(Math.max(0,currentPage-5),fullPage-10);
	for( i=start;i<=start+10;i++ ){		
		if( i<0 )continue;
		if( i>fullPage ) break;		
		//console.log(['page',i]);		
		$nxtLi.before(
			$('<li />').attr('class','numPager radius-5 '+(i==currentPage?'active':''))				
				.append($('<a />').attr('href','javascript:void(0)').text(i+1))
				.attr('rel',(i-currentPage) * perPage)
				.click(function(){			
					page_list($news_container, parseInt($(this).attr('rel'),10) )	;				
				})
		);
	}	
    $pgr.width($pgr.width()).css({'margin':'0px auto','float':'none'});
    margin = 0;
    hght = 0;
    for( i=0; i<to+perPage;i++ ){
            if( i >= siz ) continue;
            if( i < to ){ 
                    margin-=parseInt( $news.eq(i).attr('value') ); 
            }else{  
                    hght+=parseInt( $news.eq(i).attr('value') );
            }
    }
    $news_container.attr('rel',to);
    if(!noanimete){
        $news_container.animate({'height': hght.toString()+'px'},750);
        $news.eq(0).animate({'margin-top': margin.toString()+'px'},750);
    }else{
        $news_container.css({'height': hght.toString()+'px'});
        $news.eq(0).css({'margin-top': margin.toString()+'px'});
    }
    return 0;
}


//Social buttons
function init_social_buttons(){
    $('.share a').not('.youtube').not('.rss').each(function(){
       $this = $(this);
       $this.attr('href', $this.attr('href')+ encodeURIComponent(location.href) );
    });    
}


//OL
function ol_counter(){
    var $ols = $('.content ol');
    var i;
    $ols.each(function(k,v){        
        $lis = $(v).find('li');
        $lis.each(function(kk,vv){
            $(vv).prepend( $('<span />')
                                .addClass('counter')
                                .text(kk+1)
                         );
        });
    })
}

//GOOGLE MAP
init_map = function (options){
    settings = {'element':'map','geoloc':'New York','needfind':'1'};
    $.extend(settings,options);            
    var latlng = new google.maps.LatLng(0,0);
    var myOptions = {
      zoom: 14,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      disableDefaultUI: true,
      zoomControl: true,
      zoomControlOptions: {
      
      }      
    }
    var map = new google.maps.Map($(options.element)[0], myOptions);    
    /*geocode*/
    if( options.needfind == "0" ){    
        options.ll = options.geoloc.split(',');        
        latlng = new google.maps.LatLng( parseFloat(options.ll[0],10), parseFloat(options.ll[1],10) );
        map.setCenter(latlng);
        new google.maps.Marker({
                    map: map,
                    position:latlng
                });
    }else{
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': options.geoloc}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
               
                map.setCenter(results[0].geometry.location);
                new google.maps.Marker({
                    map: map,
                    position:results[0].geometry.location
                });
            }
        });    
    }                        
}

//ASK DEEPAK POPUP
function init_askDeepak(){
	// A buyNow-osokat ne vegye ask Deepak gombnak, mert az Buy Book gomb
    $('#ask_deepak').not('.buyNow').click(function(evt){
        evt.stopPropagation();
        popup({
            clss:'ask_deepak radius-5',
            modal:true,
            src: askDeepak_load,
            callbacks: {
                submit: askDeepak_submit
            }
        });
        init_autoInputFocusBlur('#window input, #window textarea');
    });
}

function init_communityrss() {
    popup({
	clss:'ask_deepak radius-5',
	modal:true,
	src: communityCatgeoryList,
	width: '252',
	dynamic : true, 
	callbacks: {}
    });
}

function communityCatgeoryList() {
    return $('#rss_blog_categories').html();
}

function askDeepak_submit(){    
    postForm('#adpu_form',post_callback);
}
function askDeepak_load(){     
     var output = 'Loading...';
     $.ajax({
            url:'/ajax.php',
            data: { module: 'ask'},
            type: 'post',
            dataType: 'html',
            async: false,
            success: function(resp){
                    output = resp;
            }
    });
    return output;
}

/**
 * Egy integer mögé tesz karaktereket, hogy egy minimális length-et elérjen
 * @param number i A szám.
 * @param number length Mekkora legyen a string lengthje.
 * @param string padString (Opcionális) Az elé rakandó string. Alapértelmezetten
 *  '0'.
 **/
function zeroPadInt (i, length, padString) {
	if ('undefined' == typeof padString) {
		padString = '0';
	}
	if ('string' == typeof i) {
		i = parseInt(i, 10);
	}
	var str = '' + i;
    while (str.length < length) {
        str = padString + str;
    }
    return str;
}


//SCROLLER
var msEventTooltip;
myScroller = function(options){
    //SETTINGS
    var settings = {name:null,element:null,prev:null,next:null};
    $.extend(settings,options);

    //OBJECT
    object = {
        $container : null,
        count : 0,
        current : 0,
        $prev : null,
        $next : null,
        init: function(){
            this.$container = $(options.element).eq(0);
            if (this.$container.length == 0) return false;
            this.$container.css('margin-left',0);
            this.$prev = $(options.prev);
            this.$next = $(options.next);
            if( this.$prev.length == 0 || this.$next.length == 0 ) return false;
            this.$prev.attr('rel',options.name);
            this.$next.attr('rel',options.name);
            this.$items = this.$container.children('div').not('.clear');
            this.count = this.$items.length;
            if( this.count == 0 ) return false;
			var item = this.$items.eq(0);
			var isHidden = item.is(':hidden');
			var width = item.width();
			if (!width) {
				throw {
					msg: 'Width is 0'
				}
			}
			this.oneWidth = width;
            this.$container.css('width',this.count*this.oneWidth);
            this.$prev.unbind('click').click( function(evt){
				evt.stopPropagation();
				var tabObj = window[$(this).attr('rel')];
				tabObj.pageLast();
            });
            this.$next.unbind('click').click( function(evt){
                evt.stopPropagation();
				var tabObj = window[$(this).attr('rel')];
				tabObj.pageNext();
            });
            this.current = 0;
            this.showhide();
            z = this.$container.parent();
            if( this.count == 1 ){
                z.css('padding-top', 15 );
            }else{
                z.css('padding-top', 30 );
            }
            return true;
        },
        pageNext : function(){
            this.current++;
            this.scroll();
            this.showhide();
            return;
        },
        pageLast : function(){
            this.current--;
            this.scroll();
            this.showhide();
            return;
        },
        showhide : function(){
            if( this.current <= 0 ){
                this.$prev.css('visibility','hidden');
            }else{
                this.$prev.css('visibility','visible');
            }
            if (this.current >= this.count-1 ){
                this.$next.css('visibility','hidden');
            }else{
                this.$next.css('visibility','visible');
            }
        },
        scroll : function (){
            this.$container.animate({'margin-left':-this.current*this.oneWidth+"px"},500);
        }
    }
    //INIT
    object.init();
    return object;
}

//LIKE
function init_likes(elements){
    var $this= $(elements);
    $this.each(function(k,v){
        var $v = $(v);
        var comment_id = $v.attr('rel');
        if( isCommentInCookie(comment_id) ){
            $v.addClass('inactive');
        }else{
            $v.click(function(){
               makeLike(comment_id);
            });
        }
    });
}

function makeLike(comment_id){
    $this = $('.like_button[rel="'+comment_id+'"]');
    $.ajax({
        'url':'/ajax.php',
        'data':{'module':'comment_like','comment_id':comment_id},
        'async': false,
        'dataType':"json",
        'type':"post",
        "success":function(resp){
            if( resp ){
                if( resp.error == 0 ){
                    var $likes = $this.siblings('.likes');
                    $likes.each(function(k,v){
                        $v = $(v);
                        $v.text($v.text().replace(/[0-9]+/g,resp.like_count));
                    });

                    $this.addClass('inactive');
                    $this.remove('click');
                }
            }else{

            }
        }
    });
}

function isCommentInCookie(comment_id){
    return ( document.cookie.indexOf('comment_'+comment_id+"=")!== (-1) );
}

//AUTO INPUT FOCUS:BLUR
function init_autoInputFocusBlur(elements){
    $(elements)
        .focus(function(){
            var $this = $(this);
            if($this.attr('title')==$this.val())$this.val('');
        })
        .blur(function(){
            var $this = $(this);
            if(''==$this.val())$this.val($this.attr('title'));
        });
}

//HEAD SLIDER
var sliding = true;
var actual = 0;
function init_slider(slider){
    var $slider = $(slider);
    $slider.find("ul.items li").each(function(){
        var $this = $(this);
        if( $this.hasClass("active") ){
            $this.css("opacity",1);
            //$this.find('.button').css("opacity",1);
        }else{
            $this.css("opacity",0);
            //$this.find('.button').css("opacity",0);
        }
    });
    $slider.find("ul.pager li").click(function(){
        sliding = false;
        change_slide($(this));
    });
    setInterval( "autoChange('"+slider+"');" ,8000 );
}
//AUTO CHANGE SLIDE
function autoChange(slider){
    if(sliding){
        $lis = $(slider).find("ul.pager li").not('.clear');
        actual = (++actual % $lis.length )
        change_slide( $lis.eq(actual));
    }
}

//SLIDER
function change_slide($this){
     $this.siblings('li').removeClass('active');
     $this.addClass('active');
     var $ul =  $this.parent('ul').siblings('ul.items');
     var active = parseInt($ul.attr('rel'));
     var $items = $ul.find('li');
     $items.eq(active).removeClass('active').animate({'opacity':0},750).css('z-index',0);
     //$items.eq(active).find('.button').css({'opacity':0});
     //$items.eq(active).find('h3, div.paragraph').typewriter('finish');    
     var newactive = parseInt($this.attr('rel'));
     $items.eq(newactive).addClass('active').animate({'opacity':1},750).css('z-index',2);
     $hh33 = $items.eq(newactive).find('h3').not('[rel]');
     if($hh33.length > 0){
        $hh33.css('height',$hh33.height()).attr('rel','sized');
     }
     //$items.eq(newactive).find('h3 a').typewriter({'step':75});
    // $items.eq(newactive).find('div.paragraph').typewriter({'step':20,'callback':function(){
        // $items.eq(newactive).find('.button').animate({'opacity':1},750);
    // }});
     $ul.attr('rel',newactive);
}

/**
 * Egy elementhez képest középre igazítja a tooltipet a tip-je alapján
 **/
function centerAlignTooltip(tooltip, el) {
	tooltip = $(tooltip);
	el = $(el);
	// először tudjuk meg az element width-jét.
	var elWidth = el.outerWidth();
	var tip = tooltip.find('.tip');
	var tipWidth = tip.width();
	var tipLeft = tip.position().left;
	var tipOffset = tipLeft + Math.floor(tipWidth / 2);
	var newLeft = Math.floor(elWidth / 2) - tipOffset;
	tooltip.css('left', newLeft + 'px');
}

/**
 * Megosztott függvény arra Books - Buy Now tooltip kezelésre.
 * Kell, hogy a megadott dobozon belül legyen egy .scrollable class-os
 * scrollable (akár maga a doboz is lehet az), kell egy .buyNowButtonContainer
 * konténer, amiben van egy .buyNow gomb, és egy .tooltip tooltip, meg a
 * scrollable-os itemekhez kellenek .item itemek.
 * @param selector box jQuery Selector a könyves dobozhoz
 * @param selector item (Opcionális) Egy fix element, amiben a könyv adatai vannak.
 * 		Ha nincs megadva, akkor a boxnak a .scrollable elementjén belül az aktív
 * 		elementet veszi a könyv adatos divnek
 **/
function bookBuyNowTooltip(box, item) {
	var index;
	box = $(box);
	var scrollableEl = $(box).find('.scrollable').andSelf().filter('.scrollable');
	var scrollable = scrollableEl.scrollable();
	var boxBuyNowCont = box.find('.buyNowButtonContainer');
	var tooltip = boxBuyNowCont.find('.tooltip');
	box.find('.buyNow').click(function (evt) {
		tooltip.toggle();
		/**
		 * Állítsuk be a vevős linkeket
		 **/
		if ('undefined' == typeof item) {
			index = scrollable.getIndex();
			item = scrollableEl.find('.item').eq(index);
		}
		else {
			item = $(item);
		}
		var i;
		var link;
		var cls;
		var div;
		if ( item.data('link5') == 'store' ) {
		    _gaq.push(['_trackEvent', 'Buy Now', 'Deepak`s world', item.data('link4') ]);
		    window.open(item.data('link1'),'_blank');
		    tooltip.hide();
		    return; // kilépünk, mert direktbe kell linkelni!!!!;
		}
		else {
		    _gaq.push(['_trackEvent', 'Buy Now', 'Book', item.data('link4') ]);
		}

		for (i = 1; i <= 3; i++) {
			cls = 'link' + i;
			link = item.data(cls);
			div = tooltip.find('div.' + cls);
			if (link) {
				div.show().find('a.' + cls).attr('href', link);
			}
			else {
				div.hide();
			}
		}


		/**
		 * Toljuk el a tooltipet
		 **/
		centerAlignTooltip(tooltip, boxBuyNowCont);

	});
	$(document.body).click(function (evt) {
		var target = evt.target;
		if (target == boxBuyNowCont[0] || boxBuyNowCont.find(target).length) {

		}
		else {
			tooltip.hide();
		}
	});
	scrollableEl.find('.prev, .next').click(function () {
		tooltip.hide();
	});
}

$(function () {
	// ha ie
	if ($.browser.msie) {
		if (parseFloat($.browser.version) == 7) {
			$('html').addClass('ie7');
		}
	}
	/**
	 * Event naptárhoz
	 **/
	/**
	 * Hónap class
	 **/
	var Month = function () {
	};
	Month.prototype = {
		year: null, // string
		month: null, // int
		/**
		 * Beállítja a hónapot integerként.
		 * @param (string/int) month A hónap. Bemenet lehet string is.
		 **/
		setMonth: function (month) {
			if ('string' == typeof month) {
				month = parseInt(month, 10);
			}
			this.month = month;
		},
		/**
		 * Beállítja az évet és hónapot egy és és egy hónap alapján
		 * @param (string) year Az év.
		 * @param (number) month A hónap.
		 **/
		setByYearMonth: function (year, month) {
			this.year = year + '';
			this.setMonth(month);
		},
		/**
		 * Visszaadja stringként szerializálva ezt az objektumot, olyan formában,
		 * hogy yyyymm
		 * @return (string) yyyymm
		 **/
		getProp: function () {
			var month = this.month;
			return this.year +
				(month < 10 ? "0" + month : "" + month);
		},
		/**
		 * Szerializált év-hónap string (yyyymm) alapján beállítja a hónapot és napot
		 * @param (string) prop yyyymm
		 **/
		setProp: function (prop) {
			var year = prop.substring(0, 4);
			var month = parseInt(prop.substring(4, 6), 10);
			this.year = year;
			this.month = month;
		}
	};
	var Day = function () {
	};
	Day.prototype = {
		monthObj: new Month(),
		day: null,
		setDay: function (day) {
			day = 'string' == typeof day ? parseInt(day, 10) : day;
			this.day = day;
		},
		getProp: function(){
			var day = this.day;
			if ('string' == typeof day) {
				day = parseInt(day, 10);
			}
			day = (day < 10 ? "0" + day : "" + day);
			return this.monthObj.getProp()+""+ day;
		},
		setProp: function(prop){
			this.monthObj.setProp( prop.substr(0,6));
			this.day = parseInt(prop.substr(6,2),10);
		}
	};
	var EventMonths = {
		/**
		 * Hónap objektumokat tartalmaz yyyymm propertykkel indexelve.
		 * Figyelem: a hónap objectum nem ugyanaz, mint ami a Month
		 * class ad.
		 **/
		months: {},
		/**
		 * A this.months-ok közül az aktív hónap objektuma. Egyezik az objektum
		 * a this.months-ban tárolt ugyanolyan objektummal.
		 **/
		currentMonth: null,
		dayObj: new Day(),
		/*események*/
		events: {},
		/**
		 * Amikor rákattintunk egy eseményes napra, ide kerül be annak yyyymmdd propertyje.
		 **/
		lastDaySwitchProp: null,
		/**
		 * @var (string) A legutóbbi hónap váltás tulajdonsága (yyyymm), vagy a jelenlegi hónapé,
		 * ha nem volt még lapozás
		 **/
		lastMonthSwitchProp: null,
		/**
		 * Lekéri ajax-al az adott hónaphoz tartozó eseményes napokat. Callback-es.
		 * @param (Month) monthObj A kért hónap, aminek az eseménynapjait kérjük
		 * @param (function) cb A callback, ami meghívódik, ha megvannak az adatok.
		 * 		Ennek átadódik a monthObj.
		 **/
		getDaysViaAjax: function(monthObj, cb) {
			var prop = monthObj.getProp();
			var $this = this;
			$.ajax({
				url:'/ajax.php',
				data: {
					module: 'event',
					date: prop
				},
				type: 'post',
				dataType: 'json',
				success: function(resp){
					$this.getExistingDayCollectionOrCreateNew(monthObj);
					$this.addArrayByDave(resp.datelist);
					cb(monthObj);
				}
			});
		},
		/**
		 * Visszaadja az adott hónaphoz tartozó eseményes napokat. Callback-es. Ha nincsenek meg,
		 * meghívja azt a metódust, amely ajax-al kéri le őket.
		 * @param (Month) monthObj A kért hónap, aminek az eseménynapjait kérjük
		 * @param (function) cb A callback, ami meghívódik, ha megvannak az adatok.
		 * 		Ennek átadódik a monthObj.
		 **/
		getByMonthCB: function (monthObj, cb) {
			var prop = monthObj.getProp();
			var obj = this.months[prop];
			var me = this;
			// ehelyére lesz ajax
			if (!obj) {
				this.getExistingDayCollectionOrCreateNew(monthObj);
				//console.info('calling getDaysViaAjax', monthObj);
				this.getDaysViaAjax(monthObj, cb);
			}else{
				setTimeout(function () {
						cb(monthObj);
				}, 1);
			}
		},
		/**
		 * Feljegyez egy napot, hogy azon van legalább 1 esemény
		 * @param (Day) dayObj A nap objektuma
		 **/
		addEventDay: function (dayObj) {
			var monthObj = dayObj.monthObj;
			var dayCollection = this.getExistingDayCollectionOrCreateNew(monthObj);
			var day = dayObj.day;
			if (!dayCollection.keys[day]) {
				dayCollection.days.push(day);
				dayCollection.keys[day] = true;
			}
		},
		/**
		 * Dávid php-ból jövő esemény adatmorzsából kideríti, hogy az melyik napra vonatkozik,
		 * és meghívja a metódust, ami az alapján feljegyzi, hogy azon a napon van esemény.
		 * @param (string) str Dávid tömbjében egyik esemény nap stringje.
		 **/
		addEventDayByDave: function (str) {
			var monthObj = new Month;
			monthObj.setProp(str);
			var day = str.substring(6, 8);
			var dayObj = new Day;
			dayObj.monthObj = monthObj;
			dayObj.setDay(day);
			this.addEventDay(dayObj);
			return dayObj;
		},
		getExistingDayCollectionOrCreateNew: function (monthObj) {
			var prop = monthObj.getProp();
			if (!this.months[prop]) {
				this.months[prop] = {
					days: [],
					keys: {}
				};
			}
			return this.months[prop];
		},
		addArrayByDave: function (arr, monthObj) {
			var eventDay;
			var dayObj = null;
			for (i = 0; i < arr.length; i++) {
				eventDay = arr[i];
				dayObj = this.addEventDayByDave(eventDay);
			}
			if (!monthObj) {
				if (dayObj) {
					monthObj = dayObj.monthObj;
				}
				else {
					return false;
				}
			}
			return monthObj;
			// MÁR NEM HÍVOK MEG AUTOMATIKUSAN CHANGEMONTH-OT!
		},
		changeMonth: function (monthObj, dp) {
			var prop = monthObj.getProp();
			this.currentMonth = this.months[prop];
			this.applyDayArray(dp);
		},
		applyDayArray: function (dp) {
			var dayArray = this.currentMonth;
			var i;
			var days = dayArray.days;
			var day;
			var calendar = dp.find('table.ui-datepicker-calendar');
			var tds;
			tds = calendar.find('td').not('td.ui-datepicker-other-month');
			var td;
			for (i = 0; i < days.length; i++) {
				day = days[i];
				if ('string' == typeof day) {
					day = parseInt(day, 10);
				}
				td = tds.eq(day - 1);
				td.addClass('hasEvent');
										td.attr('dataDate',days[i]);
			}
		},
		getExistingEventCollectionOrCreateNew: function (dayObj) {
			var prop = dayObj.getProp();
			if (!this.events[prop]) {
				this.events[prop] = {
					events: [],
					keys: {}
				};
			}
			return this.events[prop];
		},
		//day clicked (get Events at day)
		getDayEvents: function(day, e, dp){
			if( this.lastMonthSwitchProp == null ){
				this.lastMonthSwitchProp = monthObj.getProp();
			}
			var monthObj = new Month;
			monthObj.setProp(this.lastMonthSwitchProp);
			var dayObj = new Day;
			dayObj.monthObj = monthObj;
			dayObj.setDay(day);

			this.lastDaySwitchProp = dayObj.getProp();
			this.dayObj.setProp(this.lastDaySwitchProp);
			var me = this;
			obj = this.events[this.lastDaySwitchProp];
			if( !obj ){
				this.getExistingEventCollectionOrCreateNew(this.dayObj);
				this.getEventsViaAjax(dayObj, e, dp);
			}else{
				this.applyDayEvents(dayObj, e, dp);
			}
		},
		//show day events
		applyDayEvents: function(dayObj, e, dp){
			var j;
			var tooltipItem;
			var relative;
			try {
				if (this.tooltipHideEvent) {
					if (this.tooltipHideEvent.dayProp == dayObj.getProp()) {
						return true;
					}
				}
				e.stopPropagation();
				var me = this;
				var $tooltip = dp.data('tooltip');
				if (!$tooltip.length) {
					throw {
						msg: 'Tooltip not found!',
						dp: dp
					};
				}
				//console.info('tooltip length', $tooltip.length);

				var tooltipHideEvent = function (evt) {
					var target = $(evt.target);
					if (evt.target == $tooltip[0] || $tooltip.find(evt.target).length) {

					}
					else {
						$tooltip.hide();
						dp.find('td.hasEvent').removeClass('active');
						$(document.body).unbind('click.tooltipHideEvents');
						me.tooltipHideEvent = null;
					}
				}
				this.tooltipHideEvent = tooltipHideEvent;
				tooltipHideEvent.dayProp = dayObj.getProp();
				$(document.body).bind('click.tooltipHideEvents', tooltipHideEvent);

				dp.find('td.hasEvent').removeClass('active');
				var td = $(e.target).closest('td');
				var dayProp = dayObj.getProp();
				var $tooltipHtml = $tooltip.find('.tooltip-template .tooltip-item');
				var $tooltipItems = $tooltip.find('.items');
				$target = e.target?e.target:e.srcElement;
				var evtl = me.events[dayProp];
				var len = (evtl)?evtl.length:0;
				if( len > 0 ){
					td.addClass('active');
					$tooltip.show();
					if( $tooltip.attr('rel') != dayProp ){
						$tooltip.attr('rel',dayProp);
						$tooltipItems.html('');
						var tth = 0;
						for(j=0;j<len;j++){
							tooltipItem = $tooltipHtml.clone();
							tooltipItem.find('.data-date').text(evtl[j].date);
							tooltipItem.find('.data-title a').text(evtl[j].name);
							tooltipItem.find('.data-title a').attr('href',evtl[j].link)
							tooltipItem.find('.editor').text(evtl[j].description);
							tooltipItem.show();
							tooltipItem.appendTo($tooltipItems);
							tth+=$tooltipHtml.height();
						}
					}
					/*
					topP = e.layerY-e.offsetY-$($target).parent().height()-$tooltip.height();
					$tooltip.css({top:topP,left:e.layerX-e.offsetX-18});
					*/
					$tooltip.show();
					relative = td.find('.relative');
					if (!relative.length) {
						relative = $('<div />');
						relative.addClass('relative');
						td.prepend(relative);
					}
					else {
					}
					relative.append($tooltip);
					$tooltip.show();
					centerAlignTooltip($tooltip, td);
					$tooltip.show();
					msEventTooltip.init();
				}
			}
			catch (e) {
				if (window.console) {
					console.error(e);
				}
			}
		},
		addDayEvents: function(eventList, prop){
			var me = this;
			me.events[prop] = [];
			for(j=0;j<eventList.length;j++){
				me.events[prop][j] = {};
				me.events[prop][j].date = eventList[j].date;
				me.events[prop][j].name = eventList[j].name;
				me.events[prop][j].description = truncate(strip_tags(eventList[j].description));
				me.events[prop][j].link = eventList[j].link;
			}
		},
		//get events via ajax
		getEventsViaAjax: function(dayObj, e, dp){
			var prop = dayObj.getProp();
			var me = this;
			$.ajax({
				url:'/ajax.php',
				data: {
					module: 'event',
					date: prop
				},
				type: 'post',
				dataType: 'json',
				success: function(resp){
					me.addDayEvents(resp.events,prop);
					if( me.lastDaySwitchProp == prop ){
						me.applyDayEvents(dayObj, e, dp);
					}
				}
			});
		}

	};
	var eventDatepickerize = function (boxEvent) {
		boxEvent.each(function () {
			var boxEvent = $(this);
			msEventTooltip = myScroller({name:'msEventTooltip',
				element: boxEvent.find('.items'),
				next: boxEvent.find('.tooltip .next'),
				prev: boxEvent.find('.tooltip .prev')
			});

			var dp = boxEvent.find('.datepicker');
			var onChangeMonthYear = function (year, month, dpObj) {
				dp = dpObj.dpDiv.parent();
				var monthObj = new Month;
				monthObj.setByYearMonth(year, month);
				EventMonths.lastMonthSwitchProp = monthObj.getProp();
				EventMonths.lastDaySwitchProp = monthObj.getProp()+"-1";
				var cb = function (monthObj) {
					/**
					 * Ha a hónapváltásnál lekért hónap egyezik a callbackbe átadott hónappal,
					 * az azt jelenti, hogy az a hónap, amire az aszinkron kérés válasza vonatkozik,
					 * legutolsó hónapváltási kérés hónapjával egyezik, vagyis megkaptuk a legutolsó
					 * hónapkérésre a választ, ezért "hivatalosan" váltsunk arra a hónapra, és
					 * rajzoljuk ki az eseményeket a html-be.
					 **/
					var propLast = EventMonths.lastMonthSwitchProp;
					var propCB = monthObj.getProp();
					//console.info(monthObj, 'propLast', propLast, 'propCB', propCB);
					if (propLast == propCB) {
						EventMonths.changeMonth(monthObj, dp);
					}
				};
				EventMonths.getByMonthCB(monthObj, cb);
			}
			var $id = dp.datepicker({
				prevText: '',
				nextText: '',
				hideIfNoPrevNext: true,
				monthNames: window.monthNames,
				onChangeMonthYear: onChangeMonthYear,
				beforeShowDay: function (date) {
					return [
						false, ''
						];
					}
			}).attr('id');
			var eventDays = window.eventDays;
			var monthObj = EventMonths.addArrayByDave(eventDays);
			if (monthObj instanceof Month) {
				EventMonths.lastMonthSwitchProp = monthObj.getProp();
				EventMonths.changeMonth(monthObj, dp);
			}
			/*live to active dates*/
			 var $tooltip = dp.siblings('.tooltip');
			 dp.data('tooltip', $tooltip);
			 dp.delegate('td.hasEvent', 'click', function (e) {
				 var $this = $(this);
				 EventMonths.getDayEvents($this.find('span.ui-state-default').text(),e, dp);
			 })
		});
	};
	var i, j, b, c, comments, comment, el, len, base;
	var topics = $('#box-topic, #left-topic');
	for (i = 0; i < topics.length; i++) {
		comments = $(topics[i]).find('.comment');
		for (j = 0; j < comments.length; j++) {
			comment = $(comments[j]);
			el = comment.find('.overflow-hidden');
			base = (topics[i].id == 'box-topic' ? 25 : 15);
			// ha ki kell írni nevet, 3 sornyi szöveget engedjünk csak meg
			if (comment.find('.name').length) {
				len = base * 3;
			}
			// ha nem, akkor 4-et
			else {
				len = base * 4;
			}
			el.html('“ ' + truncate($.trim(el.html()), len) + ' ”');
		}
	}
	/**
	 * Minden .linkAction class-os element viselkedjen kattintásra úgy, mintha a benne lévő
	 * első <a> elementre kattintottunk volna (window.location.href, window.open)
	 **/
	var linkActions = $('.linkAction');
	linkActions.click(function (evt) {
		var a = $(this).find('a');
		if (evt.target != a[0]) {
			var href = a.attr('href');
			var target = a.attr('target');
			if (target) {
				window.open(href, target);
			}
			else {
				window.location.href = href;
			}
		}
	});
	/**
	 * Indexnél dobozok
	 **/
	var indexBoxContainer = $('#index_main');
	if (indexBoxContainer.length) {
		/**
		 * Blog
		 **/
		var boxBlog = indexBoxContainer.find('#box-blog');
		if (boxBlog.length) {
			/**
			 * Tabok
			 **/
			var blogTabContainer = boxBlog.find('.blogPosts');
			var boxBlogTabs = blogTabContainer.children();
			boxBlogNavs = boxBlog.find('.tabs .tab');
			boxBlogNavs.click(function () {
				boxBlogNavs.removeClass('active');
				var index = $(this).addClass('active').index();
				boxBlogTabs.hide();
				boxBlogTabs.eq(index).show();

			});
			boxBlogNavs.eq(0).click();
		}
		var boxEvent = indexBoxContainer.find('#box-event');
		if (boxEvent.length) {
			/**
			 * Event
			 **/
			eventDatepickerize(boxEvent);
		 }
		 var boxBooks = indexBoxContainer.find('#box-books');
		 if (boxBooks.length) {
			 /**
			  * Books
			  **/
			 var scrollableEl = boxBooks.find('.imageScroller');
			 var boxBooksScrollable = scrollableEl.scrollable().scrollable();
			 var boxBooksBuyNowCont = boxBooks.find('.buyNowButtonContainer');
			 var booksTooltip = boxBooksBuyNowCont.find('#box-books-tooltip');
			 bookBuyNowTooltip(boxBooks);
			 centerAlignTooltip(booksTooltip, boxBooksBuyNowCont);
			 $(document.body).click(function (evt) {
				 var target = evt.target;
				 if (target == boxBooksBuyNowCont[0] || boxBooksBuyNowCont.find(target).length){}
				 else{
					 booksTooltip.hide();
				 }
			 });
		 }
	 }
	/**
	 * Bal oldali dobozok
	 **/
	var leftBoxContainer = $('#left');
	if (leftBoxContainer.length) {
		c = leftBoxContainer;
		var leftVideo = $('#left-video');
		if (leftVideo.length) {
			/**
			 * Bal oldali videó doboz
			 **/
			b = leftVideo;
			b.find('.scrollable').scrollable();
		}
		var leftBooks = $('#left-books');
		if (leftBooks.length) {
			/**
			 * Bal oldali könyvek doboz
			 **/
			b = leftBooks;
			b.scrollable();
			bookBuyNowTooltip(b);
		}
		var b = $('#left-store');
		if (b.length) {
			/**
			 * Bal oldali könyvek doboz
			 **/
			b.scrollable();
			bookBuyNowTooltip(b);
		}
		var leftBlog = $('#left-blog');
		if (leftBlog.length) {
			b = leftBlog;
			/**
			 * Blog
			 **/
			/**
			 * Tabok
			 **/
			var blogTabContainer = b.find('.blogPosts');
			var bTabs = blogTabContainer.children();
			bNavs = b.find('.tabs .tab');
			bNavs.click(function () {
				bNavs.removeClass('active');
				var index = $(this).addClass('active').index();
				bTabs.hide();
				bTabs.eq(index).show();

			});
			bNavs.eq(0).click();
		}
		b = $('#left-event');
		if (b.length) {
			/**
			 * Naptár
			 **/
			eventDatepickerize(b);

		}
	}
	c = $('#main');
	if (c.length) {
		/**
		 * main
		 **/
		c.find('.scrollable').scrollable();
		var items = c.find('.gallery-main-thumbs .gallery-images .item');
		items.click(function (evt) {
			/**
			 * Amely thumb divjére kattintottunk, annak a képét tegyük be az aktív,
			 * nagy kép helyére, a rendes méretével
			 **/
			evt.preventDefault();
			var thumbImg = $(this).find('img');
			var src = $(this).attr('href');
			var alt = thumbImg.attr('alt');
			var mainImg = $(this).closest('.gallery-main-thumbs').find('.gallery-mainImage').find('img');
			var mainImgCont = mainImg.parent();
			mainImgCont.html('');
			var img = $('<img />');
			img.attr('width', '639');
			img.attr('height', '389');
			img.attr('src', src);
			img.attr('alt', alt);
			mainImgCont.append(img);
		});
		b = c.find('#homebase-content');
		if (b.length) {
			/**
			 * Homebase
			 **/
			b.find('.gallery-images').find('a.item').lightBox({fixedNavigation: true});
		}
		b = $('#main-books');
		if (b.length) {
			/**
			 * Books
			 **/

		}
		/*
		var searchDropdowns = c.find('.search-dropdown');
		searchDropdowns.find('.level1-item:last-child').hover(function () {
			var searchDropdown = $(this).closest('.search-dropdown');
			searchDropdown.addClass('last-level1-hover');
		}, function () {
			var searchDropdown = $(this).closest('.search-dropdown');
			searchDropdown.removeClass('last-level1-hover');
		});
		*/
	}
	$('li.book-with-readMore').each(function () {
		var li = $(this);
		bookBuyNowTooltip(this, this);
		li.find('.readMore, img.shadow-5, h2').click(function () {
			popup({
				clss: 'book-more-popup radius-5',
				modal: true,
				src: function () {
					var ret = $('<div />');
					var h2 = $('<h2 />');
					h2.html(li.find('h2').text());
					var editor = $('<div />');
					editor.html(li.find('.editor.book-full-description').html());
					ret.append(h2);
					ret.append(editor);
					editor.addClass('editor');
					return ret;
				},
				callbacks: {
				}
			})
		}).css('cursor','pointer');

	});

	var dropdowns = $('.search-dropdown');
	if (dropdowns.length) {
		/**
		 * Dropdownok
		 **/
		dropdowns.click(function (evt) {
			var dropdown = $(this);
			if (dropdown.hasClass('clicked')) {

			}
			else {
				dropdown.addClass('clicked');
				evt.stopPropagation();
				$(document.body).one('click.dropdown', function (evt) {
					dropdown.removeClass('clicked');
				});
			}
		});
	}

	
});

//TOOLS//
function strip_tags (input, allowed) {
    allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
        commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
    return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
        return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
    });
}
//TRUNCATE//
function truncate(string,len){
    len = len?len:80;
    if(string.length > len){
        string = string.substr(0,len);
        string = string.replace(/\w+$/, '...');
    }
    return string;
}

//AJAX FORM HANDING
function postForm(frm, callback){
    var action = $(frm).attr('action');
    var dta = {};
    $(frm).find('input, select, textarea').each(function(){
        if(!$(this).attr('name')) return;
        if($(this).attr('type')=='checkbox'){
            dta[$(this).attr('name')] = ($(this).attr('checked')?'1':'0');
        }else if($(this).hasClass('checkbox')){
            dta[$(this).attr('name')] = ($(this).val().length)?'1':'0';
        }else{
            dta[$(this).attr('name')] = $(this).val();
        }
    });
     $.ajax({
        url: doc_root+action,
        data: dta,
        type: 'POST',
        dataType: 'json',
        success: function(resp){
            callback(frm,resp);
        }
    });
}
function clearForm(frm){
     $(frm).find('input[type!="hidden"], select, textarea').each(function(){
         $this = $(this);         
         $this.val( $this.attr('title')?$this.attr('title'):'');
         if($this.attr('name')=='capcha'){
             $this.siblings('img').each(function(){
                 $img = $(this);
                 $img.attr('src',doc_root+'securimage/securimage_show.php?rnd='+Math.random());
             });

         }
     });
}

function comment_callback(frm,message){
    //console.log(message);
    if( message.error.length == 0 ){        
        $comments = $(frm).siblings('.commentlist').eq(1);
        if( $comments.css('display')=='none' ){
            $comments.css('display','block');
        }
        
        $ull = $comments.find('ul.comm');        
        $ull.prepend( $('<li />').addClass().html(
                '<p>'+message.comment.content+'</p>'+                
                '<span class="name">'+message.comment.name+'</span> //'+
                '<span class="date_ago" title="'+message.comment.date+'"> '+jQuery.timeago.settings.strings.seconds+'</span> //'+
                '<span class="likes"> 0 '+js_lang['Like']+'</span> //'+
                '<span class="like_button radius-5" rel="'+message.comment.id+'"> '+js_lang['Like']+' </span>'                    
        ));
        init_likes('.like_button[rel="'+message.comment.id+'"]');
        $ull.find('li').each(function(k,v){
            $v = $(v);
            $v.removeClass('even');
            if( k%2 == 0 )$v.addClass('even');
        });
        init_listPager($ull,10);
    }
    
    post_callback(frm,message);
}

function post_callback(frm,message){
    if( message.error.length != 0 ){
        $.each(message.error,function(k,v){
            if(v=='capcha'){
                $input = $('input[name="'+v+'"]');
                if($input.val()) $input.val('').siblings('img').each(function(){
                    $img = $(this);
                    $img.attr('src',doc_root+'securimage/securimage_show.php?rnd='+Math.random());
             });
            }
            $(frm).find('input[name="'+v+'"], select[name="'+v+'"], textarea[name="'+v+'"]')
                .animate({'background-color':'#ffB0b0','color':'#fff'},500)
                .animate({'background-color':'#fffffff','color':'#868686'},500)
                .animate({'background-color':'#ffB0b0','color':'#fff'},500)
                .animate({'background-color':'#fffffff','color':'#868686'},500)
                .animate({'background-color':'#ffB0b0','color':'#fff'},500)
                .animate({'background-color':'#fffffff','color':'#868686'},500);
        });
    }else{
        if(message.mess != 'Sikeres Mentés!') clearForm(frm);
        $('.popup_bg, .popup').animate({'opacity':0},500);
	setTimeout("$('.popup_bg, .popup').css('display','none');",500);
    }
    alert(message.mess);
}


//POPUP


function popup(options){
        if( $('#modal_background').length == 0 ){
            $('body').append(
                $('<div />').css({
                    'width':'100%',
                    'height':'100%',
                    'position':'fixed',
                    'top':'0px',
                    'left':'0px',
                    'background-color':'#000',
                    'opacity':0.6,
                    'display':'none',
                    'z-index':998
                })
                .attr('id','modal_background').click(function(){
                    $('#modal_background, #window').fadeOut();
                })
            );
        }
        if( $('#window').length == 0 ) {
            $('body').append(
                $('<div />').css({
                    'width':options.width == undefined ? '467px' : options.width+'px',
                    'position':'fixed',
                    'top': options.dynamic == undefined ? '50px' : '30%',
                    'left': options.dynamic == undefined ? '50%' : ( Math.round(($('body').width()-(options.width == undefined ? 467 : options.width))/2) + 'px' ),
                    'margin-left':options.dynamic == undefined ? '-234px' : '0px',
                    'opacity':1,
                    'z-index':999,
                    'display':'none'
                })
                .attr('id','window').click(function(evt){
                    evt.stopPropagation();
                }).append(
                    $('<div />')
                        .addClass('close')
                        .click(function(){
                            $('#modal_background, #window').fadeOut();
                        })
                ).append(
                    $('<div />').addClass('body')
                ).append(
                    $('<div />').addClass('buttonBar')
                )
            );
        }

	var $window =  $('#window').attr('class',options.clss);
	$window.fadeIn();
	if( options.modal ){
		$('#modal_background').fadeIn();
	}

        $('#window .body').html( options.src?options.src():'Use `src` option! It must be a function and returns with html as string.');

        var $bb = $window.find('.buttonBar').html('');
        if( options.callbacks ){
            $.each(options.callbacks,function(k){
                $bb.append( $('<div />')
                    .click(options.callbacks[k])
                    .addClass('button radius-15 shadow-2 text-shadow-black ')
                    .text(js_lang[k]));
            });
            $bb.append($('<div />').addClass('clear'));
        }
}

