// wnd.js

	var gWndFuncs = new List();
	var gWndInfos = new List();
	var gWndLinks = new List();
	
	var gWndLastID = 0;
	var gWnd_ZoomOn = true;
	var gWndTitleBarImage = "plooper_data/desktop/patterns/strips/horizpipe.jpg";
	var gWnd_OKMouseDown = true;
	var _parentCnt = 0;
	var gIgnoreExistingWnd = false;
	var gWnd_TitleBarHt = 19;
	var gParElem = false;
	var gParWnd = false;
	var gResizeTopFix;
	
	var gWnditms = 
		[
			["mview", wnditm_mview_add ],
			["photos", wnditm_photos_add ],
			["tbl", wnditm_tbl_add ],
			["div", wnditm_div_add ],
			["img", wnditm_img_add ],
			["vbar", wnditm_vbar_add ],
			["hbar", wnditm_hbar_add ],
			["textarea", wnditm_textarea_add ],
			["inputtext", wnditm_inputText_add ],
			["password", wnditm_inputPswd_add ],
			["radio", wnditm_inputRadio_add ],
			["checkbox", wnditm_inputCheckbox_add ],
			["button", wnditm_inputButton_add ],
			["select", wnditm_select_add ],
			["upload", wnditm_upload_add ],
			["blog", wnditm_blog_add ],
			["canvas", wnditm_canvas_add ],
			["viewer", wnditm_viewer_add ],
			["form", wnditm_form_add ]
		];
//------------------------------------------------------------
function wnd_init()
	{
/*
	preloadImages("ui_images/wnd_close_norm.jpg",
					"ui_images/wnd_close_over.jpg",
					"ui_images/wnd_close_down.jpg",
					"ui_images/wnd_popup_norm.jpg",
					"ui_images/wnd_popup_over.jpg",
					"ui_images/wnd_popup_down.jpg",
					"ui_images/wnd_zoom_norm.jpg",
					"ui_images/wnd_zoom_over.jpg",
					"ui_images/wnd_zoom_down.jpg",
					
					"ui_images/but_arrow_down.jpg",
					"ui_images/but_arrow_up.jpg",
					"ui_images/but_arrow_left.jpg",
					"ui_images/but_arrow_right.jpg",
					
					"ui_images/but_magnify_plus.jpg",
					"ui_images/but_magnify_minus.jpg",
					
					"ui_images/but_reset_zoomin.jpg",
					"ui_images/but_reset_zoomout.jpg",
					"ui_images/but_rotate.jpg",
					
					"ui_images/media_audio.jpg",
					"ui_images/media_html.jpg",
					"ui_images/media_video.jpg",
					"ui_images/media_pdf.jpg",
					"ui_images/media_unknown.jpg"
					);
	*/
	}
	
//------------------------------------------------------------
function wnd_open(info, parElem, newWnd)
	{
	var killpar = !newWnd;
	var wnd;
	var parWnd = false;
	gParElem = parElem;
	if (info.prep) info.prep(info);
	if (parElem) 
		{
		parWnd = parElem.wnd();
		if (parWnd.hasClass("wnd_desktop")) killpar = false;
		var wndID = parElem.attr("wndID");
		if (wndID) 
			{
			if (!killpar)
				{
				wnd = $("."+info.klass+":[wid="+wndID+"]");
				if (wnd.length > 0) 
					{
					if (wnd_setLinks(wnd, parElem))
						{
						var srcRect = wnd_desktop_getRect(parElem);
						var destRect = new Rect().getElem(wnd.parent());
						wnd_visZoom(srcRect, destRect, done_wnd_zoomShow, wnd);
						delete srcRect, destRect;
						return wnd;
						}
					}
				}
			}
		}
	
	gParWnd = parWnd;
	wnd = $("." + info.klass);
	if (gIgnoreExistingWnd) 
		{
		gIgnoreExistingWnd = false;
		}
	else var wndExists = (wnd && wnd.length);
	
	//--- If !allowClones and already open just make it front ---
	if (!info.allowClones)
		{
		if (wndExists) 
			{
			wnd.attr("existed", true);
			if (parElem)
				{
				var srcRect = wnd_desktop_getRect(parElem);
				var destRect = new Rect().getElem(wnd.parent());
				wnd_visZoom(srcRect, destRect, wnd_makeFront, wnd);	
				}
			else wnd_makeFront(wnd);
			return wnd;
			}
		}

	if (wndExists)
		{
		if (info.wndIdent && parElem)
			{
			var wndIdentVal = parElem.attr(info.wndIdent);
			var wnds = $("."+info.klass+":["+info.wndIdent+"="+wndIdentVal+"]");
			if (wnds.length>0)
				{
				if (killpar) wnd_copyrect(parWnd, wnds);
				//else wnd_fixpos(wnds);
				wnds.attr("existed", true);
				wnd_show(wnd_makeFront(wnds));
				return wnds;
				} 
			}
		}
	if (!killpar && parWnd && parWnd.attr("vis") && gWnd_ZoomOn) {
		var srcRect = wnd_desktop_getRect(parElem);
		var r = info.rect;
		var destRect = new Rect(r.top, r.left, r.height, r.width);
		wnd_visZoom(srcRect, destRect, done_wnd_preOpen, [info, parElem, killpar]);
	//		delete srcRect, destRect;
	}
	else
		{
		wnd.attr("existed", false);
		return wnd_open_doit(info, parElem, killpar);
		}
	wnd.attr("existed", true);
	wnd.trigger("doneAll");
	return wnd;
	}
