﻿function CufonFontReplacementCall()
{
	Cufon.replace('.FlynnFontA, h1', { hover: true, fontFamily: "FlynnA" });
	Cufon.replace('.FlynnFontB', { hover: true, fontFamily: "FlynnB" });
	//Cufon.replace('.anylinkcss a', { hover: true, fontFamily: "FlynnB" });
}
function GoCufon()
{
	RemoveCssClass($(".NavigationItems")[0], "NoScriptToggle");
	RemoveCssClass($(".NavigationItems")[0], "Invisible");
	Cufon.now();
	Cufon.DOM.ready();

}
function fixSubMenu()
{
	var i = 0;
	var links = $(".SecondaryMenu a");
	for (var i = 0; i < links.length; i++)
	{

		if (links[i].previousSibling.tagName.toLowerCase() == "span" && links[i].previousSibling.className.toLowerCase().indexOf("rtsp") == -1)
			links[i].className += " ExpandableLink";
	}
}
function getPageFileName()
{
	return location.href.substring(location.href.lastIndexOf('/') + 1);
}
function getSelectedDropDownValue(ddl)
{

	if (existsDefined(ddl.length) && !existsDefined(ddl.options))
		ddl = document.getElementById(ddl);

	return ddl.options[ddl.selectedIndex].value;
}
function subNavigationFix(navID, parNavID, SelectedCSS)
{
	var divs = document.getElementsByTagName("div");
	var did = parNavID;
	var sn;
	var mn;
	for (var i = 0; i < divs.length; i++)
	{
		if (divs[i].id.substring(divs[i].id.length - navID.length) == navID)
		{
			sn = divs[i];

		}
		else if (divs[i].id.substring(divs[i].id.length - did.length) == did)
		{
			mn = divs[i];
		}
	}
	var lnks = mn.getElementsByTagName('a');

	for (var j = 0; j < lnks.length; j++)
	{

		if (lnks[j].className.indexOf(SelectedCSS) != -1)
		{

			var newClass = lnks[j].firstChild.innerHTML.replace(" ", "");


			sn.className += " " + newClass;
		}
	}
}
function fixIeFlash()
{
	objects = document.getElementsByTagName("object");
	for (var i = 0; i < objects.length; i++)
	{
		objects[i].outerHTML = objects[i].outerHTML;
	}
}
function toggleVisibility(sender, el)
{

	var sendere = null;

	sendere = sender;

	if (el.length != undefined)
		el = document.getElementById(el);

	ele = el;

	if (ele.className.indexOf("Hidden") != -1)
		showElement(sendere, ele);
	else
		hideElement(sendere, ele);

}
function showElement(sender, el)
{
	if (el.length != undefined)
		el = document.getElementById(el);
	if (existsDefined(el))
	{
		el.className = el.className.replace("Hidden", "");
		if (existsDefined(sender))
			sender.className += " Expanded";
	}
}
function hideElement(sender, el)
{
	if (el.length != undefined)
		el = document.getElementById(el);
	if (existsDefined(el))
	{
		if (el.className.indexOf("Hidden") == -1)
		{
			el.className += " Hidden";
			if (existsDefined(sender))
				sender.className = sender.className.replace("Expanded", "");
		}

	}
}

