var corex = {

	/**
	  * Internal CORE-X JavaScript Library, a set of few usefull functions ;-) 
	  *************************************************************************************/
	INFO : "COREX jsLibrary v.1.14-03/03/2011",
	
	/**
	  * browser =type variables .. they are initialised automaticaly during loading this file, by "corex.browserTypeCheck()" function
	  */
	win : 0,
	mac : 0,
	lnx : 0,
	ice : 0,
	ie  : 0,
	ie4 : 0,
	ie5 : 0,
	ie6 : 0,
	op5 : 0,
	op6 : 0,
	op7 : 0,
	ns4 : 0,
	ns6 : 0,
	ns7 : 0,
	mz7 : 0,
	kde : 0,  
	saf : 0,
	
	/**
	  * mouse cursor absolute position. it's loaded by corex.getMouseXY() function, durin initialisation
	  * of page this function is put into document.onmousemove= .. so if you overwrite this handler
	  * with you own function, these two valies will be no more available, or value here will be not corresponding
	  * with actual mouse cursor poistion
	  */
	mouseX : 0,
	mouseY : 0,
	
	viewportWidth  : 0,
	viewportHeight : 0,
	
	viewportScrollLeft : 0,
	viewportScrollTop  : 0,

	/**
	 * This is handler object for corex progressbar file uploads
	 */
	fileUploadHandler : {

		/**
		 * create uploader HTML structure
		 */
		createHTML : function(upload_id)
		{
			// id not found
			if (!$('#COREX_UPLOAD_BOX_' + upload_id).length)
			{
				return false;
			}

			// form already initialised, don't initialise it again
			if ($('#COREX_UPLOAD_FORM_' + upload_id).length)
			{
				return true;
			}

			$('#COREX_UPLOAD_BOX_' + upload_id).wrapInner('<form action="" id="COREX_UPLOAD_FORM_' + upload_id + '" target="COREX_UPLOAD_FRAME_' + upload_id + '" method="POST" enctype="multipart/form-data" />');
			$('#COREX_UPLOAD_FORM_' + upload_id).prepend('<input type="hidden" name="UPLOAD_IDENTIFIER" value="' + upload_id + '" />');
			
			corex.fileUploadHandler.initFilesInputBoxes(upload_id);

			$('#COREX_UPLOAD_BOX_' + upload_id).append('<iframe id="COREX_UPLOAD_FRAME_' + upload_id + '" name="COREX_UPLOAD_FRAME_' + upload_id + '" src="" width="1" height="1" style="display:none" />');

			return true;
		},

		/**
		 * start file upload, run upload progress measuring ajax loop
		 */
		start : function(upload_id)
		{
			// check if at least one file is selected
			if (corex.fileUploadHandler.checkIfSomeFileSelected(upload_id))
			{
				corex.fileUploadHandler.createOverlay(upload_id);

				// clear upload target frame (just for sure)
				$('#COREX_UPLOAD_FRAME_' + upload_id).attr('src','');

				// submit file form
				$('#COREX_UPLOAD_FORM_' + upload_id).submit();

				// call first time upload check ajax function. this function will return also call with submits form with file
				xajax_corex_checkFileUploadStatus(upload_id, 1);
			}
		},

		/*
		 * update upload status
		 */
		update : function(upload_id)
		{
			xajax_corex_checkFileUploadStatus(upload_id);
		},

		/**
		 * fn for cancelling runing file upload
		 */
		cancel : function (upload_id)
		{
			xajax_corex_cancelFileUpload(upload_id);
		},

		/**
		 * called periodically until transfer didn't begin
		 */
		waitCallback : function (upload_id)
		{
			//$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).html('WAITING');
		},

		/**
		 * called from xajax_checkUploadStatus when upload isn't completted
		 */
		progressCallback : function (upload_id, total_kb, progress_kb)
		{
			corex.fileUploadHandler.updateProgressBar(upload_id, total_kb, progress_kb);
		},

		/**
		 * called from xajax_checkUploadStatus when upload is completted
		 */
		doneCallback : function (upload_id)
		{
			corex.fileUploadHandler.updateProgressBar(upload_id, 100, 100);

			var callback = $('#COREX_UPLOAD_BOX_' + upload_id +' .COREX_UPLOAD_DONECALLBACK').val();

			if (callback != '')
			{
				eval(callback);
			}

		},

		/**
		 * called from xajax_checkUploadStatus when upload is completted
		 */
		cancelCallback : function (upload_id)
		{
			corex.fileUploadHandler.updateProgressBar(upload_id, 100, 100);

			var callback = $('#COREX_UPLOAD_BOX_' + upload_id +' .COREX_UPLOAD_CANCELCALLBACK').val();

			if (callback != '')
			{
				eval(callback);
			}
		},

		initFilesInputBoxes : function(upload_id)
		{
			var filesCount = 1;

			if ($('#COREX_UPLOAD_BOX_' + upload_id +' .COREX_UPLOAD_FILES_NUMBER').length != 0)
			{
				filesCount = $('#COREX_UPLOAD_BOX_' + upload_id +' .COREX_UPLOAD_FILES_NUMBER').val();
			}

			var inputBoxId = '';

			// remove old inputboxes
			$('#COREX_UPLOAD_FORM_' + upload_id + ' > input:file').remove();

			// remove submit button
			$('#COREX_UPLOAD_SUBMITBUTTON_' + upload_id).remove();

			// add new inputboxes
			for(i=1; i<=filesCount; i++)
			{
				inputBoxId = 'COREX_UPLOAD_FILE_' + i + '_' + upload_id;
				$('#COREX_UPLOAD_FORM_' + upload_id).append('<input type="file" id="' + inputBoxId + '" name="' + inputBoxId + '" />');
			}

			// add submit button
			var submitButtonText = $('#COREX_UPLOAD_BOX_' + upload_id + ' .COREX_UPLOAD_SUBMITBUTTONTEXT').val();
			if (submitButtonText == 'undefined')
			{
				submitButtonText = 'UPLOAD';
			}

			$('#COREX_UPLOAD_FORM_' + upload_id).append('<input id="COREX_UPLOAD_SUBMITBUTTON_' + upload_id+ '" type="button" value="' + submitButtonText + '" onClick="corex.fileUploadHandler.start(\'' + upload_id + '\');" />');

		},

		checkIfSomeFileSelected : function(upload_id)
		{
			var isSet = false;

			$('#COREX_UPLOAD_FORM_' + upload_id + ' > input:file').each(function()
			{
			   if ($(this).val())
			   {
				   isSet = true;
			   }
			})

			return isSet;
		},

		/**
		 * reset all parts of  upload form to default state
		 */
		reset : function(upload_id)
		{
			/* $('#COREX_UPLOAD_FRAME_' + upload_id).attr('src',''); */
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).remove();
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').remove();
			corex.fileUploadHandler.initFilesInputBoxes(upload_id);
		},

		/**
		 * create 'lightbox' like overlay over file input boxes
		 */
		createOverlay : function(upload_id)
		{
			$('#COREX_UPLOAD_FORM_' + upload_id).append('<div class="COREX_UPLOAD_OVERLAY" />');

			var formPosition = $('#COREX_UPLOAD_FORM_' + upload_id).offset();
			var formWidth = $('#COREX_UPLOAD_FORM_' + upload_id).innerWidth();
			var formHeight = $('#COREX_UPLOAD_FORM_' + upload_id).innerHeight();

			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('display' ,'block');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('position','absolute');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('z-index' ,'20001');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('background' ,'#e7e7e7');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('border','1px solid #333333');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('filter','alpha(opacity=80)');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('-moz-opacity','0.8');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('-khtml-opacity','0.8');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('opacity','0.8');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('border-radius','4px');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('-moz-border-radius','4px');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('-webkit-border-radius','4px');
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('top', formPosition.top);
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').css('left', formPosition.left);
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').width(formWidth);
			$('#COREX_UPLOAD_FORM_' + upload_id + ' .COREX_UPLOAD_OVERLAY').height(formHeight);


			$('#COREX_UPLOAD_BOX_' + upload_id).append('<div id="COREX_UPLOAD_PROGRESSBAR_' + upload_id + '" />');

			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('position','absolute');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('z-index','20002');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('filter','alpha(opacity=100)');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('-moz-opacity','1');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('-khtml-opacity','1');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('opacity','1');

			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('background','#e0e0e0');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('border:1x solid','#000000');

			var pBarWidth  = Math.ceil(formWidth/1.3);
			var pBarHeight = Math.ceil(formHeight/5.5);

			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('top', formPosition.top + Math.ceil(formHeight/2) - Math.ceil(pBarHeight/2));
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('left', formPosition.left + Math.ceil(formWidth/2) - Math.ceil(pBarWidth/2));
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).css('border','1px solid #606060');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).width(pBarWidth);
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).height(pBarHeight);

			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id).append('<div></div>');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id + ' div').css('width','0');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id + ' div').css('background','#606060');
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id + ' div').height(pBarHeight);

		},

		updateProgressBar : function(upload_id, total_kb, progress_kb)
		{
			var progress = Math.ceil(progress_kb * 100 / total_kb);
			$('#COREX_UPLOAD_PROGRESSBAR_' + upload_id + ' div').css('width',progress + '%');
		}

	},
	
	/** get fckeditoc content - this function reads selected fckeditor data. useable
	  *                         when submitting some form containing fckeditor through
	  *						    xajax (you need to read fckedtiro content with this function,
	  *                         save it to some hidden input box for exampe, and then subit
	  */
	getFCKcontent : function (editor_name) {
	
		var output = '';
		
		if (typeof(FCKeditorAPI)!="undefined") {
			
			try {
				oEditor = FCKeditorAPI.GetInstance(editor_name);
				if (oEditor.EditorDocument.body.innerHTML) output = oEditor.GetXHTML();
			} catch (err) {
				try {
					output = document.getElementById(editor_name).value;
				} catch(err2) {}
			}		
			
		}
		
		return(output);
	    
	},
	
	/**
	  * function for submiting form if enter is pressed over selected inputbox
	  * simply put into seleted elemnt: onClick="corex.submitIfEnter(this,event)" and you have it ;)
	  */
	submitIfEnter : function (myfield,e) {
	
		var keycode;
		
		if (window.event) keycode = window.event.keyCode;
		else if (e) keycode = e.which;
		else return true;
	
		if (keycode == 13) {
		   myfield.form.submit();
		   return false;
		} else {
		   return true;
		}
		
	},
	
	/**
	  * reads some html selectobx (with given id) and returns the value of selected idem
	  */
	getSelectedValueText : function (inputBoxId) {
		
		var tmp    = document.getElementById(inputBoxId);
		var retVal = '';
		for (i=0;i<tmp.length;i++) {
			if (tmp[i].value==tmp.value) retVal = tmp[i].text; 
		}
		
		return(retVal);
		
	},
	
	/**
	  * returns array serialised in format value(divider)value(divier)value... default divider is ;
	  */
	getSerializedArray : function (haystack,divider) {
		
		if (divider == '' || divider == null)
			divider = ';';
		
		var haystackSize = haystack.length;
		var serialized   = new String();
		
		for(i=0;i<haystackSize;i++) {
			
			if(i>0) serialized += divider;
			
			serialized += haystack[i];
			
		}
			
		return(serialized);
		
	},
	
	
	/**
	  * checks if a value exists in an array
	  */ 
	inArray : function (value,haystack) {
		
	  for(var i=0;i<haystack.length;i++) {
	    if (haystack[i]==value) return true;
	  }
	  return false;
	  
	},

	/**
	  * searches the array for a given value and returns the corresponding key if successful
	  * if not successfull (value not found), will return NULL
	  */
	arraySearch : function (value,haystack)  {
		
	  for(var i=0;i<a.length;i++) {
	    if (haystack[i]==value) return i;
	  }
	  return null;
	  
	},

	/**
	  * this function will check string in 'email' variable if it's valid e-mail format 
	  */
	checkMail : function (email) {
		 
		 var regExpEmail=/[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}/;

		 if(!regExpEmail.exec(email)) return(false); else return(true);
		 
	},
	
	/**
	  * this is for replacing some substring (all occurences) with other string
	  */
	replaceSubstring : function (haystack, value, replacement) {
		
	   var output = haystack;
	   if (value == "") {
	      return haystack;
	   }
	   if (replacement.indexOf(value) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
	      while (output.indexOf(value) != -1) {
	         var toTheLeft = output.substring(0, output.indexOf(value));
	         var toTheRight = output.substring(output.indexOf(value)+value.length, output.length);
	         output = toTheLeft + replacement + toTheRight;
	      }
	   } else { 
	   	  var midStrings = new Array("~", "`", "_", "^", "#");
	      var midStringLen = 1;
	      var midString = "";
	      while (midString == "") {
	         for (var i=0; i < midStrings.length; i++) {
	            var outputMidString = "";
	            for (var j=0; j < midStringLen; j++) {outputMidString += midStrings[i];}
	            if (value.indexOf(outputMidString) == -1) {
	               midString = outputMidString;
	               i = midStrings.length + 1;
	            }
	         }
	      } 
	      while (output.indexOf(value) != -1) {
	         var toTheLeft = output.substring(0, output.indexOf(value));
	         var toTheRight = output.substring(output.indexOf(value)+value.length, output.length);
	         output = toTheLeft + midString + toTheRight;
	      }
	      while (output.indexOf(midString) != -1) {
	         var toTheLeft = output.substring(0, output.indexOf(midString));
	         var toTheRight = output.substring(output.indexOf(midString)+midString.length, output.length);
	         output = toTheLeft + replacement + toTheRight;
	      }
	   } 
	   return output; 
	   
	},
	
	/**
	  * wrapper for window.open() function, no special functionality here ;-) useable
	  * in some speciffic cases when direct calling window.open() isn't good 
	  * (for exampel in <a href=".."> tag)
	  */
	windowOpen : function (url,windowName,params) {
		
		window.open(url,windowName,params);
		
	},

	/**
	  * used by CONTENTS plugin for submiting content-inline form
	  */
	contentsMailerSubmit : function (form_id,mandatory_fields,mandatory_fields__error_message,bad_email__error_message) {
		
		var mF           = mandatory_fields.split(','); 
		var allFilled    = 1;
		var emailInvalid = 0;
		
		for(i=0;i<mF.length;i++) {
		
			var tmp = '_' + mF[i];
			if (tmp.indexOf('email')>0) {
				if (document.forms[form_id][mF[i]]!=undefined) {

					var regExpEmail=/^.+@.+\..+$/;
					
					var o = document.forms[form_id][mF[i]];
					if(!regExpEmail.exec(o.value)) {
						emailInvalid = 1;			 	
					}
					
				}
			}
			
			if (document.forms[form_id][mF[i]]==undefined) alert('ERROR :: contentsMailerSubmit() :: Send variable not found : ' + mF[i]);
			if (document.forms[form_id][mF[i]].value=='')  allFilled = 0;
			
		}
		
		if (mandatory_fields__error_message=='') mandatory_fields__error_message = "ERROR: SOME MANDATORY FIELDS EMPTY !";
		if (bad_email__error_message=='')        bad_email__error_message        = "ERROR: INCORRECT E-MAIL COLUMN FORMAT !";
		
		if      (allFilled!=1)    alert(mandatory_fields__error_message);
		else if (emailInvalid==1) alert(bad_email__error_message);
		else                      {
			document.getElementById(form_id).action = '';
			document.getElementById(form_id).submit();
		}
		
	},
	
	browserTypeCheck : function () {
		
		var exclude=1;
		var agt=navigator.userAgent.toLowerCase();
		var win=0;var mac=0;var lin=1;
		if(agt.indexOf('win')!=-1){win=1;lin=0;}
		if(agt.indexOf('mac')!=-1){mac=1;lin=0;}
		var lnx=0;if(lin){lnx=1;}
		var ice=0;
		var ie=0;var ie4=0;var ie5=0;var ie6=0;var com=0;var dcm;
		var op5=0;var op6=0;var op7=0;
		var ns4=0;var ns6=0;var ns7=0;var mz7=0;var kde=0;var saf=0;
		if(typeof navigator.vendor!="undefined" && navigator.vendor=="KDE"){
			var thisKDE=agt;
			var splitKDE=thisKDE.split("konqueror/");
			var aKDE=splitKDE[1].split("; ");
			var KDEn=parseFloat(aKDE[0]);
			if(KDEn>=2.2){
				kde=1;
				ns6=1;
				exclude=0;
				}
			}
		else if(agt.indexOf('webtv')!=-1){exclude=1;}
		else if(typeof window.opera!="undefined"){
			exclude=0;
			if(/opera[\/ ][5]/.test(agt)){op5=1;}
			if(/opera[\/ ][6]/.test(agt)){op6=1;}
			if(/opera[\/ ][7-9]/.test(agt)){op7=1;}
			}
		else if(typeof document.all!="undefined"&&!kde){
			exclude=0;
			ie=1;
			if(typeof document.getElementById!="undefined"){
				ie5=1;
				if(agt.indexOf("msie 6")!=-1){
					ie6=1;
					dcm=document.compatMode;
					if(dcm!="BackCompat"){com=1;}
					}
				}
			else{ie4=1;}
			}
		else if(typeof document.getElementById!="undefined"){
			exclude=0;
			if(agt.indexOf("netscape/6")!=-1||agt.indexOf("netscape6")!=-1){ns6=1;}
			else if(agt.indexOf("netscape/7")!=-1||agt.indexOf("netscape7")!=-1){ns6=1;ns7=1;}
			else if(agt.indexOf("gecko")!=-1){ns6=1;mz7=1;}
			if(agt.indexOf("safari")!=-1 || (typeof document.childNodes!="undefined" && typeof document.all=="undefined" && typeof navigator.taintEnabled=="undefined")){mz7=0;ns6=1;saf=1;}
			}
		else if((agt.indexOf('mozilla')!=-1)&&(parseInt(navigator.appVersion)>=4)){
			exclude=0;
			ns4=1;
			if(typeof navigator.mimeTypes['*']=="undefined"){
				exclude=1;
				ns4=0;
				}
			}
		if(agt.indexOf('escape')!=-1){exclude=1;ns4=0;}
		if(typeof navigator.__ice_version!="undefined"){exclude=1;ie4=0;}	
		
		corex.win = win;
		corex.mac = mac;
		corex.lnx = lnx;
		corex.ice = ice;
		corex.ie  = ie;
		corex.ie4 = ie4;
		corex.ie5 = ie5;
		corex.ie6 = ie6;
		corex.op5 = op5;
		corex.op6 = op6;
		corex.op7 = op7;
		corex.ns4 = ns4;
		corex.ns6 = ns6;
		corex.ns7 = ns7;
		corex.mz7 = mz7;
		corex.kde = kde;
		corex.saf = saf;
		
	},

	viewportCheckSize : function() {
		
		if (typeof window.innerWidth != 'undefined') {
			corex.viewportWidth  = window.innerWidth,
			corex.viewportHeight = window.innerHeight
		}
		
		else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth !='undefined' && document.documentElement.clientWidth != 0) {
			corex.viewportWidth  = document.documentElement.clientWidth,
			corex.viewportHeight = document.documentElement.clientHeight
		}
		
		else if (typeof document.getElementsByTagName('body')[0] != 'undefined') {
			corex.viewportWidth  = document.getElementsByTagName('body')[0].clientWidth,
			corex.viewportHeight = document.getElementsByTagName('body')[0].clientHeight
		} 
		
		if( typeof( window.pageYOffset ) == 'number' ) {
			corex.viewportScrollTop  = window.pageYOffset;
			corex.viewportScrollLeft = window.pageXOffset;
		
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			corex.viewportScrollTop  = document.body.clientHeight;
			corex.viewportScrollLeft = document.body.clientWidth;
		
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			corex.viewportScrollTop  = document.documentElement.scrollTop;
			corex.viewportScrollLeft = document.documentElement.scrollLeft;
		}
		
		else {
			corex.viewportScrollTop  = 0;
			corex.viewportScrollLeft = 0;
		}
		
		return {viewportWidth:corex.viewportWidth, viewportHeight:corex.viewportHeight, viewportScrollTop:corex.viewportScrollTop, viewportScrollLeft:corex.viewportScrollLeft};
		
	},
	
	/**
	  * get element (Elem - id of html element) absolute height (pixels)
	  */
	getElementHeight : function (Elem) {
		if (corex.ns4) {
			var elem = getObjNN4(document, Elem);
			return elem.clip.height;
		} else {
			if(document.getElementById) {
				var elem = document.getElementById(Elem);
			} else if (document.all){
				var elem = document.all[Elem];
			}
			if (corex.op5) { 
				xPos = elem.style.pixelHeight;
			} else {
				xPos = elem.offsetHeight;
			}
			return xPos;
		} 
	},
	
	/**
	  * get element (Elem - id of html element) absolute width (pixels)
	  */
	getElementWidth : function (Elem) {
		if (corex.ns4) {
			var elem = getObjNN4(document, Elem);
			return elem.clip.width;
		} else {
			if(document.getElementById) {
				var elem = document.getElementById(Elem);
			} else if (document.all){
				var elem = document.all[Elem];
			}
			if (corex.op5) {
				xPos = elem.style.pixelWidth;
			} else {
				xPos = elem.offsetWidth;
			}
			return xPos;
		}
	},
	
	/**
	  * returns absolute left/top position of element in browser
	  */
	getElementPos : function (Elem) {
		
		var curleft = 0;
		var curtop  = 0;
		var obj     = document.getElementById(Elem);
		
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
		
	},
	
	getMouseXY : function (e) {

		try {
		
			var mouseX = 0;
			var mouseY = 0;
			
			if(corex.ie){
				
				var x = 0
				if(typeof(window.pageYOffset)=='number') {
					x = window.pageXOffset;
				} else if(document.body && (document.body.scrollLeft || document.body.scrollTop )) {
					x = document.body.scrollLeft;
				} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop )) {
					x = document.documentElement.scrollLeft;
				}
				
				var y = 0;
				if (typeof(window.pageYOffset)=='number') {                                       
					y = window.pageYOffset;
				} else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
					y = document.body.scrollTop;
				} else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))  {
					y = document.documentElement.scrollTop;
				}		
				
				corex.mouseX = x + event.clientX;
				corex.mouseY = y + event.clientY;
			
			} else {
				
				corex.mouseX = window.pageXOffset + e.clientX;
				corex.mouseY = window.pageYOffset + e.clientY;
				
			}
			
		} catch(err) {}
		
	},
	
	md5 : function (string) {
	 
		function RotateLeft(lValue, iShiftBits) {
			return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
		}
	 
		function AddUnsigned(lX,lY) {
			var lX4,lY4,lX8,lY8,lResult;
			lX8 = (lX & 0x80000000);
			lY8 = (lY & 0x80000000);
			lX4 = (lX & 0x40000000);
			lY4 = (lY & 0x40000000);
			lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
			if (lX4 & lY4) {
				return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
			}
			if (lX4 | lY4) {
				if (lResult & 0x40000000) {
					return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
				} else {
					return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
				}
			} else {
				return (lResult ^ lX8 ^ lY8);
			}
	 	}
	 
	 	function F(x,y,z) {return (x & y) | ((~x) & z);}
	 	function G(x,y,z) {return (x & z) | (y & (~z));}
	 	function H(x,y,z) {return (x ^ y ^ z);}
		function I(x,y,z) {return (y ^ (x | (~z)));}
	 
		function FF(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};
	 
		function GG(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};
	 
		function HH(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};
	 
		function II(a,b,c,d,x,s,ac) {
			a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
			return AddUnsigned(RotateLeft(a, s), b);
		};
	 
		function ConvertToWordArray(string) {
			var lWordCount;
			var lMessageLength = string.length;
			var lNumberOfWords_temp1=lMessageLength + 8;
			var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
			var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
			var lWordArray=Array(lNumberOfWords-1);
			var lBytePosition = 0;
			var lByteCount = 0;
			while ( lByteCount < lMessageLength ) {
				lWordCount = (lByteCount-(lByteCount % 4))/4;
				lBytePosition = (lByteCount % 4)*8;
				lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
				lByteCount++;
			}
			lWordCount = (lByteCount-(lByteCount % 4))/4;
			lBytePosition = (lByteCount % 4)*8;
			lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
			lWordArray[lNumberOfWords-2] = lMessageLength<<3;
			lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
			return lWordArray;
		};
	 
		function WordToHex(lValue) {
			var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
			for (lCount = 0;lCount<=3;lCount++) {
				lByte = (lValue>>>(lCount*8)) & 255;
				WordToHexValue_temp = "0" + lByte.toString(16);
				WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
			}
			return WordToHexValue;
		};
	 
		function Utf8Encode(string) {
			string = string.replace(/\r\n/g,"\n");
			var utftext = "";
	 
			for (var n = 0; n < string.length; n++) {
	 
				var c = string.charCodeAt(n);
	 
				if (c < 128) {
					utftext += String.fromCharCode(c);
				}
				else if((c > 127) && (c < 2048)) {
					utftext += String.fromCharCode((c >> 6) | 192);
					utftext += String.fromCharCode((c & 63) | 128);
				}
				else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}
	 
			}
	 
			return utftext;
		};
	 
		var x=Array();
		var k,AA,BB,CC,DD,a,b,c,d;
		var S11=7, S12=12, S13=17, S14=22;
		var S21=5, S22=9 , S23=14, S24=20;
		var S31=4, S32=11, S33=16, S34=23;
		var S41=6, S42=10, S43=15, S44=21;
	 
		string = Utf8Encode(string);
	 
		x = ConvertToWordArray(string);
	 
		a = 0x67452301;b = 0xEFCDAB89;c = 0x98BADCFE;d = 0x10325476;
	 
		for (k=0;k<x.length;k+=16) {
			AA=a;BB=b;CC=c;DD=d;
			a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
			d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
			c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
			b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
			a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
			d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
			c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
			b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
			a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
			d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
			c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
			b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
			a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
			d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
			c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
			b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
			a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
			d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
			c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
			b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
			a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
			d=GG(d,a,b,c,x[k+10],S22,0x2441453);
			c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
			b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
			a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
			d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
			c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
			b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
			a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
			d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
			c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
			b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
			a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
			d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
			c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
			b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
			a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
			d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
			c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
			b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
			a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
			d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
			c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
			b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
			a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
			d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
			c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
			b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
			a=II(a,b,c,d,x[k+0], S41,0xF4292244);
			d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
			c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
			b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
			a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
			d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
			c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
			b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
			a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
			d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
			c=II(c,d,a,b,x[k+6], S43,0xA3014314);
			b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
			a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
			d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
			c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
			b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
			a=AddUnsigned(a,AA);
			b=AddUnsigned(b,BB);
			c=AddUnsigned(c,CC);
			d=AddUnsigned(d,DD);
		}
	 
		var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
	 
		return temp.toLowerCase();
		
	}	
	
}

