var jsFormValidator = function(form) {
	try {
		form = $(form);
		if (!form) return null;
		form.ready = {};
		var self = this;
		form.onbeforesubmit = function() { this.ready['onbeforesubmit']=true; this.submitform(); };
		form.onaftersubmit = function() { this.ready['onaftersubmit']=true; this.submitform(); };
		form.formElements = function() { };
		form.oncompletion = function() { };
		var previousObj = null;
		var elem_type,atr,require,msg,msgV = '';
		var atrs = Array('email','minlength','maxlength','equalto','number','decimal','accept','range','rangelength','min','max','remote');
		form.elementsValues = {};
		form.loaderobj = null;
		self.done = false;
		self.wait = false;
		this.sendform = true;
		var sndform = form.getAttribute('sendform');
		if (sndform) {
			this.sendform = sndform.toString() === 'false' ? false : true;
		}
		
		this.showLoader = function(e) {
			if (form.loaderobj) {
				var loader = $(form.loaderobj);
				if (loader.hasStyle('display')) {
					loader.setStyle('display', e ? 'block' : 'none');
				} else if (loader.hasStyle('visibility')) {
					loader.setStyle('visibility', e ? 'visible' : 'hidden');
				}
			}
		}
	
		form.onsubmit = function() {
			if (this.ready['onaftersubmit']) {
				self.done = true;
			}
			
			if (!self.done) {
				if (this.ready['onbeforesubmit']) {
					this.formElements();
				} else {
					this.onbeforesubmit();
				}
				
				return false;
			} else {
				self.showLoader(true);
			}
			
			this.oncompletion();
			
			if (self.done && self.sendform) {
				this.submit();
				disableFormElements(this);
			} else {
				disableFormElements(this);
				return false;
			}
		}
	
		form.submitform = function() {
			this.onsubmit();
		}
		
		form.formElements = function() {
			var form_this = this;
			for(var i=0; i<form.elements.length; i++) {
				var obj = $(form.elements[i]);
				if (obj.type) {
					elem_type = obj.type.toLowerCase();
					if (elem_type != 'button' && elem_type != 'submit' && elem_type != 'reset' && elem_type != 'image') {
						require = obj.getAttribute('req');
						if (require === undefined || require === null) require = true;
						require = require === 'false' ? false : true;
						if (require) require = true;
						msg = obj.getAttribute('msg');
						if (previousObj) {
							self.wait = previousObj.hasAttr('remote') ? true : false;
						}
						if (obj.id == '' && obj.name == '') {
							throw('El Objeto de tipo \'' + elem_type + '\' debe tener un Id y/o un Nombre para identificarlo.');
						}
						
						if (!self.wait) {
							if (require && msg) {
								var wv = false;
								var _obj_array = document.getElementsByName(obj.name);
								if (_obj_array && _obj_array.length) {
									for(j=0; j<_obj_array.length; j++) {
										if (elem_type == 'radio' || elem_type == 'checkbox') {
											if (_obj_array[j].checked == true) {
												wv = true;
												break;	
											}
										}
									}
								}
								
								_obj_array = document.getElementsByName(obj.name);
								if (!wv && _obj_array.length == 1) {
									switch (elem_type) {
										case 'select-one':
											wv = obj.value.toString() == '' ? false : true;
											break;
										case 'radio', 'checkbox':
											wv = obj.checked == false ? false : true;
											break;
										default:
											wv = obj.value == '' ? false : true;
											break;
									}
								}
								
								if (wv == false) {
									alert(msg)
									obj.setFocus();
									return false;
								}
							}
						}
							
						for(var k=0; k<atrs.length; k++) {
							atr = obj.getAttribute(atrs[k]);
							if (atr !== null && atr !== '' && require) {
								msgV = '';
								switch(atrs[k]) {
									case 'email':
										if (obj.value != ''){
											if (!isEmail(obj.value)) {
												msgV = jsLang.interface.msg_error_01[PPC_LANG];
											}
										}
										break;
									case 'minlength':
										if (obj.value.length < atr) {
											msgV = jsLang.interface.msg_error_02[PPC_LANG];
											msgV = msgV.replace(new RegExp('\\{0\\}', 'g'), atr);
										}
										break;
									case 'equalto':
										var objV = $(atr);
										if (objV) {
											if (objV.value != obj.value) {
												msgV = jsLang.interface.msg_error_03[PPC_LANG];
											}
										} else {
											throw('El objeto "'+atr+'" no existe.');
										}
										break;
									case 'number':
										if (!isInteger(obj.value)) {
											msgV = jsLang.interface.msg_error_04[PPC_LANG];
										}
										break;
									case 'decimal':
										if (!isFloat(obj.value)) {
											msgV = jsLang.interface.msg_error_05[PPC_LANG];
										}
										break;
									case 'accept':
										if (!isValidExtension(obj.value,atr)) {
											msgV = jsLang.interface.msg_error_06[PPC_LANG];
											msgV = msgV.replace(new RegExp('\\{0\\}', 'g'), atr.replace(new RegExp('\\|', 'g'),', '));
										}
										break;
									case 'range':
										atr = jsCore.makeArray(atr);
										if (obj.value < atr[0] || obj.value > atr[1]) {
											msgV = jsCore.format(jsLang.interface.msg_error_07[PPC_LANG],atr);
										}
										break;
									case 'rangelength':
										atr = jsCore.makeArray(atr);
										if (obj.value.length < atr[0] || obj.value.length > atr[1]) {
											msgV = jsCore.format(jsLang.interface.msg_error_08[PPC_LANG],atr);
										}
										break;
									case 'min':
										if (isInteger(atr) || isFloat(atr)) atr = parseFloat(atr);
										if (obj.value < atr) {
											msgV = jsLang.interface.msg_error_09[PPC_LANG];
											msgV = msgV.replace(new RegExp('\\{0\\}', 'g'), atr);
										}
										break;
									case 'max':
										if (isInteger(atr) || isFloat(atr)) atr = parseFloat(atr);
										if (obj.value > atr) {
											msgV = jsLang.interface.msg_error_10[PPC_LANG];
											msgV = msgV.replace(new RegExp('\\{0\\}', 'g'), atr);
										}
										break;
									case 'remote':
										if (!this.elementsValues[obj.id]) this.elementsValues[obj.id] = '';
										if (!this.ready[atrs[k]] || this.elementsValues[obj.id] != obj.value) {
											var r = new jsAjax();
											r.filePath = 'index.php';
											r.setVar(
												{
													'module':'validation',
													'action':atr,
													'val':obj.value
												}
											);
											r.onError = function(num,val) {
												//self.showLoader(false);
												enableFormElements(form_this);
												alert(val);
												obj.setFocus();
											};
											r.onLoading = function() {
												//self.showLoader(true);
												disableFormElements(form_this);
											};
											r.onCompletion = function() {
												self.showLoader(false);
												enableFormElements(form_this);
												form_this.elementsValues[obj.id] = obj.value;
												form_this.ready[atrs[k]] = true;
												form_this.submitform();
											};
											r.init();
											delete r;
											return false;
										}
										break;
								}
								
								if (msgV != '' && !self.wait) {
									alert(msgV);
									obj.setFocus();
									return false;
								}
							}
						}
					}
				}
			}
			
			if (!this.ready['onaftersubmit']) {
				this.onaftersubmit();
			}
		}
		
		form.setFocus = function(name) {
			name = jsCore.isString(name) ? $(name) : name;
			if (name) {
				name.setFocus();
			}
		}
		
		return form;
	} catch(err) {
		jsError.where = 'jsFormValidator';
		jsError.display(err);
	}
}


