(function() {
    window.BS = {
        ratingTimeout: 0,
                       
        getRelated: function(s, d, p, excludePID) {
        
            var ddl = $('#ddlcatalogfilters').get(0); 
            var r = ddl.options[ddl.selectedIndex].value;
            var k;
            switch(r) {
                case 'related':
                    k = $('#relatedpid').val();
                    break;
                    
                case 'author':
                default:
                    k = $('#relatedauthor').val();
                    break;
            }
            
            if(d == undefined) {
                d = true;
                if(s == 'date' && $('#sortingarrow').hasClass('sortdate'))
                {
                    d = !$('#sortingarrow').hasClass('sortdown');
                }
                else if(s == 'title' && $('#sortingarrow').hasClass('sorttitle'))
                {
                    d = !$('#sortingarrow').hasClass('sortdown');
                }
                else if(s == 'title')
                {
                    d = false;
                }
            }
            
            if(p == undefined)
            {
                p = 1;
            }
            
            switch(s) {
                case 'date':
                    $('#sortingarrow').addClass('sortdate');
                    $('#sortingarrow').removeClass('sorttitle');
                    $('#sortingarrow').insertAfter($('#sortbydatehref'));
                    break;
                    
                case 'title':
                    $('#sortingarrow').addClass('sorttitle');
                    $('#sortingarrow').removeClass('sortdate');
                    $('#sortingarrow').insertAfter($('#sortbytitlehref'));
                    break;
            }
            
            if(d) {
                $('#sortingarrow').addClass('sortdown');
                $('#sortingarrow').attr('src', 'images/sort-dwn.gif');
            } else {
                $('#sortingarrow').removeClass('sortdown');
                $('#sortingarrow').attr('src', 'images/sort-up.gif');
            }
            
            var z = new Date().getTime();
            
            if (excludePID != undefined){
                $('#loadcontainer').load('get-related.aspx?related=' + r + '&key=' + k + '&sortby=' + s + '&sortorder=' + (d ? 'd' : 'a') + '&page=' + p + '&exclude=' + excludePID +  '&z=' + z + ' #payload');
            }else{
                $('#loadcontainer').load('get-related.aspx?related=' + r + '&key=' + k + '&sortby=' + s + '&sortorder=' + (d ? 'd' : 'a') + '&page=' + p + '&z=' + z + ' #payload');
            }
        },
        
        hideMenus: function() {
            var menus = $('.menus').css('display', 'none');
            $('#frame').unbind('click.bs');
        },
        
        hideTags: function(lnk) {
            $(lnk).parent('.fulltaglist').find('.showme').css('display', 'none');
            $(lnk).text('(+)');
            lnk.onclick = function() { BS.showTags(lnk); return false; };
        },
        
        highlight: function(li) {
            $(li).find('a').css('color', '#fff');
            $(li).css({
                'background-image': "url('images/dropdown-over.gif')",
                'border': 'dotted 1px #A3BAE9',
                'border-width': '1px 0'
            });
        },
        
        showFeedback: function(id, msg) {
			$("#" +id).text(msg);
			$("#" +id).addClass('feedback').fadeIn(800).fadeTo(1800, 1).fadeOut(600);
		},
		
		reStripe: function(className) {
			$("."+className+":odd").removeClass('oddrow').addClass('evenrow');
    		$("."+className+":even").removeClass('evenrow').addClass('oddrow');
		},
		
		slideDownMessage: function(msg) { 
			$("#slideMsg").text(msg);
			$("#slideMsg").addClass('feedback').slideDown(800).fadeTo(3000, 1).slideUp(800);
		},

 		limitChars: function(textid, limit, feedbackArea)
			{
				var text = $('#'+textid).val();	
				var textlength = text.length;
				if(textlength > limit)
				{
					$('#' + feedbackArea).html('You cannot write more then '+limit+' characters.');
					$('#'+textid).val(text.substr(0,limit));
					return false;
				}
				else
				{
					$('#' + feedbackArea).html('You have '+ (limit - textlength) +' characters left.');
					return true;
				}
			},
		countChar: function(id, count) {
				
				$('#'+id).keyup(function(){
										 
						BS.limitChars(id, count, 'charlimitinfo');
						})
					
				$('#'+id).click(function() {$('#charlimitinfo').fadeIn('normal', BS.countChar())}
				);
				$('#'+id).blur(function() {$('#charlimitinfo').fadeOut('slow')})
				
			},

        saveRating: function(img, pid) {        
            window.clearTimeout(BS.ratingTimeout);
            
            var r = img;
            var z = new Date().getTime();
            $.ajax({        
                url: 'SaveCommentAjax.aspx?rating=' + r + '&pid=' + pid + '&z=' + (new Date().getTime()),
                dataType: 'json',
                type: 'POST',
                error: function(a,b,c)
                {
                    $('#divRateError').html('An unexpected error occurred during saving comments.\nPlease try again.').addClass("error");
                },
                success: function(json) {            
                    if(!json.ok) {
                        if(json.msg)
                        {
                            $('#divRateError').html(json.msg).addClass("error");
                        }
                        else
                        {
                            $('#divRateError').html('An unexpected error occurred during saving comments.\nPlease try again.').addClass("error");
                        }
                    } else {
                        $('#divRateError').removeClass("error");
						  BS.showFeedback('ratemsg', 'Your rating has been submitted.');
                         $('#loadrating').load('RatingAjax.aspx?rating=' + r + '&pid=' + pid + '&z=' + z + ' #loadratingcontainer');
                         $('#loadcomments').load('CommentsAjax.aspx?pid=' + pid + '&z=' + z + ' #loadcommentscontainer');
                    }
                }
            });
			
            return false;
 
        },
        flagAsInappropriate: function(fromAddressField,subjectField,bodyField,showMessage,errorDivId,submitBtn,pid,ipAddress ){
            var fromAddress = $('#' + fromAddressField);
            var subject = $('#' + subjectField);
            var body = $('#' + bodyField);
            var errorDiv = $('#' + errorDivId);
            var errors = 0;
            
            if (trim(fromAddress.val()," ") == ""){
                errorDiv.html('Please specify your email address.').removeClass("hide").addClass("error-small");                  
                errors++;
            }
            
            if (!validateEmailAddress(fromAddress.val()) || fromAddress.val().indexOf(",") > 0){
                errorDiv.html('Please specify a valid from email address.').removeClass("hide").addClass("error-small");                  
                errors++;
            }
            
            if (trim(subject.val()," ") == ""){                
                errorDiv.html('Please specify a subject line.').removeClass("hide").addClass("error-small");
                errors++;
            }
            
            if (trim(body.val()," ") == ""){
                errorDiv.html('Please specify body text.').removeClass("hide").addClass("error-small");
                errors++;
            }
            
            if (errors > 0){
                $.nyroModalSettings({ height: 370, width: 485 });
                return false;
            }
            
            $.ajax({        
                url: 'FlagPresentationAjax.aspx',
                data: {fromAddress: fromAddress.val(), subject: subject.val(), bodytext: body.val(), clientip: ipAddress, pid: pid},
                dataType: 'json',
                type: 'POST',
                error: function(a,b,c)
                {
                    $.nyroModalSettings({ height: 370, width: 485 });
                    errorDiv.html('An unexpected error occurred while sending your email.\nPlease try again.').addClass("error-small").removeClass("hide");
                },
                success: function(json) {            
                    if(!json.ok) {
                        if(json.msg)
                        {
                            $.nyroModalSettings({ height: 370, width: 485 });
                            errorDiv.html(json.msg).addClass("error-small").removeClass("hide");
                        }
                        else
                        {
                            $.nyroModalSettings({ height: 370, width: 485 });
                            errorDiv.html('An unexpected error occurred while sending your email.\nPlease try again.').addClass("error-small").removeClass("hide");
                        }
                    } else {
                        errorDiv.removeClass("error-small");
                        
                        if (showMessage){
                            scroll(0,0);
						    BS.slideDownMessage('Your email has been sent.');
                        }
                        
                        $.nyroModalRemove();
                    }	
                }
            });
            return false;
        },
        sendEmail: function(emailType, fromNameField, fromEmailField, subjectField, bodyField, showMessage, errorDivId, submitBtn, pid, shareToField) {
            var fromName = $('#' + fromNameField);
            var fromEmail = $('#' + fromEmailField);
            var shareAddress = $('#' + shareToField);
            var subject = $('#' + subjectField);
            var body = $('#' + bodyField);
            var errorDiv = $('#' + errorDivId);
            var errors = 0;
            
            if (emailType == undefined || emailType == "") {
                errorDiv.html('Error sending email.').removeClass("hide").addClass("error-small");       
                errors++;
            }
            
            if (emailType == 'share' && $.trim(shareAddress.val()) == ""){                
                errorDiv.html('Please specify a to address.').removeClass("hide").addClass("error-small");
                errors++;
            }
            
            if(fromNameField != undefined && $.trim(fromName.val()) == '') {
                errorDiv.html('Please specify a from name.').removeClass('hide').addClass('error-small');
                errors++;
            }
            
            if(fromEmailField != undefined && ($.trim(fromEmail.val()) == '' || !validateEmailAddress(fromEmail.val()))) {
                errorDiv.html('Please specify a valid from address.').removeClass('hide').addClass('error-small');
                errors++;
            }
            
            if (trim(subject.val()," ") == ""){                
                errorDiv.html('Please specify a subject line.').removeClass("hide").addClass("error-small");
                errors++;
            }
            
            if (trim(body.val()," ") == ""){
                errorDiv.html('Please specify body text.').removeClass("hide").addClass("error-small");
                errors++;
            }
            
            if (errors > 0){
                $.nyroModalSettings({ height: 450, width: 485 });
                return false;
            }
            
            $.ajax({        
                url: 'SendEmailAjax.aspx',
                data: { emailType: emailType, subject: subject.val(), bodytext: body.val(), pid: pid, shareAddress: shareAddress.val(), fromName: (fromNameField != undefined ? fromName.val() : undefined), fromEmail: (fromEmailField != undefined ? fromEmail.val() : undefined) },
                dataType: 'json',
                type: 'POST',
                error: function(a,b,c)
                {
                    errorDiv.html('An unexpected error occurred while sending your email.\nPlease try again.').addClass("error-small").removeClass("hide");
                },
                success: function(json) {            
                    if(!json.ok) {
                        if(json.msg)
                        {
                            $.nyroModalSettings({ height: 450, width: 485 });
                            errorDiv.html(json.msg).removeClass("hide").addClass("error-small");
                        }
                        else
                        {
                            $.nyroModalSettings({ height: 450, width: 485 });
                            errorDiv.html('An unexpected error occurred while sending your email.\nPlease try again.').addClass("error-small").removeClass("hide");
                        }
                    } else {
                        errorDiv.removeClass("error-small");
                        
                        if (showMessage){
                            scroll(0,0);
						    BS.slideDownMessage('Your email has been sent.');                  
                        }
                        
                        $.nyroModalRemove();
                    }	
                }
            });
            return false;
        },
        
        saveComment: function(textfield, pid) {        
            window.clearTimeout(BS.ratingTimeout);
            var r = $('#' + textfield);
            var z = new Date().getTime();
            
            if (trim(r.val()) == ""){
                $('#divRateError').html('Please specify comment text.').removeClass("hide").addClass("error-small");
                return false;
            }
            
            $.ajax({        
                url: 'SaveCommentAjax.aspx?save=c&comment=' + escape(r.val()) + '&pid=' + pid + '&z=' + (new Date().getTime()),
                dataType: 'json',
                type: 'POST',
                error: function(a,b,c)
                {
                    $('#divRateError').html('An unexpected error occurred during saving comments.\nPlease try again.').addClass("error").removeClass("hide");
                },
                success: function(json) {            
                    if(!json.ok) {
                        if(json.msg)
                        {
                            $('#divRateError').html(json.msg).addClass("error").removeClass("hide");
                        }
                        else
                        {
                            $('#divRateError').html('An unexpected error occurred during saving comments.\nPlease try again.').addClass("error").removeClass("hide");
                        }
                    } else {
                        $('#divRateError').removeClass("error").addClass("hide");
						BS.slideDownMessage('Your comment has been submitted.');                        
                        $('#loadcomments').load('CommentsAjax.aspx?pid=' + pid + '&z=' + z + ' #loadcommentscontainer');
                        r.val('');
                    }
                }
				         
            });
			 
            return false;
        },
        
        overRating: function(img) {
            window.clearTimeout(BS.ratingTimeout);
            
            var r = img.id.substr(img.id.length - 1);
            var baseid = img.id.substring(0, img.id.length - 1);
            
            for(var i=1; i<=5; i++) {
                if(i <= r)
                    $('#' + baseid + i).attr('src', 'images/star-on.gif');
                else
                    $('#' + baseid + i).attr('src', 'images/star-off.gif');
            }
        },
        
        outRating: function(img) {
            BS.ratingTimeout = window.setTimeout(function() {
                    var baseid = img.id.substring(0, img.id.length - 1);
                    var r = $('#' + baseid + 'init').val();
                    
                    for(var i=1; i<=5; i++) {
                        if(i <= r)
                            $('#' + baseid + i).attr('src', 'images/star-on.gif');
                        else
                            $('#' + baseid + i).attr('src', 'images/star-off.gif');
                    }
                }, 100);
        },
        
        removeHighlight: function(li) {
            $(li).find('a').css('color', '#000');
            $(li).css({
                'background-image': 'none',
                'border': 'dotted 1px #eee',
                'border-width': '1px 0'
            });
        },
        
        setCommentDelete: function(commentID, divID)
        {
            $.ajax({        
                url: 'DeleteCommentAjax.aspx?key=' + commentID + '&z=' + (new Date().getTime()),
                dataType: 'json',
                type: 'POST',
                success: function(json) {
                    $('#' + divID).fadeOut(1000, function () {
                        $(this).remove();
                        BS.reStripe('comments-container');
                    });
                },
                error: function(a,b,c){
                    alert('a:' + a + ' b: ' + b + ' c: ' + c);
                }                
            });  
        },
        
        showTags: function(lnk) {
            $(lnk).parent('.fulltaglist').find('.showme').css('display', '');
            lnk.onclick = function() { BS.hideTags(lnk); return false; };
            $(lnk).text('(-)');
        },
        
        showTopics: function(href) {
            setTimeout(BS.startEventListener, 2);
            var ul = $('#topicmenus');
            var show = (ul.css('display') != 'block');
            BS.hideMenus();
            if(show)
                ul.css({
                    'display': 'block',
                    'top': '-18px',
                    'left': '233px'
                });
        },

        startEventListener: function() {
	        try {
		        $('#frame').bind('click.bs', BS.hideMenus); 
	        } catch(e) {}
        },
        
        toggleAccordian: function(div) {
            var hide = ($(div).next('.accordion_content').css('display') != 'none');
            $(div).next('.accordion_content').slideToggle('normal', function() { $(div).css('background-image', (hide ? 'url("images/accordian-bg.gif")' : 'url("images/accordian-active-bg.gif")')); });
        },

		maintainScroll: function()
		{
			$.cookie('ycook', $(window).scrollTop(), {path: '/'});
		}
		
    };
})();


