// standard params for flash sitewide
var standard_flash_params = {play:true, loop:false, menu:false, quality:'best',wmode:'transparent', allowscriptaccess: "always", scale:'showall', salign:'tl'};
var wait_flash_params = {play:false, loop:false, menu:false, quality:'best',wmode:'transparent', allowscriptaccess: "always", scale:'showall', salign:'tl'};

/********************************************************************************************************
	WEATHER - requires swfobject
********************************************************************************************************/

weather = {}
weather.chart_data = {}
weather.render_chart = function(cid){
	if (cid in weather.chart_data){
		var json = weather.chart_data[cid]['json'];
		/*try{
			  var decoded = $('<div></div>').html(json);
			  var t = decoded.text();
			  return t;
		}catch(e){*/
			return json;	
		/*}*/
			
		
	}
	return '{}';
}

/********************************************************************************************************
	BLOTTER - requires swfobject
********************************************************************************************************/

blotter = {}
blotter.chart_data = {}
blotter.render_chart = function(cid){
	if (cid in blotter.chart_data){
		var json = blotter.chart_data[cid]['json'];
		return json
	}
	return '{}';
}
blotter.initialize_charts = function(static_media_url){
	$(document).ready(function() {
		var pies = $('#pie_charts');
		for (var k in blotter.chart_data){ 
			if (k.indexOf('pie_') == 0){			
				pies.append('<div id="'+k+'" class="chart pie"></div>')		
			}
			c = blotter.chart_data[k];
			try{
				swfobject.embedSWF(static_media_url+"swf/chart/open-flash-chart.swf", k, c.width, c.height, "9.0.0", static_media_url+"swf/swfobject/expressInstall.swf", {"get-data":"blotter.render_chart", "id":k});
			}catch(e){
				alert(e)
			}
		}
	}); 
}
blotter.initialize = function(){
	
	$("div#blotter_delta_days_form").show();
	var select = $("div#blotter_delta_days_form select#delta_days")
	select.change( function() {
		window.location.href = $(this).val()
	});
	blotter.tablesorter()
	$.each($('.trend'), function() {
		t = $(this).text()
		n = parseInt(t);
		if (!(isNaN(n)) && n > 0){
			$(this).addClass('trend_up')
		}else if (!(isNaN(n)) && n < 0){
			$(this).addClass('trend_down')
		}
      
    });


}

blotter.tablesorter = function(){
	if (typeof($.fn.tablesorter) != 'undefined'){
		$("#blotter_main table").tablesorter( {sortList: [[0,0]]} );	
	}
}

/********************************************************************************************************
	MARKETPLACE - requires colorbox
********************************************************************************************************/

marketplace = {};

marketplace.handle_yelp_response = function(response_data){	
	var business = response_data.businesses[0];
	var reviews = business.reviews;
	var yelp_div = $('#yelp');
	
	var output_html = $('<div class="yelp_response"><div class="name"><div class="rating"><img src="'+business.rating_img_url+'"/></div>'+business.name+' <div class="review_count">'+business.review_count+' reviews</div></div></div>');
	
	for (var i=0;i<reviews.length;i++){
		var review = reviews[i];
		var review_div = $('<div class="review">'+
								'<div class="reviewer">'+									
									'<div class="rating">'+
										'<img src="'+review.rating_img_url_small+'"/>'+
									'</div>'+
									review.user_name +
								'</div>'+
								'<div class="excerpt">'+
									'<a href="'+review.user_url+'"><img src="'+review.user_photo_url_small+'"/></a>'+
									review.text_excerpt +
									(review.text_excerpt.indexOf('...') >= 0 ? ' <a href="'+review.url+'">more</a>' : '') +
								'</div>'+
							'</div>');
		output_html.append(review_div);
	}
	
	if (reviews.length == 0){
		var review_div = $('<div class="review"><div class="reviewer">No reviews exist yet.</div><div class="excerpt" style="margin-top:10px"><a href="'+business.url+'">Be the first to review this business on yelp.</a></div></div>');
		output_html.append(review_div);
	} 
		
	$('div.loading',yelp_div).remove()
	$('div.content',yelp_div).append(output_html)
	
};