var __last_submit_button_caption = '';

function disableFormElements(form) {
	try {
		if (!jsInit.browser.isSafari) {
			form = jsCore.isString(form) ? $(form) : form;
			
			document.body.style.cursor = 'wait';
			var __fieldsets = document.getElementsByTagName('fieldset');
			if (__fieldsets.length) {
				for(i=0; i < __fieldsets.length; i++) {
					__fieldsets[i].style.cursor = 'wait';
				}
			}
			
			for(i=0; i<form.elements.length; i++) {
				var obj = form.elements[i];
				if (obj.type) {
					if (obj.type == 'submit') {
						__last_submit_button_caption = obj.value;
						obj.value = jsLang.interface.please_wait_short[PPC_LANG];
					}
					obj.disabled = true;
				}
			}
		}
	} catch(err) {
		jsError.where = 'disableFormElements';
		jsError.display(err);
	}
}

function enableFormElements(form) {
	try {
		form = jsCore.isString(form) ? $(form) : form;
		
		document.body.style.cursor = 'default';
		var __fieldsets = document.getElementsByTagName('fieldset');
		if (__fieldsets.length) {
			for(i=0; i < __fieldsets.length; i++) {
				__fieldsets[i].style.cursor = 'default';
			}
		}
		
		for(i=0; i<form.elements.length; i++) {
			var obj = form.elements[i];
			if (obj.type) {
				if (__last_submit_button_caption == '') __last_submit_button_caption = jsLang.buttons.guardar[PPC_LANG];
				if (obj.type == 'submit') obj.value = __last_submit_button_caption;
				obj.disabled = false;
			}
		}
	} catch(err) {
		jsError.where = 'enableFormElements';
		jsError.display(err);
	}
}