function existsDefined(i, de)
{
	if (de == null || de == "")
		de = false;
	if (de)
		alert(typeof i);
	if (typeof i == "undefined" || i == null)
		return false;
	else
		return true;
}
var tabList = new Array();
function harvestTabs(prefix, tagtype)
{

	var x = document.getElementsByTagName(tagtype);
	var y = new Array();
	for (var i = 0; i < x.length; i++)
	{
		if (x[i].id.indexOf(prefix) != -1)
			y.push(x[i]);
	}
	tabList = y;
}
function hideTabs()
{
	var x = tabList;
	for (var j = 0; j < x.length; j++)
	{
		x[j].className = x[j].className.indexOf("Hidden") == -1 ? x[j].className + " Hidden" : x[j].className;
	}
}
function ProjectsPagerFix(id)
{
	var linkWidth = 23;
	var pager = document.getElementById(id);
	pager.style.width = (pager.childNodes.length * linkWidth + 2) + "px";
}
function resize_elements(items)
{
	var recs = new Array();
	for (i = 0; i < items.length; i++)
	{
		recs[i] = /*document.getElementById(*/items[i]/*);*/
	}

	var max = 0;



	for (i = 0; i < recs.length; i++)
	{
		if (existsDefined(recs[i]))
		{
			recs[i].style.height = "";

			if (recs[i].offsetHeight > max)
			{
				max = recs[i].offsetHeight;
			}
		}
	}
	for (i = 0; i < recs.length; i++)
	{

		if (existsDefined(recs[i]))
		{

			recs[i].style.height = max + "px";
		}
	}


}
function fixPager(divid)
{
	var btnPrev = $('.ProjectsPreviousButton');
	var divPager = $('.ProjectsPager');
	var btnNext = $('.ProjectsNextButton');

	var div = document.getElementById(divid);

	var width = parseInt(btnPrev.width()) + parseInt(divPager.width()) + parseInt(btnNext.width()) + getXMargins(btnPrev) + getXMargins(btnNext) + getXMargins(divPager);

	div.style.width = width + "px";

}
function getXMargins(el)
{

	var left = el.css("marginLeft") != "auto" ? parseInt(el.css("marginLeft")) : 0;
	var right = el.css("marginRight") != "auto" ? parseInt(el.css("marginRight")) : 0;
	return left + right;

}
function get_query_string(qstr, qs, esc)
{
	var i, pos, argname, argvalue, queryString, pairs;
	queryString = !existsDefined(qs) ? location.href.substring(location.href.indexOf("?") + 1) : qs;
	if (!existsDefined(esc))
		esc = true;
	pairs = queryString.split("&");
	for (i = 0; i < pairs.length; i++)
	{
		pos = pairs[i].indexOf('=');
		if (pos == -1)
		{
			continue;
		}
		argname = pairs[i].substring(0, pos);
		argvalue = pairs[i].substring(pos + 1);
		if (argname == qstr)
		{
			if (!esc)
				return argvalue;
			else
				return unescape(argvalue.replace(/\+/g, " "));
		}
	}
	return "";
}
function redirect(url)
{
	window.location = url;
}
function showSpecificItems(sender, enableDivID, otherDiv)
{
	var divSpecific = document.getElementById("divSpecific");
	var divEnable = document.getElementById(enableDivID);
	var divOther = document.getElementById(otherDiv);

	var ParentHidden = true;

	if (divSpecific.className.indexOf("Hidden") == -1)
		ParentHidden = false;

	if (ParentHidden)
	{
		showElement(sender, divSpecific);
	}

	toggleVisibility(sender, divEnable);

	if (divEnable.className.indexOf("Hidden") != -1)
	{
		if (divOther.className.indexOf("Hidden") != -1)
		{
			hideElement(sender, divSpecific);
		}
	}
}
function FeaturedProjectsRedirect()
{
	if (get_query_string("Redirected") != "true")
		redirect(window.location + "?Mode=Featured&Redirected=true");
}
function NextPicture()
{
	ChoosePicture(curPic + 1);
}
function PreviousPicture()
{
	ChoosePicture(curPic - 1);
}
var curPic = 1;
function ChoosePicture(index)
{
	//imgThumbs
	//nextPictureLink
	//prevPictureLink
	//downloadLink
	//featureImage

	try
	{

		var container = document.getElementById("divSingleProjectImages");

		if (index > imgThumbs.length)
			index = 1;
		if (index < 1)
			index = imgThumbs.length;




		featureImage.src = imgThumbs[index - 1].src;

		container.style.background = "url(" + imgThumbs[index - 1].getAttribute("rel") + ") center center";

		downloadLink.onclick = function() { window.open(imgThumbs[index - 1].getAttribute("rel2")); }
		curPic = index;
	}
	catch (ex)
	{

	}
}
function ProjectsRedirect(sender)
{
	//var ProjectUrl
	//var Query
	//var CurrentServices

	var newURL = ProjectUrl ? ProjectUrl : "";
	var newVal = "";

	var container = document.getElementById("trTopChecks");
	var checks = container.getElementsByTagName("input");

	for (var i = 0; i < checks.length; i++)
	{
		if (checks[i].checked)
			newVal += (i + 1).toString() + "/";
	}

	newVal = newVal.substring(0, newVal.length - 1);

	if (Query)
	{
		if (Query.indexOf("Services=") != -1)
		{
			Query = Query.replace("Services=" + CurrentServices, "Services=" + newVal);
		}
		else if (Query.indexOf("?") != -1)
		{
			Query += "&Services=" + newVal;
		}
		else
		{
			Query += "&Services=" + newVal;
		}
	}

	// if (query.IndexOf("Services=") != -1)
	//        query = query.Replace("Services=" + HttpContext.Current.Request.QueryString["Services"].ToString(), "Services=" + newstr);
	//    else
	//        query += "Services=" + newstr;

	//    url = url + query;
	newURL += Query;
	redirect(newURL);

}

