
//	Functions

function ieSelectExpand(el, original, expand) {
	var option = el + ' option';
	if(jQuery.browser.msie) { 
		
	jQuery(el).focusin(function(event) {
        $(this).width(expand); $(this).blur();
    });
	jQuery(el).change(function() {
        $(this).width(original);
	});
	} 
}

/* generates tooltip on all alt tags within el - must also include tooltip.js on scriptsandstyles.vm for this
to work */
function tooltip(el) {
		jQuery(el).tooltip({
			track: true,
			delay: 0,
			showURL: false,	
			fixPNG: true,
			showBody: " - ",
			top: -20,
			left: 15
		});
}

/* used to toggle browse by subject accordion */
function toggler(el) {
		var toggler= jQuery(el);
		toggler.add(jQuery('i', toggler)).removeClass('active');
		toggler.next().hide();
		toggler.click(function(){
			jQuery(this).add(jQuery('i', this)).toggleClass('active');
			jQuery(this).next().slideToggle();
			jQuery(this).toggleClass('selected');
			}
		);
		
		if(site.section == "journals") {
			toggler.mouseover(function(e) {
				jQuery(this).css('background-color','#F1F1F1');
			});
			
			
			toggler.mouseout(function(e) {
				if((jQuery(this).hasClass('selected')) != true) {
					jQuery(this).css('background-color','transparent');
				}
			});			
					
			tooltip('.tooltip');
		}
}

function addTextAreaMaxLengthListener() {

    $('textarea[maxlength]').bind('paste cut keyup input blur load',
        function(e) {
            //get the limit from maxlength attribute
            var limit = parseInt($(this).attr('maxlength'));
            //get the current text inside the textarea
            var text = $(this).val();
            //count the number of characters in the text
            var chars = text.length;

            var label = $("label[for='" + this.id + "']");
            //var label = $('label[for="userInterests.interests"]');

            if (label) {
                var new_limit = limit - chars;
                label.text(new_limit);
            }
            // do not merge with if above
            if (chars >= limit && $('span.error').text().length === 0) {
                $('.textarea-count').show();
                // disable form submission whilst char > limit
                jQuery('#update-interests').attr('disabled', 'true').attr('style', 'background-color: #ccc');
                jQuery('input').bind('keydown keypress keyup', function(event) {
                    if (event.which == 13) { event.preventDefault(); }
                });
            }
            else { $('.textarea-count').hide(); jQuery('#update-interests').removeAttr('disabled').removeAttr('style');}
        }
    );
} 

// collapsing list utility 
// toggle visibility of element that is a sibling of an element with class .collapser
function toggleList() {
	if(jQuery('.collapser').siblings('ul').attr('class') != 'hidebeforeload') {
		jQuery('.collapser').siblings('ul').toggle(); // show list if js is disabled
	}
	jQuery('.collapser').click(function() {
		jQuery(this).siblings('ul').toggle(); 
		jQuery(this).children('i').toggleClass('active');
	});
}

// Remove advert block when there is no ad inside 
function hideAdverts() {
	jQuery('.google-ad,.skyscraper,.advert').each(function() {
	   if (jQuery(this).children('dd').height() < 20) {
			if(jQuery.browser.msie) {
				jQuery(this).css('visibility','hidden'); 
			} else {
				jQuery(this).css('display','none');
			}
		}
	});
}   

// If there is an element with id "scroll-here" than it will be focused
function scrollToTop() {
	if(jQuery('#scroll-here').length == 1) {
		window.location = "#scroll-here";
	}
}

function popup(url,n,w,h) {
	var popup_window = 0;

	if (!popup_window.top) { popup_window = window.open(url,n,'width='+w+',height='+h+',resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'); }
	popup_window.focus();
}



function reverse(str) {
   if (!str) return '';
   var revstr='';
   for (i = str.length-1; i>=0; i--)
       revstr+=str.charAt(i)
   return revstr;
}
//	onLoadJson(id of panel in which to insert feed, number of results to show, url to fetch, panel )

