/****************************** restoreStyles ***********************************/
/* Over-rides Google Toolbar's Auto-Fill Yellow Box								*/
/********************************************************************************/
if(window.addEventListener) window.addEventListener("load",setListeners,false); // Firefox, etc.
else if(window.attachEvent) window.attachEvent("onload",setListeners); // IE

function setListeners(){
	inputList = document.getElementsByTagName("INPUT");
	for(i=0;i<inputList.length;i++){
		if(window.addEventListener) inputList[i].addEventListener("onpropertychange",restoreStyles,false); // Firefox, etc.
		else if(window.attachEvent) inputList[i].attachEvent("onpropertychange",restoreStyles); // IE
		inputList[i].style.backgroundColor = "";
	}
	selectList = document.getElementsByTagName("SELECT");
	for(i=0;i<selectList.length;i++){
		if(window.addEventListener) selectList[i].addEventListener("onpropertychange",restoreStyles,false); // Firefox, etc.
		else if(window.attachEvent) selectList[i].attachEvent("onpropertychange",restoreStyles); // IE
	 	// selectList[i].attachEvent("onpropertychange",restoreStyles);
		selectList[i].style.backgroundColor = "";
	}
}

function restoreStyles(){
	if(event.srcElement.style.backgroundColor != "") event.srcElement.style.backgroundColor = "";
}


/******************************* onload functions *******************************/
/* Functions to Run When Page Loads												*/
/********************************************************************************/
$(document).ready(function () {
	refreshIt()
});

/********************************** refreshIt ***********************************/
/* Refreshes jquery																*/
/********************************************************************************/
function refreshIt(tb) {
	// Thickbox (if not called from thickbox)
	if(tb != 1) thickbox();
	else {
		// Sortable Tables
		sortable();
		// Row Backgrounds
		rows();
		// Tooltips
		tips();
		// Calendars
		calendar();
		// Defaults
		defaults();
		// Messages
		messages();
		// Form Validation
		validate();
			
		// Sort Demos
		$('table.sort_demos').sortable(
			{
				items: 'tr.demo',
				opacity: 0.5,
				stop : function () {
					var order = '';
					var f = document.demos;
					for(i = 0; i < 100; i++) {
						if(f.elements[i]) {
							if(f.elements[i].className == 'sorted') var order = order + '|' + f.elements[i].value;
						}
					}
					
					$.ajax({
						type: 'GET',
						url: DOMAIN+'?ajaxRequest=saveOrder&type=sort_demos&order='+order,
						success: function(html){
							rows();
						}
					});
				}
			}
		);
		
		$('table.sort_demo_categories').sortable(
			{
				items: 'tr.category',
				opacity: 0.5,
				stop : function () {
					var order = '';
					var f = document.demo_categories;
					for(i = 0; i < 100; i++) {
						if(f.elements[i]) {
							if(f.elements[i].className == 'sorted') var order = order + '|' + f.elements[i].value;
						}
					}
					$.ajax({
						type: 'GET',
						url: DOMAIN+'?ajaxRequest=saveOrder&type=sort_demo_categories&order='+order,
						success: function(html){
							rows();
						}
					});
				}
			}
		);
		
		$('table.sort_photos').sortable(
			{
				items: 'tr.photo',
				opacity: 0.5,
				stop : function () {
					var order = '';
					var f = document.photos;
					for(i = 0; i < 100; i++) {
						if(f.elements[i]) {
							if(f.elements[i].className == 'sorted') var order = order + '|' + f.elements[i].value;
						}
					}
					
					$.ajax({
						type: 'GET',
						url: DOMAIN+'?ajaxRequest=saveOrder&type=sort_photos&order='+order,
						success: function(html){
							rows();
						}
					});
				}
			}
		);
	}
}

