/*
*
* 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));
    document.cookie = name + "=" + escape(value) + "; expires=" + date.toGMTString() + "; path=/; domain=.despair.com;";
}


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;
}


/**--------------------------------------------------------------------------*/ 
// 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
DSP = 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.'); }
			}
		});
	};
	
	changeSort = function(page, orderBy) {
		
		$('demotivators_list').update('<div class="sorting_loader"><img src="t_l.gif" /><br /><br /><h4>Loading Products<blink>...</blink></h4></div>');
		
		new Jument.ajax({
			div: 'demotivators_list', 
			url: 'postSort.php', 
			options: {
				parameters: {page: page, sort: orderBy}
			}
		});

	};
	
	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() {
		var email = $F($('add_newsletter')['email']);
		
		new Jument.ajax({
			url: '/ajax/newsletter/add',
			options: {
				parameters: 'email='+email,
				onFailure: function() { alert('An error occurred. Please try again.'); }
			}
		});
	};
	
	// 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);
			}	
		}
	}
	
}).apply(DSP);

function addDiv(){

}