/**************************************************
 sync-music.com - General JS
 Created: 2008
 Last Updated: 9/3/10
 
 **************************************************/


function getElementsByClass(searchClass,node,tag) {
	// Created: 3/3/10
	// Based on: http://www.dustindiaz.com/getelementsbyclass/
	
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}




function CallPlayerPlaylist(str_filename,str_title,str_composer,int_trackid,str_actions,int_parts,int_addtoplaylist,objectuid){
	// Player script for combined music player (combined since 25/1/10)
	// NOTE: This player now parses the track Id as its required by playlist player
	// objectuid is optional and used to locate the playbutton if specified
	
	// Created: 4/11/09
	// Updated: 9/3/10
	
	debug=false;
	
	// DETERMINE PLAY BUTTON IMAGE TO DETERMINE FUNCTION ACTIONS...
	if (objectuid == undefined || objectuid==""){
		if (int_addtoplaylist == 0){
			playbutton = document.getElementById("play_"+int_trackid).src;
			playbutton_name="play_"+int_trackid;
		}
	}else{
		playbutton = document.getElementById(objectuid).src;
		playbutton_name=objectuid;
	}
	
	
	// HANDLE STOP ACTION - includes resetting stop to play image in page.
	if ( int_addtoplaylist==0 && playbutton.indexOf("_stop")>-1 ){
		var obj = document.getElementById("myCom");
		
		if (obj && typeof obj.makeAudioPause != "undefined") {
			obj.makeAudioPause();
			// set btn back to play
			MM_swapImage('play_'+int_trackid+'','','images/synctheme/btn_tracklist_play.gif',1);
			
		}else{
			alert("Player Error : Comm Error - Please report this problem to us!");
		}
		
	}else{
		//NORMAL PLAY ACTION
		if (swfobject.getFlashPlayerVersion().major<9||swfobject.getFlashPlayerVersion().major==0){
			playerdiv = document.getElementById("mp3player2");
			playerdiv.innerHTML="<strong>FLASH PLAYER NOT FOUND!</strong><br>You need to install the Adobe Flash Player to play music on our website.";
			
			//playerdiv.innerHTML=""Your web browser seems to be unable to support the Macromedia Flash Player required to use our music player. Please install the latest version of the Flash Player via <a href=\"http://get.adobe.com/flashplayer\">get.adobe.com/flashplayer</a>";
			return;
		}
		
		
		// Determine if single or multi track mode?
		if (int_parts==1){
			var str_trackparts="1";
			
			sendval='filenamePrefix=custom_getaudio.php?file='+str_filename;
			sendval+='&filenameSuffix=';
		}
		if (int_parts>1){
			var str_trackparts="";
			var counter=1;
			var checked=0;
			while (counter<=int_parts) {
				var checkbox = document.getElementById(int_trackid+'_'+counter);
				if (checkbox!=undefined){
					if (checkbox.checked==true){
						checked++;
						str_trackparts+='1';
					}else{
						str_trackparts+='0';
					}
				}
				counter=counter+1;
			}
			// split file
			var splitfile=str_filename.split("-full-");
			if (splitfile.length!=2){
				alert("Player Error: Multi-track Split Error - Please report this problem to us!");
			}else{
				// ~ chosen as best safe character to split the file name with
				sendval='filenamePrefix=custom_getaudio.php?file='+splitfile[0]+'~';
				sendval+='&filenameSuffix=~'+splitfile[1];
			}
			
			// Check All tracks if no parts checked? - Actioned when play is clicked with nothing selected
			if (checked==0){
				// no checks so report error
				//alert ('You have not selected any track parts to play!');
				var checkbox = document.getElementById(int_trackid+"_1"); 
				if (checkbox ==undefined||checkbox.checked==false){
					checkbox.checked=true;
				}
				
				str_trackparts="";
				for (b=0;b<int_parts;b++){
					if (b==0){
						str_trackparts+='1';
					}else{
						str_trackparts+='0';
					}
				}
			}
		}
		
		sendval+='&trackName='+str_title;
		sendval+='&artistName='+str_composer;
		sendval+='&trackid='+int_trackid;
		sendval+='&actionsAllowed='+str_actions;
		sendval+='&trackParts='+str_trackparts;
		
		var obj = document.getElementById("myCom");
		if (int_addtoplaylist==1){
			if (obj && typeof obj.sendToFlash != "undefined") {
				//DEBUG
				if (debug==true){alert('* CALLING MP3 PLAYER - ADD TO PLAYLIST MODE - DEBUG (26-1-10) *\n\n' + str_replace("&","\n",sendval));}
				obj.sendToFlash(sendval);
			}	
		}else{
			if (obj && typeof obj.sendInstantToFlash != "undefined") {
				//DEBUG
				if (debug==true){alert('* CALLING MP3 PLAYER - INSTANT MODE - DEBUG (26-1-10) *\n\n' + str_replace("&","\n",sendval));}
				obj.sendInstantToFlash(sendval);
			}
		}
		
		// change tr background. assume yes if multipart ?
		if (int_parts>1){
			MakeTRGreen(int_trackid);
		}
	
	}
	
	
}




