﻿/// <reference name="MicrosoftAjax.js" />

Type.registerNamespace('JsLib');
var BBYConfigurations = { reportError: false };

/*
JsLib._Debug
*/
JsLib._Debug = function JsLib$Debug() { }
function JsLib$Debug$Inspect(obj) {
	var arr = new Array();
	var i;
	for (i in obj)
		arr.push(i);
	arr.sort();
	var div = JsLib.UI.createDiv('DebugInspect', { width: '300px', top: '200px' });
	div.innerHTML = arr.join("<br />");
}
function JsLib$Debug$ReportError(err, url, line) {
	var div;
	if (null == $get('ErrorDiv')) {
		div = JsLib.UI.createDiv('ErrorDiv', { width: '655px', top: '200px' });
	} else {
		div = $get('ErrorDiv');
		div.innerHTML += '<hr />'
	}
	div.innerHTML += err + '<br />' + url + '<br />line no:' + line;
	return true;
}
JsLib._Debug.prototype = {
	inspect: JsLib$Debug$Inspect,
	reportError: JsLib$Debug$ReportError
}
JsLib._Debug.registerClass('JsLib._Debug');
JsLib.Debug = new JsLib._Debug();

if (BBYConfigurations.reportError) {
	window.onerror = JsLib.Debug.reportError;
}

/*
JsLib._Object
*/
JsLib._Object = function JsLib$Object() { }
function JsLib$Object$extend(destination, source) {
	for (var property in source)
		destination[property] = source[property];
	return destination;
}
JsLib._Object.prototype = {
	extend: JsLib$Object$extend
}
JsLib._Object.registerClass('JsLib._Object');
JsLib.Object = new JsLib._Object();


/*
JsLib._httpRequest;
*/
JsLib._HttpRequest = function JsLib$HttpRequest() { }
function JsLib$HttpRequest$loadText(url) {
	var xmlHttp = JsLib$HttpRequest$CreateXMLHttpRequest();
	xmlHttp.open('GET', url, false);
	xmlHttp.send(null);
	return xmlHttp.responseText;
}
function JsLib$HttpRequest$PostFormData(data, url) {
	var xmlHttp = JsLib$HttpRequest$CreateXMLHttpRequest();
	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", data.length);
	xmlHttp.send(data);
	var r = xmlHttp.responseText;
	xmlHttp = null;
	return r;
}
function JsLib$HttpRequest$CreateXMLHttpRequest() {
	if (window.XMLHttpRequest)
		return new XMLHttpRequest();
	else
		if (window.ActiveXObject)
		return new ActiveXObject("Microsoft.XMLHTTP");
	return null;
}

JsLib._HttpRequest.prototype = {
	loadText: JsLib$HttpRequest$loadText,
	PostFormData: JsLib$HttpRequest$PostFormData
}
JsLib._HttpRequest.registerClass('JsLib._HttpRequest');
JsLib.HttpRequest = new JsLib._HttpRequest();
var $httpRequest = JsLib.HttpRequest;

/*
JsLib._PopUp
*/
JsLib._PopUp = function JsLib$PopUp() { }
function JsLib$PopUp$open(url, name) {
	var options = JsLib.Object.extend({ type: 'window', width: 500, height: 250, top: -1, left: -1, scrollbars: false, status: false, resizable: false }, arguments[2] || {});
	if (-1 == options.left) options.left = parseInt((screen.width) ? (screen.width - options.width) / 2 : 100);
	if (-1 == options.top) options.top = parseInt((screen.height) ? (screen.height - options.height) / 2 : 100);
	switch (options.type) {
		case 'window': JsLib$PopUp$OpenWindow(url, name, options); break;
		case 'htmldiv': JsLib$PopUp$OpenHtmlDiv(url, name, options); break;
	}
}
function JsLib$PopUp$OpenWindow(url, name, options) {
	var features = new Array();
	features.push('width=' + options.width);
	features.push('height=' + options.height);
	features.push('top=' + options.top);
	features.push('left=' + options.left);
	features.push('scrollbars=' + Number(options.scrollbars));
	features.push('status=' + Number(options.status));
	features.push('resizable=' + Number(options.resizable));
	features.push('location=0');
	window.open(url, name, features.join(',')).focus();
}
function JsLib$PopUp$OpenHtmlDiv(url, name, options) {
	alert('Not implemented yet!');
}
function JsLib$PopUp$autoResizeWindow() {
	window.resizeTo(document.body.scrollWidth + (document.body.scrollWidth - document.body.offsetWidth), document.body.scrollHeight);
}
JsLib._PopUp.prototype = {
	open: JsLib$PopUp$open,
	autoResizeWindow: JsLib$PopUp$autoResizeWindow
}
JsLib._PopUp.registerClass('JsLib._PopUp');
JsLib.PopUp = new JsLib._PopUp();
var $popUp = JsLib.PopUp.open;