//------------------------------------------------------------
function done_wnd_preOpen(stuff)
	{
	wnd_open_doit(stuff[0], stuff[1], stuff[2]);
	}
//------------------------------------------------------------
function done_wnd_zoomShow(wnd)
	{
	wnd_show(wnd, true);
	wnd_makeFront(wnd);
	}

//------------------------------------------------------------
function wnd_open_doit(info, parElem, killpar)
	{
	if (parElem) var parWnd = parElem.wnd();
	
	//--- Create the basic window divs ---
	if (info.zindex) zindex = info.zindex;
	else zindex = wnd_getNextZIndex();
	
	var wnd_box = $("<div></div>")
	.css("zIndex",zindex)
	.addClass("wnd_box");
	var wnd = $("<div></div>").addClass("wnd")
	.attr("info",gWndInfos.add(info))
	.appendTo(wnd_box);
	
	if (info.transparent || wnd.hasClass("wnd_desktop")) wnd.attr("static", true);
	if (info.taskcnt) if (info.taskcnt > 0) 
		{
		wnd.bind("done", wnd_doneTask)
		.attr("taskcnt", info.taskcnt);
		}
	if (info.done) wnd.bind("doneAll", info.done);
	wnd.attr("wid", ++gWndLastID);
	if (info.opacity) wnd.css("opacity", info.opacity);
	if (info.bkColor) wnd.css("backgroundColor", info.bkColor);
	if (info.bkImg) wnd_desktop_setBkgndImg(info.bkImg, false);
	if (info.klass) wnd.addClass(info.klass).attr("klass",info.klass);
	if (info.resize) wnd_box.resizable({zIndex: 32500,ghost:true, 
							start:wnd_startresize, resize:wnd_resize_func,stop:wnd_endresize,
							minHeight:100, minWidth:210
							});

	if (info.resizeStart) wnd_box.bind("resizeStart", info.resizeStart);
	if (info.resizeFunc) wnd_box.bind("resize", info.resizeFunc);
	if (info.resizeStop) wnd_box.bind("resizeStop", info.resizeStop);
	
	if (info.id) wnd.attr("id", info.id);
	if (!info.drop) info.drop = wnd_baddrop;
	if (info.klass == "wnd_desktop")
		{
		wnd.droppable(
			{
			drop:wnd_drop, 
			accept:".bigPhotoBox",
			greedy:true
			});
		}
	else wnd.droppable(
		{
		drop:wnd_drop, 
		hoverClass:"wnd_drop_hover",
		accept:".bigPhotoBox",
		greedy:true
		});

	//--- if not transparant, add the titlebar and other window goodies... ---
	if (info.transparent) 
		{
		wnd.addClass("wnd_transp");
		}
	else
		{
		wnd.css("backgroundColor", "#e0e0e0");
		//--- Add the window shadow ---
		var wnd_shadow = $("<div></div>")
		.addClass("wnd_shadow")
		.css({opacity: _shadowOpacity})
		.appendTo(wnd_box);
		if (info.wndShadowClass) wnd_shadow.addClass(info.wndShadowClass)
		
		if (info.altCloseImg)
			{
			var altClose = wnditm_imgbut_add({fname:info.altCloseImg,
					func:wnd_closebox_click, klass:"wnd_closebox"},wnd);
			if (info.altCloseClass) altClose.addClass(info.altCloseClass);
			}
		//--- Add the window titlebar ---
		if (!info.noTitlebar)
			{
			var wnd_titlebar = wnditm_div_add({klass:"wnd_titlebar"})
	//		.css("backgroundImage","url("+gWndTitleBarImage+")")
			.css("background-Color","#ccccff")
			.bind("mousedown",wnd_title_down)
			.bind("contextmenu", menu_contextPopupPar)
			.addClass("wnd_titlebar")
			.appendTo(wnd);
			wnd_titlebar_text = wnditm_div_add({klass:"wnd_titlebar_text"},wnd_titlebar);
			if (!info.noZoom) wnd_titlebar.bind("dblclick", zoom_dblTitlebar)
			if (info.getTitle && parElem) wnd_titlebar_text.html(info.getTitle(parElem));
			else if (info.title) wnd_titlebar_text.html(info.title);

			//--- Add the closebox ---
			if (!info.noClose)
				{
				wnditm_imgbut_add({fname:"wnd_close_norm",func:wnd_closebox_click, 
						klass:"wnd_closebox"},wnd_titlebar);
				}
	
			//--- Add the zoombox ---
			if (!info.noZoom) 
				{
				wnditm_imgbut_add({fname: "wnd_zoom_norm",func: wnd_zoombox_click,
					klass: "wnd_zoombox"}, wnd_titlebar);
				}
			//--- Add the popup box ---
			if (!info.noPopup)
				{
				wnditm_imgbut_add({fname:"wnd_popup_norm",func:wnd_popupbox_down, 
						klass:"wnd_popupbox"},wnd_titlebar);
				}
			
			if (!info.noPrevNext)
				{
				//--- Add the prev wnd box ---
				wnditm_imgbut_add({fname:"wnd_prev_norm",func:wnd_prevbox_click, 
						klass:"wnd_prevbox"},wnd_titlebar);
		
				//--- Add the next wnd box ---
				wnditm_imgbut_add({fname:"wnd_next_norm",func:wnd_nextbox_click, 
						klass:"wnd_nextbox"},wnd_titlebar);
				}
			if (!info.noRefresh)
				{
				//--- Add the refresh but ---
				wnditm_imgbut_add({fname:"wnd_refresh",func:wnd_refresh, 
						klass:"wnd_refresh"},wnd_titlebar);
				}
			}

		//--- Add the window drag stuff ---
		wnd_setDrag(wnd_box, true);
		wnd_box.bind("mousedown", wnd_mousedown);
		}

	//--- Add the bottom bar ---
	if (!info.noBottom) wnditm_div_add({klass: "wnd_botbar"}, wnd);

	//--- Set window rect ---
	if (info.rect)
		{
		if (killpar && parWnd) {
			var r = new Rect().getElem(parWnd.parent());
		}
		else 
			{
			var r = info.rect;
			if (!gWndDB_loading)
				{
				if (!(info.prevWnd))
					{
					var cnt = 10;
					while(wnd_moveRectIfOverlap(r) && (--cnt>0));
					}
				}
			}
		if (r.top != undefined) wnd_box.css("top",r.top);
		if (r.left != undefined) wnd_box.css("left",r.left);
		if (r.height != undefined) wnd_box.css("height",r.height);
		if (r.width != undefined) wnd_box.css("width",r.width);
		if (r.right != undefined) wnd_box.css("right",r.right);
		if (r.bottom != undefined) wnd_box.css("bottom",r.bottom);
/*
		wnd_box.css({	
					top:parseInt(r.top), 
					left:parseInt(r.left), 
					height:parseInt(r.height), 
					width:parseInt(r.width)}); 
 */
		}
	else
		{
		wnd_box.css({top:0, left:0, height:"100%", width:"100%"});
		}
	wnd_box.appendTo($("body"));
		
	/*  APPENDING TO DESKTOP INSTEAD OF BODY...
		var dtop = $(".wnd_desktop");
		if (dtop.length > 0) wnd_box.appendTo(dtop);
		else wnd_box.appendTo($("body"));	
		}
	*/

	wnd_setLinks(wnd, parElem);	
	if (info.hbar != undefined) wnd.attr("hbar", info.hbar);
	//--- Final window prep ---
	wnd_makeFront(wnd);	
	
	//----------------------------------------
	//--- ADD WINDOW OBJECTS -----------------
	//----------------------------------------
	wnd_additms(wnd, info);
	if (info.noTitlebar)
		{
//		wnd.find(".wnd_cont").css("top",0);
//		wnd.find(".photos").css("top",0);
		}
	if (!wnd.attr("delayComplete")) wnd_complete(wnd, killpar, parElem);
	else wnd.trigger("doneAll");
	return wnd;
	}