var timeout    = 500;
var closetimer = 0;
var ddmenuitem = 0;

function jsddm_open()
{  jsddm_canceltimer();
   jsddm_close();
   ddmenuitem = $(this).find('ul').css('visibility', 'visible');
   ddmenuitemShadow = $(this).find('ul').dropShadow({left: 1, top: 1, opacity: 0.4, blur: 1});}

function jsddm_close()
{  if(ddmenuitem) $('ul').removeShadow(), ddmenuitem.css('visibility', 'hidden') }

function jsddm_timer()
{  closetimer = window.setTimeout(jsddm_close, timeout);}

function jsddm_canceltimer()
{  if(closetimer)
   {  window.clearTimeout(closetimer);
      closetimer = null;}}
//document.onclick = jsddm_close;
function doHelp(strURL)
{
    strURL = "http://www.brainshark.com/brainshark/help/" + strURL;
	var cmdstr = 'window.open("' + strURL + '", "help", "border=dialog,width=950,height=755,toolbar=yes,menubar=no,location=no,directories=no,scrollbars=yes,resizable");'
	window.setTimeout(cmdstr,300);
}
	
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function validateEmailAddress(email)
{
    var pattern = /^.+@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
    if (!pattern.test(email) )
    {	
        return false;
    	
    } else return true;
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }
