/**
 * Javascript functionality for the media Plugin
 */

var globalIntervals = [];
var globalTimeouts = [];
var globalAjaxRequests = [];
var loadedPreviews = [];

jQuery.noConflict();
jQuery(document).ready(function(){
    
    jQuery('.place_vertical').hover(
        function() {
            jQuery(this).find('.actions li').css('visibility', 'visible');
        },
        function() {
            jQuery(this).find('.actions li').css('visibility', 'hidden');
        }
    );

    /**
     * jQuery logic to handle adding and removing media favorites via ajax
     *   - uses jQuery() syntax to play nice with mootools
     *   - the <a> element should be class "place_favorite_link" and have a dynamic id of "place_favorite_link_XX" (where XX is the media ID)
     *   - the <a> element should have class "on" if it's already added to favorite.
     *   - the <a> element should have a class that specifies how it is displayed e.g. "overlap_buttons," otherwise default is used
     */
     jQuery("a[name='place_favorite_link']").live("click", function(){
    	// login check    	
    	if(jQuery("a.plain[href='user_logout.php']").length != 1) {
            var returnHref = document.location.href;
            document.location = './login.php?return_url=' + escape(returnHref);
            return false;
    	}
    	
    	var title_add = 'Place Favorited';
    	var msg_add = 'This Place has been added to your Favorites';
    	
    	var title_remove = 'Remove Favorite';
    	var msg_remove = 'This Place has been removed from your Favorites';
    	
    	var state = 'added';
    	
    	var jQuery_link = jQuery(this);
    	
    	clear_boxes();
    	
    	target_id = jQuery_link.attr('id').replace(/^place_favorite_link_/, '');
    	
    	// ini state
        var show_title;
        var show_msg;
		if (jQuery_link.hasClass('on_flag')) {
            ////////////////////////////////////////////////
            // remove block            	
            jQuery.ajax({
                type: 'GET',
                url: './places_favorite_remove.php',
                data: 'place_id='+target_id+'&noRedirect=1',
                success: function(data){
                    if (data == 'login') {
                        var returnHref = document.location.href;
                        document.location = './login.php?return_url=' + escape(returnHref);
                        return false;
                    } else {
                        if ( jQuery_link.hasClass('reload-action') )
                        {
                            window.location.reload();
                            return true;
                        }
                        jQuery_link.removeClass('on_flag');
                        if (jQuery_link.hasClass('display_my')) {
                            if (view_place_hide_favorite_text) {
                                jQuery_link.html('');
                            } else {
                                jQuery_link.html('Favorite');
                            }
                        }
                        return true;
                    }
                },
                error: function(){
                    show_error_box(jQuery_link);
                }
            });
            show_title = title_remove;
            show_msg = msg_remove;
            // END remove block
            ////////////////////////////////////////////////           	
        } else {
			////////////////////////////////////////////////
			// add block    
			jQuery.ajax({
				type: 'GET',
				url: './places_favorite_add.php',
				data: 'place_id='+target_id+'&noRedirect=1',
				success: function(data){
                    if (data == 'login') {
                        var returnHref = document.location.href;
                        document.location = './login.php?return_url=' + escape(returnHref);
                        return false;
                    } else {
                    	jQuery_link.addClass('on_flag');
                        if (jQuery_link.hasClass('display_my')) {
                            if (view_place_hide_favorite_text) {
                                jQuery_link.html('');
                            } else {
                                jQuery_link.html('Remove Favorite');
                            }
                        }
                    	return true;
                    }
				},
				error: function(){
					show_error_box(jQuery_link);
				}
			});
            show_title = title_add;
            show_msg = msg_add;
			// END add block
            //////////////////////////////////////////////// 			
		}    	

    	// overylay markup
        var extra_styles = 'width: 155px;';
        var h3_style;
        if (jQuery_link.hasClass('display_my')) {
            extra_styles = 'width: 115px;';
            h3_style = 'padding-top: 14px;';
        } else if (jQuery_link.hasClass('display_view')) {
            extra_styles += 'left: 203px;';
        } else if (jQuery_link.hasClass('display_list')) {
            extra_styles += 'width: 141px;';
        }
    	html_box = ''+
    	'<div id="favorite_box_'+target_id+'" class="collect_overstate" style="margin-top:0;' + extra_styles + '">'+                                
            '<a class="remove" id="favorite_box_close_'+target_id+'"><img src="images/spacer.gif" height="14" border="0" alt="" /></a>'+                        
            '<h3 id="favorite_box_title" style="padding-left:0px !important; font-size: 1.305em!important;' + h3_style + '">'+show_title+'</h3>' + 
            '<span id="favorite_box_msg">'+show_msg+'</span>'+ 
        '</div>';
            	
    	// bind close link
    	var jQuery_html_box = jQuery(html_box);
    	
    	jQuery(jQuery_html_box).find('.remove').live("click", function(){
    		jQuery(jQuery_html_box).remove();
            if (jQuery_link.hasClass('display_my')) {
                jQuery_link.parent().parent().parent().find('.display_hide').css('visibility', 'visible');
            } else if (jQuery_link.hasClass('display_list')) {
                jQuery_link.parent().parent().parent().parent().find('.display_hide').css('visibility', 'visible');
            }
    	});
    	
    	// insert overlay
		if (jQuery_link.hasClass('display_my')) {
            jQuery(this).parent().parent().before(jQuery_html_box);
            jQuery_link.parent().parent().parent().find('.display_hide').css('visibility', 'hidden');
		} else if (jQuery_link.hasClass('display_view')) {
            jQuery(this).parent().parent().parent().find('.profile_place').after(jQuery_html_box);
		} else if (jQuery_link.hasClass('display_list')) {
            jQuery(this).parent().parent().parent().find('.description').before(jQuery_html_box);    
            jQuery_link.parent().parent().parent().parent().find('.display_hide').css('visibility', 'hidden');
        } else if (jQuery_link.hasClass('display_featured')) {
            jQuery(this).after(jQuery_html_box);
            var pos = jQuery(jQuery_html_box).position();
            var left = Math.ceil( pos.left );
            var top = Math.ceil( pos.top );
            var height = jQuery(jQuery_html_box).outerHeight();
            jQuery(jQuery_html_box).css( 'left', left - 20 );
            jQuery(jQuery_html_box).css( 'top', top - 24 - height );
        } else {
            jQuery(this).after(jQuery_html_box);
        }
    });

    /**
     * jQuery logic to handle featured media
     *   - uses jQuery() syntax to play nice with mootools
     *   - the <a> element should be name "place_feature_link" and have a dynamic id of "place_feature_link_XX" (where XX is the media ID)
     *   - the <a> element should have class "on_flag" if it's already added to feature.
     */    
    jQuery("a[name='place_feature_link']").live("click", function(){
    	// login check    	
    	if(jQuery("a.plain[href='user_logout.php']").length != 1) {
            var returnHref = document.location.href;
            document.location = './login.php?return_url=' + escape(returnHref);
            return false;
    	}
    	
    	var title_add = 'Place Featured!';
    	var msg_add = 'This Place is now your featured Place';
    	
    	var title_remove = 'Remove Feature';
    	var msg_remove = 'This Place is no longer featured';
    	
    	var title = title_add;
    	var msg = msg_add;
    	
    	var state = 'added';
    	
    	var jQuery_link = jQuery(this);
    	
    	clear_boxes();
    	
    	target_id = jQuery_link.attr('id').replace(/^place_feature_link_/, '');
    	
    	// enable feature			
		jQuery.ajax({
			type: 'GET',
			url: './places_feature_enable.php',
			data: 'noRedirect=1',
			success: function(data){
                if (data == 'login') {
                    return false;
                } else {
                	return true;
                }
			},
			error: function(){
				show_error_box(jQuery_link);
			}
		});
        
    	// ini state
        var show_title;
        var show_msg;
		if (jQuery_link.hasClass('on_flag')) {
            ////////////////////////////////////////////////
            // remove block
            jQuery.ajax({
                type: 'GET',
                url: './places_feature_remove.php',
                data: 'place_id='+target_id+'&noRedirect=1',
                success: function(data){
                    if (data == 'login') {
                        var returnHref = document.location.href;
                        document.location = './login.php?return_url=' + escape(returnHref);
                        return false;
                    } else {
                        jQuery_link.removeClass('on_flag');
                        if (jQuery_link.hasClass('display_my')) {
                            if (view_place_hide_feature_text) {
                                jQuery_link.html('');
                            } else {
                                jQuery_link.html('Feature');
                            }
                        }
                        return true;
                    }
                },
                error: function(){
                    show_error_box(jQuery_link);
                }
            });			
            show_title = title_remove;
            show_msg = msg_remove;
            // END remove block
            ////////////////////////////////////////////////         	
        } else {
			////////////////////////////////////////////////
			// add block
            // console.log('feature');
			jQuery.ajax({
				type: 'GET',
				url: './places_feature_add.php',
				data: 'place_id='+target_id+'&noRedirect=1&confirm=1',
				success: function(data){
                    if (data == 'login') {
                        var returnHref = document.location.href;
                        document.location = './login.php?return_url=' + escape(returnHref);
                        return false;
                    } else {
                    	// added
                    	jQuery_link.addClass('on_flag');
                    	
                    	jQuery('#place_feature_link_'+data).removeClass('on_flag');
                        if (jQuery_link.hasClass('display_my')) {
                            if (view_place_hide_feature_text) {
                                jQuery_link.html('');
                            } else {
                                jQuery_link.html('Remove Feature');
                            }
                        }
                    	return true;
                    }
				},
				error: function(){
					show_error_box(jQuery_link);
				}
			});			
            show_title = title_add;
            show_msg = msg_add;
			// END add block
            ////////////////////////////////////////////////
		}    	

    	// overylay markup
        var extra_styles = 'width: 155px;';
        var h3_style;
        if (jQuery_link.hasClass('display_my')) {
            extra_styles = 'width: 115px;';
            h3_style = 'padding-top: 14px;';
        } else if (jQuery_link.hasClass('display_view')) {
            extra_styles += 'left: 203px;';
        } else if (jQuery_link.hasClass('display_list')) {
            extra_styles = 'width: 141px;';
        }
    	html_box = ''+
    	'<div id="feature_box_'+target_id+'" class="collect_overstate" style="margin-top:0;' + extra_styles + '">'+                                
            '<a class="remove" id="feature_box_close_'+target_id+'"><img src="images/spacer.gif" height="14" border="0" alt="" /></a>'+                        
            '<h3 id="feature_box_title" style="padding-left:0px !important; font-size: 1.305em!important;' + h3_style + '">'+show_title+'</h3>' + 
            '<span id="feature_box_msg">'+show_msg+'</span>'+ 
        '</div>';
            	
    	// bind close link
    	var jQuery_html_box = jQuery(html_box);
    	
    	jQuery(jQuery_html_box).find('.remove').live("click", function(){
    		jQuery(jQuery_html_box).remove();
            if (jQuery_link.hasClass('display_my')) {
                jQuery_link.parent().parent().parent().find('.display_hide').css('visibility', 'visible');
            } else if ( jQuery_link.hasClass('display_list') ) {
                jQuery_link.parent().parent().parent().parent().find('.display_hide').css('visibility', 'visible');
            }
    	});
    	
    	// insert overlay
		if (jQuery_link.hasClass('display_my')) {
            jQuery(this).parent().parent().before(jQuery_html_box);
            jQuery_link.parent().parent().parent().find('.display_hide').css('visibility', 'hidden');
		} else if (jQuery_link.hasClass('display_view')) {
            jQuery(this).parent().parent().parent().find('.profile_place').after(jQuery_html_box);
		} else if (jQuery_link.hasClass('display_list')) {
            jQuery(this).parent().parent().parent().find('.description').before(jQuery_html_box);    
            jQuery_link.parent().parent().parent().parent().find('.display_hide').css('visibility', 'hidden');
        } else if (jQuery_link.hasClass('display_featured')) {
            jQuery(this).after(jQuery_html_box);
            var pos = jQuery(jQuery_html_box).position();
            var left = Math.ceil( pos.left );
            var top = Math.ceil( pos.top );
            var height = jQuery(jQuery_html_box).outerHeight();
            jQuery(jQuery_html_box).css( 'left', left - 20 );
            jQuery(jQuery_html_box).css( 'top', top - 24 - height );
        } else {
            jQuery(this).after(jQuery_html_box);
        }
    });

    jQuery('.place-preview-container:not(.preview-disabled)').bind('mouseenter', function() {
        var place_id = jQuery(this).attr('id').replace('place-preview-', '');
        if ( !place_id )
        {
            place_id = this.className.match(/place-preview-(\d+)/)[1];
        }
        bind_place_preview(place_id, jQuery(this));
    });
});