/************************************* tabIt ************************************/
/* Opens / closes tabs onmouseover / onmouseout									*/
/********************************************************************************/
var timer;
function tabIt(tab,over) {
	if(timer) clearTimeout(timer);
	if(over == 1) {
		$('ul.tabs ul').hide();
		showIt(tab);
	}
	else timer = setTimeout('hideIt(\''+tab+'\');',650);
}

/************************************ hoverIt ***********************************/
/* Adds timeout to hovering														*/
/********************************************************************************/
var timerHover;
function hoverIt(id,over) {
	if(timerHover) clearTimeout(timerHover);
	if(over == 1) {
		$('ul.hoverBox').hide();
		showIt(id);
	}
	else timerHover = setTimeout('hideIt(\''+id+'\');',650);
}

/************************************ loadIt ************************************/
/* Handles various loading scripts												*/
/********************************************************************************/
function loadIt(div,type,value) {
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=loadIt&div='+div+'&type='+type+'&value='+value,
		success: function(html){
			$('#'+div).html(html);
			
			refreshIt();
		}
	});
}

/*********************************** showDemo ***********************************/
/* Loads flash for demo into given div											*/
/********************************************************************************/
function showDemo(div,file) {
	if(document.getElementById(div).innerHTML == "") {
		$.ajax({
			type: 'GET',
			url: DOMAIN+'?ajaxRequest=showDemo&div='+div+'&file='+file,
			success: function(html){
				$('#'+div).html(html);
			}
		});
	}
	else document.getElementById(div).innerHTML = "";
}

/*********************************** hideDemo ***********************************/
/* Removes flash for demo from given div										*/
/********************************************************************************/
function hideDemo(div,file) {
	$('#'+div).html("");
}

/************************************ loader ************************************/
/* Shows loading icon with given text (optional) in given div					*/
/********************************************************************************/
function loader(div,text) {
	if(text == "") text = "Loading..";
	$('#'+div).html("<div style='position:relative;'><div style='position:absolute;left: 50%;margin-left:-45%;'><center><img src='"+DOMAIN+"images/ajax-loader.gif' style='vertical-align:middle;' /></center></div><div style='opacity:.30;filter:alpha(opacity=30);-moz-opacity:.3;'>"+document.getElementById(div).innerHTML+"</div></div>");
}

/************************************ submitIt **********************************/
/* Submits form and disables submit button										*/
/********************************************************************************/
function submitIt(f) {
	var s = $(f).find("input[type='submit']");
	$(s).fadeTo("normal", 0.4).attr("disabled", "disabled").after("<img src='"+DOMAIN+"images/ajax-loader.gif' class='absmiddle submit_loader' style='margin-left:4px;' />");
	f.submit();
}

/********************************** submitOrder *********************************/
/* Shows confirm box which submits from if user confirms given text				*/
/********************************************************************************/
function submitOrder(f,text) {
	var r = requireIt(f);
	if(r == true) {
		// Instructions
		//var editor = new FCKeditor("instructions[0]");
		var inst = FCKeditorAPI.GetInstance("instructions[0]");
		var value = inst.GetXHTML();
		if(!value || value == "") {
			var error = "Please include instructions for this order";
			changeTab('content_instructions');
			location.href = "#order_tabs";
		}
		// Lengths
		if(!error) {
			for(x = 1;x <= 10;x++) {
				if(document.getElementById('min_'+x)) {
					var minutes = $('#min_'+x).val();	
					var seconds = $('#sec_'+x).val();	
					if((seconds * 1) != seconds || (minutes * 1) != minutes) var error = "Please make sure you only entered numbers into the minute and seconds fields.";
					if(((seconds * 1) + (minutes * 1)) <= 0) var error = "Please make sure the length of your spot(s) is greater than 0 seconds";	
				}
			}
		}
		if(error) {
			alert(error);
			enableIt('submit');
			$('img.submit_loader').remove();
			return false;
		}
		else {
			if (confirm(text)) {
				$('img.submit_loader').remove();
				$('#submit').after("<img src='"+DOMAIN+"images/ajax-loader.gif' class='absmiddle' style='margin-left:4px;' id='submit_loader' />");
				return true;
			}
			else {
				enableIt('submit');
				$('img.submit_loader').remove();
				return false;
			}
		}
	}
	else return false;
}

