Prototype.Browser.IE6 = (Prototype.Browser.IE && navigator.appVersion.indexOf("MSIE 6") != -1);
Prototype.ApplicationPath = '/Inovita/';

/*
This is a replacement for Ajax.Updater, as we want to replace an element not update it 
The only changes are this line:

receiver.replace(responseText) - changed from receiver.update(responseText)

And this:

if (!this.success()) {
	return;
}

Which allows us to handle failed page loads with an alert, 
and we don't have to worry about it updating elements with .NET error text
*/

Ajax.Replacer = Class.create(Ajax.Request, {
	initialize: function($super, container, url, options) {
		this.container = {
			success: (container.success || container),
			failure: (container.failure || (container.success ? null : container))
		};

		options = Object.clone(options);
		var onComplete = options.onComplete;
		options.onComplete = (function(response, json) {
			this.updateContent(response.responseText);
			if (Object.isFunction(onComplete)) onComplete(response, json);
		}).bind(this);

		$super(url, options);
	},

	updateContent: function(responseText) {
		var receiver = this.container[this.success() ? 'success' : 'failure'],
        options = this.options;

		if (!this.success()) {
			return;
		}

		if (!options.evalScripts) responseText = responseText.stripScripts();
		if (receiver = $(receiver)) {
			if (options.insertion) {
				if (Object.isString(options.insertion)) {
					var insertion = {}; insertion[options.insertion] = responseText;
					receiver.insert(insertion);
				}
				else options.insertion(receiver, responseText);
			}
			else receiver.replace(responseText);
		}
	}
});

// (function(){
//  var d = document, e = d.documentElement, s = d.createElement('style');
//  if (e.style.MozTransform === ''){ // gecko 1.9.1 inference
//   // s.textContent = 'body{visibility:hidden}';
//    s.textContent = 'body{text-indent:-9999px}';
//    e.firstChild.appendChild(s);
//    function f()
//    { 
//    var ffrendertime = setTimeout ( function(){s.parentNode && s.parentNode.removeChild(s)} , 200 ); 
//    }
//    addEventListener('load',f,false);
//    setTimeout(f,2000); 
//  }
//})();