/**
  * this function is called from opened filemanager or linkmanager... theyinserts 
  * through this function filename into input box with selected ID.. do not change anything on this function !
  */
function SetUrl(value,width,height,filename,targetInputID) {document.getElementById(targetInputID).value = value;}

// set corex browser-type variables
corex.browserTypeCheck();
corex.viewportCheckSize();
document.onmousemove=corex.getMouseXY;

/**
  * transparent png for ie6 support .. call transparentPNG.init() 
  */
var transparentPNG	= function() {
	
	var root = false;
	var applyPositioning = true;
	
	// Path to a transparent GIF image
	var shim			= 'corex/corex/COREX_systemImage001.gif';
	
	var fnLoadPngs = function() { 
		
		if (root) root = document.getElementById(root);
		     else root = document;
		     
		for (var i = root.all.length - 1, obj = null; (obj = root.all[i]); i--) {
			if (obj.currentStyle.backgroundImage.match(/\.png/i) !== null) bg_fnFixPng(obj);
			if (obj.tagName=='IMG' && obj.src.match(/\.png$/i) !== null)   el_fnFixPng(obj);
			if (applyPositioning && (obj.tagName=='A' || obj.tagName=='INPUT') && obj.style.position === '') obj.style.position = 'relative';
		}
		
	};

	var bg_fnFixPng = function(obj) {
		
		var mode = 'scale';
		var bg	= obj.currentStyle.backgroundImage;
		var src = bg.substring(5,bg.length-2);
		
		if (obj.currentStyle.backgroundRepeat == 'no-repeat') mode = 'crop';
		obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')";
		obj.style.backgroundImage = 'url('+shim+')';
		
	};

	var el_fnFixPng = function(img) {
		
		var src = img.src;
		img.style.width = img.width + "px";
		img.style.height = img.height + "px";
		img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
		img.src = shim;
		
	};
	
	var addLoadEvent = function(func) {
		
		var oldonload = window.onload;
		
		if (typeof window.onload != 'function') window.onload = func;
		else {
			window.onload = function() {
				if (oldonload) oldonload();
				func();
			};
		}
	};
	
	return {
		init:    function()   {addLoadEvent(fnLoadPngs);},
		limitTo: function(el) {root = el;},
		run:     function()   {fnLoadPngs();}
	};
}();