/*
JsLib._UI
*/
JsLib._UI = function JsLib$UI() { }
function JsLib$UI$CreateDiv(id) {
	div = document.createElement('div');
	div.id = id;
	var source = { position: 'absolute', zIndex: 1000, top: 50 + 'px', left: 50 + 'px', width: 400 + 'px', height: 200 + 'px', backgroundColor: '#cecece', border: 'solid 1px black', overflow: 'scroll' };
	for (var property in source)
		div.style[property] = source[property];
	for (var property in arguments[1] || {})
		div.style[property] = arguments[1][property];
	document.body.appendChild(div);
	return div;
}
function JsLib$UI$EqualiseBoxesHeight() {
	for (var i = 0; i < arguments.length; i++) if (!$get(arguments[i])) return;
	var maxh = JsLib$UI$maxHeight(JsLib$UI$GetElementsFromIDs(arguments));
	for (var i = 0; i < arguments.length; i++) $get(arguments[i]).style.height = maxh + "px";
}
function JsLib$UI$EqualiseBoxesHeightByClassName(className) {
	var elements = $getElementsByClassName(className);
	var maxh = JsLib$UI$maxHeight(elements);
	for (var i = 0; i < elements.length; i++) elements[i].style.height = maxh + "px";
}
function JsLib$UI$EqualiseBoxesHeightByClassNameInsideElement(className, elementId) {
	var elements = $getElementsByClassName(className, null, $get(elementId));
	var maxh = JsLib$UI$maxHeight(elements);
	for (var i = 0; i < elements.length; i++) elements[i].style.height = maxh + "px";
}
function JsLib$UI$EqualiseBoxesHeightByClassNamesInsideElement(classNames, elementId) {
	var elements = [];
	for (var c = 0; c < classNames.length; c++) {
		var subs = $getElementsByClassName(classNames[c], null, $get(elementId));
		for (var i = 0; i < subs.length; i++)
			elements.push(subs[i]);
	}
	var maxh = JsLib$UI$maxHeight2(elements);
	for (var i = 0; i < elements.length; i++) elements[i].style.height = maxh + "px";
}
function JsLib$UI$EqualiseBoxesHeightInContainers(classNameForContainers, classNameForChilds) {
	var maxh, containerCount, elements;
	var containers = $getElementsByClassName(classNameForContainers);
	for (containerCount = 0; containerCount < containers.length; containerCount++) {
		elements = $getElementsByClassName(classNameForChilds, null, containers[containerCount]);
		maxh = JsLib$UI$maxHeight(elements);
		for (var i = 0; i < elements.length; i++) elements[i].style.height = maxh + "px";
	}
}

function JsLib$UI$maxHeight2(elements) {
	var heights = new Array();
	for (var i = 0; i < elements.length; i++) {
		if (navigator.userAgent.toLowerCase().indexOf('opera') == -1)
			heights.push(elements[i].scrollHeight);
		else
			heights.push(elements[i].offsetHeight);
	}
	heights.sort(function sortNumeric(f, s) { return f - s; });
	return heights[elements.length - 1];
}

