$.ajaxSetup({scriptCharset:'utf-8',contentType:'application/x-www-form-urlencoded; charset=utf-8'});
/**
 * Mariusz Pinior
 * Alert
 */
(function($) {
	var jsAlert = null;
	function JSAlert() {
		this.getJSUrl = '/org.jsolution.ajax';
		this.dlgAlert = null;
		this.dlgIcon = null;
		this.dlgMsg = null;
		this.dlgEvent = null;
		this.yesEvent = null;
		this.noEvent = null;
		this.okB = null;
		this.yesB = null;
		this.noB = null;
		this.init();
	}
	$.info = function(_msg, _warn, _arg1, _arg2) {
		if(jsAlert == null)
			jsAlert = new JSAlert();
		if(_msg != null) {
			if((_arg1 != null && typeof _arg1 == 'function') || (_arg2 != null && typeof _arg2 != 'function'))
				jsAlert.open(_msg, _warn, _arg2, _arg1);
			else jsAlert.open(_msg, _warn, _arg1, _arg2);
		}
		return jsAlert;
	};
	$.confirm = function(_msg, _warn, _param) {
		if(jsAlert == null)
			jsAlert = new JSAlert();
		jsAlert.confirm(_msg, _warn, _param.pElem, _param.yEvent, _param.nEvent, _param.yTitle, _param.nTitle);
		return jsAlert;
	};
	JSAlert.prototype = {
		init:function() {
			var me = this;
			me.dlgAlert = $('<div id="js-alert" style="display:none" title="Info..."></div>');
			_pad = $('<div class="p10"></div>');
			me.dlgIcon = $('<div class="js-alert-icon"></div>');
			me.dlgMsg = $('<div class="js-alert-msg">Info...</div>');
			_clr10 = $('<div class="clear"></div>');
			_split = $('<div class="js-alert-split"></div>');
			_clear = $('<div class="clear"></div>');
			me.dlgIcon.appendTo(_pad);
			me.dlgMsg.appendTo(_pad);
			_clr10.appendTo(_pad);
			_split.appendTo(_pad);
			_pad.appendTo(me.dlgAlert);
			_ok = $('<a href="#ok" style="float:right;" class="rlink" onclick="return false;">Ok</a>');
			_yes = $('<a href="#yes" style="float:right;" class="rlink" onclick="return false;">Yes</a>');
			_no = $('<a href="#no" style="float:right;" class="rlink" onclick="return false;">No</a>');
			me.okB = _ok;
			me.yesB = _yes;
			me.noB = _no;
			_ok.appendTo(me.dlgAlert);
			_no.appendTo(me.dlgAlert);
			_yes.appendTo(me.dlgAlert);
			_clear.appendTo(me.dlgAlert);
			me.dlgAlert.appendTo($('body'));
			me.dlgAlert = me.dlgAlert.dialog({modal:true,position:['center',170],minHeight:100,width:350,height:'auto',resizable:false,autoOpen:false,draggable:false,close:me.closeEvent()});
			_ok.mousedown(function(){
				me.dlgAlert.dialog('close');
				me.closeEvent();
			});
			_yes.mousedown(function(){
				me.dlgAlert.dialog('close');
				me.doYesEvent();
			});
			_no.mousedown(function(){
				me.dlgAlert.dialog('close');
				me.doNoEvent();
			});
		},
		open:function(_msg, _warn, _parent, _event) {
			if(_msg == null) return;
			var me = this;
			me.dlgMsg.html(_msg);
			if(_warn) {
				if(!me.dlgIcon.hasClass('warn'))
					me.dlgIcon.addClass('warn');
			} else if(me.dlgIcon.hasClass('warn')) {
				me.dlgIcon.removeClass('warn');
			}
			if(_event != null && typeof _event == 'function')
				me.dlgEvent = _event;
			me.okB.show();
			me.noB.hide();
			me.yesB.hide();
			if(_parent == null) {
				me.dlgAlert.dialog({position:['center',170]});
				me.dlgAlert.dialog('open');
			} else {
				_o = _parent.offset();
				_p = _parent.position();
				me.dlgAlert.dialog('open');
				_w = (_parent.outerWidth()-me.dlgAlert.outerWidth(true))/2;
				_h = (_parent.outerHeight()-me.dlgAlert.outerHeight(true))/2;
				me.dlgAlert.dialog({position:[(_o.left-_p.left)+_w,(_o.top-_p.top)+_h]});
			}
		},
		confirm:function(_msg, _warn, _parent, _yesEvent, _noEvent, _yesTitle, _noTitle){
			if(_msg == null) return;
			var me = this;
			me.dlgMsg.html(_msg);
			if(_warn) {
				if(!me.dlgIcon.hasClass('warn'))
					me.dlgIcon.addClass('warn');
			} else if(me.dlgIcon.hasClass('warn')) {
				me.dlgIcon.removeClass('warn');
			}
			if(_yesEvent != null && typeof _yesEvent == 'function')
				me.yesEvent = _yesEvent;
			if(_noEvent != null && typeof _noEvent == 'function')
				me.noEvent = _noEvent;
			else me.noEvent = me.closeDlg;
			me.okB.hide();
			me.noB.show();
			me.yesB.show();
			me.noB.text(_noTitle);
			me.yesB.text(_yesTitle);
			if(_parent == null) {
				me.dlgAlert.dialog({position:['center',170]});
				me.dlgAlert.dialog('open');
			} else {
				_o = _parent.offset();
				_p = _parent.position();
				me.dlgAlert.dialog('open');
				_w = (_parent.outerWidth()-me.dlgAlert.outerWidth(true))/2;
				_h = (_parent.outerHeight()-me.dlgAlert.outerHeight(true))/2;
				me.dlgAlert.dialog({position:[(_o.left-_p.left)+_w,(_o.top-_p.top)+_h]});
			}
		},
		closeEvent:function() {
			var me = this;
			if(me.dlgEvent != null) {
				me.dlgEvent();
				me.dlgEvent = null;
			}
		},
		closeDlg:function() {
			var me = this;
			me.dlgAlert.dialog('close');
		},
		doYesEvent:function() {
			var me = this;
			if(me.yesEvent != null) {
				me.yesEvent();
				me.yesEvent = null;
			}
		},
		doNoEvent:function() {
			var me = this;
			if(me.noEvent != null) {
				me.noEvent();
				me.noEvent = null;
			}
		},
		form:function(_form, _get, _name, _warn) {
			var me = this;
			var warn = _warn;
			if(_form != null && _get != null && _name != null) {
				_param = 'e=form&n='+_form+'&g='+_get+'&p='+_name;
				$.get(me.getJSUrl, _param, function(text) {
					me.dlgMsg.html(text);
					if(warn) {
						if(!me.dlgIcon.hasClass('warn'))
							me.dlgIcon.addClass('warn');
					} else if(me.dlgIcon.hasClass('warn')) {
						me.dlgIcon.removeClass('warn');
					}
					me.dlgAlert.dialog('open');
				}, 'text');
			}
		}
	};
})($);
(function($) {
	var jsShutter = null;
	function JSShutter() {
		this.shutterElem = null;
		this.waitElem = null;
		this.init();
	}
	$.jshutter = function(_show, _parent) {
		if(jsShutter == null)
			jsShutter = new JSShutter();
		jsShutter.shutter(_show, _parent);
		return jsShutter;
	};
	$.jwait = function(_show, _parent) {
		if(jsShutter == null)
			jsShutter = new JSShutter();
		jsShutter.wait(_show, _parent);
		return jsShutter;
	};
	JSShutter.prototype = {
		init:function() {
			var me = this;
			me.shutterElem = $('<div class="js-shutter-layer" style="display:none"></div>');
			me.waitElem = $('<div class="js-wait-layer" style="display:none"></div>');
		},
		shutter:function(_show, _parent) {
			var me = this;
			if(_show) {
				if(_parent != null) {
					me.shutterElem.css({width:_parent.width(),height:_parent.height()});
					me.shutterElem.prependTo(_parent);
				} else {
					b = $('body');
					me.shutterElem.css({width:b.width(),height:b.height()});
					me.shutterElem.prependTo($('body'));
				}
				me.shutterElem.show();
			} else me.shutterElem.hide();
		},
		wait:function(_show, _parent) {
			var me = this;
			if(_show) {
				if(_parent != null) {
					me.waitElem.css({width:_parent.width(),height:_parent.height()});
					me.waitElem.prependTo(_parent);
				} else {
					b = $('body');
					me.waitElem.css({width:b.width(),height:b.height()});
					me.waitElem.prependTo($('body'));
				}
				me.waitElem.show();
			} else me.waitElem.hide();
		}
	};
})($);