function onLoadJson(feedUri, length, panel, heading, template, prefix) {
	
	// template to use, falls back to default if not specified
	var jsTemplate = template || "feed_template";
	var jsPrefix = prefix || "/webapi/1.0/blogs/";
	var webApiUrl;
    if(feedUri.indexOf("search")!=-1){
	  webApiUrl =site.abbreviation+feedUri;
     } else{
       var jsPrefix = prefix || "/webapi/1.0/blogs/";
       webApiUrl= site.abbreviation + prefix + length.toString() + '?feedUrl=' + encodeURIComponent(reverse(feedUri));
   } 
	
	
	// parsing json object
	function displayFeed(panel, data){
		data.heading = heading;
		jQuery('.'+panel+'_feed').html(tmpl(jsTemplate, data));
		 // console.log(data);
	}
	
	// config parameters
	var options = {
		type: "GET",
		url: webApiUrl,
		dataType: "json",
		timeout: 6000, // 6 seconds
		success: function(data, textStatus) {
			displayFeed(panel, data);
		},
		error: function(xhr, textStatus, errorThrown) {
			  //console.log(webApiUrl+ ' returned error: ' +errorThrown + '\n and status:' + textStatus + ' ' + xhr.responseText);
		},
		complete: function(xhr, textStatus) {
			 //console.log(webApiUrl+ '\n complete - returned status: '+' ' +textStatus);
		}
	};

	// fetch json
	jQuery.ajax(options);

}



//	jsonEventHandler
		// fetch json triggered by an event other than onLoad

function jsonEventHandler() {

	jQuery('.jsonloader').bind('click', function(event) {
		linkId = jQuery(this).attr('id');

		event.preventDefault();

		var webApiUrl = site.abbreviation + "/webapi/1.0/" + linkId + ".json";

		var options = {
			type: "GET",
			url: webApiUrl,
			dataType: "json",
			timeout: 6000, // 6 seconds
			beforeSend: function (XMLHttpRequest) {
				startAjaxSpinner();
			},
			success : function(data, textStatus) {
				displayRss();
				updateArticleList(linkId, data);
				makeTabCurrent(linkId);
				stopAjaxSpinner();

			},
			error : function (XMLHttpRequest, textStatus, errorThrown) {
				jQuery('.ajax-error').slideDown("fast").fadeOut(6000);
			},
			complete: function (XMLHttpRequest, textStatus) {
				stopAjaxSpinner();
				// console.log(XMLHttpRequest.contentType);
				// console.log(XMLHttpRequest.responseText);
			}
		};
		jQuery.ajax(options);
	});

	function displayRss() {
		jQuery('ul#article-pane-nav li').find('a.rss').hide();
		jQuery('#'+linkId).siblings().children('a.rss').show();
	}

	function startAjaxSpinner(){
		//jQuery('.ajax-spinner').html("<img src=\"/images/icons/ajax-loader.gif\" alt=\"\" />").show();
	}

	function stopAjaxSpinner(){
		//jQuery('.ajax-spinner').hide();
	}

	function makeTabCurrent(linkId){
		jQuery('.article-panel-tabs').removeClass('current');
		jQuery('#'+linkId).parent().addClass('current');
	}

	function updateArticleList(linkId, data){
		jQuery('#articles').html(tmpl(linkId + "_template", data));
	}

}


// Hide all rss icons apart from first
function hideRssIcons() {
	jQuery('ul#article-pane-nav li').eq(0).siblings().find('a.rss').hide();
}

// Advanced Search
jQuery(function() {
	var optionsToggler=jQuery('p.options a.options-toggler');

	optionsToggler.click(
	function() {
		jQuery(this).add(jQuery("i", this)).toggleClass('active');
	});
});

// IE 6 and 7 input:focus
jQuery(document).ready(function() {
	jQuery('input').focus(function() {
		jQuery(this).css('color','#000000');
	});
});

function LoadInParent(link) {
	if (window.opener.closed) {
		window.open(link);
	} else {
		window.opener.location = link;
		window.opener.focus();
	}
}

function initialiseScrollable() {
	 // initialize scrollable
	jQuery("div.scrollable").scrollable({
		size: 1,
		items: '#thumbs',
		hoverClass: 'hover',
		interval: 10000, 
		loop: true 
	});
}


