// JavaScript Document

function showhide(id){
if (document.getElementById){
obj = document.getElementById(id);
if (obj.style.display == "none"){
obj.style.display = "";
} else {
obj.style.display = "none";
}
}
}

//POP UPS


function popGeneral(url, width, height)
    {
        x = window.open(url,"details","scrollbars=no,left=0,top=0,width=" + width + ",height=" + height + ",resizable=no");
    }
    
    function popSmall(url)

    {

        x = window.open(url,"details","scrollbars=no,screenX=0,left=0,screenY=0,top=0,width=320,height=438,resizable=no");

    }

function popLarge(url)

    {

        x = window.open(url,"details","scrollbars=yes,screenX=0,left=0,screenY=0,top=0,width=600,height=500,resizable=no");

    }

function popXLarge(url)

    {

        x = window.open(url,"details","scrollbars=yes,screenX=0,left=0,screenY=0,top=0,width=760,height=550,resizable=no");

    }

function popPR(url)

    {

        x = window.open(url,"details","scrollbars=yes,screenX=0,left=0,screenY=0,top=0,width=555,height=675,resizable=no");

    }

function popProdBlock(url)

        {

            x = window.open(url,"details","scrollbars=no,screenX=0,left=0,screenY=0,top=0,width=450,height=450,resizable=no");

    }

function popThanks(url)

    {

        x = window.open(url,"details","scrollbars=yes,screenX=0,left=0,screenY=0,top=0,width=616,height=400,resizable=no");

    }

	function popText(url)

    {

        x = window.open(url,"details","scrollbars=yes,screenX=0,left=0,screenY=0,top=0,width=501,height=318,resizable=no");

    }

function popItCustom(url, width, height)

    {

        x = window.open(url,"details","scrollbars=yes,left=0,top=0,width=" + width + ",height=" + height + ",resizable=yes");

    }

 

function openBrWindow(theURL) 

{ 

var winName = "Popup";

var features = "scrollbars=yes,width=400,height=300";



  window.open(theURL,winName,features);

}



function close_window() {

    window.close();

}

// END



// Local Nav Expand & Collapse 



function toggleFirstSection(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;



if(state != null && state == "none")

 {

 document.getElementById(divObj1).className = "firstSectionOpen";

 document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

	document.getElementById(divObj1).className = "firstSectionClose";

	document.getElementById(divObj2).style.display = "none";

  }

}



function toggleSecondSection(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;

 

 if(state != null && state == "none") 

 {

  document.getElementById(divObj1).className = "secondSectionOpen";

  document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

   document.getElementById(divObj1).className = "secondSectionClose";

   document.getElementById(divObj2).style.display = "none";

  }

}



function toggleThirdSection(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;

 

 if(state != null && state == "none") 

 {

  document.getElementById(divObj1).className = "thirdSectionOpen";

  document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

   document.getElementById(divObj1).className = "thirdSectionClose";

   document.getElementById(divObj2).style.display = "none";

  }

}

//END



//Table Data Sort



addEvent(window, "load", sortables_init);



var SORT_COLUMN_INDEX;



function sortables_init() {

    // Find all tables with class sortable and make them sortable

    if (!document.getElementsByTagName) return;

    tbls = document.getElementsByTagName("table");

    for (ti=0;ti<tbls.length;ti++) {

        thisTbl = tbls[ti];

        if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {

            //initTable(thisTbl.id);

            ts_makeSortable(thisTbl);

        }

    }

}



function ts_makeSortable(table) {

    if (table.rows && table.rows.length > 0) {

        var firstRow = table.rows[0];

    }

    if (!firstRow) return;

    

    // We have a first row: assume it's the header, and make its contents clickable links

    for (var i=0;i<firstRow.cells.length;i++) {

        var cell = firstRow.cells[i];

        var txt = ts_getInnerText(cell);

        cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;">'+txt+'<span class="sortarrow"></span></a>';

    }

}



function ts_getInnerText(el) {

	if (typeof el == "string") return el;

	if (typeof el == "undefined") { return el };

	if (el.innerText) return el.innerText;	//Not needed but it is faster

	var str = "";

	

	var cs = el.childNodes;

	var l = cs.length;

	for (var i = 0; i < l; i++) {

		switch (cs[i].nodeType) {

			case 1: //ELEMENT_NODE

				str += ts_getInnerText(cs[i]);

				break;

			case 3:	//TEXT_NODE

				str += cs[i].nodeValue;

				break;

		}

	}

	return str;

}



function ts_resortTable(lnk) {

    // get the span

    var span;

    for (var ci=0;ci<lnk.childNodes.length;ci++) {

        if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];

    }

    var spantext = ts_getInnerText(span);

    var td = lnk.parentNode;

    var column = td.cellIndex;

    var table = getParent(td,'TABLE');

    

    // Work out a type for the column

    if (table.rows.length <= 1) return;

    var itm = ts_getInnerText(table.rows[1].cells[column]);

    sortfn = ts_sort_caseinsensitive;

    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;

    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;

    if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;

    if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;

    SORT_COLUMN_INDEX = column;

    var firstRow = new Array();

    var newRows = new Array();

    for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }

    for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }



    newRows.sort(sortfn);



    if (span.getAttribute("sortdir") == 'down') {

        newRows.reverse();

        span.setAttribute('sortdir','up');

    } else {

       span.setAttribute('sortdir','down');

    }

    

    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones

    // don't do sortbottom rows

    for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}

    // do sortbottom rows only

    for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}

    

    // Delete any other arrows there may be showing

    var allspans = document.getElementsByTagName("span");

    for (var ci=0;ci<allspans.length;ci++) {

        if (allspans[ci].className == 'sortarrow') {

            if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?

                allspans[ci].innerHTML = '';

            }

        }

    }

        

    

}



