function appendinputTypeClasses(){ 
 if (!document.getElementsByTagName ) 
  return; 
 var inputs = document.getElementsByTagName('input'); 
 var inputLen = inputs.length; 
 for ( i=0;i<inputLen;i++ ) { 
  if ( inputs[i].getAttribute('type') ) 
   inputs[i].className += ' '+inputs[i].getAttribute('type'); 
 } 
}

function share(s){
	with (document.location) {var u=encodeURIComponent(protocol+"//"+host+pathname)};
	var t=encodeURIComponent(document.title);var o='toolbar=0,status=0,resizable=1,scrollbars=1,width=675,height=436';
	var d=document.getElementsByName('description');
	switch (s) {
		case 'fb':window.open('http://www.facebook.com/sharer.php?u='+u+'&t='+t,'sharer',o);break;
		case 'ds':window.open('http://delicious.com/save?v=5&noui&jump=close&url='+u+'&title='+t, 'delicious',o);break;
		case 'su':window.open('http://www.stumbleupon.com/submit?url='+u+'&title='+t, 'stumbleupon',o);break;
		case 'mx':window.open('http://www.mixx.com/submit?page_url='+u, 'mixx',o);break;
		case 'dg':window.open('http://digg.com/submit?url='+u+'&title='+t+'&bodytext='+encodeURIComponent(d[0].content)+'&media=news&topic=educational', 'digg',o);break;
		case 'go':window.open('http://www.google.com/bookmarks/mark?op=edit&bkmk='+u+'&title='+t, 'google',o);break;
		case 'rd':window.open('http://www.reddit.com/submit?url='+u, 'reddit',o);break;
		case 'em':window.open('/email_friend.php?url='+u+'&title='+t, 'email',o);break;
	};
	return false;}

function sbar_load(li){
	var sbar_c = document.createElement('div'); sbar_c.id="social_cont"; document.body.appendChild(sbar_c);
	var sbar = document.createElement('div'); sbar.id="social"; sbar_c.appendChild(sbar);
	var x=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
	x.onreadystatechange=function(){
		if(x.readyState==4&&x.status==200){
			sbar.innerHTML=x.responseText;
			sbar.style.backgroundImage = 'none';
			var sbtn = document.getElementById( "social_toggle_btn" );
			var page = (location.href);
			page = page.substring(page.lastIndexOf('/') + 1);
			if((page=="index.php"||page=="")&&!li){
				sbtn.title='close';
			} else {
				sbtn.title='close';
			};
			sbar_toggle(sbtn);
			//sbar.style.width="auto";
		}
	};
	x.open('GET','/sociable.html',1); x.send(null)
}

function spop_load(s){
	var o=document.getElementById( "social_"+s );
	o.style.backgroundImage='url(/images/sociable/soc-loader.gif)';
	var sbar_c=document.getElementById("social_cont");
	var x=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
	x.onreadystatechange=function(){
		if(x.readyState==4&&x.status==200){
			sbar_c.innerHTML+=x.responseText;
			setTimeout(function(){
				var o=document.getElementById( "social_"+s );
				o.style.backgroundImage='url(/images/sociable/'+s+'.jpg)';
				spop_pop(s)
			},1000);
		}
	};
	x.open('GET','/sociable-'+s+'.html',1); x.send(null)
}

var si,st,pi;
function sbar_size(s,w,d,i){
	var ow=s.offsetWidth;
	if((ow-w)*d>=-8){
		i.style.width = "auto";
		s.style.width = "auto";
		clearInterval(si);
	} else {
		s.style.width=ow+Math.ceil((w-ow)/3)+'px';
	}
}

function sbar_toggle(obj){
	var sbar = document.getElementById("social");
	var sbar_i = document.getElementById("social_bar");
	var parent, sbar_c, sbar_o;
	parent = obj.parentNode;
	sbar_c = document.getElementById( "social_closed" );
	sbar_o = document.getElementById( "social_opened" );
	clearInterval(si);
	sbar.style.width=sbar.offsetWidth+'px';
	sbar_i.style.width='632px';
	if (obj.title == "close"){
		obj.title = "open";
		parent.style.backgroundPosition = "right center";
		spop_pop('c');
		sbar_c.style.display = "block";
		sbar_o.style.display = "none";
		sbar_i.style.width=parent.offsetWidth+sbar_c.offsetWidth+15+'px';
		si=setInterval(function(){sbar_size(sbar,90,-1,sbar_i);}, 20);
	} else {
		obj.title = "close";
		parent.style.backgroundPosition = "left center";
		//sbar_o.style.width=sbar_c.offsetWidth+'px';
		sbar_c.style.display = "none";
		sbar_o.style.display = "block";
		sbar_i.style.width=parent.offsetWidth+sbar_o.offsetWidth+20+'px';
		si=setInterval(function(){sbar_size(sbar,582,1,sbar_i);}, 20);
	}
}