function replaceQueryStringValue(url,param,newvalue,remove_others) {
	// Created: 19/11/09
	// Updated: 24/2/10
	// Desc: Function is capable of processing urls that consist of full url (with http://xxx.com?...) or just a series of parameters delimited by &
	
	// Params: 
	// Remove others: boolean that defaults to true.
	
	// Requires: rtrim()
	
	
	// debug
	//alert ("Entering replaceQueryStringValue()\n\nURL: "+url+"\nLooking for: "+param+"\nTo replace with: "+newvalue);
	
	// clear all other urls from string?
	if (remove_others == undefined || remove_others == true) {
		var clearurl=true;
		//alert ("Setting true");
	}else{
		var clearurl=false;
		//alert ("Setting false");
	}
	
	var newurl="";
	var match_count=0;
	varurl=url.toString();
    varurl=varurl.split("?");
	
	if (varurl.length==1){
		//alert("? is NOT detected");
		var rooturl=varurl[0];
		var params="";
		var url_param_chr="?";
		var noparams=true;
	}
	if (varurl.length>1){
		//alert("? detected");
		var rooturl=varurl[0];
		var params=varurl[1];
		var url_param_chr="?";
		var noparams=false;
	}
	// remove unwanted duplicates
	params=params.replace("&&","&");
	
	//alert ("rooturl --- varurl...\n\n"+rooturl+"\n"+params);
	
	// split params
	params=params.split("&");
	//alert ("URL Param count: "+params.length+"("+params+")");
	if (params!=""){
		for (i=0;i<params.length;i++){
			//alert ("Processing: "+params[i]);
			var urlparts=params[i].split("=");
			 
			if (i>0){
				if (newurl!=""){
					// only add ampersand if the newurl isnt empty right now
					newurl=newurl+"&";
				}
			}
			if (param==urlparts[0]){
				//alert ("Match found for: "+param+"---"+urlparts[0]);
				newurl=newurl+"&"+urlparts[0]+"="+newvalue;
				match_count++;
			}else{
				
				// only add if both values exist (not case in some malformed urls)
				if ( param!=undefined && urlparts[0]!=undefined && clearurl==false) {
					//alert ("Match NOT found for: "+param+"---"+urlparts[0]);
					newurl=newurl+urlparts[0]+"="+urlparts[1];
				} else{
					//alert ("Match NOT found for: "+param+"---"+urlparts[0]+" --- NOT ADDING");	
				}
				
			}
		}
	}
	
	// add new param to end of url if param name not found
	if (match_count==0){
		if (noparams==true){
			newurl=newurl+param+"="+newvalue;
		}else{
			newurl=newurl+"&"+param+"="+newvalue;
		}
	}
	
	var returning=rooturl+url_param_chr+newurl;
	// cleaning malformed urls before finalise
	returning=returning.replace("&&","&");
	returning=returning.replace("\?&","?");
	returning=rtrim(returning,"&");
	
	//alert ("RETURNING: "+returning);
	return returning;
}




