// JavaScript Document
// declare sitewide variables
var depth = (typeof(fd) == 'undefined')? 0 : fd ; // folder depth
var path = (!depth)? '.' : '..' ;
var bannerDiv = '#banner',
	bodyDiv = '#body',
	rightpaneDiv = '#right-pane',
	footerDiv = '#footer',
	html = '';
var bannerUrl = path + '/utils/banner.php?p=' + path,
	rightpaneUrl = path + '/utils/right-pane.php?pg=' + pg + '&p=' + path,
	footerUrl = path + '/utils/footer.php?p=' + path;
var waitnote = 'Processing...Please Wait',
	alertbox = '#alert',
	confbox = '#confirm',
	target = '#wrapper',
	url = 'updater.php'; // url for updater script

// initiate startup elements and event handlers and load page sections
$(document).ready(function(){	
	$.get(bannerUrl, { _r: Math.random() }, function(d){
		   $(bannerDiv).empty().append(d).show();
		   $.get(rightpaneUrl, { _r: Math.random() }, function(d){
				   if(pg != 'index') $(rightpaneDiv).empty().append(d).show();
				   $.get(footerUrl, { _r: Math.random() }, function(d){
						   $(footerDiv).empty().append(d).show();
						   $(bodyDiv).show();
						   $('#qstr').click(function(){
											if($(this).val() == 'Search') $(this).val('') })
									  .blur(function(){
											if($(this).val() == '') $(this).val('Search') });
						   });
				   });
		   });
	});

// init cms functions
function init_cms(){
	preparePages();
	$('.menu-commands').click(function(ev) {
			url = 'updater.php'; // url for updater script
			loadPage(this.rel);
			$('.menu-commands').removeClass('selected');
			$(this).addClass('selected');
			ev.preventDefault();
			});	
	return false;
	}

// load page via ajax
function loadPage(cmd,sel){	
	var id = (typeof(sel) == 'undefined')? 0 : sel ;
	ajaxProcess();
	if(cmd == 'logout')	window.location = '../login?a=logout';
	else if(cmd == 'registered' || cmd == 'reset') window.location = url + '?cmd=' + cmd;
	else{
		$.get(url + '?cmd=' + cmd + '&id=' + id + '&_r=' + Math.random(), function(d){
			  $(target).empty()
					   .html(d);
			  $('#ajaxProcess').remove();
			  preparePages();		  
			  });
		}
	return false;
	}

// prepare pages
function preparePages(){
	if($(document).find('a[rel*=facebox]').length){
		$('a[rel*=facebox]').facebox({
							loadingImage : path + '/assets/images/loading.gif',
      						closeImage   : path + '/assets/images/closelabel.gif'
							});	
		}
	$(document).bind('reveal.facebox', function() { 
		$('#facebox .form-button').click(function(ev){
				var frm = $('#facebox .frm');
				ev.preventDefault();
				jQuery.facebox(function($) { 
					frm.ajaxSubmit({
							url: './processor.php',
							success: function(j){
								jQuery.facebox(j.content);
								if(j.success) frm.resetForm();
								return false;
								},
							type:'post',
							dataType:'json'
							});
					return false;
					});	
			});
		});	
	// check if grid has some items
	if($(document).find('#product-list').length && !$('#product-list').find('#nodata').length){
		$('#product-list').dataTable({ 
						"sPaginationType": "full_numbers",
						"aaSorting": [],
						"sDom": '<<"top"lf<"dt-spacer"r>><t><"bottom"<"dt-spacer"i>p<"dt-spacer">>>'
						//"sDom": '<"top"lf>rt<"bottom"ip<"clear">'
 						});
		}
	$('.previewbtn').bind('click',function(ev){
			var cmd = 'preview';
			var id = $(this).attr('rel');
			loadPage(cmd,id);
			ev.preventDefault();
			});
	// events for command btns
	$('.cmdBtn').click(function(ev) {
				var cmd = $(this).attr('name');
				// commands that don't need selection to be made
				var excl = new Array('add','editdetails','manageprods','manageprodcats','manageorders','managepayments','manageusers','subscribers');
				if(!new RegExp('^(' + excl.join('|') + ')$').test(cmd)){
					var sel = getSelectedItems();
					if(!sel.length){
						alert('You did NOT select any item');					
						return false;
						}
					}	
					
				switch(cmd){
					case "add":
					case "editdetails":
					case "subscribers":
						loadPage(cmd);
					break;
					case "delete":
					case "publish":
					case "unpublish":
					case "suspend":
					case "activate":
					case "confirm":
					case "cancel":
					case "close":
					case "checkoff":
					case "clear":
						var prompt = cmd.toUpperCase();
						var fxn = (cmd == 'delete')? "deleteItem(sel)" : "updateStatus(sel,cmd,prompt)" ;
						var fb = confirm("Are you sure you want to " + prompt + " selected item(s)?");
						if(fb) eval(fxn);
						else return false;
					break;
					case "status":
						loadPage(cmd,sel);
					break;
					default:
						loadPage(cmd,sel[0]);
					break;
					}		
				ev.preventDefault();
				});
	}

