// version: 20080408

document.getElementsByClassName=function(classname){
	var elements=new Array();
	var tags=document.getElementsByTagName("*");
	for(var i=0;i<tags.length;i++) {
		if(tags[i].className.indexOf(" ")>=0) {
			var temp=tags[i].className.split(" ");
			for(var j=0;j<temp.length;j++)
				if(temp[j]==classname)
					elements.push(tags[i])
		} else 
			if(tags[i].className==classname) 
				elements.push(tags[i])
	}
	return elements 
};

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
String.prototype.capitalize = function () {
	return this.replace(/\b[a-z]/g, function (str, n) { return str.toUpperCase(); });
}
String.prototype.toCamelCase = function () {
	return this.replace(/\s[a-z]/g, function (str, n) { return str.toUpperCase(); });
}
String.prototype.unCamelCase = function () {
	return this.replace(/[A-Z]/g, function (str, n) { return " " + str.toUpperCase(); });
}
String.prototype.left = function(len){
	if(typeof(len)=="undefined") return '';
	return (len > this.length) ? this : this.substring(0, len);
}
String.prototype.right = function(len){
	if(typeof(len)=="undefined") return '';
	return (len > this.length) ? this : this.substring(this.length - len);
}
String.prototype.mid = function(start,len){
	if(typeof(start) == "undefined" || typeof(len) == "undefined" || start > this.length || !len) return '';
	return ((start + len) > this.length) ? this.substring( start - 1) : this.substr( start - 1, len);
}
function dhtmlLoadScript(url) {
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);
}
function MM_displayStatusMsg(msgStr)  { //v3.0
	status=msgStr; document.MM_returnValue = true;
}
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_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_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_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];
			}
	}
}

if(!document.getElementById){
	if(document.all)
		document.getElementById=function() {
			return (typeof document.all[arguments[0]]!="undefined")?document.all[arguments[0]]:null;
		}
	else if(document.layers)
		document.getElementById=function() {
			return (typeof document[arguments[0]]!="undefined")?document[arguments[0]]:null;
		}
}

function rebuild_select(obj,val) {
	var i,s,z;
	s = 0;
	z=new Array();
	for (i=0;i<obj.length;i++) {
		t=(obj.options[i].value.split('|').length)?obj.options[i].value.split('|')[0]:obj.options[i].value;
		if (t==val)
			s = i;
		z[i]=new Array();
		z[i][0]=obj.options[i].value;
		z[i][1]=obj.options[i].text;
	}
	obj.length=0;
	for(i=0;i<z.length;i++)
		obj[obj.length]=new Option(z[i][1],z[i][0],(s==i),(s==i));
	obj.selectedIndex = s;
	obj.defaultIndex = s;
}

function rebuild_select_from_array(o,a,v) {
	var i=0;
	var x=0;
	var s=document.getElementById(o);
	if(typeof(o)!="string" || !s) {
		alert("getElementById "+o+" not recognized");
		return;
	} else if (typeof(a)=="undefined") {
		alert("Array not found");
		return;
	} else {
		if(typeof(v) == "undefined") {
			v=(s.selectedIndex>=0 && s.selectedIndex<s.options.length)?s.options[s.selectedIndex].value:'';
		}
		s.length=0;
		switch(a.length) {
			case 0	:	break;
			case 1	:	s[s.length]=new Option(a[0][0], a[0][1], true, true);	break;
			default	:	for(var i=0;i<a.length;i++) {
							found=(a[i][1]===v);
							s[s.length]=new Option(a[i][0], a[i][1], found, found);
							if(found) x=i;
						}
		}
		s.selectedIndex=x;
		s.selectedDefault=x;
	}
	s.disabled=false;
}

