var ajaxObjects=new Array();
var is_busy=false;
var agent=getBrowser();
var wmInstalled=false;
var previewpage=false;

var list_icons={
	rss_flickr_daily:'rss',
	xml_applemovie:'playlist_apple',
	html_youtube:'playlist_yt',
	search_youtub:'search',
	xml_shoutcast:'playlist_sc',
	search_shoutcast:'search',
	directory:'playlist'
};

addEvent(window,'load',interfaceInit,false);

function interfaceInit(){
	if(previewpage)return false;
	prel=['v_button_over.png','nav_hover.png'];
	imgtmp=new Array();
	for(i=0;i<prel.length;i++){
		imgtmp[i]=new Image();
		imgtmp[i].src='/images/'+prel[i];
	}

	in_focus();
	addEvent(window,'scroll',busy_pos,false);

	// fix FF's dotted-line button mess
	if(document.all)return false;
	btns=document.getElementsByTagName('BUTTON');
	for(i=0;i<btns.length;i++){
		if(btns[i].className=='v_button'){
			addEvent(btns[i],'focus',function(){this.blur();},false);
		}
	}
}

function go(where){
	if(is_busy){
		dialog_show('static','System busy','<p><strong>Please wait for the current operation to finish</strong></p>');
		setTimeout('dialog_hide()',2000);
	}else{
		//if(where.substr(0,1)!='/')where='/cgi-bin/'+where;
		if(top.location!=location){
			window.open(where);
		}else{
			window.location=where;
		}
	}
	return false;
}

function dialog_show(obj,titl,txt){
	if(obj=='static'){
		ws=winSize();
		mp={x:(ws.w/2-230),y:200};
	}else{
		mp=getObjPos(obj);
	}
	$('dialog_title').innerHTML=titl;
	off_x=0;
	off_y=0;
	populate=true;
	if(arguments.length>3){
		xtra=arguments[3];
		off_x=xtra.left||0;
		off_y=xtra.top||0;
		if(xtra.populate==false){
			populate=false;
		}
	}
	if(populate) $('dialog_inner').innerHTML=txt;
	with($('dialog').style){
		left=(mp.x-20+off_x)+'px';
		top=(mp.y-10+off_y)+'px';
		visibility='visible';
	}
}

function dialog_alert(obj,titl,txt){
	htm='<p align="center">'+txt+'</p><p>&nbsp;</p><p align="center" id="dialog_ok"><button class="v_button" onclick="dialog_hide()">OK</button></p>';
	xtra=new Array();
	if(arguments.length>3){
		xtra=arguments[3];
	}
	dialog_show(obj,titl,htm,xtra);
}

function dialog_hide(){
	$S('dialog').visibility='hidden';
}

function dialog_hide_disable(){
	$('dialog_x_hide').style.display='block';
}

function dialog_hide_enable(){
	$('dialog_x_hide').style.display='none';
}

function progress(fraction){
	if(fraction>1)fraction=1;
	pos=291*(fraction-1);
	$('progress_bar').style.backgroundPosition=parseInt(pos)+'px 0px';
}

function set_busy(which){
	is_busy=which;
	if(is_busy){
		t=document.documentElement.scrollTop||document.body.scrollTop;
		tLimit=117;
		mTop=(t>tLimit?t-tLimit:0);
		$('busy').style.marginTop=mTop+'px';
	}
	$('busy').style.visibility=(which?'visible':'hidden');
}

// login functions

function checkKey(objEvent){
  if(objEvent.keyCode==13){
  	login();
  	return false;
  }else{
  	return true;
  }
}

function login(){
	$('login_error').innerHTML='';
	classRem($('login'),'has_error');
	$('busy').style.visibility='visible';
	var ajaxIndex=ajaxObjects.length;
	ajaxObjects[ajaxIndex]=new sack();
	with(ajaxObjects[ajaxIndex]){
		requestFile ="/members/";
		setVar("action","takelogin");
		setVar("ajax",1);
		setVar("username",$('l_user').value);
		setVar("password",$('l_pass').value);
		onCompletion=function(){login_response(ajaxIndex);};
		runAJAX();
	}
}

