// modJS Generator //
$(document).ready(function(){
		  
		  var allFuncs = [{
			   y2mfix: { hasOpts: 'true', multi: 'false', opts: ['mode','img'] },
			   affiliateFix: { hasOpts: 'true', multi: 'false', opts: ['mode'] },
			   myImages: { hasOpts: 'true', multi: 'true', opts: ['imgFind','imgReplace'] },
			   hideImage: { hasOpts: 'true', multi: 'true', opts: ['type','hide'] },
			   textReplace: { hasOpts: 'true', multi: 'true', opts: ['textFind','textReplace'] },
			   supportBanner: { hasOpts: 'false' },
			   pageTitle: { hasOpts: 'true', multi: 'false', opts: ['title'] },
			   hideAvatars: { hasOpts: 'false' },
			   hideElement: { hasOpts: 'true', multi: 'true', opts: ['element'] },
			   uberstyler: { hasOpts: 'false' },
			   oldMenu: { hasOpts: 'true', multi: 'false', opts: ['pos'] },
			   hideMenu: { hasOpts: 'false' }
			}];
		  
		  $.each(allFuncs[0], function(key, val) {
		  		$('select#mjs_gen_funcs').append('<option value="'+key+'">'+key+'</option>');
 		  });
		  
          $('input#mjs_gen_add').live('click', function() {
				var selfunc = $('select#mjs_gen_funcs').val();
				var getFunc = allFuncs[0][selfunc];
				if(selfunc == '') {
					alert('Please Choose a Function to Add!');
				} else if(getFunc.hasOpts == 'true') {
					if(getFunc.multi == 'false') {
						if(checkFuncs(selfunc)) {
							var optsBoxHTML = modJSOptsBox(selfunc);
							$.fn.colorbox({html:optsBoxHTML, open:true, overlayClose:false});
						}
					} else {
						var optsBoxHTML = modJSOptsBox(selfunc);
						$.fn.colorbox({html:optsBoxHTML, open:true, overlayClose:false});
					}
				} else if(getFunc.hasOpts == 'false') {
					if(checkFuncs(selfunc)) {
						addNoOptsFunc(selfunc);
					}
				}
		  });
		  
		  $('input#mjs_gen_vadd').live('click', function() {
				var func = $(this).attr('name');
				addOptsFunc(func, allFuncs[0][func]['opts']);
				modJSVarClose();
		  });
		  
		  $('#mjs_gen_vcan').live('click', function() {
			modJSVarClose();
		  });
		  
		  $('#mjs_gen_reset').live('click', function() {
			var answer = confirm ("Are you sure you want to clear all of your generated modJS Code?\nClick OK to Clear the Code\nClick CANCEL to continue adding Functions");
			if(answer) {
				$('#mjs_gen_codes').html('');
			}
		  });
    });
	
	function checkFuncs(fn) {
		if($('#mjs_gen_codes span#'+fn).length) {
			alert('You have already added the '+fn+' Function!');
			return false;
		} else {
			return true;
		}
	}
	
	function addNoOptsFunc(fn) {
		var elem = $('#mjs_gen_codes');
		elem.append('<span id="'+fn+'"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).'+fn+'();</span>');
		$('#mjs_gen_msg').fadeOut('normal').html('<img src="http://image.fpsbanana.com/ico/ok.gif" border="0" /> <b class="green">Added '+fn+' Successfully!</b>').fadeIn('slow');
	}
	
	function addOptsFunc(fn, opts) {
		var elem = $('#mjs_gen_codes');
		var code = '<span id="'+fn+'"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(this).'+fn+'({ ';
		var i = 1;
		var optsNum = opts.length;
		$.each(opts, function(key, val) {
			var valID = key+1;
			var elementData = $('.mjs_gen_opts#'+fn+' #mjs_gen_v'+valID).val();
			//var myRegExp = new RegExp("'","g");
			//elementData = elementData.replace(myRegExp,"\'");
   			code = code+val+': \"'+elementData+'\"';
			if(i < optsNum) {
				code = code+', ';
			} else {
				code = code+' ';
			}
			i = i+1;
 		});
		code = code+'});';
		elem.append('<span id="'+fn+'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+code+'</span>');
		$('#mjs_gen_msg').fadeOut('normal').html('<img src="http://image.fpsbanana.com/ico/ok.gif" border="0" /> <b class="green">Added '+fn+' Successfully!</b>').fadeIn('slow');
	}
	
	function modJSVarClose() {
		$.fn.colorbox.close();
	}
	
	// GENERATOR OPTION BOXES //
		function modJSOptsBox(fn) {
			var ob = '<div id="'+fn+'" class="mjs_gen_opts" style="display:none">'+
					 '<table width="500" border="0" cellspacing="0" cellpadding="5">'+
					 '<tr><td colspan="2"><strong class="blue bold">'+fn+' Options</strong></td></tr>';
			switch(fn) {
			  case 'y2mfix':
				ob = ob+'<tr><td width="150" valign="top" class="bold">Mode</td>'+
                  		'<td width="350" valign="top"><select name="y2mfix" id="mjs_gen_v1"><option value="replace" selected="selected">Replace y2m Icons</option><option value="hide">Hide y2m Icons</option></select></td>'+
                		'</tr><tr><td valign="top" class="bold">Image</td><td valign="top"><input name="y2mfix" type="text" id="mjs_gen_v2" size="60" value="http://www.bigrosslabs.com/fpsb/y2mfix/y2m.gif"></td></tr>';
				break;
			  case 'affiliateFix':
				ob = ob+'<tr><td width="150" valign="top" class="bold">Mode</td><td width="350" valign="top"><select name="affiliateFix" id="mjs_gen_v1">'+
				'<option value="fix" selected="selected">Fix Affiliate Icons</option><option value="hide">Hide Affiliate Icons</option></select></td></tr>';
				break;
			  case 'myImages':
				ob = ob+'<tr><td width="150" valign="top" class="bold">Find Image</td>'+
                  '<td width="350" valign="top"><input name="myImages" type="text" id="mjs_gen_v1" size="60" value="http://"></td></tr><tr><td valign="top" class="bold">Replace With</td>'+
				  '<td valign="top"><input name="myImages" type="text" id="mjs_gen_v2" size="60" value="http://"></td></tr>';
				break;
			  case 'hideImage':
				ob = ob+'<tr><td width="150" valign="top" class="bold">Type</td><td width="350" valign="top"><select name="hideImage" id="mjs_gen_v1">'+
                  '<option value="url" selected="selected">Hide by URL</option><option value="class">Hide by Class Name</option><option value="id">Hide by ID</option></select></td></tr><tr>'+
                  '<td valign="top" class="bold">Hide</td><td valign="top"><input name="hideImage" type="text" id="mjs_gen_v2" size="60" value=""><br><small>- Do NOT append a period or pound sign!</small></td></tr>';
				break;
			  case 'textReplace':
				ob = ob+'<tr><td width="150" valign="top" class="bold">Find Text</td><td width="350" valign="top"><input name="textReplace" type="text" id="mjs_gen_v1" size="60" value="">'+
				  '<br><small>- This is Case Sensitive!</small></td></tr><tr><td valign="top" class="bold">Replace With</td>'+
                  '<td valign="top"><input name="textReplace" type="text" id="mjs_gen_v2" size="60" value=""></td></tr>';
				break;
			  case 'pageTitle':
				ob = ob+'<tr><td width="150" valign="top" class="bold">Page Title</td><td width="350" valign="top"><input name="pageTitle" type="text" id="mjs_gen_v1" size="60" value=""></td></tr>';
				break;
			  case 'hideElement':
				ob = ob+'<tr><td width="150" align="right" valign="top"><b>Hide</b></td><td valign="top"><input name="hideElement" type="text" id="mjs_gen_v1" size="60" value="">'+
				'<br><small>- Hide by Class Name: .elementClass<br>- Hide by ID: #elementID</small></td></tr>';
				break;
			  case 'oldMenu':
				ob = ob+'<tr><td width="150" align="right" valign="top"><b>Menu Position</b></td><td valign="top"><select name="oldMenu" id="mjs_gen_v1"><option value="default" selected="selected">Default Location</option>'+
				'<option value="top">Top of Profile</option></select></td></tr>';
				break;
			  default:
				alert('An Unknown Error Occured...');
				$.fn.colorbox.close();
			}
			ob = ob+'<tr><td colspan="2" align="right"><input name="'+fn+'" id="mjs_gen_vcan" type="button" class="button" value="Cancel"> &nbsp; '+
					'<input name="'+fn+'" id="mjs_gen_vadd" type="button" class="button" value="Add Function"></td></tr></table>';
			return ob;
		}
	// END GENERATOR OPTION BOXES //
	
	function modJSGenSelect() { 
		var node = document.getElementById('mjs_gen_codeblock');
		var selection, range, doc, win;
		if ((doc = node.ownerDocument) && (win = doc.defaultView) && typeof win.getSelection != 'undefined' && typeof doc.createRange != 'undefined' && (selection = window.getSelection()) && typeof selection.removeAllRanges != 'undefined') {
			range = doc.createRange();
			range.selectNode(node);
			selection.removeAllRanges();
			selection.addRange(range);
		} else if(document.body && typeof document.body.createTextRange != 'undefined' && (range = document.body.createTextRange())) {
			range.moveToElementText(node);
			range.select();
		}
	}