function isEmail(val) {
	return /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/.test(val);
}

function isInteger(val) {
	return /^\d+$/.test(val);
}

function isFloat(val) {
	return /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(val);
}

function isValidExtension(val,ext) {
	ext = jsCore.isString(ext) ? ext : 'png|jpe?g|gif';
	return val.match(new RegExp('.(' + ext + ')$', 'i'));
}

function keyCode(e) {
	return e.keyCode || e.charCode;
}

var tabmenutime;
/*function tabMenu(obj,over) {
	obj = $(obj);
	var smenu = obj.getAttribute('smenu');
	var row = obj.rows[0];
	if (over) {
		row.cells[0].innerHTML = '<img src="'+PPC_IMAGE_PATH+'tab1_over.png" width="9" height="29"/>';
		row.cells[1].style.backgroundColor = '#FFFFFF';
		row.cells[2].innerHTML = '<img src="'+PPC_IMAGE_PATH+'tab2_over.png" width="9" height="29"/>';
		
		if (smenu) {
			smenu = $(smenu);
			smenu.setAttribute('show','1');
			smenu.setStyle('display','block');
		}
	} else {
		row.cells[0].innerHTML = '<img src="'+PPC_IMAGE_PATH+'tab1.png" width="9" height="29"/>';
		row.cells[1].style.backgroundColor = '#9FAEC3';
		row.cells[2].innerHTML = '<img src="'+PPC_IMAGE_PATH+'tab2.png" width="9" height="29"/>';
		
		if (smenu) {
			smenu = $(smenu);
			tabmenutime = window.setTimeout(function(){
				var show = smenu.getAttribute('show');
				if (!show && show != '1') {
					smenu.setStyle('display','none');
				}
			},300);
		}
	}
}*/

function tabMenu(obj,over) {
	obj = $(obj);
	var smenu = obj.getAttribute('smenu');
	if (over) {
		obj.setStyle('color','#F7F9FB');
		if (!smenu) {
			obj.src = PPC_IMAGE_PATH+'tab_over.png';
		} else {
			smenu = $(smenu);
			smenu.setAttribute('mostrar',1);
			smenu.setStyle('display','block');
			if (jsInit.browser.isIE) smenu.setStyle('marginTop',-3);
		}
	} else {
		obj.setStyle('color','#000000');
		obj.src = PPC_IMAGE_PATH+'tab.png';
		if (smenu != '') {
			smenu = $(smenu);
			if (smenu) {
				smenu.setAttribute('mostrar',0);
				hideSubMenu(smenu);
			}
		}
	}
}