// get selected items from grid
function getSelectedItems(){
	var sid = new Array();
	$('.ids:checked').each(function(){
			var sel = $(this).val();
			sid.push(sel);
			});
	return sid;
	}

/* init main methods */
function wait(){
	$("#process").html(waitnote).fadeIn('fast');
	return false;
	}
	
// Add Event for processing Modal Window 
function editWinEvents(hash){
	// Define AJAX options for form submission
	var options = { 
			beforeSubmit: validateForm,
			success: showResults,
			url: url+'?cmd=save',
			type:'post',
			dataType:'json',
			clearForm:false,
			resetForm:false,
			timeout:60000,
			error: ajaxerror };
	$('#ajaxform').submit(function(){
			$(this).ajaxSubmit(options);
			return false;
			});
	return false;
	};	

// Show Form submit results
function showResults(data){
	if(data.success){
		$('#ajaxform').empty().remove();
		loadPage(fxncmd);
		}
	else msgWidget(data.content,'alert');
	$('#ajaxProcess').hide();	
	return false;		
	}

function msgWidget(msg, cat){
	var fbclass = (cat != 'info')? 'errorBox' : 'msgBox' ;
	var txt = '<p>' + msg + '</p>';	
	$('.feedback').html(txt)
				  .removeClass('errorBox')
				  .removeClass('msgBox')
				  .addClass(fbclass).show("fast");
	return false;
	}
	
// validate field length
function checkLength(o,n,min,max) {	 
	if ( o.val().length > max || o.val().length < min ) {
		o.addClass('error-field');
		msgWidget('Fields marked (*) are to be filled appropriately', 'alert');
		o.change(function(){ $(this).removeClass("error-field"); });
		return false;
	} else {
		o.removeClass('error-field');
		return true;
		}
	}

// validate field selection
function checkSelection(o) {
	if ( o.val() == 'none' ) {
		o.addClass('error-field');
		msgWidget('Select an option for field', 'alert');
		o.change(function(){ $(this).removeClass("error-field"); });
		return false;
	} else {
		return true;
		}
	}

// validate fields regular expression
function checkRegexp(o,regexp,n) {
	if ( !( regexp.test( o.val() ) ) ) {
		o.addClass('error-field');
		msgWidget('Invalid entry. Should be in the form ' + n, 'alert');
		o.change(function(){ $(this).removeClass("error-field"); });
		return false;
	} else {
		return true;
		}
	}

// delete item
function deleteItem(id){
	ajaxProcess();
	$.ajax({
		   error: function( objAJAXRequest, strError ){
			    var errmsg = '';
				$('#ajaxProcess').remove();
				switch(strError){
					case "timeout":
						errmsg = "Connection to the server has been lost. Try resending the information" ;
					break;
					case "parsererror":
						errmsg = "One or More of the items could NOT be deleted." ;
					break;
					default:
						errmsg = strError;
					}
				alert("ERROR: " + errmsg);
			   },
		   success: function(j){
			   $('#ajaxProcess').remove();
			   if(j.success) loadPage(fxncmd); //deleted(id);
			   else alert('Could NOT delete item: ' + j.content);
			   },
		   url: url, data: { cmd: 'delete', id: id.join(',') }, cache: false, timeout: 30000, dataType:  'json'
		   });
	return true;
	}

// show ajax error
function ajaxerror( objAJAXRequest, strError ){
	var errmsg = '';
	switch(strError){
		case "timeout":
			errmsg = "Connection to the server has been lost. Try resending the information" ;
		break;
		case "parsererror":
			errmsg = "The system experienced problems processing your request. Results Unknown." ;
		break;
		default:
			errmsg = strError;
		}
	$('#ajaxProcess').remove();
	alert("ERROR: " + errmsg);
	}

// display bottom waitnote when processing info
function ajaxProcess(){
	$('<div id="ajaxProcess"></div>').html(waitnote).appendTo('BODY').show();
	return false;
	}

// thousands separator
function thousands(num)
	{
	var sRegExp = new RegExp('(-?[0-9]+)([0-9]{3})');
	
	while(sRegExp.test(num)) {
		num = num.replace(sRegExp, '$1,$2');
		}
	return num;
	} 

// perform search
function searchText(qtxt){
	var searchUrl = path + '/search.php?.=' + Math.random() + '&q=';
	window.location = searchUrl + qtxt;
	return true;
	}