/**
 *  Javascript sprintf
 *  http://www.webtoolkit.info/
 **/
sprintfWrapper={init:function(){if(typeof arguments=="undefined"){return null}if(arguments.length<1){return null}if(typeof arguments[0]!="string"){return null}if(typeof RegExp=="undefined"){return null}var j=arguments[0];var c=new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);var g=new Array();var l=new Array();var a=0;var h=0;var m=0;var d=0;var k="";var f=null;while(f=c.exec(j)){if(f[9]){a+=1}h=d;m=c.lastIndex-f[0].length;l[l.length]=j.substring(h,m);d=c.lastIndex;g[g.length]={match:f[0],left:f[3]?true:false,sign:f[4]||"",pad:f[5]||" ",min:f[6]||0,precision:f[8],code:f[9]||"%",negative:parseInt(arguments[a])<0?true:false,argument:String(arguments[a])}}l[l.length]=j.substring(d);if(g.length==0){return j}if((arguments.length-1)<a){return null}var b=null;var f=null;var e=null;for(e=0;e<g.length;e++){if(g[e].code=="%"){substitution="%"}else{if(g[e].code=="b"){g[e].argument=String(Math.abs(parseInt(g[e].argument)).toString(2));substitution=sprintfWrapper.convert(g[e],true)}else{if(g[e].code=="c"){g[e].argument=String(String.fromCharCode(parseInt(Math.abs(parseInt(g[e].argument)))));substitution=sprintfWrapper.convert(g[e],true)}else{if(g[e].code=="d"){g[e].argument=String(Math.abs(parseInt(g[e].argument)));substitution=sprintfWrapper.convert(g[e])}else{if(g[e].code=="f"){g[e].argument=String(Math.abs(parseFloat(g[e].argument)).toFixed(g[e].precision?g[e].precision:6));substitution=sprintfWrapper.convert(g[e])}else{if(g[e].code=="o"){g[e].argument=String(Math.abs(parseInt(g[e].argument)).toString(8));substitution=sprintfWrapper.convert(g[e])}else{if(g[e].code=="s"){g[e].argument=g[e].argument.substring(0,g[e].precision?g[e].precision:g[e].argument.length);substitution=sprintfWrapper.convert(g[e],true)}else{if(g[e].code=="x"){g[e].argument=String(Math.abs(parseInt(g[e].argument)).toString(16));substitution=sprintfWrapper.convert(g[e])}else{if(g[e].code=="X"){g[e].argument=String(Math.abs(parseInt(g[e].argument)).toString(16));substitution=sprintfWrapper.convert(g[e]).toUpperCase()}else{substitution=g[e].match}}}}}}}}}k+=l[e];k+=substitution}k+=l[e];return k},convert:function(b,d){if(d){b.sign=""}else{b.sign=b.negative?"-":b.sign}var a=b.min-b.argument.length+1-b.sign.length;var c=new Array(a<0?0:a).join(b.pad);if(!b.left){if(b.pad=="0"||d){return b.sign+c+b.argument}else{return c+b.sign+b.argument}}else{if(b.pad=="0"||d){return b.sign+b.argument+c.replace(/0/g," ")}else{return b.sign+b.argument+c}}}};sprintf=sprintfWrapper.init;


/*
objSort v 1.1
copyright 2006 Thomas Frank
This program is free software under the terms of the 
GNU General Public License version 2 as published by the Free 
Software Foundation. It is distributed without any warranty.
*/
tfObjSort={init:function(){Array.prototype.objSort=function(){tfObjSort.setThings(this);var a=arguments;var x=tfObjSort;x.a=[];x.d=[];for(var i=0;i<a.length;i++){if(typeof a[i]=="string"){x.a.push(a[i]);x.d.push(1)};if(a[i]===-1){x.d[x.d.length-1]=-1}}
return this.sort(tfObjSort.sorter);};Array.prototype.strSort=function(){tfObjSort.setThings(this);return this.sort(tfObjSort.charSorter)}},sorter:function(x,y){var a=tfObjSort.a
var d=tfObjSort.d
var r=0
for(var i=0;i<a.length;i++){if(typeof x+typeof y!="objectobject"){return typeof x=="object"?-1:1};var m=x[a[i]];var n=y[a[i]];var t=typeof m+typeof n;if(t=="booleanboolean"){m*=-1;n*=-1}
else if(t.split("string").join("").split("number").join("")!=""){continue};r=m-n;if(isNaN(r)){r=tfObjSort.charSorter(m,n)};if(r!=0){return r*d[i]}}
return r},charSorter:function(x,y){if(tfObjSort.ignoreCase){x=x.toLowerCase();y=y.toLowerCase()};var s=tfObjSort.chars;if(!s){return x>y?1:x<y?-1:0};x=x.split("");y=y.split("");l=x.length>y.length?y.length:x.length;var p=0;for(var i=0;i<l;i++){p=s.indexOf(x[i])-s.indexOf(y[i]);if(p!=0){break};};if(p==0){p=x.length-y.length};return p},setThings:function(x){this.ignoreCase=x.sortIgnoreCase;var s=x.sortCharOrder;if(!s){this.chars=false;return true};if(!s.sort){s=s.split(",")};var a="";for(var i=1;i<1024;i++){a+=String.fromCharCode(i)};for(var i=0;i<s.length;i++){z=s[i].split("");var m=z[0];var n=z[1];var o="";if(z[2]=="_"){o=n+m}else{o=m+n};a=a.split(m).join("").split(n).join(o);};this.chars=a}};
tfObjSort.init();