marketplace.initialize = function(){
	if ($('#marketplace_page').length == 1){		
		
		// maketplace specific
		
	}	
	if ($('#yelp').length == 1){		
		$.getJSON('./yelp.json',{},marketplace.handle_yelp_response)
	}
	maps.render_marketplace_map();
};
/********************************************************************************************************
	FILM - requires colorbox
********************************************************************************************************/
film = {}
film.initialize = function(){
	if ($('#film_page').length == 1){
		
		// image hovers
		var image_swap = $('img[src*="desaturated"]');		
		$.each(image_swap, function(){
    		$(this).hover( 
    			function() { 
    				var src = $(this).attr('src')
    				var new_src = src.replace('_desaturated.png','.png')
    				$(this).attr('src',new_src)
    			},
    			function() { 
    				var src = $(this).attr('src')
    				var new_src = src.replace('.png','_desaturated.png')
    				$(this).attr('src',new_src)
    			}
    	    );
    	});      
    	  
	}	
}

/********************************************************************************************************
	COLORBOX - requires colorbox
********************************************************************************************************/

colorbox_settings = function(){
	
	if ('colorbox' in $.fn){
		
		$.fn.colorbox.settings.transitionSpeed = 300;
		$.fn.colorbox.settings.transition = "elastic";
		$.fn.colorbox.settings.bgOpacity = "0.6";		
		$.fn.colorbox.settings.initialWidth = "690px";
		$.fn.colorbox.settings.initialHeight = "540px";
		$.fn.colorbox.settings.scrolling = false;
		$.fn.colorbox.settings.onLoad = function(){
			
			var el = $.fn.colorbox.element();			
			
			if (!el.hasClass('keenerview')){
				return;	
			}
			var el_img = el.attr('href');
			var el_data = el.data('colorbox');			
			//alert( el_img );
			el_data.width = '90%';
			el_data.height = '95%';
						
			var swf = '/media/static/swf/keenerview/keenerview.swf?image_url=' + el_img;
			if (el.hasClass('ocr')){
				swf += '&ocr_url=/ocr/'+el.attr('id')+'/';
				if (ocr_query){
					swf += '&ocr_query='+escape(ocr_query.replace(' ',';'))+'&ocr_search_algorithm=border_any';
				}
			}
			//prompt('',swf)
			var w = $.fn.colorbox.settings.initialWidth;
			var h = $.fn.colorbox.settings.initialHeight;
			
			var html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%">'
						    + '<param name="movie" value="' + swf + '"/>'
						    + '<embed src="' + swf + '" width="100%" height="100%"></embed>'
						+'</object>'
						
			el_data.html = html;
		};
		
		$("a[class='colorbox_video_trailer']").colorbox({width: $.browser.msie ? 720 : 700, height:$.browser.msie ? 580 : 580, iframe:true}, video.initialize);
		$("a[class='colorbox_video_gallery']").colorbox({width: $.browser.msie ? 720 : 700, height:$.browser.msie ? 580 : 580, iframe:true}, video.initialize);
		$("a[class='colorbox_gallery']").colorbox({}, gallery.initialize);
		$("a[class~='colorbox']").colorbox({});
		
		//$("a[class='colorbox_calendar']").colorbox({width: $.browser.msie ? 720 : 700, height:$.browser.msie ? 580 : 580}, calendar.initialize);
	}
}

/********************************************************************************************************
	KEENERVIEW
********************************************************************************************************/

var keenerview = {};

// mousewheel
keenerview.mw = {}; 
keenerview.mw.stop_propagation = false;

// http://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel
keenerview.mw.handle_event = function(e){	
	if (keenerview.mw.stop_propagation){		
		e = e ? e : window.event;		
		if(e.stopPropagation){ e.stopPropagation(); } // w3c
		if(e.preventDefault){ e.preventDefault(); }   // w3c				
		e.cancelBubble = true;	// ie
		return false;	
	}
};

// hook the mouse wheel to the handler
if (window.addEventListener){
	window.addEventListener('DOMMouseScroll', keenerview.mw.handle_event, false); // w3c
}
window.onmousewheel = document.onmousewheel = keenerview.mw.handle_event;         // ie

keenerview.handle_event = function(event_string){
	switch (event_string){
		case 'image_zoom_start':
			keenerview.mw.stop_propagation = true;
			break;
		case 'image_zoom_complete':
			keenerview.mw.stop_propagation = false;
			break;
		default:
			break;		
	}	
}


/********************************************************************************************************
	VIDEO - requires colorbox
********************************************************************************************************/

video = {};
video.initialize = function(){
	if ($('#video_slider').length == 1){
		$('#video_slider').mediaslider({
				speed: 500,
				wrapper_class: 'video_slider_container'
		});
	}
}

/********************************************************************************************************
	GALLERY - requires colorbox
********************************************************************************************************/

gallery = {};
gallery.groups = [];
gallery.initialize = function(){
	if ($('#gallery_slider').length == 1){
		for (var i=0;i<gallery.groups.length;i++){
			$("a[rel='"+gallery.groups[i]+"']").colorbox();
		}
		$('#gallery_slider').mediaslider({
				speed: 500,
				wrapper_class: 'gallery_slider_container'
		});
	}
}

