/*****************************
--- multilayer v2.2
--- Author: Maxim Bandurko.

v2.2 - type="3scale" added
v2.1 - type="7scale" added
v2.0 - type="9scale" added

*****************************/

(function($){
		  
	var _options;

	$.fn.extend({
 		
 		multilayer: function(options) {
			
			var defaults = {
				path : 'assets/xml/',
				file : 'multilayer.xml',
				external : ''
			};
			
			var options =  $.extend(defaults, options); 
			
			_options = options;
			
			_loadXML(options);
			
    	}

	});
	
	function _loadXML(options){
		//alert(options.path + options.file);	
		
		$.ajax({
			url: options.path + options.file,
			dataType: (jQuery.browser.msie) ? 'text' : 'text/xml',
			
			success: function(xmlData){			
				//alert('ddd');
				var data;
				if( window.ActiveXObject && window.GetObject) {
						data = new ActiveXObject( 'Microsoft.XMLDOM');
						data.async = false;
						data.loadXML(xmlData);
					}
					if( window.DOMParser ){
						
						data = new DOMParser().parseFromString( xmlData, 'text/xml' );
						
					}
				proceedXML(data);
			}
			
			
		});
		
	}
	
	function proceedXML(data){
		
		//alert(data);
		
		var selector;
		var type;
		var width;
		
		$('selector', data).each(function(){
									   
			//alert('Found');
			
			// src attribute is not empty and exists
			if(!$.string($(this).attr('src')).blank() && $(this).attr('src') != undefined){
				
				selector = $(this).attr('src');
				
				if(!$.string($(this).attr('type')).blank() && $(this).attr('type') != undefined){
					type = $(this).attr('type');
				}else{
					type = "layer";
				}
				
				if(!$.string($(this).attr('width')).blank() && $(this).attr('width') != undefined){
					width = $(this).attr('width');
					if(width == "none"){
						width = "";
					}
				}else{
					width = "100%";
				}
				
				//alert(type);
				
				//alert(selector);
				
				switch(type){
					case "layer":
					  processTypeLayer(this, selector);
					  break;
					case "9scale":
					  processType9Scale(this, selector, width);
					  break;
					case "7scale_v":
					  processType7Scale(this, selector, width, "v");
					  break;
					case "3scale_h":
					  processType3Scale(this, selector, width, "h");
					  break;
					default:
					  processTypeLayer(this, selector);
					  break;
				}
				
				
				
			}
			
			//alert($(selector).html());
			
		});
		
		multilayerReady = true;
		checkDocument();
	}
	
	function processTypeLayer(targ, selector){
		$('layer', targ).each(function(){
					
			switch($(this).attr('type')){
				case "image":
				  proceedIMAGE(selector, this);
				  break;
				case "empty":
				  proceedEMPTY(selector, this);
				  break;
				case "flash":
				  break;
				default:
				  proceedIMAGE(selector, this);
			}
									   
		});
	}
	
	
	function processType9Scale(targ, selector, width){
		
		var cssObj;
		var cssStr;
		var _siteRoot = _options.external.replace(/:/g,'\\:');
		
		var last = proceedLAYER(selector);
		$(last).wrapInner('<table border="0" cellpadding="0" cellspacing="0" width="'+width+'"><tr><td class="_multilayer_9scale_MC"></td></tr></table>');
		$("table tr td", last).before('<td class="_multilayer_9scale_ML"></td>').after('<td class="_multilayer_9scale_MR"></td>');
		$("table tr", last).before('<tr><td class="_multilayer_9scale_TL"></td><td class="_multilayer_9scale_TC"></td><td class="_multilayer_9scale_TR"></td></tr>').after('<tr><td class="_multilayer_9scale_BL"></td><td class="_multilayer_9scale_BC"></td><td class="_multilayer_9scale_BR"></td></tr>');
		
		$('layer', targ).each(function(){
			proceedCLASSES(this, $("td._multilayer_9scale_"+$(this).attr("type"), last));
			
			cssStr = '';
			if(!$.string($(this).attr('src')).blank() && $(this).attr('src') != undefined){	
				cssStr = "background-image:url(\""+_siteRoot+$(this).attr('src')+"\");";
			}
			cssObj = proceedSTYLES(this, cssStr);
			if(cssObj){
				$("td._multilayer_9scale_"+$(this).attr("type"), last).css(cssObj);
			}
		});							   

	}
	
	function processType7Scale(targ, selector, width, orient){
		
		var cssObj;
		var cssStr;
		var _siteRoot = _options.external.replace(/:/g,'\\:');
		
		var last = proceedLAYER(selector);
		
		if(orient == "v"){		
			$(last).wrapInner('<table border="0" cellpadding="0" cellspacing="0" width="'+width+'"><tr><td class="_multilayer_7scale_MC"  rowspan="3"></td></tr></table>');
			$("table tr td", last).before('<td class="_multilayer_7scale_TL"></td>').after('<td class="_multilayer_7scale_TR"></td>');
			$("table tr", last).after('<tr><td class="_multilayer_7scale_ML"></td><td class="_multilayer_7scale_MR"></td></tr><tr><td class="_multilayer_7scale_BL"></td><td class="_multilayer_7scale_BR"></td></tr>');
		}else{
			$(last).wrapInner('<table border="0" cellpadding="0" cellspacing="0" width="'+width+'"><tr><td class="_multilayer_7scale_MC"   colspan="3"></td></tr></table>');
			$("table tr", last).before('<tr><td class="_multilayer_7scale_TL"></td><td class="_multilayer_7scale_TC"></td><td class="_multilayer_7scale_TR"></td></tr>').after('<tr><td class="_multilayer_7scale_BL"></td><td class="_multilayer_7scale_BC"></td><td class="_multilayer_7scale_BR"></td></tr>');
		}
		
		
		$('layer', targ).each(function(){
			proceedCLASSES(this, $("td._multilayer_7scale_"+$(this).attr("type"), last));
			
			cssStr = '';
			if(!$.string($(this).attr('src')).blank() && $(this).attr('src') != undefined){	
				cssStr = "background-image:url(\""+_siteRoot+$(this).attr('src')+"\");";
			}
			cssObj = proceedSTYLES(this, cssStr);
			if(cssObj){
				$("td._multilayer_7scale_"+$(this).attr("type"), last).css(cssObj);
			}
		});							   

	}
	
	
	function processType3Scale(targ, selector, width, orient){
		
		var cssObj;
		var cssStr;
		var _siteRoot = _options.external.replace(/:/g,'\\:');
		
		var last = proceedLAYER(selector);
		
		if(orient == "v"){		
			$(last).wrapInner('<table border="0" cellpadding="0" cellspacing="0" width="'+width+'"><tr><td class="_multilayer_3scale_M"></td></tr></table>');
			$("table tr", last).before('<tr><td class="_multilayer_3scale_T"></td></tr>').after('<tr><td class="_multilayer_3scale_B"></td></tr>');
		}else{
			$(last).wrapInner('<table border="0" cellpadding="0" cellspacing="0" width="'+width+'"><tr><td class="_multilayer_3scale_C"></td></tr></table>');
			$("table tr td", last).before('<td class="_multilayer_3scale_L"></td>').after('<td class="_multilayer_3scale_R"></td>');
		}
		
		
		$('layer', targ).each(function(){
			proceedCLASSES(this, $("td._multilayer_3scale_"+$(this).attr("type"), last));
			
			cssStr = '';
			if(!$.string($(this).attr('src')).blank() && $(this).attr('src') != undefined){	
				cssStr = "background-image:url(\""+_siteRoot+$(this).attr('src')+"\");";
			}
			cssObj = proceedSTYLES(this, cssStr);
			if(cssObj){
				$("td._multilayer_3scale_"+$(this).attr("type"), last).css(cssObj);
			}
		});							   

	}
	
	
	function proceedIMAGE(selector, obj){
		
		var cssStr = '';
		var last = proceedLAYER(selector);
		var _siteRoot = _options.external.replace(/:/g,'\\:');
		
		if(!$.string($(obj).attr('src')).blank() && $(obj).attr('src') != undefined){	
			cssStr = "background:url(\""+_siteRoot+$(obj).attr('src')+"\");";
		}
		
		var cssObj = proceedSTYLES(obj, cssStr);
		
		if(cssObj){
			$(last).css(cssObj);
		}
		
		proceedCLASSES(obj, last);
		
	}
	
	function proceedEMPTY(selector, obj){
		
		
		
		var cssStr = '';
		var last = proceedLAYER(selector);
		
		var cssObj = proceedSTYLES(obj, cssStr);
		
		if(cssObj){
			$(last).css(cssObj);
		}
		
		proceedCLASSES(obj, last);
	}
	
	function proceedCLASSES(obj, last){
		
		if(!$.string($(obj).attr('class')).blank() && $(obj).attr('class') != undefined){
			$(last).addClass($(obj).attr('class'));
		}
		
		if(!$.string($(obj).attr('id')).blank() && $(obj).attr('id') != undefined){
			$(last).attr('id', $(obj).attr('id'));
		}
	}
	
	function proceedSTYLES(obj, cssStr){
		
		if(!$.string($(obj).attr('style')).blank() && $(obj).attr('style') != undefined){
			cssStr += $(obj).attr('style');
		}
		
		
		if($.string(cssStr).endsWith(';')){
			cssStr = cssStr.slice(0, (cssStr.length-1));
		}
		
		
		cssStr = cssStr.replace(/;/g,"','");
		cssStr = cssStr.replace(/:/g,"':'");
		cssStr = cssStr.replace(/\\':'/g,":");
		
		cssStr = cssStr.replace(/ '/g,"'");
		cssStr = cssStr.replace(/' /g,"'");
		
		if(cssStr != ''){
			cssStr = "{'"+cssStr+"'}";
			var cssObj = $.string(cssStr).evalJSON();
		}else{
			var cssObj = false;
		}

		
		return cssObj;
	}
	
	function checkLAYERS(selector){
		// _multilayer class exists already
		if($('._multilayer:last', selector).length > 0){
			return true;
		}else{
			return false;
		}
	}
	
	function proceedLAYER(selector){
		
		if(checkLAYERS(selector)){
			selector = $('._multilayer:last', selector);
		}
		
		//$(selector).html('<div class="_multilayer">'+$(selector).html()+'</div>');
		$(selector).wrapInner('<div class="_multilayer"></div>');
		return $('._multilayer:last', selector);
	}
	
	

		
})(jQuery);