/*********************************** confirmIt **********************************/
/* Shows confirm box which redirects to given url if user confirms given text	*/
/********************************************************************************/
function confirmIt(text,url) {
	if (confirm(text)){
		location.replace(url);
	}
}

/********************************** checkFormat *********************************/
/* Gets form element value and checks to see if it's the correct format			*/
/********************************************************************************/
function checkFormat(id,formats) {
	var v = document.getElementById(id).value;
	v = v.toLowerCase();
	if(str_replace(v.substring((v.length - 3),v.length),'',formats) == formats) {
		alert('This file is not in the correct format');
		document.getElementById(id).value = '';
		//if(document.getElementById(id+'_display')) document.getElementById(id+'_display').innerHTML = '';
	}
}

/************************************ showHide **********************************/
/* Shows or hides given div based upon it's current state						*/
/********************************************************************************/
function showHide(div) {
	if(document.getElementById(div).style.display=="none") $("#"+div).show();
	else $("#"+div).hide();
}

/************************************* showIt ***********************************/
/* Fades in given element in given amount of time								*/
/********************************************************************************/
function showIt(div,time) {
	/*if(time == null) var time = 100;
	$("#"+div).fadeIn(time);*/
	$("#"+div).show();
}

/************************************* hideIt ***********************************/
/* Fades out given element in given amount of time								*/
/********************************************************************************/
function hideIt(div,time) {
	/*if(time == null) var time = 100;
	$("#"+div).fadeOut(time);*/
	$("#"+div).hide();
}

/************************************ uploadIt **********************************/
/* Uploads file in given input field to given path (defaults to DOMAIN/uploads/)*/
/********************************************************************************/
function uploadIt(div,input,path) {
	loader(div,'Uploading..');
	
	$.ajaxFileUpload(
		{
			url:DOMAIN+'?ajaxRequest=upload&path='+path,
			secureuri:false,
			fileElementId:input,
			dataType: 'html',
			success: function (data, status) {
				// Add Message / Hidden Input
				$("#"+div).append(data);
				// Clear File Input
				document.getElementById(input).value = "";
				// Hide Failure Messages
				$("#red").animate({opacity: 1.0}, 1500).slideUp(500, function() {
					$(this).remove();
				});
			},
			error: function (data, status, e) {
				alert(e);
			}
		}
	)
	return false;
}

/************************************ countIt ***********************************/
/* Gets script / speed / etc. and returns estimated time					 	*/
/********************************************************************************/
function countIt(speed,text,div) {
	var url = DOMAIN+'?ajaxRequest=countIt';
	if(text == "count_text") var t = document.getElementById(text).value;
	else {
		var oEditor = FCKeditorAPI.GetInstance(text);
		var t = oEditor.GetXHTML(true);
	}
	if(t.length > 0) {
		loader(div);
		$.ajax({
			type: 'POST',
			data: '&text='+escape(t)+'&speed='+document.getElementById(speed).value,
			url: url,
			success: function(html){
				$('#'+div).html(html);
			}
		});
	}
}