function bind_place_preview ( place_id, obj )
{
    obj.bind('mouseleave', function() {
        jQuery(this).find('.hover_frame').hide();
        clear_place_preview_globals();
        jQuery(this).find('.loading-layer').hide();
        jQuery(this).find('.place_cover_container').stop();
        jQuery(this).find('.place_thumb_container').stop();
        jQuery(this).stop();
        jQuery(this).find('.place_cover_container').animate({left: '0'}, 500);
        jQuery(this).find('.place_thumb_container').css('left', '0');
        reset_place_preview_order(place_id, obj);
        jQuery(this).unbind('mouseenter');
        jQuery(this).bind('mouseenter', function() { bind_place_preview(place_id, obj); });
    });

    clear_place_preview_globals();
    obj.find('.loading-layer').css('display', 'block');
    obj.find('.hover_frame').css('display', 'block');
    globalAjaxRequests[globalAjaxRequests.length] = jQuery.ajax({
        type: "get",
        url: "ajax_place_page_thumbs.php",
        dataType: "json",
        data: { place_id: place_id, my_places: obj.hasClass('my_places') ? true : false },
        success: function(data) {
            obj.unbind('mouseenter');
            obj.html(data.data);
            obj.find('.loading-layer').css('display', 'block');
            obj.find('.hover_frame').css('display', 'block');
            if ( obj.find('.loading-layer').hasClass('disabled') == false && data.preview == true )
            {
                globalTimeouts[globalTimeouts.length] = setTimeout(function() { display_place_preview(place_id, obj) }, 1000);
            }
        }
    });
}