function spop_pop(s){
	s=s.substr(0,1);
	clearTimeout(st);
	var spop;
	if(s=='c'){ // clear all
		spop=document.getElementById('social_npopup');
		spop==null||spop.style.bottom=='-170px'?s='s':s='n'
	} else { // remove other popup if it exists
		s=='s'?spop=document.getElementById('social_npopup'):spop=document.getElementById('social_spopup');
		if(spop!==null){spop.style.bottom='-170px'; spop.style.display='none';spop.style.right='auto'};
	}
	spop = document.getElementById('social_'+s+'popup');
	var sbtn = document.getElementById( "social_toggle_btn" );
	if(spop==null){
		if(sbtn.title=='close'){
			s=='s'?s='share':s='newsletter';
			spop_load(s)
		}
	} else {
		with (spop.style) {var ob=Number(bottom.substr(0,bottom.length-2))};
		if(ob<-144&&sbtn.title=='close'){
			clearInterval(pi);
			if(s=='n') spop.style.right='8px';
			spop.style.bottom='-144px';spop.style.display='block';
			pi=setInterval(function(){spop_pos(spop,31)},20);
		} else {
			if(ob==31){
				spop.style.opacity=1;
				clearInterval(pi);
				pi=setInterval(function(){spop_fade(spop)},20);
			}
		}
	}
}

function spop_pos(s,b){
	with (s.style) {var ob=Number(bottom.substr(0,bottom.length-2))};
	if(b-ob<=0) clearInterval(pi);
	else s.style.bottom=ob+Math.ceil((b-ob)/5)+'px';
}

function spop_fade(s){
	var ot=Math.round(s.style.opacity*100);
	if(ot<5){
		clearInterval(pi);
		s.style.bottom='-170px'; s.style.display='none';
		s.style.opacity=1; s.style.filter='alpha(opacity=100)'
	} else {
		var t=ot-Math.ceil(ot/5);
		s.style.opacity=t/100; s.style.filter='alpha(opacity='+t+')'
	}
}

function spop_wait(s){
	clearTimeout(st);
	st=setTimeout(function(){spop_pop(s)},2000);
}

function LoadImage(imageName,imageFile){
  if (!document.images) return;
  document.images[imageName].src = imageFile;
}

function inputFocus(m,o,e){
	if(o.value==m&&e){o.value='';o.style.color='#0A0202';o.style.fontWeight='normal'}
	if(o.value==''&&!e){o.style.color='dimgray';o.style.fontWeight='normal';o.value=m}
}
function showToggle(obj){
    var parent;
    var toggleDetails;
    
    // changes the image state 
    if (obj.className == "toggle")
        obj.className = "toggleSelected"; 
    else 
        obj.className = "toggle";

	// for interface header collapse
	if (obj.innerHTML=="Lecture Description")
		document.getElementById('flash_hdr').style.height=(obj.className=="toggle")?'0px':'auto';
    
    // shows the toggleDetails 
    parent = obj.parentNode;
    for (var item in parent.childNodes)
    {
        if (parent.childNodes[item].className == "toggleDetails")
        {
            toggleDetails = parent.childNodes[item];
            if (toggleDetails.style.display == "none" || toggleDetails.style.display == "")
            {
                toggleDetails.style.display = "block";
            }
            else
            {
                toggleDetails.style.display = "none";
            }
            
            return; 
        }
    }
}

function CheckForm1(f) {
	var email_re = /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;
	if (!email_re.test(f.email.value)) {
		alert("Please enter your valid email address.");
		f.email.focus();
		return false;
	}
	return true;
}

// Flash Player Version Detection - Rev 1.6
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			} else if (versionRevision[0] == "b") {
				versionRevision = versionRevision.substring(1);
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  var qIndex = src.indexOf('?');
  if ( qIndex != -1)
  {
    // Add the extention (if needed) before the query params
    var path = src.substring(0, qIndex);
    if (path.length >= ext.length && path.lastIndexOf(ext) == (path.length - ext.length))
      return src;
    else
      return src.replace(/\?/, ext+'?'); 
  }
  else
  {
    // Add the extension (if needed) to the end of the URL
    if (src.length >= ext.length && src.lastIndexOf(ext) == (src.length - ext.length))
      return src;  // Already have extension
    else
      return src + ext;
  }
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
    var str = '';
    if (isIE && isWin && !isOpera)
    {
  		str += '<object ';
  		for (var i in objAttrs)
  			str += i + '="' + objAttrs[i] + '" ';
  		str += '>';
  		for (var i in params)
  			str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  		str += '</object>';
    } else {
  		str += '<embed ';
  		for (var i in embedAttrs)
  			str += i + '="' + embedAttrs[i] + '" ';
  		str += '> </embed>';
    }

    document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "id":
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

// This function returns the appropriate reference,
// depending on the browser.
function getFlexApp(appName)
{
	if (navigator.appName.indexOf ("Microsoft") !=-1)
	{
	   return window[appName];
	}
	else
	{
	   return document[appName];
	}
}