function JsLib$UI$maxHeight(elements) {
	var heights = new Array();
	for (var i = 0; i < elements.length; i++) {
		if (navigator.userAgent.toLowerCase().indexOf('opera') == -1)
			heights.push(elements[i].scrollHeight);
		else
			heights.push(elements[i].offsetHeight);
	}
	heights.sort(function sortNumeric(f, s) { return f - s; });
	return heights[elements.length - 1];
}
function JsLib$UI$GetElementsFromIDs(elementIDs) {
	var elements = new Array();
	for (var i = 0; i < elementIDs.length; i++)
		elements.push($get(elementIDs[i]));
	return elements;
}
function JsLib$UI$GetElementsByClassName(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 length = elements.length;
	for (var i = 0; i < length; i++) {
		current = elements[i];
		if (testClass.test(current.className)) {
			returnElements.push(current);
		}
	}
	return returnElements;
}
function JsLib$UI$DHTMLDiv(obj, url) {
	var divID = obj.id + '_DHTMLDiv';
	if (null != $get(divID)) {
		var div = document.createElement('div');
		div.innerHTML = JsLib$HttpRequest$loadText(url);
		div.id = divID;
		if (null != obj.nextSibling)
			obj.parentNode.insertBefore(div, obj.nextSibling);
		else
			obj.parentNode.appendChild(div);
		obj.style.display = 'block';
	}
}
function JsLib$UI$GetNestedElem(parentElem, tagName, elemId) {
	var elems = parentElem.getElementsByTagName(tagName);
	if (elems != null) {
		for (var i = 0; i < elems.length; i++) {
			if (elems[i].id == elemId) {
				return elems[i];
			}
		}
	}
	return null;
}
function JsLib$UI$Hide() {
	JsLib$UI$ChangeDisplay('none', arguments);
}
function JsLib$UI$Show() {
	JsLib$UI$ChangeDisplay('block', arguments);
}
function JsLib$UI$InnerText(el) {
	if ("string" == typeof el.textContent) return el.textContent.replace(/^[ \t]+|[\t\n\r]|[ \t]+$/g, "");
	if ("string" == typeof el.innerText) return el.innerText;
	return el.innerHTML.replace(/<[^>]*>/g, "");
}
function JsLib$UI$ChangeDisplay(display, elements) {
	for (var i = 0; i < elements.length; i++) {
		if (typeof elements[i] == 'string')
			$get(elements[i]).style.display = display;
		else
			elements[i].style.display = display;
	}
}
function JsLib$UI$InjectHTML(srcurl, srcdiv, targetdiv) {
	//var url = escape(srcurl).replace(/%3F/g, '?').replace(/%26/g, '&').replace(/%3D/g, '=');
	var url = srcurl;
	var response = JsLib.HttpRequest.loadText(url);
	var o = document.createElement('div');
	o.innerHTML = response;
	var htmlToInject = JsLib.UI.GetNestedElem(o, 'div', srcdiv).innerHTML;
	$get(targetdiv).innerHTML = htmlToInject;
}
function JsLib$UI$InjectHTMLMultiple(srcurl, data, divids) {
	var response = JsLib.HttpRequest.PostFormData(data, srcurl);
	var o = document.createElement('div');
	o.innerHTML = response;
	for (var i = 0; i < divids.length; i++) {
		var htmlToInject = JsLib.UI.GetNestedElem(o, 'div', divids[i]).innerHTML;
		if ($get(divids[i]) != null)
			$get(divids[i]).innerHTML = htmlToInject;
	}
}
JsLib._UI.prototype = {
	createDiv: JsLib$UI$CreateDiv,
	equaliseBoxesHeight: JsLib$UI$EqualiseBoxesHeight,
	equaliseBoxesHeightByClassName: JsLib$UI$EqualiseBoxesHeightByClassName,
	equaliseBoxesHeightByClassNameInsideElement: JsLib$UI$EqualiseBoxesHeightByClassNameInsideElement,
	equaliseBoxesHeightByClassNamesInsideElement: JsLib$UI$EqualiseBoxesHeightByClassNamesInsideElement,
	equaliseBoxesHeightInContainers: JsLib$UI$EqualiseBoxesHeightInContainers,
	getElementsByClassName: JsLib$UI$GetElementsByClassName,
	GetNestedElem: JsLib$UI$GetNestedElem,
	InjectHTML: JsLib$UI$InjectHTML,
	InjectHTMLMultiple: JsLib$UI$InjectHTMLMultiple
}
JsLib._UI.registerClass('JsLib._UI');
JsLib.UI = new JsLib._UI();
var $getElementsByClassName = JsLib.UI.getElementsByClassName;
var $show = JsLib$UI$Show;
var $hide = JsLib$UI$Hide;
var $innerText = JsLib$UI$InnerText;

/*
JsLib._Utils
*/
JsLib._Utils = function JsLib$Utils() { }
function JsLib$Utils$redirect(url) {
	window.location.href = url;
}
function JsLib$Utils$formatCurrency(number) {
	var cultureObject = Sys.CultureInfo.CurrentCulture;
	return number.localeFormat("C");
}
JsLib._Utils.prototype = {
	redirect: JsLib$Utils$redirect,
	formatCurrency: JsLib$Utils$formatCurrency
}
JsLib._Utils.registerClass('JsLib._Utils');
JsLib.Utils = new JsLib._Utils();
var $redirect = JsLib.Utils.redirect;