/* New from Rob Nitti, who credits 
* http://bytes.com/groups/javascript/145532-replace-french-characters-form-inp
* The code finds accented vowels and replaces them with their unaccented version. */
function stripVowelAccent(str)
{
	var rExps = [/[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
		/[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
		/[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
		/[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
		/[\xD9-\xDB]/g, /[\xF9-\xFB]/g];

	var repChar = ['A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u'];

	for (var i = 0; i < rExps.length; ++i)
		str = str.replace(rExps[i], repChar[i]);

	return str;
}

/* Modification of */
/* http://www.kryogenix.org/code/browser/searchhi/ */
/* See: */
/*   http://www.tedpavlic.com/post_highlighting_search_results_with_ted_searchhi_javascript.php */
/*   http://www.tedpavlic.com/post_inpage_highlighting_example.php */
/* for additional modifications of this base code. */
function highlightWord(node, word)
{
	// Iterate into this nodes childNodes
	if (node.hasChildNodes)
	{
		var hi_cn;
		for (hi_cn = 0; hi_cn < node.childNodes.length; hi_cn++)
		{
			highlightWord(node.childNodes[hi_cn], word);
		}
	}

	// And do this node itself
	if (node.nodeType == 3)
	{ // text node
		tempNodeVal = stripVowelAccent(node.nodeValue.toLowerCase());
		tempWordVal = stripVowelAccent(word.toLowerCase());
		if (tempNodeVal.indexOf(tempWordVal) != -1)
		{
			pn = node.parentNode;
			if (pn.className != "Highlighted")
			{
				// word has not already been highlighted!
				nv = node.nodeValue;
				ni = tempNodeVal.indexOf(tempWordVal);
				// Create a load of replacement nodes
				before = document.createTextNode(nv.substr(0, ni));
				docWordVal = nv.substr(ni, word.length);
				after = document.createTextNode(nv.substr(ni + word.length));
				hiwordtext = document.createTextNode(docWordVal);
				hiword = document.createElement("span");
				hiword.className = "Highlighted";
				hiword.appendChild(hiwordtext);
				pn.insertBefore(before, node);
				pn.insertBefore(hiword, node);
				pn.insertBefore(after, node);
				pn.removeChild(node);
			}
		}
	}
}

function unhighlight(node)
{
	// Iterate into this nodes childNodes
	if (node.hasChildNodes)
	{
		var hi_cn;
		for (hi_cn = 0; hi_cn < node.childNodes.length; hi_cn++)
		{
			unhighlight(node.childNodes[hi_cn]);
		}
	}

	// And do this node itself
	if (node.nodeType == 3)
	{ // text node
		pn = node.parentNode;
		if (pn.className == "Highlighted")
		{
			prevSib = pn.previousSibling;
			nextSib = pn.nextSibling;
			nextSib.nodeValue = prevSib.nodeValue + node.nodeValue + nextSib.nodeValue;
			prevSib.nodeValue = '';
			node.nodeValue = '';
		}
	}
}

function localSearchHighlight(searchStr, ElToSearch)
{
	if (!document.createElement) return;
	if (searchStr == '') return;
	// Trim leading and trailing spaces after unescaping
	searchstr = unescape(searchStr).replace(/^\s+|\s+$/g, "");
	if (searchStr == '') return;
	phrases = searchStr.replace(/\+/g, ' ').split(/\"/);

	for (p = 0; p < phrases.length; p++)
	{
		phrases[p] = unescape(phrases[p]).replace(/^\s+|\s+$/g, "");
		if (phrases[p] == '') continue;
		if (p % 2 == 0) words = phrases[p].replace(/([+,()]|%(29|28)|\W+(AND|OR)\W+)/g, ' ').split(/\s+/);
		else { words = Array(1); words[0] = phrases[p]; }
		for (w = 0; w < words.length; w++)
		{
			if (words[w] == '') continue;
			var container = $('.SiteBody')[0];
			highlightWord(container, words[w]);
		}
	}
}

function resizeProductSeperator()
{

	var totalWidth = $('#divTextArea').width();
	var imageWidth = $('#divImageArea').width();
	var totalHeight = $('#divTextArea').height();
	var imageHeight = $('#divImageArea').height();

	var div = $('#divDivider')[0]



	if (totalHeight <= imageHeight)
	{
		div.style.width = (totalWidth - imageWidth - parseInt($('#divImageArea').css('marginLeft'))) + "px";
		div.style.marginTop = (totalHeight - imageHeight) + "px";
		div.style.position = "absolute";
		div.style.top = Math.ceil($('#divImageArea').position().top + imageHeight - 5) + "px";
	}
}
function hideChildlessProductAreas()
{

	var el = $('.ProductRelatedArea');
	if (el[0].innerHTML == "")
		el.addClass("Hidden");

	el = $('.ProductFileArea');
	if (el[0].innerHTML == "")
		el.addClass("Hidden");
}
function RemoveCssClass(el, classname)
{
	if (existsDefined(el))
		if (el.className.indexOf(classname) != -1)
		el.className = el.className.replace(classname, "");
}
function AddCssClass(el, classname)
{
	if (existsDefined(el))
		if (el.className.indexOf(classname) == -1)
		el.className = el.className + " " + classname;
}
function ToggleCssClass(el, classname, otherclassname)
{
	if (existsDefined(el))
	{

		if (el.className.indexOf(classname) == -1)
		{
			AddCssClass(el, classname);
			RemoveCssClass(el, otherclassname);
		}
		else
		{
			AddCssClass(el, otherclassname);
			RemoveCssClass(el, classname);
		}
	}
}
function toggleCheckboxGroup(sender, elid, group, isMaster)
{

	var container = null;
	if (existsDefined(elid))
	{

		toggleVisibility(sender, elid);
		container = document.getElementById(elid);
	}
	var chks = null;

	var isHidden = existsDefined(container) ? container.className.indexOf("Hidden") != -1 ? true : false : null;

	isMaster = existsDefined(isMaster) ? isMaster : false;

	if (isMaster)
	{


		chks = $('input[masterGrouping=' + group + ']');
	}
	else
	{
		chks = $('input[boxGroup=' + group + ']');
	}


	for (var i = 0; i < chks.length; i++)
	{

		if (chks[i].getAttribute("isGroupParent") != "true" || isMaster)
		{
			var FakeCheck = document.getElementById("fakeCheck" + chks[i].id);

			if (existsDefined(isHidden))
			{/*
				if (isHidden) 
				{
					chks[i].checked = false;
					RemoveCssClass(FakeCheck, "Third");
					RemoveCssClass(FakeCheck, "Checked");
					AddCssClass(FakeCheck, "Unchecked");
					FakeCheck.setAttribute("checkState", "0");
				}
				else 
				{
					chks[i].checked = true;
					RemoveCssClass(FakeCheck, "Third");
					RemoveCssClass(FakeCheck, "Unchecked");
					AddCssClass(FakeCheck, "Checked");
					FakeCheck.setAttribute("checkState", "1");
				}*/
			}
			else
			{
				if (chks[i].getAttribute("isViewAll") != "true")
				{
					/*chks[i].checked = true;
					RemoveCssClass(FakeCheck, "Third");
					RemoveCssClass(FakeCheck, "Unchecked");
					AddCssClass(FakeCheck, "Checked");
					FakeCheck.setAttribute("checkState", "1");*/
				}
			}
		}
	}
}

function toggleCheckState(sender)
{
	var checkState = sender.getAttribute("checkState");

	var AssociatedCheckBox = document.getElementById(sender.getAttribute("associatedCheckboxID"));

	var isPartOfGrouping = existsDefined(AssociatedCheckBox.getAttribute("boxGroup")) ? true : false;

	var isParentOfGroup = existsDefined(AssociatedCheckBox.getAttribute("isGroupParent")) ? AssociatedCheckBox.getAttribute("isGroupParent") == "true" ? true : false : false;



	var masterGrouping = AssociatedCheckBox.getAttribute("masterGrouping");

	var masterElement = null;

	if (existsDefined(masterGrouping))
	{
		var gm = $('input[masterGrouping=' + masterGrouping + ']');

		for (var i = 0; i < gm.length; i++)
		{

			if (gm[i].getAttribute("isViewAll") == "true")
			{
				masterElement = gm[i];
				break;
			}
		}
	}

	var continueWithClick = true;
	var parentEl;

	if (existsDefined(masterElement))
	{
		//alert(checkState);
		parentEl = masterElement.previousSibling;
		if (checkState == 1)
		{
			RemoveCssClass(sender, "Third");
			RemoveCssClass(sender, "Checked");
			AddCssClass(sender, "Unchecked");
			sender.setAttribute("checkState", "0");

			RemoveCssClass(parentEl, "Checked");
			RemoveCssClass(parentEl, "Unchecked");
			AddCssClass(parentEl, "Third");
			parentEl.setAttribute("checkState", "2");
			//alert(parentEl.getAttribute("checkState"));
			if (parentEl.getAttribute("checkState") == "2" && masterElement.checked)
				$('#' + masterElement.id).trigger('click');
			if (masterElement == AssociatedCheckBox)
				continueWithClick = false;
			//masterElement.checked = false;



		}
		else if (checkState == 2)
		{
			RemoveCssClass(parentEl, "Checked");
			RemoveCssClass(parentEl, "Third");
			AddCssClass(parentEl, "Unchecked");
			parentEl.setAttribute("checkState", "0");
			if (masterElement == AssociatedCheckBox)
				continueWithClick = false;

		}
		else if (checkState == 0)
		{
			if (masterElement != AssociatedCheckBox)
			{
				//alert(parentEl.getAttribute("checkState"));	
				if (parentEl.getAttribute("checkState") != "2")
				{
					RemoveCssClass(parentEl, "Checked");
					RemoveCssClass(parentEl, "Unchecked");
					AddCssClass(parentEl, "Third");
					parentEl.setAttribute("checkState", "2");
					if (masterElement.checked)
						$('#' + masterElement.id).trigger('click');
				}

			}
			else
			{

				var gm = $('input[masterGrouping=' + masterGrouping + ']');
				for (var i = 0; i < gm.length; i++)
				{
					if (gm[i] != masterElement)
					{
						gm[i].checked = false;

						var gmAssociateChk = gm[i].previousSibling;
						if (existsDefined(gmAssociateChk))
						{
							RemoveCssClass(gmAssociateChk, "Checked");
							RemoveCssClass(gmAssociateChk, "Third");
							AddCssClass(gmAssociateChk, "Unchecked");
							gmAssociateChk.setAttribute("checkState", "0");
						}
					}
				}

				//alert('master');
			}
		}


	}
	if (!isParentOfGroup && isPartOfGrouping)
	{

		var parentEls = $('input[isGroupParent=true]');
		for (var i = 0; i < parentEls.length; i++)
		{
			var parGroup = parentEls[i].getAttribute("boxGroup");
			if (parGroup == AssociatedCheckBox.getAttribute("boxGroup"))
				parentEl = parentEls[i];
		}
		if (existsDefined(parentEl))
			parentEl = parentEl.previousSibling;
		if (existsDefined(parentEl))
		{
			if (checkState == 0)
			{
				RemoveCssClass(sender, "Third");
				RemoveCssClass(sender, "Unchecked");
				AddCssClass(sender, "Checked");
				sender.setAttribute("checkState", "1");
				//AssociatedCheckBox.checked = true;
			}
			else if (checkState == 1)
			{
				RemoveCssClass(sender, "Third");
				RemoveCssClass(sender, "Checked");
				AddCssClass(sender, "Unchecked");
				sender.setAttribute("checkState", "0");
				RemoveCssClass(parentEl, "Checked");
				RemoveCssClass(parentEl, "Unchecked");
				AddCssClass(parentEl, "Third");

				//AssociatedCheckBox.checked = false;
			}
		}

		if (continueWithClick)
			$('#' + sender.getAttribute("associatedCheckboxID")).trigger('click');
	}
	else
	{
		if (checkState == 0)
		{
			RemoveCssClass(sender, "Third");
			RemoveCssClass(sender, "Unchecked");
			AddCssClass(sender, "Checked");
			sender.setAttribute("checkState", "1");
		}
		else if (checkState == 1)
		{
			RemoveCssClass(sender, "Third");
			RemoveCssClass(sender, "Checked");
			AddCssClass(sender, "Unchecked");
			sender.setAttribute("checkState", "0");
		}

		if (continueWithClick)
			$('#' + sender.getAttribute("associatedCheckboxID")).trigger('click');
	}
}
function wireUpFakeCheckboxes(CheckBoxes)
{
	for (var i = 0; i < CheckBoxes.length; i++)
	{
		AddCssClass(CheckBoxes[i], "Hidden");
		var additionalClass = CheckBoxes[i].checked ? "Checked" : "Unchecked";
		var checkState = CheckBoxes[i].checked ? "1" : "0";
		var fakeCheck = document.createElement("span");
		fakeCheck.className += "CheckBox " + additionalClass;
		fakeCheck.setAttribute("associatedCheckboxID", CheckBoxes[i].id);
		fakeCheck.setAttribute("checkState", checkState);
		fakeCheck.onclick = function() { toggleCheckState(this); }
		fakeCheck.id = "fakeCheck" + CheckBoxes[i].id;
		CheckBoxes[i].parentNode.insertBefore(fakeCheck, CheckBoxes[i]);
	}
}
function viewAllCheckboxGo(sender, mastergroup)
{
	/*var Els = $('input[masterGrouping=' + mastergroup + ']');
	for (var i = 0; i < Els.length; i++) 
	{
	if (!existsDefined(Els[i].getAttribute("isViewAll"))) 
	{
	var checkState = Els[i].getAttribute("checkState");

	var AssociatedCheckBox = document.getElementById(Els[i].getAttribute("associatedCheckboxID"));


	if (checkState == 0) {
	RemoveCssClass(Els[i], "Third");
	RemoveCssClass(Els[i], "Unchecked");
	AddCssClass(Els[i], "Checked");
	Els[i].setAttribute("checkState", "1");
	//AssociatedCheckBox.checked = true;
	}
	else {
	RemoveCssClass(sender, "Third");
	RemoveCssClass(sender, "Checked");
	AddCssClass(sender, "Unchecked");
	sender.setAttribute("checkState", "0");
	//RemoveCssClass(parentEl, "Checked");
	//RemoveCssClass(parentEl, "Unchecked");
	AddCssClass(parentEl, "Third");
	//AssociatedCheckBox.checked = false;
	}
			
	$('#' + Els[i].getAttribute("associatedCheckboxID")).trigger('click');
	}
	}*/
}

function HideNavigation()
{
	AddCssClass($(".NavigationItems")[0], "Invisible");
	
}
