$(document).ready(function() {	

   //select all the a tag with name equal to modal  
   $('*[name=modal]').each(function(){

   //default params
   var puParams = {
   loadpage : null,       //адрес страницы, которая будет загружена. Если null то без ajax
   event : 'click',       //событие при котором появляется окошко
   closeevent: 'default', //событие при котором закрывается окошко, по умолчанию закрывается при клике на фон (если он есть), или на кнопку закрыть (элемент с классом close внутри id=target)
   target: 'dialog',      //id элемента который будет показываться
   fade: '400',          //скорость появления элемента в миллисекундах
   bgfade : '0.2',        //прозрачность фона, только при mask=true
   mask: true,           //показывать фон
   linkto: 'window',      //привязка window|mouse|#objectid
   offsetleft: 0,
   offsettop: 0
   };

   //получаем параметры
   var eventType = /event=([a-zA-Z]+)/.exec($(this).attr('popupparams'));
   if(eventType && eventType[1]) puParams.event = eventType[1];
     
   if(/linkto=#?([a-zA-Z]+)/.exec($(this).attr('popupparams'))){
      puParams.linkto=/linkto=#?([a-zA-Z]+)/.exec($(this).attr('popupparams'))[1];
   }

   if(/offsetleft=([0-9-]+)/.exec($(this).attr('popupparams'))){
      puParams.offsetleft=parseInt(/offsetleft=([0-9-]+)/.exec($(this).attr('popupparams'))[1]);
   }

   if(/offsettop=([0-9-]+)/.exec($(this).attr('popupparams'))){
      puParams.offsettop=parseInt(/offsettop=([0-9-]+)/.exec($(this).attr('popupparams'))[1]);
   }
 
   if(/closeevent=([a-zA-Z]+)/.exec($(this).attr('popupparams'))){
      puParams.closeevent=/closeevent=([a-zA-Z]+)/.exec($(this).attr('popupparams'))[1];
   }

   //Get the target
   if(/target=([a-zA-Z0-9-_]+)/.exec($(this).attr('popupparams'))){
      puParams.target=/target=([a-zA-Z0-9-_]+)/.exec($(this).attr('popupparams'))[1];
   }
   
   if(/loadpage=([a-zA-Z0-9-_:\/\.=\?\&]+)/.exec($(this).attr('popupparams'))){
      puParams.loadpage = /loadpage=([a-zA-Z0-9-_:\/\.=\?\&]+)/.exec($(this).attr('popupparams'))[1];
   }

   if(/bgfade=([0-9\.]+)/.exec($(this).attr('popupparams'))){
      puParams.bgfade=/bgfade=([0-9\.]+)/.exec($(this).attr('popupparams'))[1];
   }

   if(/[^g]fade=([0-9]+)/.exec($(this).attr('popupparams'))){
      puParams.fade=parseInt(/[^g]fade=([0-9]+)/.exec($(this).attr('popupparams'))[1]);
   }

   puParams.mask=!/mask=false/.test($(this).attr('popupparams'));
   
   var modal = $(this);
   function openEvent(e){

   //Cancel the link behavior
   e.preventDefault();
		
		var id = $('#'+puParams.target);

   if(puParams.mask){
		//Get the screen height and width
		var maskHeight = $(document).height();
		var maskWidth = $(window).width();
	
		//Set heigth and width to mask to fill up the whole screen
		$('#mask').css({'width':maskWidth,'height':maskHeight});
		
		//transition effect	
		$('#mask').fadeTo("slow",puParams.bgfade);
   }
if(puParams.loadpage==null){
    linkTo(id, puParams.linkto);
    //transition effect
	
    $(id).fadeIn(puParams.fade);
}else{	 
$.ajax({
  url: puParams.loadpage,
  success: function(data) {
    $('#popupcontent').html(data);

    linkTo(id, puParams.linkto);

    //set popup form
    $("#orderform input[action='send']").click(function(){
    var formData = '';
    var textData = '';
    $("#orderform :input[action!='send']").each(function(){

if((this.name!='event')&&(this.name!='from')&&(this.name!='name')&&(this.name!='phone')&&(this.name!='address')&&(this.name!='email')){
       textData += '['+($(this).attr("ltitle")?$(this).attr("ltitle"):this.name)+']\n'+this.value+'\n\n';
    }else{
       formData+='&'+this.name+'='+this.value;
    }
    });
    formData+='&text='+textData;
    $.ajax({
      type: "POST",
      url: puParams.loadpage,
      data: formData,
      success: function(data) {
      if(data.indexOf("отправлено письмо с подтверждением.") == -1){
         $('#popupcontent').html('Ошибка обработки запроса, попробуйте еще раз');
      }else{
         $('#popupcontent').html('Запрос отправлен, на указанный почтовый ящик отправлено письмо с подтверждением');
      }
      }  
    });
    });

    //transition effect
    $(id).fadeIn(puParams.fade);

    //make dragabble
    $('#title').bind( 'drag', function( e ){ 
	$(id).css({ 
		top:(e.offsetY+$(window).scrollTop()-document.body.scrollTop), 
		left:(e.offsetX+$(window).scrollLeft()-document.body.scrollLeft) 
	}); 
    });
  }
});
}
//if close button is clicked
	$('#'+puParams.target+' .close').click(function (e) {
		//Cancel the link behavior
		e.preventDefault();
   if(puParams.event==puParams.closeevent){
      modal.unbind(puParams.closeevent);
      modal.bind(puParams.event, openEvent);
   }
		$('#mask').hide();
		$('#'+puParams.target).hide();
	});		
	
      if(puParams.mask){
	//if mask is clicked
	$('#mask').click(function () {
   if(puParams.event==puParams.closeevent){
      modal.unbind(puParams.closeevent);
      modal.bind(puParams.event, openEvent);
   }
		$(this).hide();
		$('#'+puParams.target).hide();
	});
      }
   if(puParams.closeevent){
      if(puParams.event==puParams.closeevent)$(this).unbind(puParams.event);
      $(this).bind(puParams.closeevent, closeEvent);
   } 
   }
function closeEvent(){
   if(puParams.event==puParams.closeevent){
      $(this).unbind(puParams.closeevent);
      $(this).bind(puParams.event, openEvent);
   }
   $('#'+puParams.target).hide();
}
function linkTo(id, tg){
   if(tg=='mouse'){
    $(document).mousemove(function(e){
     $(id).css('top',  puParams.offsettop+e.pageY);
     $(id).css('left', puParams.offsetleft+e.pageX);
    });
   }
   else if(tg=='window'){
    //Get the window height and width
    var winH = $(window).height();
    var winW = $(window).width();
              
    //Set the popup window to center
    $(id).css('top',  puParams.offsettop+winH/2-$(id).height()/2+$(window).scrollTop());
    $(id).css('left', puParams.offsetleft+winW/2-$(id).width()/2);
   }else{
    $(id).css('top',  puParams.offsettop+$('#'+tg).offset().top);
    $(id).css('left', puParams.offsetleft+$('#'+tg).offset().left);
   }
}
   //attach event
   $(this).bind(puParams.event, openEvent); 
});
});
;(function($){ // secure $ jQuery alias
/*******************************************************************************************/	
// jquery.event.drag.js - rev 10
// Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
// Liscensed under the MIT License (MIT-LICENSE.txt)
// http://www.opensource.org/licenses/mit-license.php
// Created: 2008-06-04 | Updated: 2008-08-05
/*******************************************************************************************/
// Events: drag, dragstart, dragend
/*******************************************************************************************/

// jquery method
$.fn.drag = function( fn1, fn2, fn3 ){
	if ( fn2 ) this.bind('dragstart', fn1 ); // 2+ args
	if ( fn3 ) this.bind('dragend', fn3 ); // 3 args
	return !fn1 ? this.trigger('mousedown',{ which:1 }) // 0 args
		: this.bind('drag', fn2 ? fn2 : fn1 ); // 1+ args
	};

// special event configuration
var drag = $.event.special.drag = {
	distance: 0, // default distance dragged before dragstart
	setup: function( data ){
		data = $.extend({ distance: drag.distance }, data || {});
		$.event.add( this, "mousedown", drag.handler, data );
		},
	teardown: function(){
		$.event.remove( this, "mousedown", drag.handler );
		if ( this == drag.dragging ) drag.dragging = drag.proxy = null; // deactivate element
		selectable( this, true ); // enable text selection
		},
	handler: function( event ){ 
		var returnValue;
		// mousedown has initialized
		if ( event.data.elem ){ 
			// update event properties...
			event.dragTarget = event.data.elem; // source element
			event.dragProxy = drag.proxy || event.dragTarget; // proxy element or source
			event.cursorOffsetX = event.data.x - event.data.left; // mousedown offset
			event.cursorOffsetY = event.data.y - event.data.top; // mousedown offset
			event.offsetX = event.pageX - event.cursorOffsetX; // element offset
			event.offsetY = event.pageY - event.cursorOffsetY; // element offset
			}
		// handle various events
		switch ( event.type ){
			// mousedown, left click
			case !drag.dragging && event.which==1 && 'mousedown': // initialize drag
				$.extend( event.data, $( this ).offset(), { 
					x: event.pageX, y: event.pageY, elem: this, 
					dist2: Math.pow( event.data.distance, 2 ) //  xІ + yІ = distanceІ
					}); // store some initial attributes
				$.event.add( document.body, "mousemove mouseup", drag.handler, event.data );
				selectable( this, false ); // disable text selection
				return false; // prevents text selection in safari 
			// mousemove, check distance, start dragging
			case !drag.dragging && 'mousemove': // DRAGSTART >>	
				if ( Math.pow( event.pageX-event.data.x, 2 ) 
					+ Math.pow( event.pageY-event.data.y, 2 ) //  xІ + yІ = distanceІ
					< event.data.dist2 ) break; // distance tolerance not reached
				drag.dragging = event.dragTarget; // activate element
				event.type = "dragstart"; // hijack event
				returnValue = $.event.handle.call( drag.dragging, event ); // trigger "dragstart", return proxy element
				drag.proxy = $( returnValue )[0] || drag.dragging; // set proxy
				if ( returnValue !== false ) break; // "dragstart" accepted, stop
				selectable( drag.dragging, true ); // enable text selection
				drag.dragging = drag.proxy = null; // deactivate element
			// mousemove, dragging
			case 'mousemove': // DRAG >> 
				if ( drag.dragging ){
					event.type = "drag"; // hijack event
					returnValue = $.event.handle.call( drag.dragging, event ); // trigger "drag"
					if ( $.event.special.drop ){ // manage drop events
						$.event.special.drop.allowed = ( returnValue !== false ); // prevent drop
						$.event.special.drop.handler( event ); // "dropstart", "dropend"
						}
					if ( returnValue !== false ) break; // "drag" not rejected, stop		
					event.type = "mouseup"; // hijack event
					}
			// mouseup, stop dragging
			case 'mouseup': // DRAGEND >> 
				$.event.remove( document.body, "mousemove mouseup", drag.handler ); // remove page events
				if ( drag.dragging ){
					if ( $.event.special.drop ) // manage drop events
						$.event.special.drop.handler( event ); // "drop"
					event.type = "dragend"; // hijack event
					$.event.handle.call( drag.dragging, event ); // trigger "dragend"	
					selectable( drag.dragging, true ); // enable text selection
					drag.dragging = drag.proxy = null; // deactivate element
					event.data = {};
					}
				break;
			} 
		} 
	};
	
// toggles text selection attributes	
function selectable( elem, bool ){ 
	if ( !elem ) return; // maybe element was removed ? 
	elem.unselectable = bool ? "off" : "on"; // IE
	elem.onselectstart = function(){ return bool; }; // IE
	if ( elem.style ) elem.style.MozUserSelect = bool ? "" : "none"; // FF
	};	
	
/*******************************************************************************************/
})( jQuery ); // confine scope