function subMenu(obj,over) {
	obj = $(obj);
	if (over) {
		obj.setAttribute('mostrar',1);
	} else {
		hideSubMenu(obj);
	}
}

function hideSubMenu(obj) {
	window.setTimeout(function(){
		if (obj.getAttribute("mostrar") == 0) {
			obj.setStyle('display','none');
		}
	},300);
}

function catMenu(obj,over) {
	if (over) {
		obj.style.backgroundImage = 'url('+PPC_IMAGE_PATH+'categories_over.jpg)';
		obj.style.cursor = 'pointer';
	} else {
		obj.style.backgroundImage = 'none';
	}
}

function delRow(row,id,current_module) {
	if (confirm(jsLang.interface.delete_data[PPC_LANG])){
		var dr = new jsAjax();
		dr.filePath = 'index.php';
		dr.setVar({
			'module':'global',
			'action':'trash',
			'elemid':id,
			'target':current_module
			
		});
		dr.onLoading = function() {
			
		};
		dr.onCompletion = function(){
			row = $(row);
			row = row.getParent();
			row.getParent().removeChild(row);
		};
		dr.init();
		delete dr;
	}
}

function searchContent(modname) {
	if (!modname) modname = 'multimedia';
	var obj = $('search_content');
	if (obj) {
		/*if (obj.value == '') {
			alert(jsLang.interface.msg_search_empty[PPC_LANG]);
			obj.focus();
			return false;
		}*/
		
		var xtraquery = '';
		var categoria = $('search_categoria');
		if (categoria) xtraquery += '&category='+categoria.value;
		var mes_publicacion = $('mes_publicacion');
		if (mes_publicacion) xtraquery += '&month='+mes_publicacion.value;
		var ano_publicacion = $('ano_publicacion');
		if (ano_publicacion) xtraquery += '&year='+ano_publicacion.value;
		var file_type = $('search_file_type[]');
		if (file_type) {
			var types = '';
			for(var i=0; i<file_type.length; i++) {
				if (file_type[i].checked) {
					types += file_type[i].value+',';
				}
			}
			if (types != '') {
				types = types.substr(0,types.length-1);
				xtraquery += '&type='+types;
			}
		}
		
		document.location.href='index.php?module=multimedia&q='+obj.value+xtraquery;
	}
}

function loadFolder(obj,modname) {
	if (obj){
		var folder = obj.value == '' ? '' : '&folder='+obj.value;
		document.location.href='index.php?module='+modname+folder;
	}
}

function removeFromFolder(img,elemid,folder) {
	if (confirm(jsLang.interface.msg_remove_from_folder[PPC_LANG])){
		var oldimg = img.src;
		var obj = $('_file_'+elemid);
		if (obj){
			var fr = new jsAjax();
			fr.filePath = 'index.php';
			fr.setVar({
				'module':'global',
				'action':'removeFromFolder',
				'elemid':elemid,
				'target':folder
				
			});
			fr.onLoading = function() {
				img.src =PPC_IMAGE_PATH+'loading.gif';
			};
			fr.onCompletion = function(){
				obj.getParent().removeChild(obj);
			};
			fr.init();
			delete fr;
		}
	}
}

function addSelectOption(obj, txt, val, selected) {
	obj = $(obj);
	selected = (selected == true) ? 'defauldSelected' : '';
	var sub0 = new Option(txt, val, selected);
	obj.options[obj.options.length] = sub0;
}


function searchUsers() {
	var obj = $('user_search');
	var users_list = $('users_search_list');
	if (obj && users_list) {
		if (obj.value.length >= 3) {
			var fr = new jsAjax();
			fr.filePath = 'index.php';
			fr.setVar({
				'module':'global',
				'action':'searchUsers',
				'target':obj.value
				
			});
			fr.onError = function(num,val) {
				users_list.options.length=0;
				addSelectOption(users_list,jsLang.interface.search_users_list_empty[PPC_LANG],'');
				alert(val);
			};
			fr.onLoading = function() {
				users_list.options.length=0;
				addSelectOption(users_list,jsLang.interface.please_wait[PPC_LANG],'');
			};
			fr.onCompletion = function(){
				if (this.responseXML){
					users_list.options.length=0;
					var data=this.responseXML.getElementsByTagName('user');
					for(var i=0; i<data.length; i++) {
						codigo = data.item(i).getElementsByTagName('codigo').item(0).firstChild.nodeValue;
						nombre = data.item(i).getElementsByTagName('nombre').item(0).firstChild.nodeValue;
						apellido = data.item(i).getElementsByTagName('apellido').item(0).firstChild.nodeValue;
						
						addSelectOption(users_list,nombre+' '+apellido,codigo);
					}
				}
			};
			fr.init();
			delete fr;
		}
	}
}

