var timer = new Array(3), timeout = 500;
$(document).ready(function(){
	Modernizr.addTest('gencontent', function() { //determine if generated content is supported
		  var doc = document,
		      d = doc.createElement('div'),
		      p = doc.createElement('p'),
		      b = doc.body,
		      w,
		      rand = ('' + Math.random()).split('.')[1];
		      supported = false,
		      getWidth = function(el) {
		        if(el.offsetWidth) {
		          return el.offsetWidth;
		        }
		        return parseInt(doc.defaultView.getComputedStyle(el, '').getPropertyValue('width'), 10);
		      };
		  
		  p.id = 'gc'+rand;
		  d.innerHTML = '<style type="text/css">#gc'+rand+'.h'+rand+':before{content:"XXX"}#gc'+rand+'{position:absolute}</style>';
		  var fake = false;
		  var root = document.body || (function () {
		        fake = true;
		        return document.documentElement.appendChild(document.createElement('body'));
		  }());
		  root.appendChild(d);
		  root.appendChild(p);
		  
		  w = getWidth(p);
		  //alert(getWidth(p));
		  
		  // is size different?
		  p.className = 'h'+rand;
		  if(w !== getWidth(p)) {
		    supported = true;
		  }
		  //alert(getWidth(p));
		  
		  root.removeChild(d);
		  root.removeChild(p);

		  return supported;
	}); 
	
	//apply polyfills
	if (!Modernizr.gencontent && !Modernizr.rgba){
		$('header nav > ul > li > a, header nav ul li div').append('<span></span>');
		$('.blue-button').append('<span></span>');
	}
	if ($('#flashbanner').length){
		var params = {
			bgcolor:'none',
			wmode:'transparent'
		};
		var flashvars = {};
		swfobject.embedSWF('PRM-679_GreatBear_v5.swf', 'flashbanner', '960', '300', '10', false, flashvars, params);
	}

	//dropdown stuff
	$('header nav a').hover(showMenu, startHide);
	$('header nav ul div, header nav ul.submenu ul.submenu').hover(keepAlive, startHide);
	$(' header nav ul.submenu').mouseenter(keepAlive);
	
	//stock ticker	
	if ($('#stockinfo').length){
		getStock();
	}
	
	//Set custom select
	if ($('select#state').length){
		$('select#state').sb({
			fixedWidth:false,
			maxHeight:300
		});
	}
	
	//validation stuff
	$('#alert-form').submit(validateAlert);
	$('#request-form').submit(validateRequest);
	
	//admin stuff
	if ($('.dialog').length){
		$('.dialog').dialog({
			autoOpen:false,
			width:500,
			modal:true
		});
	}
	$('.file-link').click(openFolder);
	
	//banners
	$('#edit-banner').change(changeBanner);
	$('#upload-banner').change(addBanner);
	$('.delete-banner').click(deleteBanner);
	
	//quicklinks
	$('.edit-quicklinks .delete').click(function(){
		return confirm('Are you sure you want to delete this quicklink?');
	});	
	$('.edit-quicklinks .edit').click(editQuicklink);
	$('#quicklinks .add').click(addQuicklink);
	
	//newsreleases
	$('#news-release-table .edit').click(editNewsRelease);
	$('#add-news').click(addNewsRelease);
	$('#news-release-table .delete').click(function(){
		return confirm('Are you sure you want to delete this news release?');
	});
	if ($('#news-date, #report-date').length){
		$('#news-date, #report-date').datepicker({
			dateFormat:'yy-mm-dd'
		});
	}
	
	//reports
	$('#reports-table .edit').click(editReport);
	$('#add-report').click(addReport);
	$('#reports-table .delete').click(function(){
		var type = $('#report-type-name').val();
		return confirm('Are you sure you want to delete this '+type+'?');
	});
	
	//page management
	$('#delete-page').click(function(){
		return confirm("Do you want to delete this page?");
	});
	if ($('#page-management').length){
		$('#submenu > ul, #submenu > ul > li > ul').sortable({
			items:'> li',
			/*containment:'parent',*/
			cursor:'move',
			update:sortPages
		});		
	}
	//deal with IE
	$('#submenu > ul > li > ul').bind('mousedown', function(e) {
		e.stopPropagation();
	}); 

	//banner text
	$('#edit-banner-text').click(function(){
		$('#banner-text-dialog').dialog('open').dialog('option','title', 'Edit Banner Text');
		CKEDITOR.replace('banner-text-editor',{bodyId:'banner-text', bodyClass:'text', toolbar:'Tagline', enterMode:CKEDITOR.ENTER_BR, height:'300px', width:'300px'});		
		return false;
	});
	$('#banner-text-dialog').bind('dialogclose', function(event){		
		CKEDITOR.instances['banner-text-editor'].destroy();
	});
});
//Shows the menu
function showMenu(){
	var levelsdown = $(this).parents('.submenu').length;

	for(var n=0; n<=levelsdown+1; n++){
		clearTimeout(timer[n]);
	}
//$('#content').append('showMenu(), levelsdown: '+levelsdown+'<br />');
	if (levelsdown < 1){
		$('header nav ul div').hide();
		$(this).next('div').show();
	}else{
		var subselector = 'nav div ul ';
		for(var n=0; n<levelsdown; n++){
			subselector += 'ul ';
		}
		$(subselector).hide();
		$(this).next('ul').show();
	}
	$('header nav > ul > li > a').removeClass('current');
	$(this).closest('header nav > ul > li').find('a:first').addClass('current');
		
}
//Starts the countdown to hide
function startHide(e){
	e.stopPropagation();
	var levelsdown =  $(this).parents('.submenu').length;
	
	levelsdown += (this.nodeName.toLowerCase() == 'a' || this.nodeName.toLowerCase() == 'ul' ? 1:0);
//$('#content').append('startHide(), levelsdown: '+levelsdown+', leaving: '+this.nodeName+'<br />');
	
	
	for(var n=timer.length-1; n>=levelsdown; n--){
		timer[n] = setTimeout('closeMenu('+n+')', timeout);
	}
}
//keep the menu open
function keepAlive(){
	var levelsdown = $(this).parents('.submenu').length+1;	
//$('#content').append('keepAlive(), levelsdown: '+levelsdown+', entering: '+this.nodeName+'<br />');	
	for(var n=0; n<=levelsdown; n++){
		clearTimeout(timer[n]);
	}
}
//closes the menu
function closeMenu(numdown){	
	var subselector = 'header nav div ';
	if (numdown < 1) return false;
	if (numdown > 1){
		for(var n=0; n<numdown; n++){
			subselector += 'ul ';
		}
	}	
//$('#content').append('closeMenu(), subselector: '+subselector+'<br />');
	$(subselector).hide();
	if ($('header nav div:visible').length == 0){
		$('header nav > ul > li > a').removeClass('current');
	}
}
//gets the stock values
function getStock(){
	$.ajax({
		url:'../get_stock.php',
		data:{s:'GBR.V'},
		dataType:'json',
		success:function(data){
			$('#stockinfo .value').html(data.value);
			var change = Number(data.change);
			var type;
			if (change < 0){
				type = 'down';
			}else{
				type = 'up';
			}
			$('#stockinfo .change').addClass(type);
			$('#stockinfo .change').html(data.change);
			$('#stockinfo').attr(data.lastupdate);
		}		
	});
}
//validates email alerts
function validateAlert(){
	var message = '';
	$('.error').removeClass('error');
	
	if ($('#alert-name').val() == ''){
		message += 'Please provide your name!\n';
		$('#alert-name').addClass('error');
	}
	if ($('#alert-email').val() == ''){
		message += 'Please provide your email!\n';
		$('#alert-email').addClass('error');
	}else if (!validateEmail($('#alert-email').val())){
		message += 'Please provide a valid email!\n';
		$('#alert-email').addClass('error');
	}
	if (message != ''){
		alert(message);	
	}
	return (message=='');
}
//validates email alerts
function validateRequest(){
	var message = '';
	$('.error').removeClass('error');
	
	if ($('#first_name').val() == ''){
		message += 'Please provide your first name!\n';
		$('#first_name').addClass('error');
	}
	if ($('#last_name').val() == ''){
		message += 'Please provide your last name!\n';
		$('#last_name').addClass('error');
	}
	if ($('#email').val() == ''){
		message += 'Please provide your email!\n';
		$('#email').addClass('error');
	}else if (!validateEmail($('#email').val())){
		message += 'Please provide a valid email!\n';
		$('#email').addClass('error');
	}
	if ($('#city').val() == ''){
		message += 'Please provide your city!\n';
		$('#city').addClass('error');
	}
	
	if (message != ''){
		alert(message);	
	}
	return (message=='');
}
//validates an email using unicode characters
function validateEmail(email){
	var emailreg = /^((([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/; 
	if (!emailreg.exec(email))
		return false;
	else
		return true;
}
//changes the banner
function changeBanner(){
	var pic = $(this).val();	
	if (!$('#banner').length){
		$('#banner-area').append('<img alt="Banner" id="banner" />');
	}
	if (pic != ''){
		$('#banner').show();
		$('#banner').attr('src','../'+pic);
	}else{
		$('#banner').hide();
	}
}
//prepares to upload a banner
function addBanner(){
	$('#edit-banner').append('<option value="new">New Banner</option>');
	$('#edit-banner').val('new');
}
function deleteBanner(){
	if (confirm('Are you sure you want to delete this banner?\n  Make sure no other page is using this.')){
		var url = $(this).attr('href');
		$('.delete-banner').attr('href', url+'&banner='+$('#edit-banner').val());
		return true;
	}else{
		return false;
	} 
}
//opens a file folder
function openFolder(){
	tinyBrowserPopUp('file',$(this).attr('data-textbox'));
	return false;
}
//opens the edit quicklink dialog
function editQuicklink(){
	$('#quicklink-dialog').dialog('open').dialog('option','title','Edit Quicklink');
	var id = $(this).attr('data-id');
	var selector = '#quicklink'+id;
	var name = $(selector).html();
	var file = $(selector).attr('href');
	
	$('#quicklink-id').val(id);
	$('#quicklink-name').val(name);
	$('#quicklink-file').val(file);
	return false;
}
//opens the add quicklink dialog
function addQuicklink(){
	$('#quicklink-dialog').dialog('open').dialog('option','title','Add Quicklink');
	
	$('#quicklink-id').val('new');
	$('#quicklink-name').val('');
	$('#quicklink-file').val('');
	return false;
}
//opens the edit news release dialog
function editNewsRelease(){
	$('#news-form').dialog('open').dialog('option','title','Edit News Release');
	var id = $(this).attr('data-id');
	var selector = '#document'+id+' ';
	var name = $(selector+'.title').html();
	var file = $(selector+'.file').html();
	var date = $(selector+'.date').html();
	
	$('#news-id').val(id);
	$('#news-title').val(name);
	$('#news-file').val(file);
	$('#news-date').val(date);
	return false;
}
//opens the add quicklink dialog
function addNewsRelease(){
	$('#news-form').dialog('open').dialog('option','title','Add News Release');
	
	$('#news-id').val('new');
	$('#news-title').val('');
	$('#news-file').val('');
	$('#news-date').val('');
	return false;
}
//opens the edit news release dialog
function editReport(){
	var typename = $('#report-type-name').val();
	$('#reports-form').dialog('open').dialog('option','title','Edit '+typename);
	var id = $(this).attr('data-id');
	var selector = '#document'+id+' ';
	var name = $(selector+'.title').html();
	var file = $(selector+'.file').html();
	var date = $(selector+'.date').html();
	
	$('#report-id').val(id);
	$('#report-title').val(name);
	$('#report-file').val(file);
	$('#report-date').val(date);
	return false;
}
//opens the add quicklink dialog
function addReport(){
	var typename = $('#report-type-name').val();
	$('#reports-form').dialog('open').dialog('option','title','Add '+typename);
	
	$('#report-id').val('new');
	$('#report-title').val('');
	$('#report-file').val('');
	$('#report-date').val('');
	return false;
}
//sorts the pages
function sortPages(e, ui){			
	var parentid = $(this).attr('id');
	var sort;
	if (parentid == ''){
		sort = $('#submenu > ul').sortable('serialize');					
	}else{
		sort = $('#'+parentid).sortable('serialize');
	}

	$.ajax({
		url: "../sort_pages.php",
		type: "POST",
		data: sort+'&parent_id='+parentid,
		dataType:'text',
		success: function(feedback){
			if (feedback != '')
				alert(feedback);
		}
	});
}