/**
 * Convert a single file-input element into a 'multiple' input list
 * Usage:
 *   1. Create a file input element (no name)
 *      eg. <input type="file" id="first_file_element">
 *   2. Create a DIV for the output to be written to
 *      eg. <div id="files_list"></div>
 *   3. Instantiate a MultiSelector object, passing in the DIV and an (optional) maximum number of files
 *      eg. var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 3 );
 *   4. Add the first element
 *      eg. multi_selector.addElement( document.getElementById( 'first_file_element' ) );
 *   5. That's it.
 *   You might (will) want to play around with the addListRow() method to make the output prettier.
 *   You might also want to change the line 
 *       element.name = 'file_' + this.count; 
 *   ...to a naming convention that makes more sense to you.
*/
function MultiFileUpload( list_target, max ){
	this.list_target = list_target;			// Where to write the list
	this.count = 0;							// How many elements?
	this.id = 0;							// How many elements?
	if(typeof(max)=="undefined") max=-1;
	this.addElement = function( element ){
		if( element.tagName == 'INPUT' && element.type == 'file' ){		// Make sure it's a file input element
			element.name = 'file_' + this.id++;							// Element name -- what number am I?
			element.multi_selector = this;								// Add reference to this object
			element.onchange = function(){								// What to do when a file is selected
				var new_element = document.createElement( 'input' );	// New file input
				new_element.type = 'file';
				this.parentNode.insertBefore( new_element, this );		// Add new element
				this.multi_selector.addElement( new_element );			// Apply 'update' to element
				this.multi_selector.addListRow( this );					// Update list
				this.style.position = 'absolute';		// Hide this: we can't use display:none because Safari doesn't like it
				this.style.left = '-1000px';
			};
			element.disabled=(this.max!=-1&&this.count>=this.max );		// If we've reached maximum number, disable input 
			this.count++;												// File element counter
			this.current_element = element;								// Most recent element
		} else
			alert( 'Error: not a file input element' );					// This can only be applied to file input elements!
	};
	/**
	 * Add a new row to the list of files
	 */
	this.addListRow = function( element ){								// Row div
		var new_row = document.createElement( 'div' );			
		var new_row_button = document.createElement( 'input' );			// Delete button
		new_row_button.type = 'button';
		new_row_button.value = 'Delete';
		new_row.element = element;										// References
		new_row_button.onclick= function(){								// Delete function
			this.parentNode.element.parentNode.removeChild( this.parentNode.element );			// Remove element from form
			this.parentNode.parentNode.removeChild( this.parentNode );	// Remove this row from the list
			this.parentNode.element.multi_selector.count--;				// Decrement counter
			this.parentNode.element.multi_selector.current_element.disabled = false;	// Re-enable input element
			return false;												// Prevent Safari reloading browser window.
		};
		new_row.innerHTML = element.value;								// Set row value
		new_row.appendChild( new_row_button );							// Add button
		this.list_target.appendChild( new_row );						// Add it to the list
	};
};

