// General Functions

////////////////////
// addLoadEvent() //
////////////////////

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function () {
oldonload();
func();
}
}
}

//////////////////////
// loadJavascript() //
//////////////////////

function loadJavascript(filename) {
var file = document.createElement('script');
file.setAttribute('type','text/javascript');
file.setAttribute('src',filename);
document.getElementsByTagName("head")[0].appendChild(file);
}

///////////////
// loadCSS() //
///////////////

function loadCSS(filename,media) {
var media = media || 'all';
var file = document.createElement('link');
file.setAttribute('rel','stylesheet');
file.setAttribute('type','text/css');
file.setAttribute('href',filename);
file.setAttribute('media',media);
document.getElementsByTagName("head")[0].appendChild(file);
}

function flash_DoFSCommand(command,args) { // url function
if (command == 'navigate') {
if (args == 'none') { 
this.location.hash = '/';
} else {
splitArgs = args.split('/////');
var docTitle = splitArgs[0];
docTitle += titleSeparator + defaultTitle;
docTitle = docTitle.replace(/&amp;/g,'&');
document.title = docTitle;
args = splitArgs[1];
this.location.hash = '/'+ args;
getPrintContent(args);
}
}
} // end url function

function flash_Initialize() {
// print
var ksgmDiv = (document.getElementById('ksgm')) ? document.getElementById('ksgm') : false;
var printDiv = (document.getElementById('print')) ? document.getElementById('print') : false;
if (ksgmDiv && printDiv) {
printDiv.innerHTML = ksgmDiv.innerHTML;
loadCSS('/template/css/print_flash.css','print');
}
// layout
loadCSS('/template/css/layout_flash.css','screen');
// title
defaultTitle = defaultTitle.replace(/&amp;/g,'&');
document.title = defaultTitle;
// navigation
if (this.location.pathname == homePage) {
// window.location.href = '/'+ this.location.hash; // live
}
var hashQuery = '';
var hashVars = this.location.hash;
hashVars = hashVars.replace('#/','');
if (hashVars) {
hashQuery = hashVars.replace(/\//g,',');
}
urlQuery = query;
if (!hashQuery && !urlQuery) { // no query
// window.location.href = '/form.php'; // temporary splash page
} else if (!hashQuery && urlQuery) { // url query
urlQuery = urlQuery.toString();
urlQuery = urlQuery.replace(/,/g,'/');
window.location.href = '/#/'+ urlQuery;
} // end url query
query = (hashQuery) ? hashQuery : query;
query = (query) ? '&query='+ query : ''; // add query
}

////////////////
// in_array() //
////////////////

function in_array(needle,haystack) {
var found = false;
for (var i = 0; i < haystack.length; i++) {
if (haystack[i] == needle) {
found = true;
break;
} else {
found = false;
}
}
return found;
}

////////////////////////
// getClassElements() //
////////////////////////

function getClassElements(className, tag, elm) {
var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var elementLength = elements.length;
for (var i = 0; i < elementLength; i++) {
current = elements[i];
if (testClass.test(current.className)) {
returnElements.push(current);
}
}
return returnElements;
}


// Email

///////////////
// encrypt() //
///////////////

function encrypt(username,hostname,linktext,subject,message){
var username = username || 'info';
var hostname = hostname || 'formarchitecture.ca';
var address = username + '&#64;' + hostname;
var linktext = linktext || address;
var subject = subject || '';
if (subject != '') {
subject = '?subject=' + subject;
}
var message = message || '';
if (message != '') {
message = '?body=' + message;
}
var output = '<a href="&#109;&#97;&#105;&#108;' + '&#116;&#111;&#58;'+ address + subject + message +'" class="email">'+ linktext +'</a>';
document.write(output);
}

// Ajax Functions

////////////////////////////
// createXMLHttpRequest() //
////////////////////////////

function createXMLHttpRequest() {
if (window.XMLHttpRequest) { // XMLHttpRequest
if (typeof XMLHttpRequest != 'undefined') {
try { // XMLHttpRequest
var request = new XMLHttpRequest();
} catch (e) {
var request = false;
}
}
} else if (window.ActiveXObject) { // ActiveXObject
try { // Msxml2.XMLHTTP
var request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try { // Microsoft.XMLHTTP
var request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {
var request = false;
}
}
} // end ActiveXObject
return request;
}

/////////////////////////////
// destroyXMLHttpRequest() //
/////////////////////////////

function destroyXMLHttpRequest(request) {
request.onreadystatechange = function() {};
request.abort();
delete request;
}

///////////////////
// requestData() //
///////////////////

function requestData(p_request, p_url, p_data, p_func, p_method) {
var p_method = p_method || 'GET'; // default
if (p_request) {
if (p_method == 'GET') { // GET
p_request.open('GET',p_url +'?'+ p_data,true);
} else { // POST
p_request.open('POST',p_url,true);
} // end POST
p_request.onreadystatechange = p_func;
if (p_method == 'GET') { // GET
p_request.send(null);
} else { // POST
p_request.send(p_data);
} // end POST
}
}

///////////////////////
// getPrintContent() //
///////////////////////

function getPrintContent(args) {
var request = createXMLHttpRequest();
if (args) {
var sendData = 'args='+ args;
requestData(request, '/ajax/content.php', sendData, function () { printContentCallback(request,'print'); });
}
}

////////////////////////////
// printContentCallback() //
////////////////////////////

function printContentCallback(request,printDivID) {
var response = false;
if (request.readyState == 4) { // 4
if (request.status == 200) { // 200
var response = request.responseText;
var printDiv = (document.getElementById(printDivID)) ? document.getElementById(printDivID) : false;
if (printDiv) { // populate print div
printDiv.innerHTML = response;
} // end populate print div
} else { // not 200
// alert('There was a problem retrieving the content:' + "\n" + request.statusText);
} // end not 200
destroyXMLHttpRequest(request);
} // end 4
}
