//-----------------------------------------------------------------------------------------------
//
//		Begin Javascript Library Functions
//
//-----------------------------------------------------------------------------------------------
function e(id) {return document.getElementById(id);}
function $(id) {return document.getElementById(id);}

function getElementsByClassName(strClass, strTag, objContElm) {
	strTag = strTag || "*";
	objContElm = objContElm || document;
	var objColl = (strTag == '*' && document.all && !window.opera) ? document.all : objContElm.getElementsByTagName(strTag);
	var arr = [];
	var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
	var arrClass = strClass.split(delim);
	for (var i = 0, j = objColl.length; i < j; i++) {
		var arrObjClass = objColl[i].className.split(' ');
		if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
		var c = 0;
		comparisonLoop:
		for (var k = 0, l = arrObjClass.length; k < l; k++) {
			for (var m = 0, n = arrClass.length; m < n; m++) {
				if (arrClass[m] == arrObjClass[k]) c++;
				if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
					arr.push(objColl[i]);
					break comparisonLoop;
				}
			}
		}
	}
	return arr;
}

function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue) {
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = [];
    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for(var i=0; i<arrElements.length; i++){
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0){
            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
                arrReturnElements.push(oCurrent);
			}
		}
	}
    return arrReturnElements;
}
	
	
// Douglas Crockford	
String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g, "");
};

/*  Make sure numbers are in numeric fields.  */  
function IsNumeric(strString){
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;
	
	for (i = 0; i < strString.length && blnResult == true; i++){
		strChar = strString.charAt(i);
		if (strValidChars.indexOf(strChar) == -1)
			blnResult = false;
	}
	return blnResult;
}
	
//-----------------------------------------------------------------------------------------------
//		Author: John Resig
//-----------------------------------------------------------------------------------------------
function addEvent(obj, type, fn){
	if (obj.addEventListener){
		obj.addEventListener(type, fn, false);
	} else if (obj.attachEvent){
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent("on"+type, obj[type+fn]);
	}
}