var Global = Class.create();
Global.prototype = {

	pngElements: [
		'div.brands div a span',
		'body',
		'html',
		'a.next',
		'a.previous'
	],

	shadowBoxElements: [
		{ id: 'shadowbox-email', player: 'iframe', title: "", width: 730, height: 575 },
		{ id: 'shadowbox-wels', player: 'iframe', title: "", width: 880, height: 680 },
		{ id: 'shadowbox-cad', player: 'iframe', title: "", width: 880, height: 680 },
		{ id: 'shadowbox-video', player: 'iframe', title: "", width: 872, height: 618 },
		{ id: 'shadowbox-subscribe', player: 'iframe', title: "", width: 265, height: 570 },
		{ id: 'shadowbox-subscribe-panel', player: 'iframe', title: "", width: 265, height: 570 },
		{ id: 'shadowbox-print', player: 'iframe', title: "", width: 700, height: 685, redirect: Prototype.Browser.IE }
	],

	initialize: function() {
		this.enabled();
		this.searchEvents();
		this.externaliseLinks();
		this.horizontalRules();
		this.shadowBoxes();
		this.bookmarks();
		this.autoSelect();
		this.copyToClipboard();
	},

	enabled: function() {
		var url = URL.parse(location.href);
		/* This makes an AJAX request to the controller page to set a session variable*/
		if ($('javascriptEnabled') && !url.query.include("jsenabled=1")) {
			var request = new Ajax.Request(Prototype.ApplicationPath + '?jsenabled=0', {
				method: 'get',
				onSuccess: function(transport) {
					//location.href = url.path + ((url.query) ? '?' + url.query + '&' : '?') + 'jsenabled=1';
				}
			});
		}
	},

	searchEvents: function() {
		var search = $('keyword');
		if (search) {
			Event.observe(search, 'focus', this.onSearchFocus.bind(this));
			Event.observe(search, 'blur', this.onSearchBlur.bind(this));
			Event.observe(search, 'keyup', this.onSearchKeyUp.bind(this));
		}
	},

	externaliseLinks: function() {
		var anchors = $$("a");
		for (var i = 0; j = anchors.length, i < j; i += 1) {
			var anchor = anchors[i];
			if (anchor.getAttribute("href") && (anchor.getAttribute("rel") && anchor.getAttribute("rel").include("external"))) {
				anchor.target = "_blank";
			}
			if (anchor.getAttribute("href") && (anchor.getAttribute("rel") && anchor.getAttribute("rel").include("top"))) {
				anchor.target = "_top";
			}
		}
	},

	horizontalRules: function() {
		var hrs = $$('#content hr');
		for (var x = 0; x < hrs.length; x++) {
			var hr = hrs[x];
			var div = document.createElement('div');
			div.className = 'hr';
			hr.parentNode.replaceChild(div, hr);
			div.appendChild(hr);
		}
	},

	shadowBoxes: function() {
		for (var x = 0, y = this.shadowBoxElements.length; x < y; x++) {
			var element = this.shadowBoxElements[x];
			var link = $(element.id);
			if (link) {
				link.player = element.player;
				link.title = element.title;
				link.height = element.height;
				link.width = element.width;
				if (element.redirect) {
					link.redirect = element.redirect;
				}
				Event.observe(link, 'click', function(e) {
					var link = Event.element(e);
					if (!link.content) {
						if (link.redirect) {
							window.open(link.href + "/shadowbox", "shadowbox");
						}
						else {
							Shadowbox.open({
								content: link.href + "/shadowbox",
								player: this.player,
								title: this.title,
								height: this.height,
								width: this.width
							});
						}
					}

					Event.stop(e);
				});
			}
		}
	},

	bookmarks: function() {
		var links = $$('a[rel="bookmark"]');
		for (var x = 0, y = links.length; x < links.length; x++) {
			var link = links[x];
			Event.observe(link, 'click', this.onBookmark.bind(this));
		}
	},

	autoSelect: function() {
		var textboxes = $$('input.autoselect');
		for (var x = 0, y = textboxes.length; x < y; x++) {
			var textbox = textboxes[x];
			Event.observe(textbox, 'focus', this.onAutoSelect.bind(this));
		}
	},

	copyToClipboard: function() {
		var links = $$('.copy');
		for (var x = 0, y = links.length; x < y; x++) {
			var link = links[x];
			Event.observe(link, 'click', this.onCopy.bind(this));
		}
	},

	removeLoadingClass: function() {
		var loadingElements = $$('.loading');
		for (var x = 0, y = loadingElements.length; x < y; x++) {
			var element = loadingElements[x];
			element.removeClassName('loading');
		}
	},


	/*******
	EVENT HANDLERS
	********/

	onSearchFocus: function(e) {
		var search = Event.element(e);
		if (search.value == 'Search') {
			search.value = '';
			search.addClassName('selected');
		}
	},

	onSearchBlur: function(e) {
		var search = Event.element(e);
		if (search.value == '') {
			search.value = 'Search';
			search.removeClassName('selected');
		}
	},

	onSearchKeyUp: function(e) {
		if (e.keyCode == Event.KEY_RETURN) {
			$('arrow').click();
			Event.stop(e);
		}
	},

	onBookmark: function(e) {
		var link = Event.element(e);
		var url = link.href;
		var title = link.innerText;

		if (window.sidebar) { /* Mozilla */
			window.sidebar.addPanel(title, url, "");
			Event.stop(e);
		} else if (window.external) { /* IE */
			window.external.AddFavorite(url, title);
			Event.stop(e);
		}
	},

	onAutoSelect: function(e) {
		var input = Event.element(e);
		if (input.select) {
			input.select();
		}
	},

	onCopy: function(e) {
		var link = Event.element(e);
		var target = link.getAttribute('rel');

		if (target) {
			$(target).select();
			copy = document.selection.createRange();

			if (copy.execCommand) {
				copy.execCommand("Copy");
				alert("Selector URL has been copied to your clipboard.");
			}
		}
	}
};

Global.loaded = function() {
	if ($('home')) {
		$('home').removeClassName('loading');
		if (text) {
			//text.sifr();
		}
	}
}

var global;
FastInit.addOnLoad(function() {
	global = new Global();
	if (Shadowbox) {
		Shadowbox.init({
			players: ["img", "html"]
		});
	}
});

Event.observe(window, 'load', Global.loaded);

