/*
*
* Copyright (c) 2007 Andrew Tetlaw
* 
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* 
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
* * 
*
*
* FastInit
* http://tetlaw.id.au/view/javascript/fastinit
* Andrew Tetlaw
* Version 1.4.1 (2007-03-15)
* Based on:
* http://dean.edwards.name/weblog/2006/03/faster
* http://dean.edwards.name/weblog/2006/06/again/
* Help from:
* http://www.cherny.com/webdev/26/domloaded-object-literal-updated
* 
*/

var FastInit = {
	onload : function() {
		if (FastInit.done) { return; }
		FastInit.done = true;
		for(var x = 0, al = FastInit.f.length; x < al; x++) {
			FastInit.f[x]();
		}
	},
	addOnLoad : function() {
		var a = arguments;
		for(var x = 0, al = a.length; x < al; x++) {
			if(typeof a[x] === 'function') {
				if (FastInit.done ) {
					a[x]();
				} else {
					FastInit.f.push(a[x]);
				}
			}
		}
	},
	listen : function() {
		if (/WebKit|khtml/i.test(navigator.userAgent)) {
			FastInit.timer = setInterval(function() {
				if (/loaded|complete/.test(document.readyState)) {
					clearInterval(FastInit.timer);
					delete FastInit.timer;
					FastInit.onload();
				}}, 10);
		} else if (document.addEventListener) {
			document.addEventListener('DOMContentLoaded', FastInit.onload, false);
		} else if(!FastInit.iew32) {
			if(window.addEventListener) {
				window.addEventListener('load', FastInit.onload, false);
			} else if (window.attachEvent) {
				return window.attachEvent('onload', FastInit.onload);
			}
		}
	},
	f:[],done:false,timer:null,iew32:false
};

/*@cc_on @*/
/*@if (@_win32)
FastInit.iew32 = true;
document.write('<script id="__ie_onload" defer src="' + ((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
document.getElementById('__ie_onload').onreadystatechange = function(){if (this.readyState == 'complete') { FastInit.onload(); }};
/*@end @*/
FastInit.listen();



/**--------------------------------------------------------------------------*/ 
// Site wide functions
/**--------------------------------------------------------------------------*/
 
function popUp(URL, theWidth, theHeight) {
	day = new Date();
	id = day.getTime();
	var left = (screen.width - theWidth) / 2;
	var top = (screen.height - theHeight) / 2;
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width="+theWidth+",height="+theHeight+",left="+left+",top="+top+"');");
}


function setCookie(name, value) {
	var date = new Date();
	date.setTime(date.getTime()+(2592000000));
	
	// cookie domain
	if(window.document.domain.indexOf('.dev') > 0) {
		tld = 'dev';
	} else {
		tld = 'com';
	}
	
    document.cookie = name + "=" + escape(value) + "; expires=" + date.toGMTString() + "; path=/; domain=.bustedtees."+tld+";";
}


function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	
	for(var i=0; i<ca.length; i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	
	return null;
}

/*
 * Restrictive Wrapper for Google Analytics pageTracker._trackEvent()
 *
 * String   category The general event category (e.g. "Videos").
 * String   action The action for the event (e.g. "Play").
 * String   label An optional descriptor for the event.
 * Int      value An optional value to be aggregated with 
 */

function trackEvent(category, action, label, value)
{
    if(typeof(pageTracker) == "object"){
        return pageTracker._trackEvent(category, action, label, value);
    }

    return true;
}

/**--------------------------------------------------------------------------*/ 
// Jument Communicator
/**--------------------------------------------------------------------------*/ 
var Jument = {};
Jument.ajax = Class.create({
	initialize: function(params) {
		this.response_data = '';
		this.params = {};
		
		this.params = params;
		
		if(this.params.options == undefined) {
			this.params.options = {};
		}
		
		this.request();
	},
	
	request: function() {
		this.show_loader();
		
		this.params.options.method = this.params.options.method ? this.params.options.method : 'post';
		
		if(this.params.form) {
			if(this.params.options.parameters == undefined) {
				this.params.options.parameters = Form.serialize(this.params.form);
			} else {
				this.params.options.parameters = this.params.options.parameters.concat('&', Form.serialize(this.params.form));
			}
		}
		
		if(!this.params.url) alert('AJAX: Requires URL');
		if(this.params.debug) console.log('url: %o \npars: %o', this.params.url, pars);
		
		// prep the onComplete function. Add on the hide_loader function
		if(!this.params.options.onComplete) {
			var onComplete = function() { this.hide_loader(); }.bind(this);
		} else if(this.params.onComplete instanceof Array) {
			var funtions = "";
			for(i=0; i < this.params.options.onComplete.length; i++) {
				functions += "this.params.options.onComplete["+i+"]();";
			}
			var onComplete = function(){ eval(functions); this.hide_loader(); }.bind(this);
		} else {
			var func = this.params.options.onComplete;
			var onComplete = function() { func(); this.hide_loader(); }.bind(this);
		}
		
		this.params.options.onComplete = onComplete;
		
		if(this.params.div) {
			new Ajax.Updater(this.params.div, this.params.url, this.params.options);
		} else {
			this.params.options.onSuccess = this.params.options.onSuccess ? this.params.options.onSuccess : this.response;
			new Ajax.Request(this.params.url, this.params.options);
		}
	},
	
	response: function(r) {
		eval('this.response_data = '+r.responseText);

		if(this.response_data.debug) {
			console.log(this.response_data);
			console.log(this.response_data.javascript.replace(/;/, "\n"));
		}
	
		if(this.response_data.javascript) eval(this.response_data.javascript); 
	},
	
	show_loader: function() {
		var loader;
		if (loader = $(this.params.loader)) loader.show();
		document.body.style.cursor = "wait";
	},
	
	hide_loader: function() {
		var loader;
		if (loader = $(this.params.loader)) loader.hide();
		document.body.style.cursor = "default";
	}
});