/********************************************************************************************************
	CALENDAR - requires colorbox
********************************************************************************************************/

calendar = {};

calendar.add_map_interactions = function(){
	var events = $('#events div.event');
	$.each(events, function(){
		var _this = $(this);
		var map_link = $('a.google_map_link',_this);
		var map_div = $('div.calendar_map',_this);
		
		map_link.click(function(){
			
			if ($('div.gmap_point',map_div).length == 0){
				if (map_div.is(":hidden")){
					map_div.slideDown("fast");
				}else{
					map_div.slideUp("fast");
				}
			}else{    		
				map_div.hide();
				map_id = map_div.attr('id');				
				map_div.height(250);
				map_div.slideDown("fast", function(){maps.render_marketplace_map(map_id)});				
			}
			return false;
		});
	});
}
calendar.initialize = function(){
	var calendar_div = $('#calendar');
	if (calendar_div.length == 1){
		
		// calendar view cells
		var calendar_cell_links = $('td > a',calendar_div);		
		$.each(calendar_cell_links, function(){
    		$(this).click( 
    			function() { 
    				//alert('click')
    				var href = $(this).attr('href');
    				if (href.indexOf('ajax.html') == -1){
    					$(this).attr('href', href+'ajax.html')
    				}
    				$(this).colorbox({width: $.browser.msie ? 720 : 700, height:$.browser.msie ? 580 : 580}, function(){
    					calendar.add_map_interactions();
    					
    				});
    			}
    	    );
    	});
	}
	calendar.add_map_interactions();
}

/********************************************************************************************************
	MISCELLANEOUS
********************************************************************************************************/

ie_style_fix = function(){
	if (typeof($.fn.corner) != 'undefined'){
		var settings_10 = {
		  tl: { radius: 10 },
		  tr: { radius: 10 },
		  bl: { radius: 10 },
		  br: { radius: 10 },
		  antiAlias: true,
		  autoPad: true,
		  validTags: ["div"]
		}	
		$('.round_corners_small').corner(settings_10);
	}	
}

activate_input = function(){
	$('input.activate').select();
}

/********************************************************************************************************
	MENUS
********************************************************************************************************/
var menus = {};
menus.initialize = function(){
	var primary_menu = $('#primary_menu')
	var menu_nests = $('ul.nest',primary_menu)
	$.each(menu_nests, function(){
		var _this = $(this);
		var _this_parent = _this.parent();		
		
		_this_parent.hover(
			function(){
				//_this.show()		
				_this.fadeIn(120);
			},
			function(){
				//_this.hide()
				_this.fadeOut(120);
			}
			
		);
		_this.hide();
		
		
	});
}
/********************************************************************************************************
	ANALYTICS
********************************************************************************************************/

site_analytics = function(){
	
    // google analytics
    if (typeof(_gat) != 'undefined'){
        
        // standard tracker
        var pageTracker = _gat._getTracker("UA-11146848-1");
        pageTracker._initData();
        pageTracker._trackPageview();
        
        // outgoing links, connect to analytics.
    	var outgoing_links = $("a[href ^= 'http']");
    	var icon_exceptions = ['pragmar.com','maps.google.com', 'twitter.com', 'facebook.com', 'yelp.com']
    	$.each(outgoing_links, function(){
    		var add_outgoing_style = true;    		
    		var _this = $(this);
    		var ahref = _this.attr('href');
    		
    		for (var i=0;i < icon_exceptions.length;i++){
    			if (ahref.indexOf(icon_exceptions[i]) >= 0 || _this.hasClass('verify_icon') || $('img',_this).length) {
    				add_outgoing_style = false;
    			}
    		}
    		if (add_outgoing_style == true){
    			$(this).addClass('external')
    		}
    		$(this).click( function() { 
    			var ahref = $(this).attr('href');
    			if (ahref.indexOf('keeners.org') == -1){				
    				var cleaned_href = ahref.replace(/https?:\/\//,'');
    				var analytics_path = '/outgoing/'+cleaned_href;
    	     		pageTracker._trackPageview(analytics_path);
    	     	}
    	    });
    	});        
        
    }   
}

/********************************************************************************************************
	MAPS
********************************************************************************************************/
maps = {};
//maps.marketplace_map = {};

maps.create_marker = function(point, description){
	/*
	// Create a lettered icon for this point using our icon class
	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	var letteredIcon = new GIcon(baseIcon);
	letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
	*/
	// Set up our GMarkerOptions object
	//markerOptions = { icon:letteredIcon };
	
	var pin_icon = new GIcon(G_DEFAULT_ICON);
	pin_icon.image = "/media/static/images/site/pushpin.png";
	pin_icon.iconSize = new GSize(40, 33);
	pin_icon.shadowSize = new GSize(0,0);
	pin_icon.imageMap = [0,0, 24,0, 24,33, 0, 33];
	pin_icon.iconAnchor = new GPoint(18, 33);
	pin_icon.infoWindowAnchor = new GPoint(25, 20);

	// Set up our GMarkerOptions object
	markerOptions = { icon:pin_icon };

	
	//markerOptions = { };	
	var marker = new GMarker(point, markerOptions);
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(description);
	});
	return marker;
}