/*********************************** requireIt **********************************/
/* Checks given form to make sure all required fields (class="required") were 	*/
/* filled in, else shows error message. Enables/disables submit based on results*/
/********************************************************************************/
function requireIt(f) {
		
	var error = "";
	for(i = 0;i < f.elements.length; i++) {
		var temp = null;
		if(f[i].className == "required") {
			// Select
			if(str_replace('select','',f[i].type) != f[i].type) {
				// Too lazy to figure out Multiple Select
				if(f[i].multiple);
				else if(f[i].options[f[i].selectedIndex].value == null || f[i].options[f[i].selectedIndex].value.length == 0) error = error + "You forgot to select a " + f[i].name + "\n";
			}
			// Radio
			else if(f[i].type=="radio") {
				for (var j = 0; j < f[i].length; j++){
					if (f[i][j].checked) temp = f[i][j].value;
				}	
				if(temp == null) error = error + "You forgot to select a " + f[i].name + "\n";
			}
			// Checked
			else if(f[i].type=="checkbox") {
				if (f[i].checked) var temp = 1;
				else error = error + "You forgot to check " + f[i].name + "\n";
			}
			// Textarea
			else if((f[i].type=="textarea" || f[i].type=="text" || f[i].type=="file") && f[i].value == "") error = error + "You forgot to enter a " + f[i].name + " value\n";
		}
	}

	var error = str_replace('[0]','',str_replace('[1]','',str_replace('[2]','',str_replace('[3]','',str_replace('[4]','',str_replace('[5]','',str_replace('_',' ',error)))))));
	// Error
	if(error.length > 5) {
		alert(error);
		
		// Re-enable Submit Button
		enableIt('submit');
		
		return false;
	}
	// Submit
	else {
		// Disable Submit Button
		disableIt('submit');
		
		// Button Text
		var submit_text = $('#submit').val();
		if(submit_text == "Save") var new_text = "Saving..";
		if(submit_text == "Submit") var new_text = "Submitting..";
		if(submit_text == "Filter") var new_text = "Filtering..";
		if(new_text) $('#submit').val(new_text);
		
		// AJAX Loader
		$('#submit').after("<img src='"+DOMAIN+"images/ajax-loader.gif' class='absmiddle submit_loader' style='margin-left:4px;' />");
		
		return true;
	}
}

/******************************* checkAvailability ******************************/
/* Checks to see if jock is currently available									*/
/********************************************************************************/
function checkAvailability(div,id) {
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=checkAvailability&div='+div+'&id='+id,
		success: function(html){
			$('#'+div).html(html);
		}
	});
}

/*********************************** editInline *********************************/
/* Retrieves code for inline editing of given variable							*/
/********************************************************************************/
function editInline(div,table,column,key,id,buttons,redirect) {
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=editInline&table='+table+'&column='+column+'&div='+div+'&key='+key+'&id='+id+'&buttons='+buttons+'&redirect='+redirect,
		success: function(html){
			$('#'+div).html(html);
			$('#'+div+'_inline').focus().keypress(function (e) {
				if (e.which == 13) saveInline(div,table,column,key,id,redirect);
			});
			if(buttons == 0 || buttons == "" || buttons == "undefined" || buttons == undefined || !buttons) {
				$('#'+div+'_inline').blur(function () {
					saveInline(div,table,column,key,id,redirect);
				});
			}
		}
	});
}

/*********************************** saveInline *********************************/
/* Gets inline variable and saves it											*/
/********************************************************************************/
function saveInline(div,table,column,key,id,redirect) {
	// Form Element
	var v = document.getElementById(div+'_inline');
	
	// Select
	if(v.type=="select") var value = v.selectedIndex.value;
	// Radio
	else if(v.type=="radio") {
		for (var j = 0; j < v.length; j++){
			if (v[j].checked) var value = v[j].value;
		}	
	}
	// Checked
	else if(v.type=="checkbox") {
		if (v.checked == true) var value = v.value;
		else var value = 0;
	}
	// Textarea
	else if(v.type=="textarea") var value = v.value;
	// Input
	else var value = v.value;
	
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=saveInline&redirect='+redirect+'&table='+table+'&column='+column+'&div='+div+'&key='+key+'&id='+id+'&value='+encodeURIComponent(value),
		success: function(html){
			$('#'+div).html(html);
			
			// Redirect
			if(redirect && redirect != "" && redirect != "undefined") location.assign(DOMAIN+redirect);
		}
	});
}