//------------------------------------------------------------
function wnd_complete(wnd, killpar, parElem)
	{
	wnd.removeAttr("delayComplete");
	var info = wnd.wndInfo();
	if (parElem) var parWnd = parElem.wnd();
	var wnd_box = wnd.parent();
	if (info.hideDesktop)
		{
		wnd.attr("hideDesktop", true);
		wnd_desktop_hide();
		}
	if (info.init) info.init(wnd, parElem);
	if (info.idle)
		{	
		var freq = 1000;
		if (info.freq) freq = info.freq;
		var id = setInterval(info.idle, freq);
		wnd.attr("idleID", id);
		}

	if (info.dfltfocus) $("#"+info.dfltfocus).focus().select();
	else if (info.focusClass) wnd.find("."+info.focusClass).focus().select();

	if (killpar && parWnd) wnd_hide(parWnd);
	wnd_box.bind("mouseup", wndbox_mouseup);
	if (info.refresh) wnd.bind("refresh", info.refresh);
	if (info.setslide) wnd.bind("setslide", info.setslide);
	wnd_show(wnd);
	wnd.attr("vis", !info.hide);
//	if (!wnd.attr("static")) KeepElemInPar(wnd_box, 3);
	return wnd;
	}



//------------------------------------------------------------
function wnd_additms(wnd, wndinfo)
	{
	var itms = wndinfo.itms;
	for (var idx = 0; idx < itms.length; ++idx) 
		{
		wnd_additm(wnd, itms[idx]);
		}
	}