maps.render_marketplace_map = function(map_id){
	//alert('map_id: '+map_id)
	var gmaps = {}
	var marketplace_map = $('#'+map_id);
	if (marketplace_map.length == 0){
		map_id = 'marketplace_map';
		marketplace_map = $('#marketplace_map');
	}
		
	if (marketplace_map.length == 1){
		
		var map_points = [];
		var map_point_divs = $('div.gmap_point',marketplace_map);
		var map_latlng = undefined;
		
		$.each( map_point_divs, function(){
			var _this = $(this);
			var point = {}
			point['latitude'] = Number($('div.gmap_latitude',_this).text());
			point['longitude'] = Number($('div.gmap_longitude',_this).text());
			point['description'] = $('div.gmap_description',_this).html();
			map_points.push(point);
		});
		
		var map_zoom = 15;
		if (map_points.length == 1){
			// center on point
			map_latlng = new GLatLng(map_points[0].latitude, map_points[0].longitude);
		}else{
			// center of town
			map_zoom = 12;
			map_latlng = new GLatLng(42.93369226762153, -72.27840095758438);				
		}
		
		
		if (GBrowserIsCompatible()) {
			gmaps[map_id] = new GMap2(marketplace_map[0]);
			gmaps[map_id].addControl(new GSmallZoomControl());
			gmaps[map_id].addControl(new GMenuMapTypeControl());
			gmaps[map_id].setCenter(map_latlng, map_zoom);
			for (var i=0;i<map_points.length;i++){
				var mp = map_points[i];
				var mp_latlng = new GLatLng(mp.latitude, mp.longitude);
				gmaps[map_id].addOverlay(maps.create_marker(mp_latlng,mp.description));	
			}
					
		}
	}

}
/********************************************************************************************************
	CONTACT
********************************************************************************************************/
contact = function(){
	var contact = $("span.contact_us");
    var link_array = ['<a href="mailto:','con','t','act','@','keeners','.','org','">contact us</a>']
    $.each( contact, function(){
		$(this).html(link_array.join(''));
	});
}

/********************************************************************************************************
	COMMENTS
********************************************************************************************************/
comments = {}
comments.handle_comment_text = function(textarea, maxlength){
	var span = $('span.characters_number');
	var div = $('div.characters_remaining');
	var ta = $(textarea)
	var text = ta.val();			
	var content_length = text.length;
	var content_remain = maxlength - content_length;
	div.removeClass('characters_number_max');			
	$('span.characters_number').text(content_remain);
	if (content_length >= maxlength){
		span.text('0');
		div.addClass('characters_number_max');
		ta.val(text.substring(0,maxlength-1));
	}
}
comments.initialize = function(){
	if ('validate' in $.fn){
		var maxlength = 300;
		// maxlength is not valid html 4.01 strict		
		$("div.comments h3").prepend($('<div class="characters_remaining">characters remaining: <span class="characters_number">'+maxlength+'<span></div>'));
		comments.handle_comment_text($("form.comment textarea"), maxlength)
		$("form.comment textarea").keydown(function() {
			comments.handle_comment_text(this, maxlength)
		});		
		$("form.comment").validate({
			rules: {
				name: {
					required: true
				},
				email: {
					required: true,
					email: true
				},
				comment: {
					required: true,
					maxlength: maxlength
				}
			},
			messages: {
				name: "Please enter your name",
				email: "Please enter a valid email address",
				comment: {
					required:"Please add your comment before submitting",
					maxlength:"Please constrain your comment to 300 characters or less"
				}
			}
		});
	}
}

/********************************************************************************************************
	ONDOCREADY
********************************************************************************************************/

$(document).ready(function() {
	colorbox_settings();
	menus.initialize();	
	gallery.initialize();
	video.initialize();
	film.initialize();
	marketplace.initialize();
	blotter.initialize();
	calendar.initialize();	
	comments.initialize();	
	contact();
	ie_style_fix();
	activate_input();
    site_analytics();        
    
 });

