/**
 * @author frukt
 */

var Default = (function(){
	function _parseUrlParams(string){
		if(string.length == 0){ return false; }
		var params = string.split('&');
		var urlParams = {};
		
		for(var i in params){
			if(params[i].length == 0){ break; }
			keyValue = params[i].split('=');
			urlParams[keyValue[0]] = keyValue[1];
		}
		
		return urlParams;
	}
	
	function _toQueryString(array){
		if(!array){ return false; }
		var queryString = "";
		
		for(var i in array){
			param = i+'='+array[i];
			queryString += queryString.length == 0 ? param : '&'+param; 
		}
		
		return queryString;
	}
	
	function _duplicate(){
		var params = {};
		var form = document.forms['f_form'];
		params['id'] = form.elements['id'].value;
		params['op'] = form.elements['op'].value;
		
		var url = location.href;
		if(!url){ return false; }
		
		var url = url.match(/\?/g) ? url.split('?') : null;
		if(url == null){ return false; }
		
		var exp = url[0].split('/');
		exp.pop();
		url[0] = exp.join('/');
		
		var queryString = _toQueryString(params);
		window.location.href = url[0]+'/duplicate.php?'+queryString;
	}
	
	function _overwrite(){
		var form = document.forms['f_form'];
		form.overwrite.value = '1';
		form.submit();
	}
	
	function _update(){
		var form = document.forms['f_form'];
		form.update.value = '1';
		form.submit();
	}
	
	function _validateForm(form){
		var elements = $('input[rel],textarea[rel]', $(form));
		var elementFocused = false;
		
		var element = null;
		for(var i = 0; i < elements.length; i++){
			element = $(elements[i]);
			element.css('background-color', '#fff');
			
			var rel = element.attr('rel');
			if(rel){
				var validate = rel.split(',');
				for(var j = 0; j < validate.length; j++){
					if(validate[j] == 'required' && element.val().length == 0){
						element.css('background-color', '#ffd9db');
						if(!elementFocused){ element.focus(); elementFocused = true; }
					}else if(validate[j] == 'email' && !element.val().match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i)){
						element.css('background-color', '#ffd9db');
						if(!elementFocused){ element.focus(); elementFocused = true; }
					}
				}
			}
		}
		
		if(elementFocused){ return false; }
		return true;
	}
	
	function _initPopupImages(elements){
		var elements = $(elements).get();
		
		var element = null;
		for(var i in elements){
			element = $(elements[i]);
			element.bind('click', function(){
				_popupImage(this.getAttribute('href'));
				return false;
			});
		}
	}
	
	function _popupImage(url){
		/*var imageUrl = escape(url);
		var exp = window.location.href.split('?');
		var location = exp[0];
		var queryParams = {'id':10468, 'image': imageUrl};
		var queryString = _toQueryString(queryParams);
		
		popupWindow(location+'?'+queryString, 100, 100, {'toolbars': 'no', 'scrollbars': 'no'});*/
		popupWindow(url, 100, 100, {'toolbars': 'no', 'scrollbars': 'no'});
	}
	
	return {
		'initPopupImages': function(elementSelector){ _initPopupImages(elementSelector); },
		'popupImage': function(imageUrl){ _popupImage(imageUrl); },
		'validateForm': function(formId){ return _validateForm(formId); },
		'toQueryString': function(array){ return _toQueryString(array); },
		'parseUrlParams': function(string){ return _parseUrlParams(string); },
		'duplicate': function(){ _duplicate(); },
		'overwrite': function(){ _overwrite(); },
		'update': function(){ _update(); },
		
		'editSelect': function(id, obj, url){
			var selected = $('select#'+id).val();
			if(selected.length == 0){ return false; }
			obj.href = url.match(/\?/g) ? url+'&id='+selected : url+'?id='+selected;
		},
		
		'deleteSelect': function(id, obj, url){
			var selected = $('select#'+id).val();
			if(selected.length == 0){ return false; }
			obj.href = url.match(/\?/g) ? url+'&id='+selected : url+'?id='+selected;
		}
	}
});

function popupWindowHandler(event){
	popupWindow(event.data.url, event.data.width, event.data.height, event.data.params);
	return false;
}

function popupWindow(url, width, height, params){
	var newWindow = window.open(url, null, 'width='+width+',height='+height+','+params);
	if(newWindow){ newWindow.focus(); }
	return false;
}