function rtrim ( str, charlist ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Erkekjetter
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   input by: rem
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: rtrim('    Kevin van Zonneveld    ');
    // *     returns 1: '    Kevin van Zonneveld'

    charlist = !charlist ? ' \\s\u00A0' : (charlist+'').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\\$1');
    var re = new RegExp('[' + charlist + ']+$', 'g');
    return (str+'').replace(re, '');
}



function confirmDelete($msg,$url) { 
	// Created: 2007
	// Updated: 31/12/09
	
	var agree=confirm($msg);
	if (agree) {
		MM_goToURL('parent',$url);
		return true ;
	} else {
		return false ;
	}
}


function showhide(layer_ref) {
	// Created: 30/12/09
	
	state=document.getElementById(layer_ref);
	//change arrow state
	arrow=layer_ref+"_Arrow";
	
	if (state.style.display == 'block' || state.style.display == '' || state.style.display == null) {
		state.style.display = 'none';
		MM_swapImage(arrow,'','images/synctheme/btn_expcol_right.gif',1);
	}
	else {
		state.style.display = 'block';
		MM_swapImage(arrow,'','images/synctheme/btn_expcol_down.gif',1);
	}
} 


function playerStateChanged(parsedid,int_playstate){
	// Created: 16/12/09
	// Updated: 4/3/10
	
	$debug=false;
	
	// NOTE: Called from actual flash player itself!
	
	// Desc: Used to change play icon of playing track within track listing html.  
	//	Function then calls resetStopBtns to enumerate through all other possible play buttons and change their stop status back to play.  
	// Requires: resetStopBtns()
	
	if ($debug==true){
		alert ("playingIdChanged() called with id & state: "+parsedid+ " / "+int_playstate);
	}
	
	if (parsedid!=undefined){	// safety check for blank player loading with no id
	
		if ($debug==true){alert ("Looking for play button: play_"+parsedid);}
		if (document.getElementById('play_'+parsedid).src){
			var buttonname='play_'+parsedid;
			
		}
	
		if (int_playstate==1){
			MM_swapImage(buttonname,'','images/synctheme/btn_tracklist_stop.gif',1);
			//alert ("Calling resetStopBtns("+parsedid+")");
			resetStopBtns(parsedid);
		}else{
			MM_swapImage(buttonname,'','images/synctheme/btn_tracklist_play.gif',1);
		}
	}
}
function resetStopBtns(parsedid){
	// Created: 15/12/09
	// Updted: 9/3/10
	
	// Desc: Developed to set any stop buttons back to default playstate. Excludes the parsed id. Called via playerStateChanged!!!
	
	$debug=false;
	
	if ($debug==true){alert("running resetStopBtns(). Parsed ID: "+parsedid);}
	// special method required to obtain trackids for synctank page due to multiple trackid form elements
	// in synctank there is no trackids hidden form. instead multiple values with a class called trackids. thats used to enumerate through them.
	if (!document.getElementById("trackids")){
		//if ($debug==true){alert ("looking for synctank trackids");}
		var trackid_forms = getElementsByClass("trackids");
		var collected_ids="";
		//if ($debug==true){alert("found "+trackid_forms.length+" hidden form elements");}
		for (i = 0; i < trackid_forms.length; i++) {
			var hidden_form=trackid_forms[i].id;
			var hidden_form_object = document.getElementById(hidden_form);
			if (hidden_form_object.value!=undefined && hidden_form_object.value!=""){
				//if ($debug==true){alert ("found: "+hidden_form_object.value+" in "+hidden_form);}
				collected_ids=collected_ids+hidden_form_object.value+",";
			}
		}
		trackids=rtrim(collected_ids,",");
	}else{
		trackids = document.getElementById("trackids").value;
	}
	if ($debug==true){alert("Collected Ids: "+trackids);}
	
	
	trackids_array=trackids.split(",");
	
	// loop through the buttons and reset matching ones from stop to play state
	for (i=0;i<=trackids_array.length;i++){
		var playbtn = document.getElementById("play_"+trackids_array[i]).src;
		//if ($debug==true){alert (parsedid+"-"+trackids_array[i]);}
		if (playbtn !=undefined && parsedid!=trackids_array[i]){
			//if ($debug==true){alert ("Looking to reset playbutton: play_"+trackids_array[i]);}
			MM_swapImage('play_'+trackids_array[i]+'','','images/synctheme/btn_tracklist_play.gif',1);
		}else{
			//if ($debug==true){alert ("not resetting play button: "+trackids_array[i]);}
		}
	}	
	
}