function login_response(index){
	txt=ajaxObjects[index].response;
	lines=txt.split("\n");
	switch(lines[0]){
		case 'ok':
			expdt=new Date();
			expdt.setDate(expdt.getYear()+1);
			setCookie('l_access',lines[1],expdt);
			if(lines[2]==1){
				location.reload(true);
				return false;
			}
			$('login').innerHTML=ieCornersGen()+'<p><a class="username" href="/members/">'+$('l_user').value+'</a> signed in</p>'+
			'<p><a href="/cgi-bin/members.cgi?action=signout">sign out</a></p>';
			userid_master=lines[3];
			break;
		case 'nv':$('login_error').innerHTML='not yet validated';classAdd($('login'),'has_error');break;
		case 'invalid':$('login_error').innerHTML='login invalid';classAdd($('login'),'has_error');break;
		default:alert(txt);
	}
	$('busy').style.visibility='hidden';
}

// browse IP

function ip_sync(){
	set_busy(true);
	var ajaxIndex=ajaxObjects.length;
	ajaxObjects[ajaxIndex]=new sack();
	with(ajaxObjects[ajaxIndex]){
		requestFile ="/members/";
		setVar("action","ipsync");
		onCompletion=function(){ip_sync_complete(ajaxIndex);};
		runAJAX();
	}
}

function ip_sync_complete(index){
	$('btn_sync').innerHTML='';
	set_busy(false);
}

// utility

function ieCorners(){
	document.write(ieCornersGen());
}

function ieCornersGen(){
	if(!agent.ie) return '';
	return '<div class="ietl"></div><div class="ietr"></div><div class="iebl"></div><div class="iebr"></div>';
}

var cMenu={
	_menus:new Array,
	_attachedElement:null,
	_menuElement:null,
	_preventDefault:true,
	_preventForms:true,
	_timer:0,

	setup:function(conf){
		cMenu.IE=(agent.name=='ie');
		cMenu.FF=(agent.name=='firefox');
		cMenu.OP=(agent.name=='opera');
		if(cMenu.IE||cMenu.FF ){
			document.oncontextmenu=cMenu._show;
			document.onclick=function(){
				cMenu._hide();
				clearTimeout(cMenu._timer);
			}
			if(conf && typeof(conf.preventDefault)!="undefined"){
				cMenu._preventDefault=conf.preventDefault;
			}
			if(conf && typeof(conf.preventForms)!="undefined"){
				cMenu._preventForms=conf.preventForms;
			}
		}
	},

	attach:function(classNames, menuId){
		if(typeof(classNames)=="string"){
			cMenu._menus[classNames]=menuId;
		}
		if(typeof(classNames)=="object"){
			for(x=0;x<classNames.length;x++){
				cMenu._menus[classNames[x]]=menuId;
			}
		}
	},

	_getMenuElementId:function(e){
		cMenu._attachedElement=(cMenu.IE?event.srcElement: e.target);
		while(cMenu._attachedElement!=null){
			var className=cMenu._attachedElement.className;
			if(typeof(className)!="undefined"){
				className=trim(className);
				var classArray=className.split(/[ ]+/g);
				for(i=0;i<classArray.length;i++){
					if(cMenu._menus[classArray[i]]){
						return cMenu._menus[classArray[i]];
					}
				}
			}
			cMenu._attachedElement=(cMenu.IE?cMenu._attachedElement.parentElement:cMenu._attachedElement.parentNode);
		}
		return null;
	},

	_getReturnValue:function(e){
		var returnValue=true;
		var evt=cMenu.IE?window.event:e;
		if(evt.button!=1){
			if(evt.target){
				var el=evt.target;
			}else if(evt.srcElement){
				var el=evt.srcElement;
			}
			var tname = el.tagName.toLowerCase();
			if((tname=="input"||tname=="textarea")){
				returnValue=(cMenu._preventForms?false:true);
			}else{
				returnValue=(cMenu._preventDefault?false:true);
			}
		}
		return returnValue;
	},

	_show:function(e){
		cMenu._hide();
		var menuElementId=cMenu._getMenuElementId(e);
		if (menuElementId){
			var m=getMousePos(e);
			cMenu._menuElement=$(menuElementId);
			cMenu._menuElement.style.left=(m.x-3)+'px';
			cMenu._menuElement.style.top=(m.y-3)+'px';
			cMenu._menuElement.style.display='block';
			cMenu._menuElement.onmousemove=function(){clearTimeout(cMenu._timer);};
			cMenu._menuElement.onmouseout=function(){cMenu._timer=setTimeout('cMenu._hide()',1000);};
			return false;
		}
		return cMenu._getReturnValue(e);
	},

	_hide:function(){
		if(cMenu._menuElement){
			cMenu._menuElement.style.display='none';
		}
	}
}