/**	Common
 */
mbk = new Object();
mbk.baseurl = window.location.protocol+'//'+window.location.host+'/';

mbk.init = function() {
	
	mbk.listing_params = listing_params;
	mbk.bsearch_params = bsearch_params;
	
	// Set up inline modal box
	Shadowbox.init({
		players: ['img', 'html', 'iframe'],
		animate: false,
		enableKeys: false
	});
	
	// Set up submenus
	$$('.submenu li').each(function(item){
		item.addEvent('mouseover', function(){
			this.addClass('hover');
		});
		item.addEvent('mouseout', function(){
			this.removeClass('hover');
		});
	});
	
	// Set up js links
	if($('listings')) {
		// Add to favourites
		$$('a.fav.add').each(function(item, index){
			item.addEvent('click', function(){
				var el = this;
				var parent = el.getParent();
				new Request.JSON({
					url: this.get('href'),
					onSuccess: function(result) {
						if(result.success) {
							el.set('tween', {
								onComplete: function() {
									parent.empty();
									var el2 = new Element('span', {
										'html': 'In your favourites',
										'styles': {'opacity': 0}
									}).inject(parent);
									el2.fade('in');
								}
							});
							el.tween('opacity', 0);
						}
						else {
							alert(result.message);
						}
					}
				}).send();
				return false;
			});
		});
		
		// Set up remove listing for my listings page
		$$('a.rem_listing').each(function(item, index){
			item.addEvent('click', function(){
				var msg = 'Are you sure you want to remove this listing? \n'
						+ 'This action cannot be undone. \n\n'
						+ '- Click OK to immediately remove this listing from MyBike.com.au. \n'
						+ '- Click CANCEL to leave this listing online. \n ';
				if(confirm(msg)) {
					return true;
				}
				else {
					return false;
				}
			});
		});
		
		// Set up sortby for browse / search results
		if($('sort_view')) {
			$$('#sort_view select').each(function(item){
				item.addEvent('change', function(){
					var path = window.location.pathname;
					var qstr = mbk.qs2object(window.location.search.replace('?', ''));
					qstr[this.get('id')] = this.get('value');
					qstr.page = 1;
					window.location = window.location.pathname + '?' + mbk.obj2qs(qstr);
				});
			});
		}
	}
	
	// Submit buttons
	$$('.submit.preview').each(function(item){
		item.addEvent('click', function(){
			$('form_action').set('value', 'preview');
			$(this.get('rel')).submit();
			return false;
		});
	});
	$$('a.submit.edit').each(function(item){
		item.addEvent('click', function(){
			$('form_action').set('value', 'edit');
			$(this.get('rel')).submit();
			return false;
		});
	});
	$$('a.submit.save').each(function(item){
		item.addEvent('click', function(){
			if(!this.hasClass('processing')) {
				this.addClass('processing');
				var form = $(this.get('rel'));
				if($('form_action')) {
					$('form_action').set('value', 'save');
				}
				$(this.get('rel')).submit();
			}
			return false;
		});
	});
	
	// Set up event handlers for form fields with errors
	mbk.errorfields();

};

mbk.qs2object = function(str) {
	var obj = new Object();
	str.split('&').each(function(item){
		var pair = item.split('=');
		obj[pair[0]] = pair[1];
	});
	return obj;
};

mbk.obj2qs = function(obj) {
	var str = '';
	for(var x in obj) {
		if(x.length > 0) {
			str+= x + '=' + obj[x] + '&';
		}
	}
	return str.substr(0, str.length-1);
};

mbk.errorfields = function() {
	$$('input.error, select.error, textarea.error').each(function(item, index){
		item.addEvent('focus', function(){
			this.removeClass('error');
		});
	});
};


mbk.fielderror = function(el, msg) {
	alert(msg);
};


/**	Search
 */