function playbuttonRollover(parsedid){
	// Created 15/12/09
	// Desc: Play button requires a specific function for rollover as it needs to be dependant on current button image.
	playbutton = document.getElementById("play_"+parsedid).src;
	if (playbutton.indexOf("_play")>-1){
		MM_swapImage('play_'+parsedid+'','','images/synctheme/btn_tracklist_play2.gif',1);
	}else{
		MM_swapImage('play_'+parsedid+'','','images/synctheme/btn_tracklist_stop2.gif',1);
	}
	
}
function playbuttonRollout(parsedid){
	// Created 15/12/09
	// Desc: Play button requires a specific function for rollover as it needs to be dependant on current button image.
	playbutton = document.getElementById("play_"+parsedid).src;
	//alert ("Looking to stop: play_"+parsedid);
	if (playbutton.indexOf("_play")>-1){
		MM_swapImage('play_'+parsedid+'','','images/synctheme/btn_tracklist_play.gif',1);
	}else{
		MM_swapImage('play_'+parsedid+'','','images/synctheme/btn_tracklist_stop.gif',1);
	}
	
}



function gup(name) {
	// Created: 19/11/09
	// Desc: Gets a url parameter value
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null ){
		return "";
	}else{
		return results[1];
	}
}



function strpos (haystack, needle, offset) {
    // Finds position of first occurrence of a string within another  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/strpos
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Onno Marsman    
    // +   bugfixed by: Daniel Esteban
    // *     example 1: strpos('Kevin van Zonneveld', 'e', 5);
    // *     returns 1: 14
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}




function DivBGImg(theobject,imagefile){
	// Developed by Adam Jones
	// Created: 5/11/09
	//alert(theobject+'-'+imagefile);
	thediv = document.getElementById(theobject);
	if (thediv !=undefined){
		thediv.style.backgroundImage = imagefile;
	}
}


function ShowDiv(parseddropdown) {
	// Developed by Adam Jones
	// Created: 4/11/09
	
	dropdown = document.getElementById(parseddropdown);
	dropdown.style.display = "block";
	dropdown.style.zIndex=9999;
}
function HideDiv(parseddropdown) {
	// Developed by Adam Jones
	// Created: 4/11/09
	
	dropdown = document.getElementById(parseddropdown);
	dropdown.style.display = "none";
}



function setSelectItem(val,objectid) {
	// Developed by Adam Jones
	// Created: 14/9/09
	
	elem = document.getElementById(objectid);
	//alert("called with: "+val+" / "+objectid);
	if (elem!=undefined){
		for (i=1;i<elem.length;i++){
			//alert(i+" / "+elem[i].value);
			if(elem[i].value == val) {
				//alert("MATCH: Element="+elem[i].value+" / Parsed Value:"+val);
				elem[i].selected = true;
				break;
			}
		}
	}else{
		alert("undefined: "+objectid);
	}

}






function UnCheckAllParts(str_checkid) {
	// called from within CheckTickAllowed!
	// NOTE: Doesnt uncheck ALL parts but just the "ALL PARTS" checkbox
	
	if(document.getElementsByTagName){  
		//split into row and check id
		int_values=str_checkid.split('_');
		
		//count check elements (max 11 including the full track)
		//alert ('searching for:'+int_values[0]+"_"+i);
		var checkbox = document.getElementById(int_values[0]+"_1");  
		if (checkbox !=undefined&&checkbox.checked){
			checkbox.checked=false;
			
			checkboxlabel = document.getElementById('label_'+int_values[0]+"_1"); 
			checkboxlabel.className="trackformlabel";
		}
 	} 
}



