jQuery(document).ready(function() {jQuery(".lightbox").lightbox();});Liferay.Portlet.ready(function(portletId, jQueryObj) {});jQuery(document).last(function() {});/*Accordion JS*/ddaccordion.init({headerclass: "silverheader", //Shared CSS class name of headers groupcontentclass: "submenu", //Shared CSS class name of contents grouprevealtype: "click", //Reveal content when user clicks or onmouseover the header? Valid value: "click" or "mouseovercollapseprev: true, //Collapse previous content (so only one open at any time)? true/falsedefaultexpanded: [0], //index of content(s) open by default [index1, index2, etc] [] denotes no contentonemustopen: true, //Specify whether at least one header should be open always (so never all headers closed)animatedefault: false, //Should contents open by default be animated into view?persiststate: true, //persist state of opened contents within browser session?toggleclass: ["", "selected"], //Two CSS classes to be applied to the header when it's collapsed and expanded, respectively ["class1", "class2"]togglehtml: ["none", "", ""], //Additional HTML added to the header when it's collapsed and expanded, respectively  ["position", "html1", "html2"] (see docs)animatespeed: "fast", //speed of animation: "fast", "normal", or "slow"oninit:function(headers, expandedindices){ //custom code to run when headers have initalized//do nothing},onopenclose:function(header, index, state, isuseractivated){ //custom code to run whenever a header is opened or closed//do nothing}})jQuery(document).ready(function() {jQuery("div.panel_button").click(function(){jQuery("div#panel").animate({height: "70px"}).animate({height: "53px"}, "fast");jQuery("div.panel_button").toggle();});	   jQuery("div#hide_button").click(function(){jQuery("div#panel").animate({height: "0px"}, "fast");   });	});/*********start accessibilty***************/function toggle (id) {var post = document.getElementById(id);if (post.className=="portletshown") { post.className="portlethidden"; } else { post.className="portletshown"; }}function changeLocation (targetURL) {window.location = targetURL;}var size;var defaultFontSize = 12;var currentFontSize = size;	var Color;var defaultColor = 'white';var currentColor = Color;	var prefsLoaded = false;/*********besarkan saiz tulisan**************/	function setFontPlus(id){size = document.getElementById(id).style.fontSize;if(size == "" || size == null) {size = 13;} else {size = size.substr(0,2);}if(size < 15) {if(size == 14) {size = eval(size) + 2;} else {size = eval(size) + 1;}var fontSize = size + "px";document.getElementById(id).style.fontSize=fontSizechangecss('#nav li a','font-size',fontSize);changecss('.portlet-title','font-size',fontSize);changecss('.journal-content-article','font-size',fontSize);changecss('.content_font','font-size',fontSize);changecss('.title2_font','font-size',fontSize);changecss('#portlet-wrapper-101_INSTANCE_FTRI .journal-content-title,#portlet-wrapper-101_INSTANCE_xokA .journal-content-title,#portlet-wrapper-101_INSTANCE_xokA .portlet-journal-summary','font-size',fontSize);}}// end setFontPlus/*********kecilkan saiz tulisan*************/function setFontMinus(id){size = document.getElementById(id).style.fontSize;if(size == "" || size == null) {size = 11; } else {size = size.substr(0,2);} if(size > 11) {if(size == 17) {size = eval(size) - 2;} else {size = eval(size) - 1;}var fontSize = size + "px";document.getElementById(id).style.fontSize=fontSizechangecss('.content_font','font-size',fontSize);changecss('.title2_font','font-size',fontSize);	changecss('#nav li a','font-size',fontSize);changecss('.portlet-title','font-size',fontSize);changecss('.journal-content-article','font-size',fontSize);changecss('#portlet-wrapper-101_INSTANCE_FTRI .journal-content-title,#portlet-wrapper-101_INSTANCE_xokA .journal-content-title,#portlet-wrapper-101_INSTANCE_xokA .portlet-journal-summary','font-size',fontSize);}}/********kembalikan saiz huruf kepada asal************/function revertFontStyles(id){size = document.getElementById(id).style.fontSize;if(size == "" || size == null) {size = 12; } else {size = size.substr(0,2);} if(size > 10) {if(size == 16) {size = 12;} else {size = 12;}var fontSize = size + "px";document.getElementById(id).style.fontSize=fontSize}changecss('.portlet-title','font-size','12px');changecss('#portlet-wrapper-101_INSTANCE_FTRI .journal-content-title,#portlet-wrapper-101_INSTANCE_xokA .journal-content-title,#portlet-wrapper-101_INSTANCE_xokA .portlet-journal-summary','font-size','12px');changecss('#nav li a','font-size','12px');changecss('.journal-content-article','font-size','12px;');changecss('.content_font','font-size','12px;');changecss('.title2_font','font-size','12px;');}function createCookie(name,value,days) {  if (days) {    var date = new Date();    date.setTime(date.getTime()+(days*24*60*60*1000));    var expires = "; expires="+date.toGMTString();  }  else expires = "";  document.cookie = name+"="+value+expires+"; path=/";};function readCookie(name) {  var nameEQ = name + "=";  var ca = document.cookie.split(';');  for(var i=0;i < ca.length;i++) {    var c = ca[i];    while (c.charAt(0)==' ') c = c.substring(1,c.length);    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);  }  return null;};window.onload = setUserOptions;function setUserOptions(){if(!prefsLoaded){cookie = readCookie("fontSize");size = cookie ? cookie : 12;cookieColor = readCookie("color");Color = cookieColor ? cookieColor : 'white';if(Color=='red'){fontRed()}else if(Color=='blue'){fontBlue()}else if(Color=='green'){fontGreen()}else if(Color=='orange') {fontOrange()}else{revertStyles()}setFontSize(size);prefsLoaded = true;}}window.onunload = saveSettings;function saveSettings(){createCookie("color", Color, 365);  createCookie("fontSize", size, 365); }function setFontSize(fontSize){document.getElementById('wrapper').style.fontSize = fontSize + 'px';//alert (document.body.style.fontSize);};i/**********kembalikan warna asal*************/function revertStyles(){Color='';changecss('.portlet-title','color','white');changecss('#nav a','color','#ffffff');changecss('body','color','black');changecss('a','color','#5078AA');changecss('a:hover','color','#7EACD6');changecss('.title2_font','color','#0000FF');changecss('.content_font','color','#000000');changecss('.journal-content-title','color','#000000');changecss('.portlet-title','color','#ffffff');changecss('.applemenu div.pautan_staff','color','#ffffff');changecss('.applemenu div.intranet','color','#ffffff');changecss('.applemenu div.perkhidmatan_kami','color','#ffffff');changecss('.applemenu div.kalendar','color','#ffffff');changecss('.applemenu div.waktu_solat','color','#ffffff');changecss('.portlet-content','color','#000000');changecss('.footer','color','#000000');changecss('#footer a','color','#000099');changecss('p','color','#000000');changecss('div','color','#000000');changecss('div.topmenu','color','#ffffff');changecss('div.topmenu a','color','#ffffff');changecss('div#hijri_date_info','color','#000000');changecss('div#date_info','color','#000000');changecss('div#location','color','#000000');changecss('div#solat_info','color','#000000');changecss('div.language','color','#ffffff');changecss('ul li','color','#000000');changecss('ol ul li','color','#000000');changecss('span','color','#ffffff');changecss('portlet-content-container','color','#000000');changecss('input[type="text"], input[type="password"], input[type="file"],input[type="submit"], input[type="button"], input[type="reset"], select, textarea, .textarea','color','black');}function changecss(theClass,element,value) {//Last Updated on May 21, 2008//documentation for this script at//http://www.shawnolson.net/a/503/altering-css-class-attributes-with-javascript.html var cssRules; if (document.all) { cssRules = 'rules'; } else if (document.getElementById) { cssRules = 'cssRules'; } var added = false; for (var S = 0; S < document.styleSheets.length; S++){ for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) { if (document.styleSheets[S][cssRules][R].selectorText == theClass) { if(document.styleSheets[S][cssRules][R].style[element]){ document.styleSheets[S][cssRules][R].style[element] = value; added=true; break; } } } if(!added){ if(document.styleSheets[S].insertRule){ document.styleSheets[S].insertRule(theClass+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length); } else if (document.styleSheets[S].addRule) { document.styleSheets[S].addRule(theClass,element+': '+value+';'); } } }}// end function changecss/*************tukar warna tulisan kepada warna merah**********//****changecss('<nama class@ id>','<element>','<value>');*************/function fontRed(){Color='red';changecss('body','color',Color);changecss('a','color',Color);changecss('#nav a','color',Color);changecss('a:hover','color',Color);changecss('.title2_font','color',Color);changecss('.content_font','color',Color);changecss('.journal-content-title','color',Color);changecss('.portlet-title','color',Color);changecss('.applemenu div.pautan_staff','color',Color);changecss('.applemenu div.intranet','color',Color);changecss('.applemenu div.perkhidmatan_kami','color',Color);changecss('.applemenu div.kalendar','color',Color);changecss('.applemenu div.waktu_solat','color',Color);changecss('.portlet-content','color',Color);changecss('.footer','color',Color);changecss('#footer a','color',Color);changecss('p','color',Color);changecss('div','color',Color);changecss('div.topmenu','color',Color);changecss('div.topmenu a','color',Color);changecss('div#hijri_date_info','color',Color);changecss('div#date_info','color',Color);changecss('div#location','color',Color);changecss('div#solat_info','color',Color);changecss('div.language','color',Color);changecss('ul li','color',Color);changecss('ol ul li','color',Color);changecss('span','color',Color);changecss('portlet-content-container','color',Color);changecss('input[type="text"], input[type="password"], input[type="file"],input[type="submit"], input[type="button"], input[type="reset"], select, textarea, .textarea','color',Color);}/*************tukar warna tulisan kepada warna biru**********//****changecss('<nama class@ id>','<element>','<value>');*************/function fontBlue(){Color='blue';changecss('body','color',Color);changecss('a','color',Color);changecss('#nav a','color',Color);changecss('a:hover','color',Color);changecss('.title2_font','color',Color);changecss('.content_font','color',Color);changecss('.journal-content-title','color',Color);changecss('.portlet-title','color',Color);changecss('.applemenu div.pautan_staff','color',Color);changecss('.applemenu div.intranet','color',Color);changecss('.applemenu div.perkhidmatan_kami','color',Color);changecss('.applemenu div.kalendar','color',Color);changecss('.applemenu div.waktu_solat','color',Color);changecss('.portlet-content','color',Color);changecss('.footer','color',Color);changecss('#footer a','color',Color);changecss('p','color',Color);changecss('div','color',Color);changecss('div.topmenu','color',Color);changecss('div.topmenu a','color',Color);changecss('div#hijri_date_info','color',Color);changecss('div#date_info','color',Color);changecss('div#location','color',Color);changecss('div#solat_info','color',Color);changecss('div.language','color',Color);changecss('ul li','color',Color);changecss('ol ul li','color',Color);changecss('span','color',Color);changecss('portlet-content-container','color',Color);changecss('input[type="text"], input[type="password"], input[type="file"],input[type="submit"], input[type="button"], input[type="reset"], select, textarea, .textarea','color',Color);}/*************tukar warna tulisan kepada warna green **********//****changecss('<nama class@ id>','<element>','<value>');*************/function fontGreen(){Color='green';changecss('body','color',Color);changecss('a','color',Color);changecss('#nav a','color',Color);changecss('a:hover','color',Color);changecss('.title2_font','color',Color);changecss('.content_font','color',Color);changecss('.journal-content-title','color',Color);changecss('.portlet-title','color',Color);changecss('.applemenu div.pautan_staff','color',Color);changecss('.applemenu div.intranet','color',Color);changecss('.applemenu div.perkhidmatan_kami','color',Color);changecss('.applemenu div.kalendar','color',Color);changecss('.applemenu div.waktu_solat','color',Color);changecss('.portlet-content','color',Color);changecss('.footer','color',Color);changecss('#footer a','color',Color);changecss('p','color',Color);changecss('div','color',Color);changecss('div.topmenu','color',Color);changecss('div.topmenu a','color',Color);changecss('div#hijri_date_info','color',Color);changecss('div#date_info','color',Color);changecss('div#location','color',Color);changecss('div#solat_info','color',Color);changecss('div.language','color',Color);changecss('ul li','color',Color);changecss('ol ul li','color',Color);changecss('span','color',Color);changecss('portlet-content-container','color',Color);changecss('input[type="text"], input[type="password"], input[type="file"],input[type="submit"], input[type="button"], input[type="reset"], select, textarea, .textarea','color',Color);}/*************tukar warna tulisan kepada warna orange**********//****changecss('<nama class@ id>','<element>','<value>');*************/function fontOrange(){Color='orange';changecss('body','color',Color);changecss('a','color',Color);changecss('#nav a','color',Color);changecss('a:hover','color',Color);changecss('.title2_font','color',Color);changecss('.content_font','color',Color);changecss('.journal-content-title','color',Color);changecss('.portlet-title','color',Color);changecss('.applemenu div.pautan_staff','color',Color);changecss('.applemenu div.intranet','color',Color);changecss('.applemenu div.perkhidmatan_kami','color',Color);changecss('.applemenu div.kalendar','color',Color);changecss('.applemenu div.waktu_solat','color',Color);changecss('.portlet-content','color',Color);changecss('.footer','color',Color);changecss('#footer a','color',Color);changecss('p','color',Color);changecss('div','color',Color);changecss('div.topmenu','color',Color);changecss('div.topmenu a','color',Color);changecss('div#hijri_date_info','color',Color);changecss('div#date_info','color',Color);changecss('div#location','color',Color);changecss('div#solat_info','color',Color);changecss('div.language','color',Color);changecss('ul li','color',Color);changecss('ol ul li','color',Color);changecss('span','color',Color);changecss('portlet-content-container','color',Color);changecss('input[type="text"], input[type="password"], input[type="file"],input[type="submit"], input[type="button"], input[type="reset"], select, textarea, .textarea','color',Color);}/*******end accessibility************/// -------------------------------------------------------------------// Switch Content Script- By Dynamic Drive, available at: http://www.dynamicdrive.com// Created: Jan 5th, 2007// April 5th, 07: Added ability to persist content states by x days versus just session only// March 27th, 08': Added ability for certain headers to get its contents remotely from an external file via Ajax (2 variables below to customize)// -------------------------------------------------------------------var switchcontent_ajax_msg='<em>Loading Ajax content...</em>' //Customize message to show while fetching Ajax content (if applicable)var switchcontent_ajax_bustcache=true //Bust cache and refresh fetched Ajax contents when page is reloaded/ viewed again?function switchcontent(className, filtertag){this.className=classNamethis.collapsePrev=false //Default: Collapse previous content each timethis.persistType="none" //Default: Disable persistence//Limit type of element to scan for on page for switch contents if 2nd function parameter is defined, for efficiency sake (ie: "div")this.filter_content_tag=(typeof filtertag!="undefined")? filtertag.toLowerCase() : ""this.ajaxheaders={} //object to hold path to ajax content for corresponding header (ie: ajaxheaders["header1"]='external.htm')}switchcontent.prototype.setStatus=function(openHTML, closeHTML){ //PUBLIC: Set open/ closing HTML indicator. Optionalthis.statusOpen=openHTMLthis.statusClosed=closeHTML}switchcontent.prototype.setColor=function(openColor, closeColor){ //PUBLIC: Set open/ closing color of switch header. Optionalthis.colorOpen=openColorthis.colorClosed=closeColor}switchcontent.prototype.setPersist=function(bool, days){ //PUBLIC: Enable/ disable persistence. Default is false.if (bool==true){ //if enable persistenceif (typeof days=="undefined") //if session onlythis.persistType="session"else{ //else if non session persistentthis.persistType="days"this.persistDays=parseInt(days)}}elsethis.persistType="none"}switchcontent.prototype.collapsePrevious=function(bool){ //PUBLIC: Enable/ disable collapse previous content. Default is false.this.collapsePrev=bool}switchcontent.prototype.setContent=function(index, filepath){ //PUBLIC: Set path to ajax content for corresponding header based on header indexthis.ajaxheaders["header"+index]=filepath}switchcontent.prototype.sweepToggle=function(setting){ //PUBLIC: Expand/ contract all contents method. (Values: "contract"|"expand")if (typeof this.headers!="undefined" && this.headers.length>0){ //if there are switch contents defined on the pagefor (var i=0; i<this.headers.length; i++){if (setting=="expand")this.expandcontent(this.headers[i]) //expand each contentelse if (setting=="contract")this.contractcontent(this.headers[i]) //contract each content}}}switchcontent.prototype.defaultExpanded=function(){ //PUBLIC: Set contents that should be expanded by default when the page loads (ie: defaultExpanded(0,2,3)). Persistence if enabled overrides this setting.var expandedindices=[] //Array to hold indices (position) of content to be expanded by default//Loop through function arguments, and store each one within array//Two test conditions: 1) End of Arguments array, or 2) If "collapsePrev" is enabled, only the first entered index (as only 1 content can be expanded at any time)for (var i=0; (!this.collapsePrev && i<arguments.length) || (this.collapsePrev && i==0); i++)expandedindices[expandedindices.length]=arguments[i]this.expandedindices=expandedindices.join(",") //convert array into a string of the format: "0,2,3" for later parsing by script}//PRIVATE: Sets color of switch header.switchcontent.prototype.togglecolor=function(header, status){if (typeof this.colorOpen!="undefined")header.style.color=status}//PRIVATE: Sets status indicator HTML of switch header.switchcontent.prototype.togglestatus=function(header, status){if (typeof this.statusOpen!="undefined")header.firstChild.innerHTML=status}//PRIVATE: Contracts a content based on its corresponding header enteredswitchcontent.prototype.contractcontent=function(header){var innercontent=document.getElementById(header.id.replace("-title", "")) //Reference content container for this headerinnercontent.style.display="none"this.togglestatus(header, this.statusClosed)this.togglecolor(header, this.colorClosed)}//PRIVATE: Expands a content based on its corresponding header enteredswitchcontent.prototype.expandcontent=function(header){var innercontent=document.getElementById(header.id.replace("-title", ""))if (header.ajaxstatus=="waiting"){//if this is an Ajax header AND remote content hasn't already been fetchedswitchcontent.connect(header.ajaxfile, header)}innercontent.style.display="block"this.togglestatus(header, this.statusOpen)this.togglecolor(header, this.colorOpen)}// -------------------------------------------------------------------// PRIVATE: toggledisplay(header)- Toggles between a content being expanded or contracted// If "Collapse Previous" is enabled, contracts previous open content before expanding current// -------------------------------------------------------------------switchcontent.prototype.toggledisplay=function(header){var innercontent=document.getElementById(header.id.replace("-title", "")) //Reference content container for this headerif (innercontent.style.display=="block")this.contractcontent(header)else{this.expandcontent(header)if (this.collapsePrev && typeof this.prevHeader!="undefined" && this.prevHeader.id!=header.id) // If "Collapse Previous" is enabled and there's a previous open contentthis.contractcontent(this.prevHeader) //Contract that content first}if (this.collapsePrev)this.prevHeader=header //Set current expanded content as the next "Previous Content"}// -------------------------------------------------------------------// PRIVATE: collectElementbyClass()- Searches and stores all switch contents (based on shared class name) and their headers in two arrays// Each content should carry an unique ID, and for its header, an ID equal to "CONTENTID-TITLE"// -------------------------------------------------------------------switchcontent.prototype.collectElementbyClass=function(classname){ //Returns an array containing DIVs with specified classnamevar classnameRE=new RegExp("(^|\\s+)"+classname+"($|\\s+)", "i") //regular expression to screen for classname within elementthis.headers=[], this.innercontents=[]if (this.filter_content_tag!="") //If user defined limit type of element to scan for to a certain element (ie: "div" only)var allelements=document.getElementsByTagName(this.filter_content_tag)else //else, scan all elements on the page!var allelements=document.all? document.all : document.getElementsByTagName("*")for (var i=0; i<allelements.length; i++){if (typeof allelements[i].className=="string" && allelements[i].className.search(classnameRE)!=-1){if (document.getElementById(allelements[i].id+"-title")!=null){ //if header exists for this inner contentthis.headers[this.headers.length]=document.getElementById(allelements[i].id+"-title") //store reference to header intended for this inner contentthis.innercontents[this.innercontents.length]=allelements[i] //store reference to this inner content}}}}//PRIVATE: init()- Initializes Switch Content function (collapse contents by default unless exception is found)switchcontent.prototype.init=function(){var instanceOf=thisthis.collectElementbyClass(this.className) //Get all headers and its corresponding content based on shared class name of contentsif (this.headers.length==0) //If no headers are present (no contents to switch), just exitreturn//If admin has changed number of days to persist from current cookie records, reset persistence by deleting cookieif (this.persistType=="days" && (parseInt(switchcontent.getCookie(this.className+"_dtrack"))!=this.persistDays))switchcontent.setCookie(this.className+"_d", "", -1) //delete cookie// Get ids of open contents below. Four possible scenerios:// 1) Session only persistence is enabled AND corresponding cookie contains a non blank ("") string// 2) Regular (in days) persistence is enabled AND corresponding cookie contains a non blank ("") string// 3) If there are contents that should be enabled by default (even if persistence is enabled and this IS the first page load)// 4) Default to no contents should be expanded on page load ("" value)var opencontents_ids=(this.persistType=="session" && switchcontent.getCookie(this.className)!="")? ','+switchcontent.getCookie(this.className)+',' : (this.persistType=="days" && switchcontent.getCookie(this.className+"_d")!="")? ','+switchcontent.getCookie(this.className+"_d")+',' : (this.expandedindices)? ','+this.expandedindices+',' : ""for (var i=0; i<this.headers.length; i++){ //BEGIN FOR LOOPif (typeof this.ajaxheaders["header"+i]!="undefined"){ //if this is an Ajax headerthis.headers[i].ajaxstatus='waiting' //two possible statuses: "waiting" and "loaded"this.headers[i].ajaxfile=this.ajaxheaders["header"+i]}if (typeof this.statusOpen!="undefined") //If open/ closing HTML indicator is enabled/ setthis.headers[i].innerHTML='<span class="status"></span>'+this.headers[i].innerHTML //Add a span element to original HTML to store indicatorif (opencontents_ids.indexOf(','+i+',')!=-1){ //if index "i" exists within cookie string or default-enabled string (i=position of the content to expand)this.expandcontent(this.headers[i]) //Expand each content per stored indices (if ""Collapse Previous" is set, only one content)if (this.collapsePrev) //If "Collapse Previous" setthis.prevHeader=this.headers[i]  //Indicate the expanded content's corresponding header as the last clicked on header (for logic purpose)}else //else if no indices found in stored stringthis.contractcontent(this.headers[i]) //Contract each content by defaultthis.headers[i].onclick=function(){instanceOf.toggledisplay(this)}} //END FOR LOOPswitchcontent.dotask(window, function(){instanceOf.rememberpluscleanup()}, "unload") //Call persistence method onunload}// -------------------------------------------------------------------// PRIVATE: rememberpluscleanup()- Stores the indices of content that are expanded inside session only cookie// If "Collapse Previous" is enabled, only 1st expanded content index is stored// -------------------------------------------------------------------//Function to store index of opened ULs relative to other ULs in Tree into cookie:switchcontent.prototype.rememberpluscleanup=function(){//Define array to hold ids of open content that should be persisted//Default to just "none" to account for the case where no contents are open when user leaves the page (and persist that):var opencontents=new Array("none")for (var i=0; i<this.innercontents.length; i++){//If persistence enabled, content in question is expanded, and either "Collapse Previous" is disabled, or if enabled, this is the first expanded contentif (this.persistType!="none" && this.innercontents[i].style.display=="block" && (!this.collapsePrev || (this.collapsePrev && opencontents.length<2)))opencontents[opencontents.length]=i //save the index of the opened UL (relative to the entire list of ULs) as an array elementthis.headers[i].onclick=null //Cleanup code}if (opencontents.length>1) //If there exists open content to be persistedopencontents.shift() //Boot the "none" value from the array, so all it contains are the ids of the open contentsif (typeof this.statusOpen!="undefined")this.statusOpen=this.statusClosed=null //Cleanup codeif (this.persistType=="session") //if session only cookie setswitchcontent.setCookie(this.className, opencontents.join(",")) //populate cookie with indices of open contents: classname=1,2,3,etcelse if (this.persistType=="days" && typeof this.persistDays=="number"){ //if persistent cookie set insteadswitchcontent.setCookie(this.className+"_d", opencontents.join(","), this.persistDays) //populate cookie with indices of open contentsswitchcontent.setCookie(this.className+"_dtrack", this.persistDays, this.persistDays) //also remember number of days to persist (int)}}// -------------------------------------------------------------------// A few utility functions below:// -------------------------------------------------------------------switchcontent.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)var tasktype=(window.addEventListener)? tasktype : "on"+tasktypeif (target.addEventListener)target.addEventListener(tasktype, functionref, false)else if (target.attachEvent)target.attachEvent(tasktype, functionref)}switchcontent.connect=function(pageurl, header){var page_request = falsevar bustcacheparameter=""if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)try {page_request = new ActiveXObject("Msxml2.XMLHTTP")} catch (e){try{page_request = new ActiveXObject("Microsoft.XMLHTTP")}catch (e){}}}else if (window.XMLHttpRequest) // if Mozilla, Safari etcpage_request = new XMLHttpRequest()elsereturn falsepage_request.onreadystatechange=function(){switchcontent.loadpage(page_request, header)}if (switchcontent_ajax_bustcache) //if bust caching of external pagebustcacheparameter=(pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()page_request.open('GET', pageurl+bustcacheparameter, true)page_request.send(null)}switchcontent.loadpage=function(page_request, header){var innercontent=document.getElementById(header.id.replace("-title", "")) //Reference content container for this headerinnercontent.innerHTML=switchcontent_ajax_msg //Display "fetching page message"if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){innercontent.innerHTML=page_request.responseTextheader.ajaxstatus="loaded"}}switchcontent.getCookie=function(Name){ var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pairif (document.cookie.match(re)) //if cookie foundreturn document.cookie.match(re)[0].split("=")[1] //return its valuereturn ""}switchcontent.setCookie=function(name, value, days){if (typeof days!="undefined"){ //if set persistent cookievar expireDate = new Date()var expstring=expireDate.setDate(expireDate.getDate()+days)document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()}else //else if this is a session only cookiedocument.cookie = name+"="+value}/*** author Remy Sharp* url http://remysharp.com/tag/marquee*/(function ($) {    $.fn.marquee = function (klass) {        var newMarquee = [],            last = this.length;        // works out the left or right hand reset position, based on scroll        // behavior, current direction and new direction        function getReset(newDir, marqueeRedux, marqueeState) {            var behavior = marqueeState.behavior, width = marqueeState.width, dir = marqueeState.dir;            var r = 0;            if (behavior == 'alternate') {                r = newDir == 1 ? marqueeRedux[marqueeState.widthAxis] - (width*2) : width;            } else if (behavior == 'slide') {                if (newDir == -1) {                    r = dir == -1 ? marqueeRedux[marqueeState.widthAxis] : width;                } else {                    r = dir == -1 ? marqueeRedux[marqueeState.widthAxis] - (width*2) : 0;                }            } else {                r = newDir == -1 ? marqueeRedux[marqueeState.widthAxis] : 0;            }            return r;        }        // single "thread" animation        function animateMarquee() {            var i = newMarquee.length,                marqueeRedux = null,                $marqueeRedux = null,                marqueeState = {},                newMarqueeList = [],                hitedge = false;                            while (i--) {                marqueeRedux = newMarquee[i];                $marqueeRedux = $(marqueeRedux);                marqueeState = $marqueeRedux.data('marqueeState');                                if ($marqueeRedux.data('paused') !== true) {                    // TODO read scrollamount, dir, behavior, loops and last from data                    marqueeRedux[marqueeState.axis] += (marqueeState.scrollamount * marqueeState.dir);                    // only true if it's hit the end                    hitedge = marqueeState.dir == -1 ? marqueeRedux[marqueeState.axis] <= getReset(marqueeState.dir * -1, marqueeRedux, marqueeState) : marqueeRedux[marqueeState.axis] >= getReset(marqueeState.dir * -1, marqueeRedux, marqueeState);                                        if ((marqueeState.behavior == 'scroll' && marqueeState.last == marqueeRedux[marqueeState.axis]) || (marqueeState.behavior == 'alternate' && hitedge && marqueeState.last != -1) || (marqueeState.behavior == 'slide' && hitedge && marqueeState.last != -1)) {                                                if (marqueeState.behavior == 'alternate') {                            marqueeState.dir *= -1; // flip                        }                        marqueeState.last = -1;                        $marqueeRedux.trigger('stop');                        marqueeState.loops--;                        if (marqueeState.loops === 0) {                            if (marqueeState.behavior != 'slide') {                                marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState);                            } else {                                // corrects the position                                marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir * -1, marqueeRedux, marqueeState);                            }                            $marqueeRedux.trigger('end');                        } else {                            // keep this marquee going                            newMarqueeList.push(marqueeRedux);                            $marqueeRedux.trigger('start');                            marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState);                        }                    } else {                        newMarqueeList.push(marqueeRedux);                    }                    marqueeState.last = marqueeRedux[marqueeState.axis];                    // store updated state only if we ran an animation                    $marqueeRedux.data('marqueeState', marqueeState);                } else {                    // even though it's paused, keep it in the list                    newMarqueeList.push(marqueeRedux);                                    }            }            newMarquee = newMarqueeList;                        if (newMarquee.length) {                setTimeout(animateMarquee, 25);            }                    }                // TODO consider whether using .html() in the wrapping process could lead to loosing predefined events...        this.each(function (i) {            var $marquee = $(this),                width = $marquee.attr('width') || $marquee.width(),                height = $marquee.attr('height') || $marquee.height(),                $marqueeRedux = $marquee.after('<div ' + (klass ? 'class="' + klass + '" ' : '') + 'style="display: block-inline; width: ' + width + 'px; height: ' + height + 'px; overflow: hidden;"><div style="float: left; white-space: nowrap;">' + $marquee.html() + '</div></div>').next(),                marqueeRedux = $marqueeRedux.get(0),                hitedge = 0,                direction = ($marquee.attr('direction') || 'left').toLowerCase(),                marqueeState = {                    dir : /down|right/.test(direction) ? -1 : 1,                    axis : /left|right/.test(direction) ? 'scrollLeft' : 'scrollTop',                    widthAxis : /left|right/.test(direction) ? 'scrollWidth' : 'scrollHeight',                    last : -1,                    loops : $marquee.attr('loop') || -1,                    scrollamount : $marquee.attr('scrollamount') || this.scrollAmount || 2,                    behavior : ($marquee.attr('behavior') || 'scroll').toLowerCase(),                    width : /left|right/.test(direction) ? width : height                };                        // corrects a bug in Firefox - the default loops for slide is -1            if ($marquee.attr('loop') == -1 && marqueeState.behavior == 'slide') {                marqueeState.loops = 1;            }            $marquee.remove();                        // add padding            if (/left|right/.test(direction)) {                $marqueeRedux.find('> div').css('padding', '0 ' + width + 'px');            } else {                $marqueeRedux.find('> div').css('padding', height + 'px 0');            }                        // events            $marqueeRedux.bind('stop', function () {                $marqueeRedux.data('paused', true);            }).bind('pause', function () {                $marqueeRedux.data('paused', true);            }).bind('start', function () {                $marqueeRedux.data('paused', false);            }).bind('unpause', function () {                $marqueeRedux.data('paused', false);            }).data('marqueeState', marqueeState); // finally: store the state                        // todo - rerender event allowing us to do an ajax hit and redraw the marquee            newMarquee.push(marqueeRedux);            marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState);            $marqueeRedux.trigger('start');                        // on the very last marquee, trigger the animation            if (i+1 == last) {                animateMarquee();            }        });                    return $(newMarquee);    };}(jQuery));