var lockAddUser = false;
function addUser(img,folder) {
	var users_list = $('users_search_list');
	var table = $('shareUserList');
	if (table && users_list && img) {
		if (users_list.value != '' && !lockAddUser) {
			var exist = false;
			for(var i=0; i<table.rows.length; i++) {
				if (table.rows[i].getAttribute('id') == users_list.value) {
					exist = true;
					break;
				}
			}
			
			if (!exist) {
				img = $(img);
				var old_img = img.src;
				var fr = new jsAjax();
				fr.filePath = 'index.php';
				fr.setVar({
					'module':'global',
					'action':'addUsers',
					'elemid':users_list.value,
					'target':folder
					
				});
				fr.onLoading = function() {
					img.src = PPC_IMAGE_PATH+'loading.gif';
					img.setStyle('cursor','wait');
					lockAddUser = true;
				};
				fr.onCompletion = function(){
					lockAddUser = false;
					img.src = old_img;
					img.setStyle('cursor','pointer');
					
					row = table.insertRow(-1);
					row.setAttribute('id',users_list.value);
						cell = row.insertCell(-1);
						cell.innerHTML = users_list.options[users_list.selectedIndex].text;
						
						cell = row.insertCell(-1);
						cell.innerHTML = '<img src="'+PPC_ICONS_PATH+'cross_small.png" width="16" height="16" border="0" onclick="removeUser(this,'+
						users_list.value+','+folder+')" style="cursor:pointer;"/>';
				};
				fr.init();
				delete fr;
			}
		}
	}
}

function removeUser(img,elemid,folder) {
	if (img) {
		if (confirm(jsLang.interface.search_msg_remove_user[PPC_LANG])){
			img = $(img);
			var fr = new jsAjax();
			fr.filePath = 'index.php';
			fr.setVar({
				'module':'global',
				'action':'removeUsers',
				'elemid':elemid,
				'target':folder
				
			});
			fr.onLoading = function() {
				img.src =PPC_IMAGE_PATH+'loading.gif';
			};
			fr.onCompletion = function(){
				var node = img.nodeName.toLowerCase();
				while(node != "tr") {
					img = img.getParent();
					node = img.nodeName.toLowerCase();
				}
				if (node == 'tr') img.getParent().removeChild(img);
			};
			fr.init();
			delete fr;
		}
	}
}

function searchFiles(module) {
	var searchbox = $('searchbox');
	if (searchbox) {
		document.location.href = 'index.php?module='+module+'&s='+searchbox.value;
	}
}

function removeFiles() {
	if (confirm(jsLang.interface.delete_file_msg[PPC_LANG])) {
		var img = $('del_loader');
		var objs = document.getElementsByName('delete_file[]');
		var ids = '';
		for(var i=0; i<objs.length; i++) {
			if (objs[i].checked) {
				ids += objs[i].value+',';
			}
		}
		
		if (ids.length>0){
			ids = ids.substr(0,ids.length-1);
			
			var fr = new jsAjax();
			fr.filePath = 'index.php';
			fr.setVar({
				'module':'multimedia',
				'action':'delete_files',
				'vals':ids
				
			});
			fr.onLoading = function() {
				img.setStyle('visibility','visible');
			};
			fr.onCompletion = function(){
				document.location.href='index.php?module=multimedia';
			};
			fr.init();
			delete fr;
		}
	}
}