function CheckAllParts(str_checkid) {
	// Doesnt check ALL parts, but checks just the "All Parts" check, removing other checks
	
	if(document.getElementsByTagName){  
		
		//check the all parts is actually checked before running
		allpartsCheckbox = document.getElementById(str_checkid);
		if (allpartsCheckbox.checked){
		
			//split into row and check id
			int_values=str_checkid.split('_');
			
			//count check elements (max 11 including the full track)
			for (i=2;i<=11;i++){	// NOTE: We start at 2 as check 1 (all parts) isnt part of equation
				//alert ('searching for:'+int_values[0]+"_"+i);
				var checkbox = document.getElementById(int_values[0]+"_"+i);  
				if (checkbox !=undefined){
					
					checkboxlabel = document.getElementById('label_'+int_values[0]+"_"+i); 
					if (checkbox.checked){
						checkbox.checked=false;
					}
				}
			}
		}
 	} 
}



function CheckTickAllowed(str_checkid) {
	
	if(document.getElementsByTagName){  
		//split into row and check id
		int_values=str_checkid.split('_');
		
		//count check elements (max 11 including the full track)
		var counter=0;
		var checkedCount=0;
		for (i=2;i<=11;i++){	// NOTE: We start at 2 as check 1 (all parts) isnt part of equation
			//alert ('searching for:'+int_values[0]+"_"+i);
			var checkbox = document.getElementById(int_values[0]+"_"+i);  
			if (checkbox !=undefined){
				counter++;
				checkboxlabel = document.getElementById('label_'+int_values[0]+"_"+i); 
				if (checkbox.checked){
					checkedCount++;
				}
			}
		}	
		
		
		if (checkedCount==counter){
			var toUncheck = document.getElementById(str_checkid);
			toUncheck.checked=false;
			//	alert ('To hear the track with all parts playing please tick the "All Parts" checkbox.');
			
			// check all parts (and that they are actually checked!) and disable others
			allpartsCheckbox = document.getElementById(int_values[0]+"_1");
			if (allpartsCheckbox !=undefined){
				allpartsCheckbox.checked=true;
			}
			if (allpartsCheckbox.checked){
				// assuming we checked the ALL PARTS now go through other parts and uncheck
				
				//split into row and check id
				int_values=str_checkid.split('_');
				
				//count check elements (max 11 including the full track)
				for (i=2;i<=11;i++){	// NOTE: We start at 2 as check 1 (all parts) isnt part of equation
					//alert ('searching for:'+int_values[0]+"_"+i);
					var checkbox = document.getElementById(int_values[0]+"_"+i);  
					if (checkbox !=undefined){
						
						checkboxlabel = document.getElementById('label_'+int_values[0]+"_"+i); 
						if (checkbox.checked){
							checkbox.checked=false;
						}
					}
				}
			}
			
		}else{
			// If we HAVENT just checked last part checkbox, then call other function to uncheck all parts in case checked
			UnCheckAllParts(str_checkid);
			
		}
		
 	} 
}


function MakeTickGreen(str_checkid) {
	// Created: 2009
	// Updated: 28/1/10
	
	debug=false;
	
	//change label colour green when checked
	if(document.getElementsByTagName){  
		//split into row and check id
		int_values=str_checkid.split('_');
		
		//count check elements (max 11 including the full track)
		var i=1;
		for (i=1;i<=11;i++){
			if (debug==true){alert ('MakeTickGreen() DEBUG. Parsed: '+str_checkid+', Searching for tick box: '+int_values[0]+"_"+i);}
			var checkbox = document.getElementById(int_values[0]+"_"+i);  
			if (checkbox!=undefined){
				checkboxlabel = document.getElementById('label_'+int_values[0]+"_"+i); 
				if (checkbox.checked){
					checkboxlabel.className="trackformlabelSelected";
				}else{
					checkboxlabel.className="trackformlabel";
				}
			}
		}	
 	} 
}