function addEvent(elm, evType, fn, useCapture){
  if(elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  }
} 

function removeEvent(elm, evType, fn, useCapture){
  if (elm.removeEventListener){
    elm.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.detachEvent){
    var r = elm.detachEvent("on"+evType, fn);
    return r;
  }
}

function getObjPos(obj){
	var l=0;
	var t=0;
	while(obj.offsetParent){
		l+=obj.offsetLeft;
		t+=obj.offsetTop;
		obj=obj.offsetParent;
	}
	l+=obj.offsetLeft;
	t+=obj.offsetTop;
	return{x:l,y:t};
}

function getMousePos(ev){
	ev=ev||window.event;
	if(ev.pageX){
		return{x:ev.pageX,y:ev.pageY};
	}else{
		return{
			x:ev.clientX+document.documentElement.scrollLeft-document.body.clientLeft,
			y:ev.clientY+document.documentElement.scrollTop-document.body.clientTop
		};
	}
}

function getScrollPos(){
	var x = 0;
	var y = 0;
	if(typeof(window.pageYOffset)=='number'){
		x=window.pageXOffset;
		y=window.pageYOffset;
	}else if(document.documentElement && (document.documentElement.scrollLeft||document.documentElement.scrollTop )){
		x=document.documentElement.scrollLeft;
		y=document.documentElement.scrollTop;
	}else if(document.body && (document.body.scrollLeft||document.body.scrollTop)){
		x=document.body.scrollLeft;
		y=document.body.scrollTop;
	}
	var position={'x':x,'y':y};
	return position;
}

function getMouseOffset(target, ev){
	ev = ev||window.event;
	var docPos=getObjPos(target);
	var mousePos=getMousePos(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function $(what){
	return document.getElementById(what)||document.getElementsByName(what)[0];
}

function $P(what){
	return parent.document.getElementById(what)||parent.document.getElementsByName(what)[0];
}

function $PW(what){
	return pwin.document.getElementById(what)||pwin.document.getElementsByName(what)[0];
}

function $S(what){
	return $(what).style;
}

function $H(what){
	return $(what).innerHTML;
}

function imageOk(img){
	return(!img.complete)?false:!(typeof img.naturalWidth!='undefined'&&img.naturalWidth==0);
}

function disable_select(){
	if(arguments.length==0){
		objTarget=document;
	}else{
		objTarget=arguments[0];
	}
	objTarget.onselectstart=new Function('return false');
	function ds(e){return false;}
	function ra(){return true;}
	objTarget.onmousedown=ds;
	objTarget.onclick=ra;
}

function winSize(){
	var winW = 630, winH = 460;
	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			winW = window.innerWidth;
			winH = window.innerHeight;
		}
		if (navigator.appName.indexOf("Microsoft")!=-1) {
			winW = document.body.offsetWidth;
			winH = document.body.offsetHeight;
		}
	}
	return {w:winW,h:winH};
}

function trim(what){
	if(what=='')return '';
	str=what.replace(/^\s*/,'');
	str=str.replace(/\s*$/,'');
	return str;
}

function getBrowser(){
	aStr=navigator.userAgent;
	// Mozilla/5.0 (compatible; Konqueror/3.3; Linux)(KHTML, like Gecko)
	p=navigator.platform;
	if(aStr.search(/ MSIE ([\d\.]+)/)>0){
		ieVer=RegExp.$1;
		if(aStr.search(/America Online Browser ([\d\.]+)/)>0){
			return{name:'aol',strname:'AOL browser',version:RegExp.$1,platform:p,ie:true};
		}else{
			return{name:'ie',strname:'Internet Explorer',version:ieVer,platform:p,ie:true};
		}
	}
	
	if(aStr.search(/ Firefox\/([\d\.]+)/)>0){
		return{name:'firefox',strname:'Firefox',version:RegExp.$1,platform:p,ie:false};
	}
	
	if(aStr.search(/Version\/([\d\.]+) Safari/)>0){
		return{name:'safari',strname:'Safari',version:RegExp.$1,platform:p,ie:false};
	}
	
	if(aStr.search(/Opera\/([\d\.]+)/)>=0){
		return{name:'opera',strname:'Opera',version:RegExp.$1,platform:p,ie:false};
	}

	if(aStr.search(/ Chrome\/([\d\.]+)/)>0){
		return{name:'chrome',strname:'Google Chrome',version:RegExp.$1,platform:p,ie:false};
	}
	
	return {name:'unknown',strname:'Unknown browser',version:0,platform:'unknown',ie:false};
}

