﻿/// <reference path="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(){
		alert(document.body.offsetHeight);
		alert(document.scrollHeight);
		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=JsLib.UI.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=JsLib.UI.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$maxHeight(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=JsLib.UI.getElementsByClassName(classNameForContainers);
		for(containerCount=0;containerCount<containers.length;containerCount++){
			elements=JsLib.UI.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$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$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$ChangeDisplay(display, elements) {
    for (var i = 0; i < elements.length-1; 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 = srcurl;  //escape(srcurl).replace(/%3F/g, '?').replace(/%26/g, '&').replace(/%3D/g, '=');
	    var response = JsLib.HttpRequest.loadText(url);
		var o=document.createElement('div');
		o.innerHTML=response;
    	var nestedObj=JsLib.UI.GetNestedElem(o,'div',srcdiv);
	    if(nestedObj){
	        var htmlToInject = nestedObj.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,
	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;

/*
	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;