//------------------------------------------------------------
function wnd_getWndItmFunc(type)
	{
	for (var idx = 0; idx < gWnditms.length; ++idx)
		{
		var wnditm = gWnditms[idx];
		if (type == wnditm[0]) return wnditm[1];
		}
	}
//------------------------------------------------------------
function wnd_additm(wnd, itm)
	{
	if (itm.prep) itm.prep(itm);

	switch (itm.type) 
		{
		case "imgbut":
			if (itm.parClass) wnd = wnd.find("."+itm.parClass);
			wnditm_imgbut_add(itm.info, wnd);
			break;

		default:
			wnd_getWndItmFunc(itm.type)(itm, wnd);
			break;
		}
	}
//------------------------------------------------------------
function wnd_popupbox_down(but)
	{
	gWnd_OKMouseDown = false;
	var wnd = but.wnd();
	var wndbox = wnd.parent();
	wnd_setDrag(wndbox, false);
	var wInfo = wnd.wndInfo();
	var pos = {top:20, left:-6};
	LocalToParent(wndbox, pos);
	menu_popup(wInfo.popup, pos.left, pos.top);
	}

//------------------------------------------------------------
function wnd_title_down()
	{
	wnd_setDrag($(this).wndbox(), true);
	}
//------------------------------------------------------------
function wnd_zoombox_click()
	{
	var tbar = $($(this).parent());
	wnd_zoom($(tbar.parent()));
	$(this).removeClass("wnd_zoombox_down")
	.removeClass("wnd_zoombox_over")
	.addClass("wnd_zoombox");
	}

//------------------------------------------------------------
function zoom_dblTitlebar()
	{
	wnd_zoom($(this).parent());
	}
//------------------------------------------------------------
function wnd_closebox_click(but)
	{
	var wnd = but.wnd();
	wnd_close(wnd);
	}
//------------------------------------------------------------
function wnd_disconnect(wnd)
	{
	var funcID = wnd.attr("idleID");
	if (funcID) clearInterval(funcID);
	gWndFuncs.remove_by_klass(wnd.attr("wid"));
	gWndInfos.remove(wnd.attr("info"));
	return wnd;
	}

//------------------------------------------------------------
function wnd_makeBoxFront(box)
	{
	wnd_resetZIndecies(box);
/*
	box.children(".wnd_titlebar")
	.trigger("mousedown")
	.trigger("mouseup");
*/
	}

//------------------------------------------------------------
function wnd_makeSomethingFront()
	{
	if (!gWndDB_loading)
		{
		var wnd = wnd_getHighZIndexWnd();
		if (wnd) wnd_makeFront(wnd);
		}
	}
	
//------------------------------------------------------------
function wnd_makeFront(wnd)
	{
	if (!gWndDB_loading) 
		{
		if (!wnd.attr("static")) {
			$(".wnd_titlebar").css({"opacity": .3});
			$(wnd).children(".wnd_titlebar").css({"opacity": 1});
			wnd_resetZIndecies($(wnd.parent()));
		//	wnd_focus(wnd);
		}
	}
	return wnd;
	}
//------------------------------------------------------------
function wnd_show(wnd, makefront)
	{
	wnd.attr("vis",true);
	if (makefront) wnd_makeFront(wnd);
	wnd.parent().show();
	return wnd;
	}
//------------------------------------------------------------
function wnd_hide(wnd)
	{
	wnd.removeAttr("vis");
	wnd.parent().hide();
	return wnd;
	}

//------------------------------------------------------------
function wnd_mousedown()
	{
	wnd_setDrag(this, true);
	wnd_makeFront($(this).children(".wnd"));
	if (gWnd_OKMouseDown)
		{
		menu_closepopup();
		$("#window_transcover").show();
			gWndBeingDragged = true;
		}
	else gWnd_OKMouseDown = true;
	}
	