//-----------------------------------------------------------------------------------------------
//		Author: John Resig
//-----------------------------------------------------------------------------------------------
function removeEvent(obj, type, fn){
	if (obj.removeEventListener){
		obj.removeEventListener(type, fn, false);
	} else if (obj.detachEvent){
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}	


//-----------------------------------------------------------------------------------------------
//		Author: PPK
//-----------------------------------------------------------------------------------------------
function sendRequest(url, callback, postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
//			alert('HTTP error ' + req.status);
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}


//-----------------------------------------------------------------------------------------------
//		
//		MODAL FUNCTIONS
//		
//-----------------------------------------------------------------------------------------------
function setModalDataJSON(string){
	page_data = eval('(' + string + ')');
	var dest = $('inner');

	var page = page_data['page']; 
	dest.getElementsByTagName('H2')[0].innerHTML = page[0]['title'];
//	$('primary').getElementsByTagName('IMG')[0].src = page[0]['images'];
	var image = page_data['images'][0]['image'];
	var subdir = (image['img_group']) ? image['img_group']+'/' : '';
	$('primary_img').src = 'upload/'+subdir+image['name'];	
	$('primary_p').innerHTML = image['description'];
	dest.getElementsByTagName('H3')[0].innerHTML = image['teaser'];

	var thumbbox = $('thumbs');
	var images = page_data['images'];

	function make_thumbs(){
		var span, img, em, subdir, image;
		thumbbox.innerHTML = '';
		for (var i in images){
			image =  images[i]['image'];
			span = document.createElement('span');
			img = document.createElement('img');
			em = document.createElement('em');
			subdir = (image['img_group']) ? image['img_group']+'/thumbs/' : '';
			img.src = 'upload/'+subdir+image['name'];
			img.id = 'thumb_'+image['id'];
			img.className = '';
			em.innerHTML = image['caption'];
			span.appendChild(img);
			span.appendChild(em);
			thumbbox.appendChild(span);
			GB_Modal.images[image['id']] = image;
		}
	}
	make_thumbs();
}





function overrideHREF(){
	var href = this.getAttribute('href');
	var string = href.substring(0, href.lastIndexOf('/'));
	string = string.substr(string.lastIndexOf('/')+1);
	if (Number(string)){
		GB_Modal.create(this);
		sendRequest('pages.php?page_id='+string+'&ajax=true',GB_Modal.handleRequest);

	} else {
		window.location = href;
	}
		
}

//---------------------------------
/*
function transformHREFtoGBModal(){
	var all_a = $('body').getElementsByTagName('A');
	for (var i=0, l=all_a.length; i<l; i++){
//	TODO Fix this
	if (all_a[i].parentNode.parentNode.parentNode.className == 'examples'){
			all_a[i].onclick = function (){return false;};
			addEvent(all_a[i], 'click', overrideHREF);
		}
	}
}

transformHREFtoGBModal();
*/
var GB_Modal = function (){
	var all_a = $('body').getElementsByTagName('A');
	for (var i=0, l=all_a.length; i<l; i++){
//	TODO Fix this
	if (all_a[i].parentNode.parentNode.parentNode.className == 'examples'){
			all_a[i].onclick = function (){return false;};
			addEvent(all_a[i], 'click', overrideHREF);
		}
	}
	return {
		handle_thumbs: function (e){
			var evt = e || window.event;
			var target = evt.target || evt.srcElement;
		
			if (target.id == 'thumbs') return;
			
			GB_Modal.img.src = "\/core\/images\/blank.gif";
			var container = 'SPAN'; // container Element
			var regex = new RegExp("thumbs/");
			while (target.nodeName != container){
				target = target.parentNode;
			}
			var target_image = target.getElementsByTagName('IMG')[0];

			var full = target_image.src.replace(regex,'');
			GB_Modal.img.src = full;
		
			var goo = target_image.id;
			goo = goo.substr(goo.lastIndexOf("_")+1);
			GB_Modal.p.innerHTML = GB_Modal.images[goo]['description'];
			GB_Modal.h3.innerHTML = GB_Modal.images[goo]['teaser'];
		},
		create: function (obj){
			var div = document.createElement('div');
			div.id = 'greybox';
			div.innerHTML = '\
				<div id="outer">\
					<img src="\/core\/images\/blank.gif" id="overlay">\
					<img class="accent" src="\/core\/images\/blank.gif" alt="" \/>\
					<div id="inner">\
						<!--<img class="accent_top" src="\/core\/images\/blank.gif" alt="" \/>-->\
						<div class="title">\
							<a id="modal_close" class="modal close">Close<\/a>\
							<img src="\/core\/images\/LOGO_small.png" \/>\
						<\/div>\
						<img class="accent" src="\/core\/images\/blank.gif" alt="" \/>\
						<h2>&nbsp;<\/h2>\
						<div id="primary" class="div_main">\
							<div class="primary">\
								<img id="primary_img" src="\/core\/images\/blank.gif" alt="" />\
							<\/div>\
							<h3>&nbsp;<\/h3>\
							<p id="primary_p">&nbsp;<\/p>\
						<\/div>\
						<div class="div_alt">\
							<div id="thumbs">\
								<span><img src="\/core\/images\/ajax-loader.gif" /><em>Loading...<\/em><\/span>\
								<span><img src="\/core\/images\/ajax-loader.gif" /><em>Loading...<\/em><\/span>\
								<span><img src="\/core\/images\/ajax-loader.gif" /><em>Loading...<\/em><\/span>\
							<\/div>\
						<\/div>\
					<\/div>\
				<\/div>';	
			$('body').appendChild(div);
			scrollTo(0,0);
			var obj2 = e('inner');
			GB_Modal.h2  = obj2.getElementsByTagName('H2')[0];
			GB_Modal.h3  = obj2.getElementsByTagName('H3')[0];
			GB_Modal.p   = $('primary_p');
			GB_Modal.img = $('primary_img');
			GB_Modal.h2.innerHTML = obj.innerHTML;	
		},
		handleRequest: function (req) {
			setModalDataJSON(req.responseText);
			// sets modal behavior
			e('modal_close').onclick = function (){ $('body').removeChild($('greybox'));}
			//	assigns thumb eventes
			e('thumbs').onclick = GB_Modal.handle_thumbs;
		},
		images: []
	};
}();	