/********************************** cancelInline ********************************/
/* Cancels inline edit															*/
/********************************************************************************/
function cancelInline(div,table,column,key,id,redirect) {
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=cancelInline&redirect='+redirect+'&table='+table+'&column='+column+'&div='+div+'&key='+key+'&id='+id,
		success: function(html){
			$('#'+div).html(html);
			
			// Redirect
			if(redirect && redirect != "" && redirect != "undefined") location.assign(DOMAIN+redirect);
		}
	});
}

/************************************ saveIt ************************************/
/* Gets values from a form, posts to AJAX, and handles response					*/
/********************************************************************************/
function saveIt(form,div,method) {
	var vals;
	$('#'+form+' :input').each(function() {
		if(this.type == "radio" || this.type == "checkbox") {
			if(this.checked == true) vals = vals + '&' + this.name + '=' + encodeURIComponent(this.value);
		}
		else vals = vals + '&' + this.name + '=' + encodeURIComponent(this.value);
	});
	
	// Method
	if(method == null) method = 'POST';
	if(method == 'GET') {
		var url = DOMAIN+'?ajaxRequest=saveIt&form='+form+'&div='+div+vals;
		var data = '';
	}
	if(method == 'POST') {
		var url = DOMAIN+'?ajaxRequest=saveIt';
		var data = 'form='+form+'&div='+div+vals;
	}
	
	$.ajax({
		type: method,
		url: url,
		data: data,
		success: function(html){
			// Comment
			if(form == "comment"){
				$("#"+div).after(html);
				$('#'+form+' textarea').val('');
			}
			else $("#"+div).html(html);
			
			// Submit Button
			var s = $("#"+form+" input[type='submit']").fadeTo("normal", 1.0).removeAttr("disabled");
			$('img.submit_loader').each(function() { $(this).remove(); });
			// Refresh jQuery
			refreshIt();
		}
	});
}

/************************************ deleteIt **********************************/
/* Sends ajax request do delete given type's id if given text is confirmed		*/
/********************************************************************************/
function deleteIt(text,div,table,key,id) {
	if (confirm(text)){
		// Hide
		$('#'+div).slideUp(500);
		
		// AJAX
		$.ajax({
			type: 'GET',
			url: DOMAIN+'?ajaxRequest=delete&table='+table+'&div='+div+'&id='+id+'&key='+key,
			success: function(html){
				$('#'+div).html(html);
				
				// Redirect
				if(document.getElementById('redirect')) location.assign(DOMAIN+document.getElementById('redirect').value);
			}
		});
	}
}

/******************************** confirmUsername *******************************/
/* Runs process to check if username is in correct format and unique			*/
/********************************************************************************/
function confirmUsername(name,div,id) {
	var u = document.getElementById(name).value;

	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=checkUsername&u='+u+'&id='+id,
		success: function(html){
			document.getElementById(div).innerHTML = html;
			if(str_replace("class='red'","",html) != html) disableIt('submit');
			else enableIt('submit');
		}
	});
}

/******************************** confirmPassword *******************************/
/* Runs process to check if password is in correct format						*/
/********************************************************************************/
function confirmPassword(p1,p2,div) {
	p1 = $('#'+p1).val();
	p2 = $('#'+p2).val();

	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=checkPassword&p1='+p1+'&p2='+p2,
		success: function(html){
			if(html.length > 5) {
				$('#'+div).html(html);
				disableIt('submit');
			}
			else {
				$('#'+div).html('');
				enableIt('submit');
			}
		}
	});
}

/******************************** adjustLength **********************************/
/* Adjust length for spot order form											*/
/********************************************************************************/
function adjustLength(c) {
	var div = 'length_'+c;
	var type = document.getElementById('length_type['+c+']').value;
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=adjustLength&c='+c+'&type='+type,
		success: function(html){
			$('#'+div).html(html);
		}
	});
}