function AjaxRequest() { 
	var req; 
	var method = "GET"; 
	var nocache = true; 
	this.loadXMLDoc = function(url, params, debug) { 
		if(typeof(debug)!="undefined") alert("cms.js: " + url+"?"+params);
		if(window.XMLHttpRequest) { 
			try { 
				req = new XMLHttpRequest(); 
			} catch(e) { 
				req = false; 
			} 
		} else if(window.ActiveXObject) { 
			try { 
				req = new ActiveXObject("Msxml2.XMLHTTP"); 
			} catch(e) { 
				try { 
					req = new ActiveXObject("Microsoft.XMLHTTP"); 
				} catch(e) { 
					req = false; 
				} 
			} 
		} 
		if(req) { 
			req.onreadystatechange = processReqChange; 
			if(nocache)
				params += (params != '') ? '&' + (new Date()).getTime() : (new Date()).getTime(); 
			if(method == "POST") { 
				req.open("POST", url, true); 
				req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
				req.send(params); 
			} else { 
				req.open(method, url + '?' + params, true); 
				req.send(null); 
			} 
			return true; 
		} 
		return false; 
	} 
	this.setMethod = function(newmethod){ method = newmethod.toUpperCase(); } 
	this.nocache = function() 			{ nocache = true; } // define private methods 
	var getNodeValue = function(parent, tagName) { 
		var node = parent.getElementsByTagName(tagName)[0]; 
		return (node && node.firstChild) ? node.firstChild.nodeValue : ''; 
	} 
	var processReqChange = function() { 
		if(req.readyState == 4 && req.status == 200) { 
			if(!req.responseXML) return; 
			var response = req.responseXML.documentElement; 
			var commands = response.getElementsByTagName('command'); 
			for(var i=0; i < commands.length; i++) { 
				method = commands[i].getAttribute('method'); 
				if(typeof(debug)!="undefined") alert("cms.js: " + method);
				switch(method.toLowerCase()) { 
					case 'alert': 			var message = getNodeValue(commands[i], 'message'); 
											alert(message); 
											break; 
					case 'setvalue': 		var target = getNodeValue(commands[i], 'target'); 
											var value = getNodeValue(commands[i], 'value'); 
											if(target && value != null)
												try {
													document.getElementById(target).value = value; 
													} catch(e) {
													alert("failed: document.getElementById("+target+").value="+value);
												}
											break; 
					case 'setdefault': 		var target = getNodeValue(commands[i], 'target'); 
											if(target)
												try {
													document.getElementById(target).value = document.getElementById(target).defaultValue; 
													} catch(e) {
													alert("failed: document.getElementById("+target+").value = document.getElementById("+target+").defaultValue");
												}
											break; 
					case 'focus': 			var target = getNodeValue(commands[i], 'target'); 
											if(target)
												try {
												document.getElementById(target).focus(); 
													} catch(e) {
													alert("failed: document.getElementById("+target+").focus()");
												}
											break; 
					case 'setcontent':		var target = getNodeValue(commands[i], 'target'); 
											var content = getNodeValue(commands[i], 'content'); 
											if(target && content != null)
												try {
													document.getElementById(target).innerHTML = content; 
													} catch(e) {
													alert("failed: document.getElementById("+target+").innerHTML="+content);
												}
											break; 
					case 'setstyle':		var target = getNodeValue(commands[i], 'target'); 
											var property = getNodeValue(commands[i], 'property'); 
											var value = getNodeValue(commands[i], 'value'); 
											if(target && property && value) 
												try {
													document.getElementById(target).style[property] = value;
													} catch(e) {
													alert("failed: document.getElementById("+target+").style["+property+"]="+value);
												}
											break; 
					case 'setproperty': 	var target = getNodeValue(commands[i], 'target'); 
											var property = getNodeValue(commands[i], 'property'); 
											var value = getNodeValue(commands[i], 'value'); 
											if(value == "true") 
												value = true; 
											if(value == "false") 
												value = false; 
											if(target) 
												try {
													document.getElementById(target)[property] = value; 
													} catch(e) {
													alert("failed: document.getElementById("+target+")["+property+"]="+value);
												}
											break; 
					case 'rebuildselect':	var target = getNodeValue(commands[i], 'target');
											var array = getNodeValue(commands[i], 'array');
											var value = getNodeValue(commands[i], 'value');
											if(typeof(rebuild_select_from_array)=="function") 
												rebuild_select_from_array(target,window[array],value);
											else
												rebuild_select(document.getElementById(target),value);
											break;
					case 'execute':			eval(getNodeValue(commands[i], 'execute'));
											break;
					case 'rebuildarray':	var name = getNodeValue(commands[i], 'name');
											var data = getNodeValue(commands[i], 'data');
											var sep1 = getNodeValue(commands[i], 'sep1');
											var sep2 = getNodeValue(commands[i], 'sep2');
											if(!sep1) sep1="|";
											if(!sep2) sep2="`";
											window[name]=new Array();
											window[name].length=0;
											if(data.length) {
												var t=data.split(sep2);
												for(j=0;j<t.length;j++)
										        	window[name][j]=t[j].split(sep1);								
											}
											break;
					case 'ignore': 			var target = getNodeValue(commands[i], 'target'); 
											var value = getNodeValue(commands[i], 'value'); 
											alert(method+': '+target+'='+value);
											break; 
					default: 				window.console.log("Error: unrecognised method '" + method + "' in processReqChange()"); 
				} 
			} 
		} 
	}
}
function FormFieldDisable(input,action) {
	if(typeof(input)=="string")
		var array=input.split(",");
	else
		array=input;
	for(i=0;i<array.length;i++)
		try {
			document.getElementById(array[i]).disabled=action;
		} catch(e) {
			alert('failed: document.getElementById('+array[i]+').disabled='+action);
		}
}
function FormFieldReadonly(input,status) {	
	if(typeof(input)=="string")
		var array=input.split(",");
	else
		array=input;
	for(i=0;i<array.length;i++)
		try {
			if(document.getElementById(array[i]).type.split('-')[0] == "select") {
				if(status) {
					if(alltags[j].selectedIndex>=0 && alltags[j].selectedIndex < alltags[j].options.length) {
						x=alltags[j].options[alltags[j].selectedIndex].text;
						y=alltags[j].options[alltags[j].selectedIndex].value;
					}
					alltags[j].length=0;
					alltags[j][0]=new Option("","", true, true);
					s.selectedIndex=0;
					s.selectedDefault=0;
				}
			} else
				document.getElementById(array[i]).readOnly=status;
		} catch(e) {
			alert('failed: document.getElementById('+array[i]+').readOnly='+status);
		}
}
function FormFieldDisplay(input,status) {
	if(typeof(input)=="string")
		var array=input.split(",");
	else
		array=input;
	for(i=0;i<array.length;i++)
		try {
			document.getElementById(array[i]).style.display=(status)?'':'none';
		} catch(e) {
			alert('failed: document.getElementById('+array[i]+').style.display='+status);
		}
}
function AllDisplay(status) {
	var tagname=new Array;
	var tagname_i=new Array();
	var tagname_1="";
	var i=0;
	var j=0;
	tagname="table,tr,td,p,span,div".split(",");
	for(i=0;i<tagname.length;i++) {
		alltags=document.getElementsByTagName(tagname[i]);
		for(j=0;j<alltags.length;j++)
			if(alltags[j].id && alltags[j].id.right(5)=="_show")
				alltags[j].style.display=(status)?'':'none';
	}
}
function AllReadOnly(status) {
	var i=0;
	var j=0;
	var x="";
	var y="";
	var tagname=new Array();
	var alltags=new Array();
	tagname="input,select,textarea".split(",");
	for(i=0;i<tagname.length;i++) {
		alltags=document.getElementsByTagName(tagname[i]);
		for(j=0;j<alltags.length;j++)
			if(alltags[j].type.split("-") == "select") {
				if(status) {
					if(alltags[j].selectedIndex>=0 && alltags[j].selectedIndex < alltags[j].options.length) {
						x=alltags[j].options[alltags[j].selectedIndex].text;
						y=alltags[j].options[alltags[j].selectedIndex].value;
					}
					alltags[j].length=0;
					alltags[j][0]=new Option("","", true, true);
					s.selectedIndex=0;
					s.selectedDefault=0;
				}
			} else 
				alltags[j].readOnly=status;	break;
	}
}
function AllDisabled(status) {
	var i=0;
	var j=0;
	var tagname=new Array();
	tagname="input,select,textarea".split(",");
	for(i=0;i<tagname.length;i++) {
		alltags=document.getElementsByTagName(tagname[i]);
		for(j=0;j<alltags.length;j++)
			alltags[j].disabled=status;
	}
}
function ResetInput() {
	var i=0;
	var j=0;
	tagname="input,select,textarea".split(",");
	for(i=0;i<tagname.length;i++) {
		alltags=document.getElementsByTagName(tagname[i]);
		for(j=0;j<alltags.length;j++)
			if(alltags[j].type.split("-")[0] == "select")
				alltags[j].selectedIndex=0;
			else
				alltags[j].value='';
	}
}
function CheckMIME(mime,suffix,element,url) {
	found=false;
	if(navigator.mimeTypes && navigator.mimeTypes.length)
		if(navigator.mimeTypes[mime])
			if(navigator.mimeTypes[mime].enabledPlugin!=null)
				found=true;
		else {
			var ext="";
			for(i=0;i<navigator.mimeTypes.length;i++) {
				ext=navigator.mimeTypes[i].suffixes.split(",");
				for(j=0;j<ext.length;j++)
					if(navigator.mimeTypes[i].enabledPlugin!=null)
						found=true;
				if(found) 
					break;
			}
		}
	if(found) 
		document.getElementById(element).innerHTML=document.getElementById(element).innerHTML+"<a href='"+url+"'>View</a>";
}

function js_src(src) {
    head=document.getElementsByTagName("head")[0];
    script=document.createElement('script');
    script.type='TEXT/JAVASCRIPT';
    script.src=src;
    head.appendChild(script);
    return true;
}

function checkcreditcard(obj) {
	var v=obj.value.replace(/[^0-9]/g,"");
	var cc="";
    if (!v.length || !cc.length)	return false;
	var dd=(cc.length%2)?false:true;
	var cd=0;
	var td;
	for(var i=0;i<cc.length;i++) {
		td=eval(cc.charAt(i))
		if(dd){
			td*=2;
			cd+=td%10;
			if(td>=10) cd++;
		} else
			cd+=td;
		dd=!dd
	}	
	return (cd%10)?false:true;
}