//------------------------------------------------------------
function wnd_setDrag(elem, enable)
	{
	menu_closepopup();
	var e = $(elem);
	if (enable) {
		if (!e.attr("drag")) {
			e.draggable({
				stack: {group: ".wnd_box",min: 1},
				handle: e.find(".wnd_titlebar"),
				start: wnd_startdrag,
				drag: wnd_drag,
				stop: wnd_enddrag,
				distance: 0
			}).attr("drag", true);
		}
	}
	else 
		{
		$(elem).draggable("destroy").removeAttr("drag");
		}
	}

//------------------------------------------------------------
function wnd_startresize()
	{
	gResizeTopFix = $(this).css("top");
	$(this).trigger("resizeStart");
	}
//------------------------------------------------------------
function wnd_resize_func(event, ui)
	{
	$(this).trigger("resize");
	}
//------------------------------------------------------------
function wnd_endresize()
	{
	$(this)
	.css("top",gResizeTopFix)
	.trigger("resizeStop");
	}

//------------------------------------------------------------
function wnd_startdrag()
	{
//	if ($.browser.msie) wnditm_div_add({},$("body")).remove();
	}
//------------------------------------------------------------
function wnd_drag(event, ui)
	{
	var wRect = new Rect().getElem($(this));
	var dRect = new Rect().getElem($(this).parent());
	if (ui.position.top<0) ui.position.top = 0;
	var leftLim = 0;
	var botLim = dRect.height-wRect.height;
	var rtLim = dRect.width-wRect.width;
	if (ui.position.left<leftLim) ui.position.left = leftLim;
	if (ui.position.top>botLim) ui.position.top = botLim;
	if (ui.position.left > rtLim) {
		ui.position.left = rtLim;
	}
/*
	if (ui.position.left<0) ui.position.left = 0;
	if ((ui.position.top+wRect.height) > dRect.height) ui.position.top = dRect.height-wRect.height;
	if ((ui.position.left+wRect.width) > dRect.width) ui.position.left = dRect.width-wRect.width;
*/
	}
//------------------------------------------------------------
function wnd_enddrag()
	{
	gWndBeingDragged = false;
	}
	
//------------------------------------------------------------
function wnd_IsDragging()
	{
	return gWndBeingDragged;
	}
//------------------------------------------------------------
function wnd_idle(wnd, idleFunc)
	{
	alert(wnd.attr("id"));
	}
//---------------------------------------
function wnd_trigger_chkbox()
	{
	$(this).parent().children("INPUT[type='checkbox']").click();
	}
//------------------------------------------------------------
function wnd_validate(wnd)	//user pass email oneLetter chkOne
	{
	var valid = true;
	var itms = $(".valid");
	if (itms)
		{
		var total = itms.length;
		for (idx = 0; idx < total; ++idx)
			{
			var itm = $(itms[idx]);
			var vType = itm.attr("valid");
			var val;
			if (vType == "radio") 
				{
				var name = itm.attr("name");
				if (!validate_field(vType, name))
					{
					valid = false;
					wnd_setRadiosColor(wnd, name, "#ff0000");
					}
				}
			else 
				{
				if (!validate_field(vType, itm.attr("value")))
					{
					valid = false;
					itm.css("background","#ff0000");
					}
				}
			}
		}
	return valid;
	}
//------------------------------------------------------------
function wnd_setRadiosColor(wnd, name, color)
	{
	var radios = wnd.children("INPUT[name='"+name+"']");
	for (var idx=0; idx < radios.length; ++idx)
		{
		wnd_getlbl($(radios[idx])).css("background",color);
		}
	}

//------------------------------------------------------------
function wnd_getlbl(radio)
	{
	var id = radio.attr("id");
	var baselen = id.lastIndexOf("_")+1;
	var base = id.substring(0, baselen);
	return $("#"+base+"lbl");
	}
//------------------------------------------------------------------
function wnd_radio_click()
	{
	return wnd_radio_click2($(this));
	}
//------------------------------------------------------------------
function wnd_radio_click2(elem)
	{
	var name = elem.attr("name");
	elem.parent().children("INPUT[name='"+name+"']")
	.removeAttr("checked");
	elem.attr("checked","checked");
	wnd_setRadiosColor(elem.parent(), name, "");
	if (elem.attr("SESS")) _SESS[elem.attr("SESS")] = elem.attr("value");
	return true;
	}