function MakeTRGreen(int_row) {
	// Created: 209
	// Updated: 28/1/10
	
	//change table tr backgrounds to light green when selected in both MCPS pages. sets all TRs not selected to another class.
	
	//alert ("MakeTRGreen called. Searching for TR id: tr"+int_row);
	// get id collection
	var idcollection = document.getElementById("idcollection");
	
	// sd tracks
	if (idcollection.value=="sd"){
		if(document.getElementsByTagName){  
			//count trs (max of 15 track PARTS per page?)
			for (i=1;i<=15;i++){
				var rows = document.getElementById("tr"+i); 
				if (rows !=undefined){
					var checkbox = document.getElementById(int_row+"_"+i);
					if (checkbox.checked==true){
						//alert ('green:'+i);
						rows.className="TrackTRGreen";
					}else{
						//alert ('not checked'+i);
						rows.className="TrackTRNotGreen";
					}
				}
			}	
		}
	// full track mode
	}else{
		idcollection=idcollection.value.split(",");
		if(document.getElementsByTagName){  
			//count trs (max of 15 tracks per page?)
			for (i=0;i<idcollection.length;i++){
				var rows = document.getElementById("tr"+idcollection[i]);
				if (rows !=null){
					if (int_row==idcollection[i]){
						rows.className="TrackTRGreen";
					}else{
						rows.className="TrackTRNotGreen";
					}
				}
			}	
		} 
	}
}


function launchPopOut() {
	// open player in popout mode
	window.open ("player.php","syncpopoutplayer","menubar=0,width=275,height=85,menubar=0,resizable=0");
}



function launchPopOutPlaylist() {
	// Created: 29/9/09
	// Modified: 16/12/09
	// Desc: open playlist player in popout mode
	window.open ("playerplaylist.php","syncpopoutplayerplaylist","menubar=0,width=395,height=170,menubar=0,resizable=0");
}




function str_replace(search, replace, subject) {
    // Replaces all occurrences of search in haystack with replace  

    var s = subject;
    var ra = r instanceof Array, sa = s instanceof Array;
    var f = [].concat(search);
    var r = [].concat(replace);
    var i = (s = [].concat(s)).length;
    var j = 0;
    
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    }

    return sa ? s : s[0];
}



function testForIE (){
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
		var ieversion2=new Number(RegExp.$1) // capture x.x portion and store as a number
		if (ieversion2<=7) {
			return true;
		} else {
			return false;
		}
	}
}		



function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}


function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}


function YY_checkform() { //v4.71
//copyright (c)1998,2002 Yaromat.com
  var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;
  for (i=1; i<a.length;i=i+4){
    if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}
    o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
    o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
    v=o.value;t=a[i+2];
    if (o.type=='text'||o.type=='password'||o.type=='hidden'){
      if (r&&v.length==0){err=true}
      if (v.length>0)
      if (t==1){ //fromto
        ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}
      } else if (t==2){
        rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");if(!rx.test(v))err=true;
      } else if (t==3){ // date
        ma=a[i+1].split("#");at=v.match(ma[0]);
        if(at){
          cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];
          dte=new Date(cy,cm,cd);
          if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};
        }else{err=true}
      } else if (t==4){ // time
        ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}
      } else if (t==5){ // check this 2
            if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];
            if(!o1.checked){err=true}
      } else if (t==6){ // the same
            if(v!=MM_findObj(a[i+1]).value){err=true}
      }
    } else
    if (!o.type&&o.length>0&&o[0].type=='radio'){
          at = a[i].match(/(.*)\[(\d+)\].*/i);
          o2=(o.length>1)?o[at[2]]:o;
      if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}
      if (t==2){
        oo=false;
        for(j=0;j<o.length;j++){oo=oo||o[j].checked}
        if(!oo){s+='* '+a[i+3]+'\n'}
      }
    } else if (o.type=='checkbox'){
      if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}
    } else if (o.type=='select-one'||o.type=='select-multiple'){
      if(t==1&&o.selectedIndex/1==0){err=true}
    }else if (o.type=='textarea'){
      if(v.length<a[i+1]){err=true}
    }
    if (err){s+='* '+a[i+3]+'\n'; err=false}
  }
  // aj mod
  if (s!=''){alert(s)}
  document.MM_returnValue = (s=='');
}


function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}


function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}


function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}


