var GazellePage = function () {
	
	//PRIVATE
	var currentSectionNode;
	var currentSectionId;
	var currentSectionMetaName;
	var viewOperator= new GazellePageOperation();
	function pageLoadHandlder(data) {
        $('.content').html($('.content', data).html()).parent().show();
        $('.menu').html($('.menu', data).html()).parent().show();
        $.address.title(/>([^<]*)<\/title/.exec(data)[1]);
        
        invalidateSectionInfo();
        // general aplicators for all view types
        invalidateFancyBox();
        invalidateTree();
       
		//parseNavigation();
       
    };
    
    function parseNavigation() {
    	//$.each($("#navigation").children(),parseNode)
    	$.each($('li[id^="uid_"]'),function (indx,node) {
    		var nodeId = node.getAttribute('id').slice(4);
    		console.log(indx,nodeId);
    	});
    }
    function parseNode(indx,node) {
    	//console.log(indx,node);
    	if(node.getAttribute('id')) {
    		
    		if(node.getAttribute('id').indexOf("uid_")>=0) {
    			var nodeId = node.getAttribute('id').slice(4);
    			console.log(nodeId);
    		}
    	}
    	$.each($(node).children(),parseNode);
    	
    }
 	function invalidateSectionInfo() {
 		currentSectionNode = $('.content').children(":first");
		currentSectionId = currentSectionNode.attr("id");
		currentSectionMetaName  = currentSectionNode.attr("class")
		//console.log("section info   id: "+currentSectionId+"  meta_name:"+currentSectionMetaName);
		// INVALIDATE VIEW OPERTATOR FOR SPECIFIC VIEW TYPES
		viewOperator.invalidate(currentSectionId,currentSectionMetaName);
	}
    
    
	function addressChangeHanlder(event) {
		//console.log("addressChangeHanlder "+Math.floor(Math.random()*1001));
		//console.log(escapedFragment());
		 $.ajax({
       			 url: escapedFragment(),
        		 error: function(XMLHttpRequest, textStatus, errorThrown) {
            	 				pageLoadHandlder(XMLHttpRequest.responseText);
        		 				},
        		success: function(data, textStatus, XMLHttpRequest) {
        					    pageLoadHandlder(data);
        						}
        		});
	
	}
	
  function loadXMLFrag() {
		$.ajax({
       			 url: escapedRawFrag(),
       			 error: function(XMLHttpRequest, textStatus, errorThrown) {
       			 },
       			 success: function(data, textStatus, XMLHttpRequest) {
        					    alert(data);
        						}
        		});
	}
	function initFB (data,textStatus) {
		if(textStatus == "success") {
			invalidateFancyBox();
		}
	}
	
	function initCycle(data,textStatus) {
		//console.log("initCycle loaded init "+textStatus);
	}
	
   function initTree(data,textStatus) {
		
		if(textStatus == "success") {
			invalidateTree();
		}
	}
	
	function initAddress(data,textStatus) {
			//console.log("address init");
			$.address.change(
				addressChangeHanlder
			);
			
	}
	
 	function loadScripts() {
		for (var i in scripts) {
		var scrpt  = scripts[i];
			//console.log("loading : ",scrpt.name,scrpt.loadHandler);
			$.getScript(scrpt.url, scrpt.loadHandler);
		}
	}
   function loadStyles() {
	 for (var i in styles) {
		var style  = styles[i];
		var link = $("<link>");
			link.attr({
        	type: 'text/css',
        	rel: 'stylesheet',
        	href: style.url
			});
			$("head").append( link ); 
		
   	  }
	}
	
	function init() {
			
			initAddress();
			loadStyles();
			loadScripts();
			
	}
	
	var invalidateTree = function () {
		$("#navigation").treeview({
			animated: "fast",
			persist: "location",
			collapsed: true,
			unique: true
		});
	}
	var invalidateFancyBox = function () {
		  $(".image-fb").fancybox({
    			'onComplete' : function(){
      			  $.fancybox.resize();
   				 }
   				 });
   		 $(".gallery-fb").fancybox({
    		'onComplete' : function(){
      		  $.fancybox.resize();
    		}
   	 	 });
	}
	
	

	
	var escapedRawFrag = function () {
		return '?_frag_=' + window.location.hash.substr(2);
	}
	var escapedFragment = function() {
		return '?_escaped_fragment_=' + window.location.hash.substr(2);
	}
	
	var scripts = new Array(
		{name:"jClip",url:"web/js/jclip.js",loadHandler:null},
		{name:"fancyBox",url:"web/js/jquery.fancybox-1.3.4.js",loadHandler:initFB},
		{name:"cycle",url:"web/js/jquery.cycle.all.js",loadHandler:initCycle},
		{name:"tree",url:"web/js/jquery.treeview.js",loadHandler:initTree}		
		);
	var styles = new Array(
		{name:"fancyBox",url:"web/css/jquery.fancybox-1.3.4.css"},
		{name:"tree",url:"web/css/jquery.treeview.css"}
	);
	//construct
	return init();
}