Jument.submit_form = Class.create({
	initialize: function(url, frm, btn, xpars) {		
		this.submit_form(url, frm, btn, xpars);
	},
	submit_form: function(url, frm, btn, xpars) {
		var btn = $(btn);
		var original_btn_value = btn.value;
		btn.value = 'Please wait...';
		btn.disabled = true;
		
		var pars;
		if(xpars != undefined) pars += '&' + xpars;
		
		new Jument.ajax({
			url: url,
			form: frm,
			options: {
				parameters: pars,
				onFailure: function() { alert('An error occurred. Please try again.'); },
				onComplete: function() { btn.disabled = false; btn.value = original_btn_value; }
			}
		});
	}
});


// Library
BT = function(){};

(function() {
	
    this.ns = function(fn){
        var ns = {};
        fn.apply(ns);
        return ns;
    };

    
    /***************************/
    
	
    UCWords = function(str) {
		arrStr = str.split(" ");
		
		var strOut = '';
		
		for (i=0;i<arrStr.length;i++) {
			firstChar = arrStr[i].substring(0,1);
			remainChar = arrStr[i].substring(1);
			
			firstChar = firstChar.toUpperCase(); 
			remainChar = remainChar.toLowerCase();
			
			strOut += firstChar + remainChar + ' ';
		}
		
		return strOut.substring(0, strOut.length - 1);
	};
	
	
	stockNotify = function(frm) {
		new Jument.ajax({
			url: '/ajax/notification/model_stock',
			form: frm,
			options: {
				onFailure: function() { alert('An error occurred. Please try again.'); }
			}
		});
	};
	
	swap = function(show, hide) {
		show.style.display = "";
		hide.style.display = "none";
	};
	
	// Toggles the visibility of all elements with specified class
	toggleClass = function(className) {
		document.getElementsByClassName(className).each(
			function(elm) {
				if(Element.visible(elm)) {
					elm.style.display ='none';
				} else {
	
					elm.style.display = '';
				}
			});
	};
	
	addNewsletter = function(position) {
		var email = $F($('add_newsletter_'+position)['email']);
		
		new Jument.ajax({
			url: '/ajax/newsletter/add',
			options: {
				parameters: 'email='+email+'&position='+position,
				
				onFailure: function() { alert('An error occurred. Please try again.'); },
				onComplete: function() {
					if(email != 'Type In Your Email Here') {
						cmCreatePageviewTag("Newsletter Confirmation", "Newsletter", null);
						cmCreateRegistrationTag(email, email, null, null, null, "newsletter", "Y");
						//$('email_text_'+position).value = 'thanks';
					}
				}
			}
		});
	};
	
	// SEO
	theCallout = function() {
		var spans = document.getElementsByTagName('div');
		for (i = 0;  i < spans.length;  i++) 
		{	
			if(spans[i].className == "ishmcallout")  
			{
				var ishmcallout = document.createElement('div');
				ishmcallout.className = "contentCallout";
				ishmcallout.innerHTML = "\"..." + spans[i].innerHTML + ".\"";  
				spans[i].insertBefore(ishmcallout, null);
			}	
		}
	};
	
	checkAll = function(frm, bool) {
		var form = $(frm)
		var elements = form.getInputs('checkbox');

		for (var i=0, cnt = elements.length; i < cnt; i++) {
			elements[i].checked = bool;
		}
	};
	
	validateSearch = function() {
		var search_input = $('search_input');
		var search_text = search_input.value;
		if (search_text == '' || search_text == 'Search') {
			search_input.value = '';
			search_input.focus();
			new Effect.Pulsate('search_input', {duration: .5, pulses: 2, afterFinish: function() {$('search_input').addClassName('search_active');}});
			return false;
		}
		return true;
	};
	
	/************************************/
	// ELEMENT EXTENSIONS
	/************************************/
	var elementExtensions = {
    	swap: function(element, hideElement) {
    		element = $(element);
			
    		$(element).show();
			$(hideElement).hide();
			
			return element;
		},
		
		toggleClass: function(element, className) {
    		element = $(element);
    		
    		classElements = element.getElementsBySelector('.'+className);
    		classElements.invoke('toggle');
			
			return element;
		},
		
		getId: function(element) {
			element = $(element);
			
			return element.id.getId();
		},
		
		insertAfter: function(element, newElement) {
			
			element = $(element);
			newElement = $(newElement);
			
			sib = element.firstChild;
			if(sib) {
				element.insertBefore(newElement, sib);
			} else {
				element.appendChild(newElement);
			}
			
			return element;
		},
		
		reset: function(id, delay) {
			setTimeout("Effect.Fade('"+id+"', {afterFinish: function() {$('"+id+"').className = ''; $('"+id+"').innerHTML = '';$('"+id+"').show();}});", delay);
		},
		
		appendChildren: function(element) {
			element = $(element);
		
			var args = arguments;
			
			for(var x = 1, cnt = args.length; x < cnt; x++) {
				element.appendChild(args[x]);
			}
			
			return element;
		}
    };
    Element.addMethods(elementExtensions);
    
    
    /************************************/
	// STRING EXTENSIONS
	/************************************/
	String.prototype.getId = function() {
    	return this.substr(this.indexOf('_') + 1);
    };
    
    String.prototype.trim = function () {
	    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
	}; 
    
    
    /************************************/
	// ARRAY EXTENSIONS
	/************************************/
	Array.prototype.isEmpty = function() {
    	if(this.length == 0) 
    		return true;
    	 else 
    		return false;
    	
    };
	
}).apply(BT);

function setRecType(type) {
	setCookie('rec_type', type);
}
