// basic jquery functions that most pages can use. generally included on every page.

(function($) {
	$.ajaxLog = function(myMessage,myLevel) {
		if (!myLevel) myLevel = "PEAR_LOG_INFO";
		myMessage = "AJAX: "+myMessage;
		$.ajax({ type: "POST", url: '/store/util/AjaxLog', dataType: 'html', data: {message: myMessage, level: myLevel} });
	};
})(jQuery);

/*
 * jQuery Color Animations
 * Copyright 2007 John Resig
 * Released under the MIT and GPL licenses.
 */
(function(d){d.each(['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,b){d.fx.step[b]=function(a){if(a.state==0){a.start=getColor(a.elem,b);a.end=getRGB(a.end)}a.elem.style[b]="rgb("+[Math.max(Math.min(parseInt((a.pos*(a.end[0]-a.start[0]))+a.start[0]),255),0),Math.max(Math.min(parseInt((a.pos*(a.end[1]-a.start[1]))+a.start[1]),255),0),Math.max(Math.min(parseInt((a.pos*(a.end[2]-a.start[2]))+a.start[2]),255),0)].join(",")+")"}});function getRGB(a){var b;if(a&&a.constructor==Array&&a.length==3)return a;if(b=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a))return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])];if(b=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a))return[parseFloat(b[1])*2.55,parseFloat(b[2])*2.55,parseFloat(b[3])*2.55];if(b=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)];if(b=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a))return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)];return e[d.trim(a).toLowerCase()]}function getColor(a,b){var c;do{c=d.curCSS(a,b);if(c!=''&&c!='transparent'||d.nodeName(a,"body"))break;b="backgroundColor"}while(a=a.parentNode);return getRGB(c)};var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);

/*
 * flash() plugin Copyright 2008 Lima Beads
 * May not copy or reuse without permission.
 */
(function($) {
	$.fn.flash = function(options, end) {
		options = options || {};
		if (options.constructor == String) {
			options = {start: options, end: end};
		}
		var s = $.extend({start: options.start||"yellow", end: options.end||"white", speed:1500, easing:"swing", callback:function(){} }, options);
		$(this).css('backgroundColor', s.start);
		$(this).animate({backgroundColor: s.end}, s.speed, s.easing, s.callback);
		return this;
	}
})(jQuery);

var InlineAuth = {
	errorCallback: null,
	abortCallback: null,
	successCallback: null,
	
	authenticate: function(s, a, e, doneUrl) {
		if (doneUrl) doneUrl = encodeURIComponent(doneUrl);
		InlineAuth.errorCallback = e || function(){return true;};
		InlineAuth.abortCallback = a || function(){return true;};
		InlineAuth.successCallback = s;
		
		jQuery.ajax({
			type: 'GET',
			url: '/store/util/CheckAuth?t='+(new Date().getTime()),
			dataType: 'json',
			timeout: 10000,
			success: function(data) {
				if (data.authenticated) {
					InlineAuth.successCallback();
				} else {
					_tb_remove_callback = InlineAuth.abortCallback;
					var link = jQuery('<a class="inlineLoginThickboxProxy" href="/store/account/InlineSignInForm?done='+doneUrl+'&amp;height=250&amp;width=400"><'+'/a>').appendTo('body').hide();
					tb_init(link);
					link.click();
				}
			},
			error: function(req) {
				InlineAuth.errorCallback();
			}
		});
	}
};

/*
 * Metadata 2.0 - jQuery plugin for parsing metadata from elements
 *
 * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.metadata.js 3620 2007-10-10 20:55:38Z pmclanahan $
 *
 */
(function($){$.extend({metadata:{defaults:{type:'class',name:'metadata',cre:/({.*})/,single:'metadata'},setType:function(type,name){this.defaults.type=type;this.defaults.name=name;},get:function(elem,opts){var settings=$.extend({},this.defaults,opts);if(!settings.single.length)settings.single='metadata';var data=$.data(elem,settings.single);if(data)return data;data="{}";if(settings.type=="class"){var m=settings.cre.exec(elem.className);if(m)data=m[1];}else if(settings.type=="elem"){if(!elem.getElementsByTagName)return;var e=elem.getElementsByTagName(settings.name);if(e.length)data=$.trim(e[0].innerHTML);}else if(elem.getAttribute!=undefined){var attr=elem.getAttribute(settings.name);if(attr)data=attr;}if(data.indexOf('{')<0)data="{"+data+"}";data=eval("("+data+")");$.data(elem,settings.single,data);return data;}}});$.fn.metadata=function(opts){return $.metadata.get(this[0],opts);};})(jQuery);

// note: this is also present in jquery.compat.js for pages that use another jquery source (i.e. Garden)
function compat(feature) {
	feature = feature || "default";
	switch (feature) {
		case "bgbm":
		case "dyofp":
			var version = parseInt(jQuery.browser.version,10);
			return compat("default") && ((jQuery.browser.safari && version > 500)
											|| (jQuery.browser.msie && version>=6)
											|| (navigator.userAgent.indexOf("Firefox")!= -1 && jQuery.browser.mozilla && parseFloat(jQuery.browser.version)>=1.5)
											|| (jQuery.browser.opera && version >= 9)
											|| (navigator.userAgent.indexOf("Netscape")!= -1 && jQuery.browser.mozilla && parseFloat(jQuery.browser.version)>=1.8));
		case "default":
		default:
			/* ie6+ */
			return (document.getElementById && (!document.all || (document.all && document.fireEvent && document.createComment))) ? true : false; // ie6 (remove d.createComment for 5.5)
	}
}