function flashEval(){
	flashInstalled=DetectFlashVer(9,0,128);
	//flashVer=GetSwfVer();
	return flashInstalled;
}

function qtEval() {
	var qtInstalled=false;
	qtObj=false;
	if(navigator.plugins && navigator.plugins.length){
		for(var i=0;i<navigator.plugins.length;i++){
			var plugin=navigator.plugins[i];
			if(plugin.name.indexOf("QuickTime")>-1){
				qtInstalled=true;
			}
		}
	}else{
		execScript('on error resume next: qtObj=IsObject(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1"))','VBScript');
		qtInstalled=qtObj;
	}
	return qtInstalled;
}

function wmEval(){
	if(navigator.plugins && navigator.plugins.length){
		wmObj=navigator.mimeTypes && navigator.mimeTypes["video/x-ms-wm"] && navigator.mimeTypes["video/x-ms-wm"].enabledPlugin && navigator.mimeTypes["video/x-ms-wmv"] && navigator.mimeTypes["video/x-ms-wmv"].enabledPlugin;
		wmInstalled=wmObj?true:false;
	}else{
		divObj=document.createElement('DIV');
		divObj.id='ie_test';
		document.body.appendChild(divObj);
		divObj.innerHTML='<object id="NSPlay" width="1" height="1" classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="#Version=6,4,5,715"></object>';
		execScript('On error resume next: wmInstalled=(NSPlay.FileName="")','VBScript');
	}
	return wmInstalled;
}

function dxEval(){
	if(navigator.plugins && navigator.plugins.length){
		for(var i=0;i<navigator.plugins.length;i++){
			var plugin=navigator.plugins[i];
			if(plugin.name.indexOf("DivX Player")>-1){
				return 1; // installed
			}
		}
		return 0; // not installed
	}else{
		return -1; // can't tell - running fookin ie
	}
}

function classAdd(obj,cls){
	obj.className+=' '+cls;
}

function classRem(obj,cls){
	if(!obj)return false; // for vanishing login fields
	var re=new RegExp(cls,"g");
	str=obj.className;
	bf=str;
	str=str.replace(re,'');
	str=str.replace(/  /g,' ');
	obj.className=str;
}

function getClasses(obj){
	return obj.className.split(' ');
}

// init

function dbg(){
	txt=arguments[0];
	if(arguments.length>1){
		$('debug').innerHTML+=txt+'<br>';
	}else{
		$('debug').innerHTML=txt;
	}	
}

function in_focus(){
	focus_types=['INPUT','TEXTAREA'];
	inc=0;
	for(j=0;j<focus_types.length;j++){
		ins=document.getElementsByTagName(focus_types[j]);
		for(i=0;i<ins.length;i++){
			if(ins[i].className.search(/intxt/)>=0){
				var tid=ins[i].id.toString();
				if(!tid){
					tid='ftxt'+inc;
					ins[i].id=tid;
					inc++;
				}
				eval("fn_focus=function(){classAdd($('"+tid+"'),'focus');}");
				eval("fn_blur=function(){classRem($('"+tid+"'),'focus');}");
				eval("fn_click=function(){$('"+tid+"').focus();}");
				addEvent(ins[i],'focus',fn_focus,false);
				addEvent(ins[i],'blur',fn_blur,false);
				addEvent(ins[i],'click',fn_click,false);
			}
		}
	}
}

function busy_pos(){
	if(!is_busy) return false;
	t=document.documentElement.scrollTop||document.body.scrollTop;
	tLimit=117;
	mTop=(t>tLimit?t-tLimit:0);
	$('busy').style.marginTop=mTop+'px';
}

Array.prototype.inArray=function(value){
	var i;
	for(i=0;i<this.length;i++) {
		if(this[i]===value){
			return true;
		}
	}
	return false;
};

Array.prototype.index=function(value){
	var i;
	for(i=0;i<this.length;i++) {
		if(this[i]===value){
			return i;
		}
	}
	return -1;
};