mbk.b_search = new Object();
mbk.b_search.initform = function() {
	if(!$('bsearch')) {
		return false;
	}

	// Set up search category tabs
	$('bsearch_cat').getElements('label').each(function(item, index){
		new Element('span', {'class':'cnr left'}).inject(item);
		new Element('span', {'class':'cnr right'}).inject(item);
		item.addEvent('mousedown', function(){
			mbk.b_search.togglecat(this);
		});
		if(item.getElement('input').checked) {
			mbk.b_search.togglecat(item);
		}
	});
	
	$('bsearch_sub').addEvent('change', function(){
		mbk.b_search.togglesub();
	});
	mbk.b_search.togglesub();
	
	// Set up toggleable default field values
	$$('input.toggle').each(function(item, index){
		item.addEvent('focus', function(){
			var defval = item.get('id').capitalize().replace('_', ' ');
			if(item.value == defval) {
				item.value = '';
			}
			else {
				item.select();
			}
		});
		item.addEvent('blur', function(){
			var defval = item.get('id').capitalize().replace('_', ' ');
			if(item.value == '') {
				item.value = defval;
			}
		});
	});
	
};

mbk.b_search.togglecat = function(el) {
	
	// Swap the currently selected tab's class with the new one
	$('bsearch_cat').getElements('label').each(function(item, index){
		item.getElement('input').checked = false;
		if(item.get('class') == 'lite') {
			item.set('class', el.get('class'));
		}
	});
	// Set new tab class & check its checkbox
	el.set('class', 'lite');
	el.getElement('input').checked = true;
	var cat = el.getElement('input').get('value');
	var children = mbk.listing_params.categories[cat].children;
	
	// Filter the subcategory & brands selectors
	var sel_sub = $('bsearch_sub');
	var brands = new Array();
	var subcats = new Array();
	sel_sub.empty();
	new Element('option', {'value': '', 'html': 'Select type'}).inject(sel_sub);
	for(var id in children) {
		// Add the subcategory
		var opt = new Element('option', {
			'value': id,
			'html': children[id]
		}).inject(sel_sub);
		if(id == mbk.bsearch_params.sub) {
			opt.set('selected', 'selected');
		}
		subcats.push(id);
	}
	mbk.b_search.populate_brands(subcats);
	mbk.b_search.selected_cat = cat;

};

mbk.b_search.populate_brands = function(cat_ids) {

	var brands = new Array();
	cat_ids.each(function(cat_id){
		if(typeof(mbk.listing_params.category_brands[cat_id]) != 'undefined') {
			mbk.listing_params.category_brands[cat_id].each(function(brand_id){
				if(brand_id != '') {
					var brand = mbk.listing_params.brands[brand_id];
					var brandobj = new Object();
					brandobj.id = brand_id;
					brandobj.title = brand;
					brands[brand_id] = brandobj;
				}
			});
		}
	});
	brands = brands.objSort('title');
	var sel_brand = $('brand');
	sel_brand.empty();
	new Element('option', {'value': '', 'html': 'Select brand'}).inject(sel_brand);
	brands.each(function(brand){
		if(brand) {
			var opt = new Element('option', {
				'value': brand.id,
				'html': brand.title
			}).inject(sel_brand);
		}
	});
};

mbk.b_search.togglesub = function() {
	var sub = $('bsearch_sub').get('value');
	if(sub) {
		mbk.b_search.populate_brands([sub]);
	}
	else if(sub == '' || typeof(mbk.b_search.selected_cat) != 'undefined') {
		var children = mbk.listing_params.categories[mbk.b_search.selected_cat].children;
		var subcats = new Array();
		for(var id in children) {
			subcats.push(id);
		}
		mbk.b_search.populate_brands(subcats);
	}
};

window.addEvent('domready', function() {
	if(typeof(sIFR) == 'function'){
		sIFR.replaceElement('.sifr_heavy', named({sFlashSrc: '/assets/sifr/din.swf', sColor: '#1b3033', sLinkColor: '#00b7de', sCase: 'upper', sWmode: 'transparent'}));
		sIFR.replaceElement('.sifr_lite', named({sFlashSrc: '/assets/sifr/din.swf', sColor: '#ffffff', sLinkColor: '#00b7de', sWmode: 'transparent'}));
		sIFR.replaceElement('.sifr_dark', named({sFlashSrc: '/assets/sifr/din.swf', sColor: '#111111', sLinkColor: '#00b7de', sWmode: 'transparent'}));
	};
	mbk.init();
	mbk.b_search.initform();
});

// Addthis config
var addthis_config = {
	services_compact: 'facebook, twitter, google, favorites, delicious, more',
	ui_click: true
};

// Include google analytics onload
var ga_key = "UA-11027877-1";
load_ga = function(){var gaJsHost  = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");var s = document.createElement('script');s.src = gaJsHost + "google-analytics.com/ga.js";s.type = "text/javascript";document.getElementsByTagName("head")[0].appendChild(s);var i = 0;run_ga();
function run_ga(){if(typeof _gat == "object"){var pageTracker = _gat._getTracker(ga_key);pageTracker._initData();pageTracker._trackPageview();}else if(i < 20){i++;setTimeout(run_ga, 500);}};};
if(window.addEventListener){window.addEventListener("load", load_ga, false);}else if(window.attachEvent){window.attachEvent("onload", load_ga);} 