// Andrew Urquhart : CountDownPro Timer : www.andrewu.co.uk/clj/countdown/pro/
function CD_M(strTagId){var objMeta=document.getElementsByTagName("meta");if(objMeta&&objMeta.length){for(var i=0;i<objMeta.length;++i){if(objMeta.item(i).scheme==strTagId){var name=objMeta.item(i).name;var content=objMeta.item(i).content;if(name.indexOf("mindigits")>0||name.indexOf("hidezero")>0){window[strTagId][name]=parseInt(content,10)}else {window[strTagId][name]=content}}}}};function CD_UD(strContent,objW){objW.node.innerHTML=strContent};function CD_T(strTagId){var objNow=new Date();var objW=window[strTagId];if(objW.msoffset){objNow.setMilliseconds(objNow.getMilliseconds()+objW.msoffset)};CD_C(objNow,objW);if(objW.intEvntDte<=objNow.valueOf()){if(objW.event_functionhandler&&typeof window[objW.event_functionhandler]=="function"){window[objW.event_functionhandler](new Date(objW.intEvntDte));objW.event_functionhandler=""}if(objW.event_msg||objW.event_redirecturl){var msg="<span id=\""+strTagId+"_complete\">"+objW.event_msg+"</span>";if(objW.event_redirecturl){location.href=objW.event_redirecturl}else if(objW.event_audio_src){var strMimeType=objW.event_audio_mimetype;var audioObject="<object style=\"visibility:hidden;\" id=\"MediaPlayer\" width=\"2\" height=\"2\" data=\""+objW.event_audio_src+"\" type=\""+strMimeType+"\"></object>";CD_UD(msg+audioObject,objW)}else {CD_UD(msg,objW)};return}};setTimeout("if(typeof CD_T=='function'){CD_T(\""+strTagId+"\")}",1100-objNow.getMilliseconds())};function CD_C(objNow,objW){var intMS=objW.intEvntDte-objNow.valueOf();if(intMS<=0){intMS*=-1};var intD=Math.floor(intMS/864E5);intMS=intMS-(intD*864E5);var intH=Math.floor(intMS/36E5);intMS=intMS-(intH*36E5);var intM=Math.floor(intMS/6E4);intMS=intMS-(intM*6E4);var intS=Math.floor(intMS/1E3);var strTmp=CD_F(intD,"d",objW)+CD_F(intH,"h",objW)+CD_F(intM,"m",objW)+CD_F(intS,"s",objW);CD_UD(strTmp,objW)};function CD_F(intData,strPrefix,objW){if(intData==0&&objW[strPrefix+"_hidezero"]){return ""};var strResult=""+intData;var intMinDigits=objW[strPrefix+"_mindigits"];if(intData.toString().length<intMinDigits){strResult="0000000000"+strResult;strResult=strResult.substring(strResult.length,strResult.length-intMinDigits)}if(intData!=1){strResult+=objW[strPrefix+"_units"]}else {strResult+=objW[strPrefix+"_unit"]};return objW[strPrefix+"_before"]+strResult+objW[strPrefix+"_after"]};function CD_Parse(strDate){var objReDte=/(\d{4})\-(\d{1,2})\-(\d{1,2})\s+(\d{1,2}):(\d{1,2}):(\d{0,2})\s+GMT([+\-])(\d{1,2}):?(\d{1,2})?/;if(strDate.match(objReDte)){var d=new Date(0);d.setUTCFullYear(+RegExp.$1,+RegExp.$2-1,+RegExp.$3);d.setUTCHours(+RegExp.$4,+RegExp.$5,+RegExp.$6);var tzs=(RegExp.$7=="-"?-1:1);var tzh=+RegExp.$8;var tzm=+RegExp.$9;if(tzh){d.setUTCHours(d.getUTCHours()-tzh*tzs)}if(tzm){d.setUTCMinutes(d.getUTCMinutes()-tzm*tzs)};return d}else {return NaN}};function CD_Init(){var strTagPrefix="countdown";var objElem=true;if(document.getElementById){for(var i=1;objElem;++i){var strTagId=strTagPrefix+i;objElem=document.getElementById(strTagId);if(objElem&&(typeof objElem.innerHTML)!='undefined'){var strDate=objElem.innerHTML;var objDate=CD_Parse(strDate);if(!isNaN(objDate)){var objW=window[strTagId]=new Object();objW.intEvntDte=objDate.valueOf();objW.node=objElem;objW.servertime="";objW.d_mindigits=1;objW.d_unit=" day";objW.d_units=" days";objW.d_before="";objW.d_after=" ";objW.d_hidezero=0;objW.h_mindigits=2;objW.h_unit="h";objW.h_units="h";objW.h_before="";objW.h_after=" ";objW.h_hidezero=0;objW.m_mindigits=2;objW.m_unit="m";objW.m_units="m";objW.m_before="";objW.m_after=" ";objW.m_hidezero=0;objW.s_mindigits=2;objW.s_unit="s";objW.s_units="s";objW.s_before="";objW.s_after=" ";objW.s_hidezero=0;objW.event_msg="";objW.event_audio_src="";objW.event_audio_mimetype="";objW.event_redirecturl="";objW.event_functionhandler="";CD_M(strTagId);if(objW.servertime){var objSrvrTm=CD_Parse(objW.servertime);if(isNaN(objSrvrTm)){objElem.innerHTML=strDate+"**";continue}else {objW.msoffset=parseInt((objSrvrTm.valueOf()-(new Date()).valueOf())/1000,10)*1000}}else {objW.msoffset=0};CD_T(strTagId);if(objElem.style){objElem.style.visibility="visible"}}else {objElem.innerHTML=strDate+"<a href=\"http://andrewu.co.uk/clj/countdown/pro/\" title=\"CountdownPro Error:Invalid date format used,check documentation (see link)\">*</a>"}}}}}if(window.attachEvent){window.attachEvent('onload',CD_Init)}else if(window.addEventListener){window.addEventListener("load",CD_Init,false)}else {window.onload=CD_Init};