//------------------------------------------
function wnd_zoom(wnd)
	{
	var box = wnd.parent();
	
	if (box.css("width")=="100%" && box.css("height")=="100%")
		{
		if (box.attr("oldT"))
			{
			box.css({top:box.attr("oldT"), left:box.attr("oldL"), 
				width:box.attr("oldW"), height:box.attr("oldH")});
			}
		}
	else
		{
		box.attr({oldT:box.css("top"), oldL:box.css("left"),
					oldW:box.css("width"), oldH:box.css("height")});
		box.css({top:0,left:0,height:"100%",width:"100%"});
		} 
	box.trigger("resize");
	}

//------------------------------------------
function wnd_resize_photos()
	{
	var box = $(this).children(".wnd").children(".photos");
	wnditm_photos_redraw(box);
	}

//------------------------------------------
function getparwnd(elem)
	{
	if (elem.hasClass("wnd")) return elem;
	elem = elem.parent();
	while(elem != undefined)
		{
		if (elem.hasClass("wnd")) return elem;
		elem = elem.parent();
		}
	return false;
	}
//------------------------------------------
function getparwndbox(elem)
	{
	var wnd = getparwnd(elem);
	if (wnd) return wnd.parent();
	return false;
	}

//------------------------------------------
function wnd_drop(event, ui)
	{
	}
//-----------------------------------------------------------
function wnd_okToDrop(ui)
	{
		return true;
/*
	var photo = $(ui.draggable);
	if (photo.attr("dropped"))
		{
		photo.removeAttr("dropped");
		return false;
		}
	photo.attr("dropped", true);
	return true;
*/
	}
//-----------------------------------------------------------
function ResizeDesktop()
{
	var dtop = $(".wnd_desktop");
	if (dtop.length > 0) {
		dtop.children(".wnd_box").each(function()
		{
			if (box.css("width") == "100%") {
				box.trigger("resize");
			}
		})
	}
}
/*
wnditm_div_add({})
$("body")
		wnd.css({height:$(window).height(), width:$(window).width()})
		.css("border","#ff0000 3px dotted")
 */
	
//----------------------------------------------------------------------
function wnd_setIconSize()
	{
	var wnd = getparwnd(menu_getPopupTarget());
	if (wnd) 
		{
		var info = gMenuInfos.get($(this).attr("info"));
		wnditm_photos_setIconSize(wnd, info.iconsize);
		}
	}
//----------------------------------------------------------------------
function wnd_copyrect(srcWnd, destWnd)
	{
	var r = new Rect().getElem(srcWnd.parent())
	r.setElem(destWnd.parent());
	delete r;
	}

//----------------------------------------------------------------------
function wnd_openParent(wnd)
	{
	var prevID;
	if (prevID = wnd.attr("prev")) 
		{
		var parElem = gWndLinks.get(prevID);
		var parWnd = getparwnd(parElem);
		if (!parWnd.hasClass("wnd_desktop"))
			{
			if (wnd_vis(parWnd))
				{
				wnd_makeFront(parWnd);
				}
			else	
				{
				wnd_copyrect(wnd, parWnd);
				wnd_show(parWnd, true);
				}
			}
		}
	wnd_hide(wnd);
	}

//----------------------------------------------------------------------
function wnd_getParElem(wnd)
	{
	var prevID;
	if (prevID = wnd.attr("prev")) 
		{
		return gWndLinks.get(prevID);
		}
	return false;
	}
	
//----------------------------------------------------------------------
function wnd_prevbox_click(but)
	{
	var wnd = getparwnd(but);
	var info = wnd.wndInfo();
	if (info.prevWnd) info.prevWnd(wnd);
	else 
		{
		wnd_openParent(wnd);
		}
	}
//----------------------------------------------------------------------
function wnd_nextbox_click(but)
	{
	var wnd = getparwnd(but);
	var info = wnd.wndInfo();
	if (info.nextWnd) info.nextWnd(wnd);
	else
		{
		var wndID = wnd.attr("next");
		if (wndID) 
			{
			var nextWnd = $(".wnd:[wid="+wndID+"]");
			if (nextWnd) 
				{
				wnd_copyrect(wnd, nextWnd);
				wnd_show(nextWnd, true);
				wnd_hide(wnd);
				}
			}
		}
	}
//----------------------------------------------------------------------
function wnd_refresh(but)
	{
	getparwnd(but).trigger("refresh");
	}
//----------------------------------------------------------------------
function wndbox_mouseup()
	{
	wnd_focus($(this).children(".wnd"));
	}
//----------------------------------------------------------------------
function wnd_focus(wnd)
	{
	var info = wnd.wndInfo();
	if (info.oneFocus)
		{
		if (info.dfltfocus) $("#"+info.dfltfocus).focus().select();
		else if (info.focusClass) wnd.find("."+info.focusClass).focus().select();
		}
	}
