dojo.provide("mag.util");

mag.util =
	{
		handlers: "/admin/Handlers/",
		widgets: "/scripts/mag/widget/",
		
		_anim: null,
		_animTimer: null,
		_animResetLength: 1200,
		animLength: 1200,
		
		trim: function (str) {
			var s = str.replace(/^(\s)*/, '');
			s = s.replace(/(\s)*$/, '');
			return s;
		},
		
		stripHTML: function (str) {
			return str.replace(/(<([^>]+)>)/ig,"")
		},
		
		redirectForm: function (ThisForm,ThisTarget,ThisAction) {
			var OrigTarget = ThisForm.target;
			var OrigAction = ThisForm.action;
			ThisForm.target = ThisTarget;
			ThisForm.action = ThisAction;
			ThisForm.submit();
			ThisForm.target = OrigTarget;
			ThisForm.action = OrigAction;
		},
				
	    isEnter: function(evt) {
            return evt.keyCode == 13;
        },
		
		checkResponse: function(data) {
			if (!data || data.sessionExpired)
				window.location.href = "?msg=Session+Expired.";
		},
		
		validateSession: function() {
			dojo.require("dojo.event.*");
			dojo.io.bind(
					{	url: this.handlers + "ValidateSession.cfm?rand=" + new Date().getTime(),
						method: "post",
						content:{},
						load: dojo.lang.hitch(this,"_onValidate"),
						mimetype: "text/json",
						transport: "XMLHTTPTransport"
					}
			);
		},
		
		_onValidate: function(type, data, event) {
			this.checkResponse(data);
		},
		
		createDateWidget: function(ID, Val) {
			dojo.require("dojo.widget.DropdownDatePicker");
		
			Val = Val?Val:"";
			
			return dojo.widget.createWidget("DropdownDatePicker", {name:ID, value:Val, displayFormat: "MM/dd/yyyy"}, dojo.byId(ID));
		},
		
		distroyDateWidget: function(datePicker) {/*need to kill empty input name, otherwise cf dies with enctype=multipart/form-data*/
			dojo.html.destroyNode(datePicker.domNode.getElementsByTagName("input")[1])
		},
		
		setOptions: function(objSelect, arOptions, val, text, selected, resetFrom) {
			var ids = val.split(",");
			var lbls = text.split(",");
			selected = "," + selected + ","
	
			objSelect.length=resetFrom?resetFrom:0;
	
			for (var i = 0; i < arOptions.length; i++) {
				var NewVal = "";
				for (var j = 0; j < ids.length; j++) {
					if (j > 0)
						NewVal += "_";
					NewVal += arOptions[i][ids[j]];
				}
				
				var NewTxt = "";
				for (var j = 0; j < lbls.length; j++) {
					if (j > 0)
						NewTxt += " ";
					NewTxt += arOptions[i][lbls[j]];
				}
				
				objSelect.appendChild(this.newOption(NewVal, NewTxt, selected));
			}
		},
		
		newOption: function(OptValue, OptText, OptSelected) {
			var NewOpt = document.createElement("option");
			NewOpt.value = OptValue;
			if (OptSelected.indexOf("," + OptValue + ",") != -1)
				NewOpt.selected = true;
			NewOpt.appendChild(document.createTextNode(OptText));
	
			return NewOpt;
		},
		
		setDropDownByVal: function (Obj, Val) {
			for (var i=0; i < Obj.length; i++) {
				if (Obj[i].value == Val) {
					Obj[i].selected = true;
					return i;
				}
			}
			
			return -1;
		},
		
		isCurrency: function(val) {
			dojo.require("dojo.validate.common");
			return dojo.validate.isCurrency("$" + val, {separator:[",", ""]});
		},
		
		formatNumber: function(num) {
			if (num == "") return "";
	
			num = Math.round(num*100)/100;
	
			num += '';
			var splitStr = num.split('.');
		//	splitStr[1] = !splitStr[1] || splitStr[1].length > 1 ? splitStr[1] : splitStr[1] + '0'; 
			
			var splitLeft = splitStr[0];
			var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '.00'; 
			
			var regx = /(\d+)(\d{3})/; 
			while (regx.test(splitLeft)) {
				splitLeft = splitLeft.replace(regx, '$1' + ',' + '$2');
			}
			
			if (splitRight.length == 2)
				splitRight += '0'; 
	
			if (splitLeft < 0)
				return "(" + splitLeft.substring(1, splitLeft.length) + splitRight + ")";
			return splitLeft + splitRight;
		},
	
		formatCurrency: function(number) {
			if (number == "") return "";
			
			if (number < 0)
				return mag.util.formatNumber(number).replace("(", "($");
				
			return "$" + mag.util.formatNumber(number);
		},
		
		listFirst: function(val, del) {
			del = (del)?del:"_";
			return this.listGetAt(val, 0, del);
		},
		
		listLast: function(val, del) {
			del = (del)?del:"_";
			return this.listGetAt(val, val.split(del).length-1, del);
		},
		
		listGetAt: function(val, pos, del) {
			del = (del)?del:"_";
	
			var val = val.split(del);
			return val[pos];
		},

		showMsg: function(Msg, Class) {
			dojo.require("dojo.lfx.html");
			dojo.require("dojo.lfx");
			
			if (this._anim) {this._anim.stop();this._anim = null;}
			clearTimeout(this._animTimer);
	
			dojo.html.setOpacity(dojo.byId("StatusMsg"), 1.0);
			dojo.byId("StatusMsg").className = (Class)?Class:"Fyi";
			dojo.byId("StatusMsg").innerHTML = Msg;
			this._animTimer = dojo.lang.setTimeout(this, "fader", mag.util.animLength);
		},
	
		showErrorMsg: function(Msg) {
			mag.util.showMsg(Msg, "Error")
		},
		
		fader: function() {
			if (!this._anim) {
				this._anim = dojo.lfx.html.fadeOut(dojo.byId("StatusMsg"), mag.util.animLength, dojo.lfx.easeInOut, dojo.lang.hitch(this, function() { this._anim = null; }));
				this._anim.play();
				
				mag.util.animLength = mag.util._animResetLength;
			}
		},
		
		wait: function(millis) 
		{
			var date = new Date();
			var curDate = null;
		
			do {curDate = new Date();}
			while(curDate-date < millis)
		} 
	};