var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{	// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

var empty = /^\s*$/;
var $j = jQuery.noConflict();

function revertDisabledSubmit(){
	$j('.disabledButton').hide();
	$j('input[@type=submit]').show();
}

$j( document ).ready( function(){
/*	
	//disable submit buttons after they're pressed
	$j('input[@type=submit]').bind("click", function(e){
		$j(this).css("display", "none").after("<input class='disabledButton' type='button' disabled='disabled' value='working..'/>");
	});
*/	
	if( jQuery.browser.msie ){ 
		formEffects();
		tb_register_callback('onload', 'formEffects');
	}
	
	//bind ajax progress
	$j("#progress").ajaxStart(function(){
		$j(this).show();
	});
	$j("#progress").ajaxSend(function(){
		$j(this).show();
	});
	
	$j("#progress").ajaxStop(function(){		
		$j(this).hide();
	});
	$j("#progress").ajaxComplete(function(){		
		$j(this).hide();
	});
	
	//bind scrolling of window to reposition progress div
	 $j(window).scroll( function() { 
	 	$j("#progress").css("top", ($j(window).scrollTop() + 6) + "px");
	 	
	  } );
	  
	  topLoginEffect();
	  
	  /*bind admin button to admin menu
	  $j("#header-primary li.admin").bind("mouseover", function(){
	  	$j("#admin-menu").slideDown();
	  });
	  */
	  
});

function topLoginEffect(){
	//top login form effect
	if($j("#UserUsername").val()==""){
		$j("#UserUsername").addClass("input_user");
	}
	else{
		$j("#UserUsername").removeClass("input_user");
	}
	
	if($j("#UserPassword").val()==""){
		$j("#UserPassword").addClass("input_pass");
	}
	else{
		$j("#UserPassword").removeClass("input_pass");
	}
}
function topLoginFocus(n){
	if(n=="UserPassword")
		$j("#" + n ).removeClass('input_pass');
	else
		$j("#" + n ).removeClass('input_user');
}

//function to apply form affects (in a function so we can call it from thickbox modal as well)
function formEffects(){
	//alert("form effects");
	//apply class 'input' to all text, password input fields (ie6 fix)
	$j(':text').addClass("input");
	$j(':password').addClass("input");
	
	//apply focus/blur effects to input fields
	$j('input[@type=text][@readonly=],input[@type=password],select:enabled,textarea[@readonly=]').focus(function(){
		$j(this).addClass("input_focus");
	}).blur(function(){
		$j(this).removeClass("input_focus");
	});
}

function gotopage(p){
	//this is to check if the url already contains the g_webroot portion or not
	var regex_str = "^"+g_webroot.replace(/\//g, "\\\/");
	var regex = new RegExp(regex_str);	
	var http = /^http/;
	
	if( !regex.test(p) && !http.test(p) ){
		p = g_webroot.substr(0,g_webroot.length-1) + p;
	} 
	
	if( window.opener ){
		//alert("we're in a popup");
		window.opener.document.location=p;
		
		//close tb if it exists
		if( typeof('tb_remove') != 'undefined' ){
			tb_remove();	
		}
		
		//minimize reader window	
		window.opener.focus();
	} else {
		//check if inside an iframe modal
		if( parent.document.getElementById("TB_iframeContent") ){
			//alert("we're in an iframe");
			parent.window.location.href=p;	
		}
		else{
			window.location.href=p;
		}
	}
}

function login_link(just_login){
	if( typeof just_login == "undefined"){
		just_login = false;
	}
	
	//title = title || "Login";
	var currUrl = window.location.href;

	var arrQString = new Object();
	arrQString['height'] = 380;
	arrQString['width'] = 400;
	arrQString['next_url'] = encodeURIComponent(currUrl);
	var qString = qs( arrQString );
	
	var link_str = '<a href="javascript:loadTB(\'Login\', \''+g_webroot+'users/login?'+qString+'\');closeFlashMini();">login</a>';
	
	if( !just_login ){
		link_str += ' or <a href="' + g_webroot+'users/signup">signup</a> for free!';
	}
	
	return link_str;
}

/**
 *flashes text under an element. e.g. the username availablity check
 *
 * element: DOM element that message should attach to it
 * msg: the message that should appear on it
 * css_class: the css class that defines the style
 * flash: wheter it should flash and disappear once shown
 */
function flashUnder(element, msg, css_class, flash){
	var parent = $j( element ).parent();

	if( typeof(css_class) == "undefined" || !css_class){
		css_class = "under_message_bad";	
	}

	if( typeof(flash) == "undefined" ){
		flash = true;
	}

	$j( parent ).children("#under_message").remove();
	$j( parent ).append( "<div id='under_message' class='"+css_class+"' style='clear:left'>"+msg+"</div>");

	if( flash ){
		$j( "#under_message" ).fadeTo(5000,0, function(){
			$j( "#under_message" ).remove();	
		});
	}
}

/**
 * checks if the global variabl g_is_ajax is defined or not.
 * if this variable is true, the js files know to target certain
 * elements which are ajax specific
 */
function g_is_ajax_defined(){
	return (typeof(g_is_ajax) != "undefined" && g_is_ajax);
}

function g_elementExists(id){
	return ( $j(id).get() != "" ); 
}

/**
 * function to preload a set of images using jquery
 */
$j.preloadImages = function() {
	for(var i = 0; i<arguments.length; i++) {
    	$j("<img>").attr("src", arguments[i]);
	}
} 


function loadTB(caption, url){
	tb_show(caption,url);
}

function loadTB_WLPC(caption, url,id){
	if( g_isLoggedIn ){
		tb_show(caption,url);
	} else {
		showFlashMini("error","Sorry!","You have to be logged in to do that.<br /><a href='/login'><strong>login now!</strong></a>", "wrapper_"+id);
	}
}

function toggleHideShow(element_id){
	var element = $j("#"+element_id);
	
	if( element.css('display') == 'block' ){
		element.hide();	
	} else  {
		element.show();
	}
}

function pluralize(qty, postfix){
	if( typeof postfix == "undefined" ) postfix = "s";
	if( qty > 1 )
		return postfix;
	else
		return "";
}

function monitorChangeAndRedirect(select, url){
	var select = $j(select);
	
	gotopage(url+select.val());
}

function getIssues(titleId, callback_func, issueType){
	$j( "#IssueId" ).removeOption(/./);
	
	if( empty.test(titleId) ) return;
	
	//if specific issue type is desired (ie. exclude tpi)
	var url;
	var flipbookVersion = "";
	if(typeof g_flipbookVersion != "undefined")
		flipbookVersion = g_flipbookVersion;

	if( issueType=="undefined" || issueType==null )
		url = g_webroot + "titles/ajax_getIssues/"+titleId+"/0/"+flipbookVersion;
	else
		url = g_webroot + "titles/ajax_getIssues/"+titleId +"/"+issueType+"/"+flipbookVersion;
		
	$j.ajax({
		type: "POST",
		url: url,
		success: function(data){
			if( !empty.test(data) && data != "false" ){
				data = JSON.parse(data);
				$j( "#IssueId" ).addOption(data, false);
				if( typeof callback_func != "undefined" && callback_func ){
					callback_func.call();
				}
				showReturnToTitle(titleId);
			}
		}
	});
}

function getPages(issueId, callback_func, selectId){
	$j( "#PageId" ).removeOption(/./);
	
	if( selectId ){
		$j("#"+selectId).removeOption(/./);
	}

	if( empty.test(issueId) ){
		return;
	}
	
	$j.ajax({
		type: "POST",
		url: g_webroot + "issues/ajax_getPages/"+issueId,
		success: function(data){
			if( !empty.test(data) && data != "false" ){
				data = JSON.parse(data);
				$j( "#PageId" ).addOption(data, false);	
				
				if( selectId ){
					$j( "#"+selectId ).addOption(data, false);	
				}
				
				if( callback_func ){
					callback_func.call();
				}				
			}
			//clear current page
			//$j("#img_page").attr("src", '');
			$j("#resizeMe").hide();
			$j("#container").hide();
		}
	});
}

function showReturnToTitle(tid){
	$j("#return_to_title").html("<a title='return to management for this title' href='" + g_webroot + g_isManaging + "titles/index/" + tid + "'>Manage</a>");
}

///function to fix dequeue issues with interface
( function( $j ) {
	$j.dequeue = function( a , b ){
		return $j(a).dequeue(b);
	};
})( jQuery ); 

function time(){
	return new Date().getTime();
}


//traverses a select input and fires off any onchange events
function stepSelect( id, direction ){
	if( direction == 'next'){
		$j('#'+id+' option:selected').next().attr('selected','selected');
	}
	if( direction == 'prev'){
		$j('#'+id+' option:selected').prev().attr('selected','selected');
	}
	
	$j('#'+id).change();

}

//function to load mini flipbook
function mf_load(url){window.open(url, '_blank', 'toolbars=0, scrollbars=0, location=0, status=0, menubars=0, resizable=1, width='+(screen.availWidth-80)+', height='+(screen.availHeight-80)+', left=0, top=0');}

//function to unbind thickbox events and re-bind thickbox events (in case new content is loaded via ajax)
function removeThickBoxEvents() {
    $j('.thickbox').each(function(i) {
        $j(this).unbind('click');
    });
}

function bindThickBoxEvents() {
    removeThickBoxEvents();
    tb_init('a.thickbox, area.thickbox, input.thickbox');
}

function alertNoLicenses(){
	alert("you have 0 Reader Licenses in your account.\n\n Please contact us to purchase more licenses");
}

//toggle tabs
function showTab(n, tabs_prefix){
	$j(".tabnav_" + tabs_prefix + " li a").removeClass("active");
	$j(".tab_" + tabs_prefix).hide();
	$j("#tablink_" + tabs_prefix + "_" + n).addClass("active").blur();
	$j("#tab_" + tabs_prefix + "_" + n).show();
}
function showAllTabs(tabs_prefix){
	$j(".tabnav_" + tabs_prefix).fadeOut('slow');
	$j(".tab_" + tabs_prefix).show();
}


function toggleElementFromCheckbox(checkboxID, targetID){
	if( $j(checkboxID).attr("checked") == true && $j(targetID).is(":hidden") ){
		$j(targetID).slideDown();
	} else if( typeof $j(checkboxID).attr("checked") == "undefined" ) {
		$j(targetID).slideUp();
	}
}

function simpleToggle(selector){
    if($j(selector).is(":hidden")){
        $j(selector).slideDown();
    } else {
        $j(selector).slideUp();
    }
}

function g_checkEnterprisePermission(permission){
    switch(permission){
        case 'allow_compilations':
            return g_allow_compilations;
            break;
        case 'allow_ecomm':
            return g_allow_ecomm;
            break;
    }
    return false;
}