function getParent(el, pTagName) {

	if (el == null) return null;

	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase

		return el;

	else

		return getParent(el.parentNode, pTagName);

}

function ts_sort_date(a,b) {

    // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX

    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);

    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);

    if (aa.length == 10) {

        dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);

    } else {

        yr = aa.substr(6,2);

        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }

        dt1 = yr+aa.substr(3,2)+aa.substr(0,2);

    }

    if (bb.length == 10) {

        dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);

    } else {

        yr = bb.substr(6,2);

        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }

        dt2 = yr+bb.substr(3,2)+bb.substr(0,2);

    }

    if (dt1==dt2) return 0;

    if (dt1<dt2) return -1;

    return 1;

}



function ts_sort_currency(a,b) { 

    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');

    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');

    return parseFloat(aa) - parseFloat(bb);

}



function ts_sort_numeric(a,b) { 

    aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));

    if (isNaN(aa)) aa = 0;

    bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); 

    if (isNaN(bb)) bb = 0;

    return aa-bb;

}



function ts_sort_caseinsensitive(a,b) {

    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();

    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();

    if (aa==bb) return 0;

    if (aa<bb) return -1;

    return 1;

}



function ts_sort_default(a,b) {

    aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);

    bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);

    if (aa==bb) return 0;

    if (aa<bb) return -1;

    return 1;

}





function addEvent(elm, evType, fn, useCapture)

// addEvent and removeEvent

// cross-browser event handling for IE5+,  NS6 and Mozilla

{

  if (elm.addEventListener){

    elm.addEventListener(evType, fn, useCapture);

    return true;

  } else if (elm.attachEvent){

    var r = elm.attachEvent("on"+evType, fn);

    return r;

  } else {

    alert("Handler could not be removed");

  }

} 



//END








//END

// Open and Close section 



function toggleFirstSection(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;



if(state != null && state == "none")

 {

 document.getElementById(divObj1).className = "firstSectionOpen";

 document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

	document.getElementById(divObj1).className = "firstSectionClose";

	document.getElementById(divObj2).style.display = "none";

  }

}



function toggleSecondSection(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;

 

 if(state != null && state == "none") 

 {

  document.getElementById(divObj1).className = "secondSectionOpen";

  document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

   document.getElementById(divObj1).className = "secondSectionClose";

   document.getElementById(divObj2).style.display = "none";

  }

}



function toggleThirdSection(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;

 

 if(state != null && state == "none") 

 {

  document.getElementById(divObj1).className = "thirdSectionOpen";

  document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

   document.getElementById(divObj1).className = "thirdSectionClose";

   document.getElementById(divObj2).style.display = "none";

  }

}

function toggleSectionA(divObj1,divObj2) {



state = document.getElementById(divObj2).style.display;



if(state != null && state == "none")

 {

 document.getElementById(divObj1).className = "sectionAOpen";

 document.getElementById(divObj2).style.display = "block";

  } 

  else 

  {

	document.getElementById(divObj1).className = "sectionAClose";

	document.getElementById(divObj2).style.display = "none";

  }

}

//END
// -------------------------------------------------------------------
// Switch Content Script- By Dynamic Drive, available at: http://www.dynamicdrive.com
// Last updated: Jan 5th, 2007
// -------------------------------------------------------------------

function switchcontent(className){
this.className=className
this.collapsePrev=false //Default: Collapse previous content each time
this.enablePersist=false //Default: Disable session only 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=(arguments.length==2)? arguments[1].toLowerCase() : ""
}

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){ //PUBLIC: Enable/ disable persistence. Default is true.
this.enablePersist=bool
}

switchcontent.prototype.collapsePrevious=function(bool){ //PUBLIC: Enable/ disable collapse previous content. Default is false.
this.collapsePrev=bool
}


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
}
}
}


// -------------------------------------------------------------------
// PUBLIC: defaultExpanded(indices_of_contents)- Set contents that should be expanded by default when the page loads.
// Note that the persistence feature (if enabled) overrides this setting.
// Pass in the position of the contents relative to the rest of the contents ie: defaultExpanded(0,2,3) would expand the 1st, 3rd, and 4th contents by default
// -------------------------------------------------------------------

switchcontent.prototype.defaultExpanded=function(){
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 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", ""))
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 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) return //If no headers are present (no contents to switch), just exit
var opencontents_ids=(this.enablePersist)? ','+switchcontent.getCookie(this.className)+',' : (!this.enablePersist)? ','+this.expandedindices+',' : ""
for (var i=0; i<this.headers.length; i++){ //BEGIN FOR LOOP (1)
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){ //(2) 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)}
}
if (this.enablePersist)
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
// -------------------------------------------------------------------

switchcontent.prototype.rememberpluscleanup=function(){ //store index of opened ULs relative to other ULs in Tree into cookie
var opencontents=new Array()
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.enablePersist && this.innercontents[i].style.display=="block" && (!this.collapsePrev || (this.collapsePrev && opencontents.length<1)))
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 (typeof this.statusOpen!="undefined") //Cleanup code
this.statusOpen=this.statusClosed=null //Cleanup code
switchcontent.setCookie(this.className, opencontents.join(",")) //populate cookie with indices of open contents: classname=1,2,3,etc
}


// -------------------------------------------------------------------
// 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.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){
document.cookie = name+"="+value
}