function display_place_preview ( place_id, obj )
{
    var element_index = 0;
    obj.find('.place_thumb_container img').each(function() { jQuery(this).attr('id', 'place-preview-' + place_id + '-thumb-' + element_index); element_index++; });

    obj.find('.loading-layer').hide();
    obj.find('.place_cover_container').animate({left: '-=175'}, 500);

    if ( element_index > 1 )
    {
        globalIntervals[globalIntervals.length] = setInterval(function() { shift_place_preview(place_id, obj); }, 1500);
    }
}

function clear_place_preview_globals () 
{
    if ( globalAjaxRequests.length > 0 )
    {
        for ( i = 0; i < globalAjaxRequests.length; i++ )
        {
            globalAjaxRequests[i].abort();
        }
    }

    for ( j = 0; j < globalIntervals.length; j++ )
    {
        clearInterval(globalIntervals[j]);
    }

    for ( k = 0; k < globalTimeouts.length; k++ )
    {
        clearTimeout(globalTimeouts[k]);
    }

    globalAjaxRequests = new Array();
    globalIntervals = new Array();
    globalTimeouts = new Array();
}

function shift_place_preview ( place_id, parentObj )
{
    var obj = parentObj.find('.place_thumb_container');
    var current_pos = parseInt(( obj.css('left') == 'auto' ) ? 0 : obj.css('left').replace('px', ''));
    var elements = [];
    obj.find('img').each(function() { 
        elements[elements.length] = jQuery(this);
    });
    
    if ( current_pos < 0 )
    {
        obj.append(elements[0].clone());
        elements[0].remove();
    }
    obj.css('left', '0');
    obj.animate({left: '-=175'}, 500);
}