// detect zoom event - http://mlntn.com/2008/12/11/javascript-jquery-zoom-event-plugin/
jQuery.fn.zoom = function(fn) {
	// Set handler for keyboard zooming in Firefox, IE, Opera, Safari.
	// This is the only valid case of browser-specific code I've ever seen -JM
	jQuery(document).keydown(function(e){
		switch (true) {
			case jQuery.browser.mozilla || jQuery.browser.msie :
				if (e.ctrlKey && (
					e.which == 187 || // =/+ (zoom in [FF, IE])
					e.which == 189 || // -   (zoom out [FF, IE])
					e.which == 107 || // +   (numpad) (zoom in [FF, IE])
					e.which == 109 || // -   (numpad) (zoom out [FF, IE])
					e.which == 96  || // 0   (reset zoom [FF, IE])
					e.which == 48     // 0   (numpad) (reset zoom [IE, FF, Opera])
				)) fn();
				break;
			case jQuery.browser.opera :
				// Opera requires CTRL to be pressed for reset (using num 0)
				if (
					e.which == 43 ||             // +   (numpad) (zoom in [Opera, Safari])
					e.which == 45 ||             // -   (numpad) (zoom out [Opera, Safari])
					e.which == 42 ||             // *   (numpad) (reset zoom [Opera])
					(e.ctrlKey && e.which == 48) // 0   (numpad) (reset zoom [FF, IE, Opera])
				) fn();
				break;
			case jQuery.browser.safari :
				// Use e.metaKey for the Apple key
				if (e.metaKey && (
					e.charCode == 43 || // +   (numpad) (zoom in [Opera, Safari])
					e.charCode == 45    // -   (numpad) (zoom out [Opera, Safari])
				)) fn();
				break;
		}
		return;
	});

	// Set handler for scrollwheel zooming in IE
	jQuery(document).bind('mousewheel', function(e){
		if (e.ctrlKey) fn();
	});

	// Set handler for scrollwheel zooming in Firefox
	jQuery(document).bind('DOMMouseScroll', function(e){
		if (e.ctrlKey) fn();
	});
};



//	on Load

jQuery(document).ready(function() {
    scrollToTop();
    toggleList();
    hideRssIcons();
    addTextAreaMaxLengthListener();
    // ajax
    if (site.section == "home") { // run on homepage only

        if (quoteSearchUri) {
            if (typeof heading == "undefined") {
                onLoadJson(quoteSearchUri, 0, 'quote_by_search', '', 'quotes_by_search_template', '/webapi/1.0/search/');
            }
            else if (site.id == 3001 || site.id == 3008 || site.id == 10184) { // petsko's column and musings on GM
                onLoadJson(quoteSearchUri, 0, 'quote_by_search', heading, 'custom_quote_by_search_column', '/webapi/1.0/search/');
            }
            else {
                onLoadJson(quoteSearchUri, 0, 'quote_by_search', heading, 'quotes_by_search_template', '/webapi/1.0/search/');
            }
        }
        if (blogFeedUri) {
            onLoadJson(blogFeedUri, 3, 'blog', 'From the blog', 'feed_template', '/webapi/1.0/blogs/');
        }

        if (latestCommentsUri) {
            onLoadJson(latestCommentsUri, 3, 'comments', 'Comments', 'comments_template', '/webapi/1.0/comments/');
        }

		ieSelectExpand('select#journalDropList','217px','370px');
		initialiseScrollable();
	}
	
	if(site.section == "journals") {
		toggler('.toggler');
	}
	
    jsonEventHandler();
});

// webkit cannot handle document.ready with width() or height()
 jQuery(window).load(function() {
	hideAdverts();
 })