/* start global variable */
var waitnote = 'Processing...Please Wait',
	alertbox = '#alert',
	confbox = '#confirm',
	target = '#wrapper',
	url = 'updater.php'; // url for updater script
var depth = (typeof(fd) == 'undefined')? 0 : fd ; // folder depth
var path = (!depth)? '.' : '..' ;
var bannerDiv = '#banner',
	bodyDiv = '#body',
	navbarDiv = '#navBar',
	footerDiv = '#footer',
	html = '';
var bannerUrl = path + '/utils/banner.php?p=' + path,
	navbarUrl = path + '/utils/navBar.php?pg=' + pg + '&p=' + path,
	footerUrl = path + '/utils/footer.php?p=' + path;
	
// initiate startup elements and event handlers and load page sections
$(document).ready(function(){
	var banner = getPage(bannerUrl,bannerDiv);
	if(banner){
		var nav = (pg)? getPage(navbarUrl,navbarDiv) : true ;
		if(nav){
			var footer = getPage(footerUrl,footerDiv);
			if(footer){
				var hidden = bodyDiv + ',' + footerDiv;
				$(hidden).show();
				preparePages();
				$('#menu-commands a').click(function(ev) {
						url = 'updater.php'; // url for updater script
						loadPage(this.rel);
						$('#menu-commands a.selected').removeClass('selected');
						$(this).addClass('selected');
						ev.preventDefault();
						});				
				}
			}
		}
	});

// get pager using AJAX
function getPage(url, div)
	{
	// jquery ajax
	$.ajax({
		   success: function(d){
			   $(div).empty().append(d);
			   },
		   url: url,
		   cache: false
		   });
	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);
	}

// 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()
					   .append(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"fi>rt<"bottom"pl<"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');
				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":
						loadPage(cmd);
					break;
					case "delete":
					case "publish":
					case "unpublish":
					case "suspend":
					case "activate":
					case "confirm":
					case "cancel":
					case "close":
					case "checkoff":
						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;
	}

// update Cart details
function updateCart(){
	var index = 0,
		qty = new Array, 
		prices = new Array,
		gtotal = 0;							
	$('.qty').each(function(){
				qty[index] = $(this).val();
				index++;
				});
	index = 0;
	$('.prices').each(function(){
				prices[index] = $(this).val(); 
				index++;
				});
	index = 0;
	$('.lineTotal').each(function(){
				var amt = prices[index] * qty[index];
				$(this).html(thousands(amt.toFixed(2)));
				gtotal += amt; 
				index++;
				});
	$('#total').html('<b>' + thousands(gtotal.toFixed(2)) + '</b>');
	return false;
	}

// 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;
	} 