//----------------------------------------------------------------------
function wnd_reopen(wnd, info)
	{
	info.rect = new Rect().getElem(wnd.parent());
	if (info.reopHeight) info.rect.height = info.reopHeight;
	if (info.reopWidth) info.rect.width = info.reopWidth;
	gIgnoreExistingWnd = true;
	wnd_open(info);
	wnd_close(wnd);
	}
//----------------------------------------------------------------------
function wnd_saveSESS(wnd)
	{
	wnd.find("[SESS]").each(function()
		{
		var fldName = $(this).attr("SESS");
		var fldVal = $(this).attr("value");
		_SESS[fldName] = fldVal;
		});
	}
	
//------------------------------------------------------------
function wnd_close(wnd, nextWndInfo)
	{
	if (wnd.attr("hideDesktop")) wnd_desktop_show();
	var parElem = wnd_getParElem(wnd);
	if (parElem) 
		{
		var parWnd = getparwnd(parElem);
		if (parWnd) 
			{
			if (parWnd.attr("vis")) 
				{
				var srcRect = new Rect().getElem(wnd.parent());
				var destRect = wnd_desktop_getRect(parElem);
				wnd_hide(wnd);
				srcRect.zoomTo(destRect, done_wnd_zoomClose, wnd);
				return;
				}
			}
		}
	wnd_kill(wnd, true);
	if (nextWndInfo) wnd_open(nextWndInfo);
	}
//----------------------------------------------------------------------
function wnd_kill(wnd, makeOtherFront)
	{
	wnd_disconnect(wnd).parent().remove();
	if (makeOtherFront) wnd_makeSomethingFront();
	}
//----------------------------------------------------------------------
function done_wnd_zoomClose(wnd)
	{
	wnd_makeSomethingFront();
	}
//----------------------------------------------------------------------
function wnd_beginWait(wnd)
	{
//	wnditm_img_add({klass:"waitgif", src:"ui_images/wait1.gif"}, wnd).css("zIndex",30000);
	}
//----------------------------------------------------------------------
function wnd_endWait(wnd)
	{
//	wnd.children(".waitgif").remove();
	}
//------------------------------------------------------------------
function wnd_clearErr()
	{
	$(this).css("background","#ffffff");
	}

//------------------------------------------
function getmsgbar(wnd)
	{
	return wnd.children(".wnd_botbar");
	}
//------------------------------------------
function setmsgbarTxt(wnd, html)
	{
	getmsgbar(wnd).html(html);
	}
//------------------------------------------------------------------
function wnd_prog_init(wnd, txt)
	{
	wnditm_div_add({klass:"wnd_botprogbar"}, wnd)
		.css({width:0, opacity:.35});
	if (txt) setmsgbarTxt(wnd, txt);
	}
//------------------------------------------------------------------
function wnd_prog_update(wnd, max, val, txt)
	{
	wnd.children(".wnd_botprogbar").css("width", 
	(getmsgbar(wnd).width() * val) / max);
	if (txt) setmsgbarTxt(wnd, txt);
	}
//------------------------------------------------------------------
function wnd_prog_end(wnd, txt)
	{
	wnd.children(".wnd_botprogbar").remove();
	if (txt) setmsgbarTxt(wnd, txt);
	}
//------------------------------------------------------------------
function wnd_drop(event, ui)
	{
	var wnd = $(this);
	var dropFunc = wnd.wndInfo().drop;
	if (wnd_okToDrop(ui)) drop_Add(dropFunc, wnd, event, ui);
	}
//------------------------------------------
function wnd_baddrop(wnd, event, ui)
	{
	setTimeout(done_wnd_baddrop, 500, wnd, wnd.css("backgroundColor"));
	wnd.css("backgroundColor", "#ff0000");
	}
//------------------------------------------------------------------
function done_wnd_baddrop(wnd, color)
	{
	wnd.css("backgroundColor", color);
	}
//------------------------------------------------------------------
function wnd_LocalToGlobal(wnd, pos)
	{
	var wndBox = wnd.parent();
	pos.top += parseInt(wndBox.css("top"));
	pos.left += parseInt(wndBox.css("left"));
	}
//------------------------------------------------------------------
function wnd_GlobalToLocal(wnd, pos)
	{
	var wndBox = wnd.parent();
	pos.top -= parseInt(wndBox.css("top"));
	pos.left -= parseInt(wndBox.css("left"));
	}