function reset_place_preview_order( place_id, parentObj )
{
    var obj = parentObj.find('.place_thumb_container');
    var elements = [];
    obj.find('img').each(function() { 
        elements[jQuery(this).attr('id').replace('place-preview-' + place_id + '-thumb-', '')] = jQuery(this).clone();
        jQuery(this).remove();
    });

    for ( i = 0; i < elements.length; i++ )
    {
        obj.append(elements[i]);
    }
}

function clear_boxes(){
	jQuery("div[id^='favorite_box_'], div[id^='feature_box_']").remove();
	jQuery("div[id^='collect_box_']").hide();
    jQuery(".display_hide").css('visibility', 'visible');
}

function show_error_box(jQuery_link){
	clear_boxes();
	
	// overylay markup
	html_box = ''+
	'<div id="favorite_box_'+target_id+'" class="collect_overstate" style="width:175px;">'+                                
        '<a class="remove" id="favorite_box_close_'+target_id+'"><img src="images/spacer.gif" height="14" border="0" alt="" /></a>'+                        
        '<h3 id="favorite_box_title">An Error Occurred</h3>'+                        
        '<span id="favorite_box_msg">Please try again later.</span>'+                          
    '</div>';
        	
	// bind close link
	var jQuery_html_box = jQuery(html_box);
	
	jQuery(jQuery_html_box).find('.remove').live("click", function(){
        jQuery('.display_hide').show();
		jQuery(jQuery_html_box).remove();
	});
	
	jQuery_link.after(jQuery_html_box);
}