/******************************** checkLength ***********************************/
/* Checks to see if length is in correct format									*/
/********************************************************************************/
function checkLength(value,div) {
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=checkLength&value='+value+'&div='+div,
		success: function(html){
			$('#'+div).html(html);
			if(html.length > 5) disableIt('submit');
			else enableIt('submit');
		}
	});
}

/******************************** checkSpots ************************************/
/* Checks to see if more than one spot											*/
/********************************************************************************/
function checkSpots(c,div) {
	if(c > 0) $('#'+div).show();
	else $('#'+div).hide();
}

/********************************* addSpots ************************************/
/* Adds given # of order forms to Order page									*/
/********************************************************************************/
function addSpots() {
	var c = document.getElementById('number').value;
	if(document.getElementById('different').checked != true) c = 1;
	var div = 'lengths';
	
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=addSpots&c='+c,
		success: function(html){
			document.getElementById('lengths').innerHTML = html;
			//$('#'+div).html(html);
		}
	});
}

/********************************* addOrders ************************************/
/* Adds given # of order forms to Order page									*/
/* !!!!!!!!!! Deprecated !!!!!!!!!! 											*/
/********************************************************************************/
function addOrders(jock,demo) {
	var c = document.getElementById('number').value;
	if(document.getElementById('different').checked != true) c = 1;
	var div = 'orders';
	
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=addOrders&c='+c+'&jock='+jock+'&demo='+demo,
		success: function(html){
			$('#'+div).html(html);
			refreshIt();
		}
	});
}

/********************************** loadDemo ************************************/
/* Loads icon to preview given demo into given div								*/
/********************************************************************************/
function loadDemo(div,jock,cats) {
	// Loader
	loader(div);
	
	// AJAX
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=loadDemo&div='+div+'&jock='+jock+'&cats='+cats,
		success: function(html){
			$('#'+div).html(html);
		}
	});
}

/********************************* showScript ***********************************/
/* Show's or hides script textarea based upon checkbox status					*/
/********************************************************************************/
function showScript(c) {
	if(document.getElementById('paste['+c+']').checked == true) {
		document.getElementById('script_'+c+'_text').style.height = "390px";
		document.getElementById('script_'+c+'_counter').style.display = "block";
		document.getElementById('script_'+c+'_file').style.display = "none";
	}
	else {
		document.getElementById('script_'+c+'_file').style.display = "block";
		document.getElementById('script_'+c+'_counter').style.display = "none";
		document.getElementById('script_'+c+'_text').style.height = "0px";
	}
}

/********************************** checkDate ***********************************/
/* Check to make sure date is after current date / time							*/
/********************************************************************************/
function checkDate(c) {
	var div = 'check_date_'+c;
	var date = document.getElementById('deadline_date['+c+']').value;
	var hour = document.getElementById('deadline_hour['+c+']').value;
	var minute = document.getElementById('deadline_minute['+c+']').value;
	var meridian = document.getElementById('deadline_meridian['+c+']').value;
	var timezone = document.getElementById('timezone['+c+']').value;
	$.ajax({
		type: 'GET',
		url: DOMAIN+'?ajaxRequest=checkDate&date='+date+'&hour='+hour+'&minute='+minute+'&meridian='+meridian+'&timezone='+timezone,
		success: function(html){
			$('#'+div).html(html);
			
			if(document.getElementById('date_error')) disableIt('submit');
			else enableIt('submit');
		}
	});
}

/********************************* disableIt ************************************/
/* Disables given element														*/
/********************************************************************************/
function disableIt(id) {
	if(document.getElementById(id)) {
		document.getElementById(id).disabled = true;
		$('#'+id).fadeTo("normal", 0.4);
		$('#'+id).removeClass("clickable");
	}
}

/********************************** enableIt ************************************/
/* Enables given element														*/
/********************************************************************************/
function enableIt(id) {
	if(document.getElementById(id)) {
		document.getElementById(id).disabled = false;
		$('#'+id).fadeTo("normal",1);
		$('#'+id).addClass("clickable");
	}
}