//------------------------------------------------------------------
function wnd_moveRectIfOverlap(r)
	{
	var moved=false;
	$(".wnd_box").each(function(){
		var wnd = $(this).children(".wnd");
		if (!wnd.hasClass("wnd_desktop")) {
			var rect = new Rect().getElem($(this));
			if (rect.sect(r)) {
				if (r.left == rect.left) {
					r.left += 20;
					moved = true;
				}
				if (r.top == rect.top) {
					r.top += 20;
					moved = true;
				}
			}
		}
			});	
	delete rect;
	return moved;
	}

//------------------------------------------------------------------
function wnd_vis(w)
	{
	return w.parent().is(':visible');
	}
//------------------------------------------------------------------
function wnd_gethbar(wnd)
	{
	var hbar = wnd.find(".hbar");
	if (hbar.length>0) return parseInt(hbar.css("top"));
	return 0;
	}
//------------------------------------------------------------------
function wnd_getNextZIndex()
	{
	var max = 20000;
	$(".wnd_box").each(function(){
		var z = parseInt($(this).css("zIndex"));
		if (z>=max) max = z;
	});
	return max+1;
	}
//------------------------------------------------------------------
function wnd_getHighZIndexWnd()
	{
	var wb;
	var max = 0;
	$(".wnd_box").each(function()
		{
		var wbox = $(this);
		if (wbox.children(".wnd").attr("vis"))
			{
			var z = parseInt(wbox.css("zIndex"));
			if (z >= max) 
				{
				max = z;
				wb = $(this);
				}
			}
		});
	if (wb) return wb.children(".wnd");
	}

//------------------------------------------------------------------
function wnd_resetZIndecies(frontWndBox)
	{
	frontWndBox.css("zIndex", 10000);
	var wnds = $(".wnd_box");
	wnds.sort(function(a,b)
		{
		return parseInt($(a).css("zIndex"))-parseInt($(b).css("zIndex"));
		});
	for (var i=0; i<wnds.length; ++i) $(wnds[i]).css("zIndex",i+1);
	}
	

//------------------------------------------------------------------
function wnd_zoomOn()
	{
	gWnd_ZoomOn = true;
	}
//------------------------------------------------------------------
function wnd_zoomOff()
	{
	gWnd_ZoomOn = false;
	}
//------------------------------------------------------------------
function wnd_isZoomOn()
	{
	return gWnd_ZoomOn;
	}
//------------------------------------------------------------------
function wnd_visZoom(srcRect, destRect, func, arg)
	{
	if (wnd_isZoomOn()) srcRect.zoomTo(destRect, func, arg);
	else func(arg);
	}
	
//------------------------------------------------------------
function wnd_setLinks(wnd, parElem)
	{
	if (parElem) 
		{
		if (parElem.wnd().hasClass("wnd_desktop")
			|| (
				wnd.hasClass("wnd_album") 
				|| wnd.hasClass("wnd_albums")
				|| wnd.hasClass("wnd_media")
				|| wnd.hasClass("wnd_profile")
				)
			)
			{
			if (wnd.attr("prev")) gWndLinks.remove(wnd.attr("prev"));
			parElem.wnd()
			.attr("next", wnd.attr("wid"));
			wnd.attr("prev", gWndLinks.add(parElem));
			parElem.attr("wndID", wnd.attr("wid"));
			return true;
			}
		}
	return false;
	}
//------------------------------------------------------------------
$.fn.wnd = function()
	{
	return getparwnd($(this));
	}
//------------------------------------------------------------------
$.fn.wndInfo = function()
	{
	return gWndInfos.get($(this).attr("info"));
	}
//------------------------------------------------------------------
$.fn.wndMore = function()
	{
	var info = $(this).wndInfo();
	if (info) return info.more;
	}
//------------------------------------------------------------------
$.fn.wndbox = function()
	{
	return getparwnd($(this)).parent();
	}
//------------------------------------------------------------------
$.fn.wndtitle = function(title)
	{
	var tbTxt = $(this).find(".wnd_titlebar").find(".wnd_titlebar_text");
	if (arguments.length > 0) tbTxt.html(title);
	else return tbTxt.html();
	}

//------------------------------------------------------------------
$.fn.wndDone = function()
	{
	var wnd = $(this);
	var tcnt = wnd.attr("taskcnt");
	if (tcnt)
		{
		if (tcnt > 0) 
			{ 
			if (wnd.attr("existed"))
				{
				wnd.attr("taskcnt",0);
				return true;
				} 
			return false; 
			}
		}
	var info = wnd.wndInfo();
	if (info.hide) wnd_hide(wnd);
	return true;
	}
//------------------------------------------------------------------
function wnd_doneTask(e)
	{
	var wnd = $(this);
	var taskcnt = parseInt(wnd.attrZero("taskcnt"));
	if (taskcnt > 0) wnd.attr("taskcnt", taskcnt - 1);
	else wnd.trigger("doneAll");
	e.stopPropagation();
	}