function getRandomCode() {
  return Math.round(Math.random()*100000000);
}
window.copyToClipboard = function(elemId) {
  elem = document.getElementById(elemId);
  if(elem) {
	elem.select();
    if(window.clipboardData) {
      clipboardData.setData('Text', elem.value);  
	}
  }
  return false;
};
//************************************** Content *****************************************
window.deleteElement = function(elemId) {
  _elem = document.getElementById(elemId);
  if(_elem) {
    _parent = _elem.parentNode;
    _parent.removeChild(_elem);
    return true;
  }
  return false;
};
window.showElement = function(elemeId, _show) {
  _elem = document.getElementById(elemId);
  if(_elem) {
    //...
  }
};
//*************************************** Loader *****************************************
var jsLoader = new JSLoader();
function JSLoader() {
  this.loadArray = new Array();
  
  this.addLoad = function(handle) {
    this.loadArray[this.loadArray.length] = handle;
  };
  
  this.doOnLoad = function() {
    var arr = jsLoader.loadArray;
    var length = arr.length;
    for(var i=0;i<length;i++) {
      arr[i]();
    }
  };
}
window.onload = jsLoader.doOnLoad;
// *************************************** Fields *****************************************
var _Forms = new Array();
function onblurField(_field, defaultTxt) {
  if(defaultTxt == null)
    defaultTxt = _field.title;
  if(_field.value.match(/^\s+$/) || _field.value == '') {
    _field.className = 'disableColor';
    _field.value = defaultTxt;
    return false;
  }
  return true;
}
function onfocusField(_field, defaultTxt) {
  if(defaultTxt == null)
    defaultTxt = _field.title;
  _field.className = 'enableColor';
  if(_field.value == defaultTxt) {
    _field.value = '';
    return false;
  }
  return true;
}
function onSubmitForm(_form) {
  var l = _form.elements.length;
  for(var i=0;i<l;i++) {
    _field = _form.elements[i];
    if(typeof(_field.value) == 'string' && 
       _field.className == 'disableColor'
    ) {
      _field.value = '';
    }
  }
  return true;
}
function initFields(_form) {
  var l = _form.elements.length;
  if(l>0) {
    _form.onsubmit = function() {
      return onSubmitForm(this);
    };
  }
  for(var i=0;i<l;i++) {
    _field = _form.elements[i];
    if(typeof(_field.value) == 'string') {
      _title = _field.title;
      _value = _field.value;
      if(_title != '' && (_value == '' || _value == _title)) {
        _field.className = 'disableColor';
        _field.value = _title;
        _field.onblur = function() {
          onblurField(this);
        };
        _field.onfocus =  function() {
          onfocusField(this);
        };
      }
    }
  }
  return true;
}
function addFromToInit(_form) {
  _Forms[_Forms.length] = _form;
}
function submitForm(_form) {
  onSubmitForm(_form);
  _form.submit();
  return false;
}
function initFormAfterLoad() {
  for(var i=0;i<_Forms.length;i++)
    initFields(_Forms[i]);
}
jsLoader.addLoad(initFormAfterLoad);
//*************************************** Category *****************************************
(function() {
window.JSDirCategory = function(options) {
  this._op = {
    ajax: null,
    formname: null,
    selectData: null
  };
  this._formOb = null;
  this._ajaxOb = null;
  for(var _o in options) {
    if(options.hasOwnProperty(_o)) {
      this._op[_o] = options[_o];
    }
  }
  if(this._op.formname != null) {
    this._formOb = document.forms[this._op.formname];
  }
  this._onload();
};
JSDirCategory.prototype = {
  _onload:function() {
	var _self = this;
	jsLoader.addLoad(function(){
      _self._init();
	});
  },
  _init:function() {
	  var me = this;
      this.resetAll();
	  for(var _fieldname in me._op.selectData) {
		_field = me._op.selectData[_fieldname];
		_fieldOb = me._formOb.elements[_fieldname];
		if(_fieldOb != null) {
			if(_field.fieldnext != null) {
				_fieldOb.onchange = function() {
					me.doAction(this);
				};
			}
			if(_field.fieldvalue == 'user_defined') {
	        	me.addOption(_field.fieldname,
		        		'user_defined','Benutzerdefiniert **');
				if(_field.init) {
					_param = {q:_field.fieldinit,f:_field.fieldname};
					$.get(me._op.ajax, _param, function(text) {
						json = null;
					    try {json = eval('('+text+')');}
					    catch(err) {
					    	alert(err);
					    	return;
					    }
						if(json.res == 'ok')
							me.doResponse(json);
					},'text');
				}
	        } else if(_field.fieldvalue != '' || _field.init) {
				_param = {q:_field.fieldinit,f:_field.fieldname};
				$.get(me._op.ajax, _param, function(text) {
					json = null;
				    try {json = eval('('+text+')');}
				    catch(err) {
				    	alert(err);
				    	return;
				    }
					if(json.res == 'ok')
						me.doResponse(json);
				},'text');
	        }
		}
	  }
  },
  resetAll:function() {
	  for(var _field in this._op.selectData) {
		  this.resetOptions(_field);
	  }
  },
  resetOptions:function(_fieldname) {
	_fieldOb = this._formOb.elements[_fieldname];
	_index = _fieldOb.length-1;
    for(;_index>=0;_index--) {
      _fieldOb.options[_index] = null;
    }
  },
  addOption:function(_fieldname, _id, _value) {
	_fieldOb = this._formOb.elements[_fieldname];
	_fieldOb[_fieldOb.length] = new Option(
	  _value, _id, false, this._op.selectData[_fieldname].fieldvalue == _id);
  },
  doResponse:function(json) {
      if(json.field != null) {
    	  var me = this;
    	  var fname = json.field;
    	  _field = me._op.selectData[fname];
	      var _index = 0;
	      if(!$.isEmptyObject(json.values) && _field.fieldvalue == '')
	    	  me.addOption(fname, '','- Bitte auswählen');
	      $.each(json.values, function(key, value){
	    	  me.addOption(fname, key, value);
	    	  _index++;
	      });
	      if(_index > 0)
	    	  this.addOption(fname, 'user_defined','Benutzerdefiniert **');
      }
  },
  doAction:function(_fieldOb) {
	  var me = this;
	_field = me._op.selectData[_fieldOb.name];
    if(_fieldOb.value != _field.fieldvalue) {
        _startReset = false;
    	for(var __field in me._op.selectData) {
    	  __field = me._op.selectData[__field];
  		  if(_startReset) {
  			  me.resetOptions(__field.fieldname);
  			  __field.fieldvalue = '';
  			  __field.fieldinit = '';
  		  } else {
  			  _startReset = __field.fieldname == _field.fieldname;
  		  }
  	  	}
    	_field.fieldvalue = _fieldOb.value;
    	if(_fieldOb.value != '' && _fieldOb.value != 'user_defined') {
	    	if(_field.fieldnext != null) {
	    		me._op.selectData[_field.fieldnext].fieldvalue = '';
				_param = {q:_field.fieldvalue,f:_field.fieldnext};
				$.get(me._op.ajax, _param, function(text) {
					json = null;
				    try {json = eval('('+text+')');}
				    catch(err) {
				    	alert(err);
				    	return;
				    }
					if(json.res == 'ok')
						me.doResponse(json);
				},'text');
	    	}
    	} else if(_fieldOb.value == 'user_defined') {
    		me.addOption(_field.fieldnext, 'user_defined', 
    			_fieldOb.options[_fieldOb.selectedIndex].text);
    	}
    }
  }
};
})();
//*************************************** Activity *****************************************
(function() {
var toElement = (function(){
  var div = document.createElement('div');
  return function(html){
    div.innerHTML = html;
	var el = div.firstChild;
	return div.removeChild(el);
  };
})();
window.JSActivity = function(options) {
  this._op = {
    formname: null,
    elemname: null
  };
  for(var _o in options) {
   if(options.hasOwnProperty(_o)) {
     this._op[_o] = options[_o];
   }
  }
  this._actOb = null;
  this._ajaxOb = null;
  this._dlgOb = null;
  this._dlgForm = null;
  if(this._op.elemname != null) {
    this._actOb = document.getElementById(this._op.elemname);
    this._ajaxOb = '/jsolution/form/' + this._op.formname;
    this._dlgOb = $('#'+this._op.elemname+'_dlg').dialog({
    	position:['center',100],modal:true,width:400,
    	resizable:false,autoOpen:false,draggable:false,
    	closeOnEscape:true
    });
    this._dlgForm = document.locationForm;
    $(this._dlgForm.area).change(function(){
    	if(this.value == 'state') {
		  $('#location-layer').hide();
		  $('#state-layer').show();
    	} else if(this.value == 'location') {
		  $('#state-layer').hide();
		  $('#location-layer').show();
    	} else {
		  $('#state-layer').hide();
		  $('#location-layer').hide();
    	}
    });
  }
};
JSActivity.prototype = {
_openDlg:function() {
  if(this._dlgOb != null) {
	  this._dlgForm.reset();
	  $('#state-layer').hide();
	  $('#location-layer').hide();
	  this._dlgOb.dialog('open');
  }
  return false;
},
_closeDlg:function() {
  if(this._dlgOb != null)
    this._dlgOb.dialog('close');
  return false;
},
_submitDlg:function() {
  var me = this;
  if(this._dlgOb != null) {
    $.post(me._ajaxOb, $(this._dlgForm).serialize(), function(text){
        try {json = eval('('+text+')');}
        catch(err) {alert(err);return;}
        if(json.status == 'ok') {
        	me._add(json.id, json.title, json.desc);
        	me._dlgOb.dialog('close');
        } else if(json.status == 'err') {
        	$.info(me._op.stErr, true);
        } else if(json.status == 'null') {
        	$.info(me._op.stNull, true);
        	return false;
        }
    });
    return false;
  }
},
_delete:function() {
  var me = this;
  if(me._ajaxOb == null) return false;
  _doc = document.forms[me._op.formname];
  _ems = _doc.elements[me._op.elemname];
  if(_ems) {
    var _ids = null;
    if(_ems.length) {
      _length = _ems.length;
      _index = 0;
      for(;_index < _length;_index++) {
        if(_ems[_index].checked) {
          if(_ids == null) _ids = _ems[_index].value;
          else _ids+= '|' + _ems[_index].value;
        }
      }
    } else if(_ems.checked) {
      _ids = _ems.value;
    }
    if(_ids != null) {
      param = {jsAction:'ajax',ajaxAction:'deleteActivity',deleteActivity:_ids};
      $.post(me._ajaxOb, param, function(text){
        json = null;
        try {json = eval('('+text+')');}
        catch(err) {alert(err);return;}
        if(json.status == 'ok') {
        	_doc = document.forms[me._op.formname];
        	_ems = _doc.elements[me._op.elemname];
        	if(_ems) {
              _count = 0;
        	  _index = 0;
              _ids = new Array();
              if(_ems.length) {
                for(;_index<_length;_index++) {
                  if(_ems[_index].checked)
                    _ids[_count++] = _ems[_index].value;
                }
              } else if(_ems.checked) {
                _ids[_count++] = _ems.value;
              }
              _index = 0;
        	  for(;_index<_count;_index++) {
        		_elem = document.getElementById('elem_' + _ids[_index]);
        		_parent = _elem.parentNode;
        		if(_parent) {
        			_parent.removeChild(_elem);
        		} else me._actOb.removeChild(_elem);
        	  }
        	}
        }
      });
    }
  }
  return false;
},
_add:function(_id, _title, _desc) {
  if(this._actOb == null) return false;
  if(_desc != null && $.trim(_desc) != '') 
    _desc = _desc.replace(/\|/g, '<br/>');
  _elem = toElement('<div class="activity_area" id="elem_' + _id + '">'+
    '<label><input type="checkbox" name="' + this._op.elemname + '" ' + 
    'class="checkbox" value="' + _id + '" /><span>' + _title + 
    '</span></label>' + (_desc!=null?'<div>' + _desc + '</div>':'') + 
    '</div>'
  );
  this._actOb.insertBefore(_elem, this._actOb.firstChild);
  return false;
}
};
})();
//************************************** Email-Check ****************************************
(function() {
	window.JSEmailCheck = function(options) {
	  this._op = {
	    formname: null,
	    finish:function(){}
	  };
	  for(var _o in options) {
	    if(options.hasOwnProperty(_o)) {
	    	this._op[_o] = options[_o];
		}
	  }
	  this._ajaxOb = null;
	  if(this._op.formname != null) {
		  this._ajaxOb = new JSAjax('JSBacklinkCheck', 'POST');
		  this.check();
	  }
	};
	JSEmailCheck.prototype = {
		check:function() {
			if(this._ajaxOb != null) {
				this._ajaxOb.doAJAXRequest(
					this, 'ajaxAction=check', 
				    this._op.formname, true, false);
			}
		},
		doResponse:function(xml) {
			_root = xml.getElementsByTagName('check');
			if(_root != null) {
				_refNode = _root.item(0);
				_param = _refNode.firstChild.data;
			    if(_param == 'finisched') {
			    	this._op.finish();
			    } else {
			    	var _this = this;
			    	window.setTimeout(function(){_this._op.finish();}, 1000);
			    }
			} else this._op.finish();
		}
	};
})();
//*************************************** Status *****************************************
(function() {
window.JSStatus = function(options) {
  this._op = {
    formname: null,
    size: 200,
    jsBG: 'jsStatusBG',
    jsCount: 'jsStatusCount',
    jsIndex: 'jsStatusIndex'
  };
  for(var _o in options) {
    if(options.hasOwnProperty(_o)) {
    	this._op[_o] = options[_o];
	}
  }
  this._statusBG = null;
  this._statusCount = null;
  this._statusIndex = null;
  this._ajaxOb = null;
};
})();
//************************************** Backlink ****************************************
(function() {
	window.JSBacklinkCheck = function(options) {
	  this._op = {
	    formname: null,
	    finish:function(){}
	  };
	  for(var _o in options) {
	    if(options.hasOwnProperty(_o)) {
	    	this._op[_o] = options[_o];
		}
	  }
	  this._ajaxOb = null;
	  if(this._op.formname != null) {
		  this._ajaxOb = new JSAjax('JSBacklinkCheck', 'POST');
		  this.check();
	  }
	};
	JSBacklinkCheck.prototype = {
		check:function() {
			if(this._ajaxOb != null) {
				this._ajaxOb.doAJAXRequest(
					this, 'ajaxAction=check', 
				    this._op.formname, true, false);
			}
		},
		doResponse:function(xml) {
			_root = xml.getElementsByTagName('check');
			if(_root != null) {
				_refNode = _root.item(0);
				_param = _refNode.firstChild.data;
			    if(_param == 'finisched') {
			    	this._op.finish();
			    } else {
			    	var _this = this;
			    	window.setTimeout(function(){_this._op.finish();}, 1000);
			    }
			} else this._op.finish();
		}
	};
})();
//************************************** Bewerten ****************************************
function writeAddThis() {
	document.write('<'+'a class="addthis_button_email"'+'>'+'<'+'/a'+'>'+'<'+'a class="addthis_button_facebook"'+'>'+'<'+'/a'+'>'+'<'+'a class="addthis_button_google"'+'><'+'/a'+'>');
	document.write('<'+'a class="addthis_button_twitter"'+'>'+'<'+'/a'+'>'+'<'+'a class="addthis_button_misterwong"'+'>'+'<'+'/a'+'>'+'<'+'a class="addthis_button_delicious"'+'>'+'<'+'/a'+'>');
	document.write('<'+'a class="addthis_button_compact"'+'>'+'<'+'/a'+'>'+'<'+'a class="addthis_counter addthis_bubble_style"'+'>'+'<'+'/a'+'>');
}