/************************************ defaults **********************************/
/* Clears or Restores default value for input field where class='default'		*/
/********************************************************************************/
function defaults() {
	$('input.default').focus(function() {	
		if(this.defaultValue == this.value) $(this).val('').removeClass('default');
	}).blur(function() {
		if(!this.value) $(this).val(this.defaultValue).addClass('default');
	});
}

/************************************* tips *************************************/
/* Runs scripts for tooltips on elements with class="tip"						*/
/********************************************************************************/
function tips() {
	$('a.tip, img.tip, div.tip').tooltip({
		track: true,
		delay: 0,
		showURL: false
	});
}

/*********************************** sortable ***********************************/
/* Runs scripts to sort tables with class="sortable"							*/
/********************************************************************************/
function sortable() {
	/*$('table.sortable').tablesorter({
		textExtraction: 'complex',
		widgets: ['zebra']
	});*/
}

/************************************* rows *************************************/
/* Adds alternate shading to odd and even rows where class="row"				*/
/********************************************************************************/
function rows() {
	$('tr.row:odd').addClass("odd").removeClass("even");
	$('tr.row:even').addClass("even").removeClass("odd");
}

/************************************ calendar **********************************/
/* Shows calendar date picker on all input fields with class="calendar"			*/
/********************************************************************************/
function calendar() {
	$('input.calendar').datepicker({ 
		showOn: 'both', 
		buttonImage: DOMAIN+'images/calendar.png', 
		buttonImageOnly: true 
	});
}

/************************************ validate **********************************/
/* Adds form validation to all forms with class="require"						*/
/********************************************************************************/
function validate() {
	// Form Validation
	$('form.require').each(function() { 
		$(this).validate({
			submitHandler: function(form) { submitIt(form); }
   		}); 
	}); 
	$("#register").validate({
		rules: {
			name: { remote: DOMAIN+"?ajaxRequest=checkUsername"/*, regex: '[a-zA-Z0-9_\-]'*/ }, 
			confirm_password: { equalTo: "#password"}
		},
		messages: {
			name: { remote: "This username is already taken"/*, regex: 'Your username may only contain letters and numbers'*/ },
			confirm_password: { equalTo: "Your passwords don't match" }
		},
		submitHandler: function(form) {	submitIt(form); }
	});
}

/************************************ thickbox **********************************/
/* Removes old thickbox, adds new ones where class="thickbox" (call after ajax)	*/
/********************************************************************************/
function thickbox() {
	$('a.thickbox, area.thickbox, input.thickbox').each(function(i) { $(this).unbind('click'); });
	tb_init('a.thickbox, area.thickbox, input.thickbox');
}


/************************************ messages **********************************/
/* Removes '_message' and '_error' divs											*/
/********************************************************************************/
function messages() {
	$('div.slideDown').slideDown(1000,0);
	$('div.slideUp').slideUp(1000,0);
	$('div.fadeOut').fadeOut(1000,0);
	$('div.fadeIn').fadeIn(1000,0);
	
	$('div#_error').animate({opacity: 1.0}, 5000).slideUp(500,function() { $(this).remove(); });
	$('div#_message').animate({opacity: 1.0}, 5000).slideUp(700,function() { $(this).remove(); });
}

/********************************************************************************/
/******************************** PHP Functions *********************************/
/********************************************************************************/

/********************************* str_replace **********************************/
function str_replace(search, replace, subject) {
    var f = search, r = replace, s = subject;
    var ra = is_array(r), sa = is_array(s), f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;

    while (j = 0, i--) {
        while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
    };
     
    return sa ? s : s[0];
}

/*********************************** is_array ***********************************/
function is_array( mixed_var ) {
    return ( mixed_var instanceof Array );
}

/********************************* number_format ********************************/
function number_format(number,decimals,dec_point,thousands_sep) {
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "." : dec_point;
    var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

