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: "OmniWeb",
		    versionSearch: "OmniWeb/",
		    identity: "OmniWeb"
		},
		{
		    string: navigator.vendor,
		    subString: "Apple",
		    identity: "Safari"
		},
		{
		    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();

//alert(BrowserDetect.browser);
var is_ie = BrowserDetect.browser == "Explorer";
var is_nav = BrowserDetect.browser == "Netscape";
var is_firefox = BrowserDetect.browser == "Firefox";
var is_safari = BrowserDetect.browser == "Safari";
//alert(is_ie + ' ' + is_nav + ' ' + is_firefox + ' ' + is_safari);

function getRealLeft(el) {
    var xPos = el.offsetLeft;
    var tempEl = el.offsetParent;
    while (tempEl != null) {
        xPos += tempEl.offsetLeft;
        tempEl = tempEl.offsetParent;
    }
    return xPos;
}

function getRealTop(el) {
    var yPos = el.offsetTop;
    var tempEl = el.offsetParent;
    while (tempEl != null) {
        yPos += tempEl.offsetTop;
        tempEl = tempEl.offsetParent;
    }
    return yPos;
}

function getParentNode(el){
	if (el.parentNode) return el.parentNode;
	else if (el.parentElement) return el.parentElement;
	else return null;
}

function confirmClick(msg) {
	if (confirm(msg)) {
		return;
	}
	else {
		event.returnValue = false;
	}
}

function rowOver(row, backColor, color ) {
	row.style.backgroundColor = backColor;
	row.style.color = color;
}

function rowOut(row, backColor, color ) {
	row.style.backgroundColor = backColor;
	row.style.color = color;
}


function openHelp(resource, page, height, width, panel) {
	if (page==null) { page = 0; }
	if (height==null) { height = 550; }
	if (width==null) { width = 700; }
	if (panel==null) { panel = 'True'; }
	
	window.open('/help.aspx?mt=7&tm='+resource+'&page='+page+'&controls='+panel, '_blank', 'directories=no, height='+height+', width='+width+', resizable=yes, location=no, menubar=no, status=no, toolbar=no, scrollbars=no');
}

function openTutorial(file)
{
	window.open('/media/flash/' + file + '.htm', '_blank', 'directories=no, height=490, width=790, resizable=no, location=no, menubar=no, status=no, toolbar=no, scrollbars=no');
}

function openDisplayControl(ctrl, height, width, resizable, scrollbars) {
	if (ctrl==null) { ctrl = 0; }
	if (height==null) { height = 550; }
	if (width==null) { width = 700; }
	if (resizable==null) { resizable = 'yes'; }
	if (scrollbars==null) { scrollbars = 'no'; }
	
	window.open('/DisplayControl.aspx?ctrl='+ctrl, '_blank', 'directories=no, height='+height+', width='+width+', resizable='+resizable+', location=no, menubar=no, status=no, scrollbars='+scrollbars+', toolbar=no');
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function addLoadListener(fn) 
{ 
	bcLoadFunction(fn);
}

function bcId(elName){	
	if(typeof elName=="string"){
		return $('#' + elName);
	}
	else {
		return $(elName)
	}
}

function bcClass(className){	
	return $('.' + className);
}

function bcShow(elName){	
	bcId(elName).show();
}

function bcHide(elName){	
	bcId(elName).hide();
}

function bcToggle(elName){
	bcId(elName).toggle();
}

function bcRolloverAppear(elName, dur){	
	bcFadeIn(elName, dur);
}

function bcRolloverFade(elName, dur){
	bcFadeOut(elName, dur);
}

function bcFadeIn(elName, dur){	
	if (dur==null) dur = 1.0;
	 dur = dur * 1000;
	bcId(elName).fadeIn(dur);
}

function bcFadeOut(elName, dur){
	if (dur==null) dur = 1.0;
	 dur = dur * 1000;
	bcId(elName).fadeOut(dur);
}

function bcBlindUp(elName, dur){	
	if (dur==null) dur = 1.0;
	 dur = dur * 1000;
	bcId(elName).slideUp(dur);
}

function bcBlindDown(elName, dur){	
	if (dur==null) dur = 1.0;
	 dur = dur * 1000;
	bcId(elName).slideDown(dur);
}
function bcToggleBlind(elName, dur){	
	if (dur==null) dur = 1.0;
	 dur = dur * 1000;
	bcId(elName).slideToggle(dur);
	//bcId(elName).toggle(dur);
}
function bcPulsate(elName, num, dur){	
	el = bcId(elName);
	if (num==null) num = 3;
	if (dur==null) dur = 2;
	speed = dur*100;
	el.animate({ opacity: 0.1 }
		, speed
		, function() {                                  
			$(this).animate({ opacity: 1.0 }, speed);
			if (num - 1 > 0) bcPulsate(elName, num - 1, dur);                           
	});	     
}

function bcHighlight(elName, beginColor, dur){	
	if (beginColor==null) beginColor = '#ffff33';
	if (dur==null) dur = 1.0;
	dur = dur * 1000;
	$("#" + elName).colorBlend([{fromColor: beginColor, toColor:"#FFFFFF", cycles:0.5, duration: dur}]);	
}

function bcLoadFunction(fn){
	if (typeof window.addEventListener != 'undefined') 
 { 
   window.addEventListener('load', fn, false); 
 } 
 else if (typeof document.addEventListener != 'undefined') 
 { 
   document.addEventListener('load', fn, false); 
 }
 else if (typeof window.attachEvent != 'undefined') 
 { 
   window.attachEvent('onload', fn); 
 } 
 else 
 { 
   var oldfn = window.onload; 
   if (typeof window.onload != 'function') 
   { 
     window.onload = fn; 
   } 
   else 
   { 
     window.onload = function() 
     { 
       oldfn(); 
       fn(); 
     }; 
   } 
 } 
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function getElementsByTag(tag, elm){
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	return elements;
}


function toggleSkillInfoDetails(el){
	var container = $(el).parents(".SkillInfoContainer").get(0)
	if (container){
		var skillInfoDetails = $(container).children(".SkillInfoDetails").get(0);
		if (skillInfoDetails) bcToggleBlind(skillInfoDetails, 0.5);
	}

}

function stopBubble(e)
{
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	
	//var e=(evt)?evt:window.event;
	//if (window.event) {
	//	//alert('IE cancelBubble');
	//	e.cancelBubble=true;
	//} else {
	//	//alert('W3C stop Propagation');
	//	e.stopPropagation();
  //}
}

function cancel(e)
{
  if (e && e.preventDefault)
    e.preventDefault(); // DOM style
  return false; // IE style
}
/**************************
	WEB METHODS
***************************/
 
function SaveBlogRatingSuccess(resultData, contextVariables, methodName) {     
	var elRatingNum = contextVariables.elRatingNum;
	var currentRating = parseInt(elRatingNum.innerHTML);
	var newRating = (contextVariables.isPositive) ? currentRating + 1 : currentRating - 1;
    
	if (elRatingNum){
		if (elRatingNum.previousSibling && elRatingNum.previousSibling.nodeType == 3) elRatingNum.previousSibling.nodeValue = '';
		if (newRating > 0 ){
			if (elRatingNum.previousSibling){
				elRatingNum.previousSibling.nodeValue = '+';
			}
			else {
				var parent = getParentNode(elRatingNum);
				var textnode = document.createTextNode('+');
				parent.insertBefore(textnode,elRatingNum);
			}	 
		} 
		$(contextVariables.sibling).children("A").get(0).onclick = "";
		$(contextVariables.sibling).children("A").get(1).onclick = "";
		
		/*var container = getParentNode(contextVariables.sibling);
		if (container)	{
			var ratingLinks = getElementsByTag('A', container);
			if (ratingLinks.length > 0){
				ratingLinks[0].onclick = '';				
				ratingLinks[1].onclick = '';
			}
		}	*/		 
		elRatingNum.innerHTML = newRating;
	}
} 

function SaveBlogRatingFailed(error, ctx, methodName) { 
    //alert(error.get_message()); 
    // get_stackTrace(), get_message(), 
    // get_statusCode(), get_timedOut() 
    //get_exceptionType()
} 

function SaveBlogRating(isPositive, el, id, person){
	var elRating = null;
	var parent = $(el).parents(".pnlBlogActions").get(0);
	if (parent)	{
		var spanBlogRatingNum = $(parent.firstChild).children(".BlogRatingNum").get(0)
		if (spanBlogRatingNum) elRating = spanBlogRatingNum;
	}
	var contextVariables = { elRatingNum: elRating, isPositive: isPositive, sibling : parent};    
    BaseCorp.Web.WebServices.Blog.RatePost(isPositive, id, person, SaveBlogRatingSuccess, SaveBlogRatingFailed, contextVariables); 
}

function go2Exam(skillcode, hasviewed) {
	if (skillcode != "") {
		if (hasviewed == 'True') window.location = '/Index.aspx?tabid=45&sc=' + skillcode;
    else alert('You must review the online course before you can access the final exam.');
	}
}

function ExpandAnswer(el){
	var blindDiv = bcId(el).next().get();
	bcToggleBlind(blindDiv, 0.5);
}

function ExpandAllAnswers() {    
	$("#faqContainer div:hidden").each(function() {
		bcBlindDown(this, 0.5);
	});
}

function ContractAllAnswers() {
	$("#faqContainer a[class != 'displayLink']").next().each(function() {
		bcBlindUp(this, 0.5);
	});
}
