
function myList (opts) {
//		Object.extend(this, new baseOptions());
		this.oList = {};
		this.cookieName = "myList";
		this.result = {};
		this.params = {};
		this.arText = (opts.arText) ? opts.arText : new Array;
		this.lang  = (opts.lang) ? opts.lang : "en";
		this.token  = (opts.token) ? opts.token : "";
		this.divMyListContainer = "div-mylist-cont";
		this.spanMyListNumber   = "span-mylist-number";
		this.divMyListDisplay = "div-mylist-display";
		this.maxitem = 4;
		
		// Set options
//		this.setOpts(opts,this);
		
		this.oProperty = (opts.oProperty) ? opts.oProperty : false;
//		this.oResult = oResult;
		
		this.getMyList = function(){
			
			var cookie = {};
			cookie['items'] = {};
			
			obj = this;
			list = {};
			$.ajax({
	    			type: "GET",
	    			url: "/includes/service/ServiceRequest.php",
	    			data: "&action=getMyList",
	    			dataType: "json",
	    			cache: false,
	    			success: function(data) {
				 		if(data.items){
				 			cookie = data;
				 		}
				 		obj.oList = data;
	    	  		}
	    		});
			 
			 
//			alert(JSON.stringify(cookie));
			return cookie;
		};
		
		this.getMyListTotalNumber = function(type){
			var listTotal = 0;
			if(this.oList['items'][type]){
				if(this.oList['items'][type]){
					for(i in this.oList['items'][type][0]){
						listTotal++;
					}
				}
			}
			
			return listTotal;
		};
		
		this.updateMyListTotalSpan = function (type){
			var num = {};
			num['hotel'] = this.getMyListTotalNumber('hotel');
			num[''] = this.getMyListTotalNumber('apartment');
			var total = num['hotel'] + num[''];
			if(total>0){
				$("#"+this.spanMyListNumber).parent().addClass('active');
			}else{
				$("#"+this.spanMyListNumber).parent().removeClass('active');
			}
//			$("#"+this.spanMyListNumber).text( parseInt(num) + (parseInt($("#"+this.spanMyListNumber).text())));
			$("#"+this.spanMyListNumber).text( parseInt(total) );
		};
		
		this.myListInit = function(type){
			this.oList = this.getMyList();
			this.updateMyListTotalSpan(type);
		};
		
		this.myListInitBasic = function(typeList){
			
			this.oList['items'] = {};
			obj = this;
			$.ajax({
    			type: "POST",
    			url: "/includes/service/ServiceRequest.php",
    			data: "action=getMyList",
    			dataType: "json",
    			cache: false,
    			success: function(data,resultName) {
    				if(data){
				 		if(data.items){
//				 			alert(typeList + " " +data.items[typeList]);
				 			oMyList.oList['items'][typeList] = data['items'][typeList];
				 			oMyList.updateMyListTotalSpan(typeList);
				 			oMyList.checkLinks(typeList);
				 		}
    				}
    	  		}


    				});
		};
		
		// Check for check boxes on the page
		this.checkBoxSelect = function(type){
			if(this.oList['items'][type]){
				
				for(i in this.oList['items'][type][0]){
					$("input[name=myList\["+this.oList['items'][type][0][i]['id'] + '-' + this.oList['items'][type][0][i]['provider'] +"\]]").attr('checked',true);
				}
			}
		};
		
		// change link to active on the page
		this.checkLinks = function(type){
			if(this.oList['items'][type]){
				
				for(i in this.oList['items'][type][0]){
					$("a[name="+this.oList['items'][type][0][i]['id'] + '-' + this.oList['items'][type][0][i]['provider'] +"]").children("i").addClass('active');
				}
			}
		};
		
		this.myListInitView = function(type){
			
			this.oList['items'] = {};
			obj = this;
			$.ajax({
    			type: "POST",
    			url: "/includes/service/ServiceRequest.php",
    			data: "action=getMyList",
    			dataType: "json",
    			cache: false,
    			success: function(data,res) {
			 		if(data.items){
			 			obj.oList = data;
			 			obj.drawMyList(type);
			 		}
    	  		}
    				});
		};
		
		this.elListCheckboxControl = function (el, type, key, item){
			
			if(el.checked == true){
				this.addItemToList(type, key, item);
			}else{
				this.deleteItemFromList(type, key);
				
			}
			
			//alert(this.getMyList());
		};
		
		this.doItemControl = function(el,type,key,item){
			
			var found = this.searchList(type, key);
			arTxt = this.arText;
//			alert("here");
			if(found){
				this.deleteItemFromList(type,key);
				$("a[name='"+key+"']").children('label').each(
						function(){
							$(this).text(arTxt['add to my list']);
						}
						
				);
				
				$("a[name='"+key+"']").children('i').removeClass('active');
			}else{
				this.addItemToList(type, key, item);
//				alert($(el).children('label').text());
//				alert(this.arText['remove from my list']);
//				$(el).children('label').text(this.arText['remove from my list']);
				$("a[name='"+key+"']").children('label').each(
						function(){
							$(this).text(arTxt['remove from my list']);
						}
						
				);
				$("a[name='"+key+"']").children('i').addClass('active');
			}
			
		};
		
		this.getResult = function (){
			if(window.oResult != 'undefined' && window.oResult && !this.oProperty){
				this.result = oResult.data.result.property;
			}else if(this.oProperty != 'undefined' && this.oProperty){
				this.result = this.oProperty;
			}else{
				this.result = false;
			}
		};
	
		this.doDeleteMyListCookie = function(){
			return $.cookie(this.cookieName, null);
		};
		
		this.setMyList = function(){
		
			var myJSONText = JSON.stringify(this.oList);
			var date = new Date();
            date.setTime(date.getTime() + (3 * 24 * 60 * 60 * 1000));
            
            $.ajax({
    			type: "POST",
    			url: "/includes/service/ServiceRequest.php",
    			data: "&action=saveMyList&token="+this.token+"&mylist="+myJSONText,
    			dataType: "text",
    			success: function(data) {

    	  			}, // End Ajax Success Call
    					error: function(xml, txtStatus, eText){
    					// Remove page Loader
    					},
    					complete: function(){
    					}

    				});
			
		};
		
		this.searchList = function (type,key){
			if(!this.oList['items'][type]){
//				alert("no list");
				return false;
			}else{
				if(this.oList['items'][type] == ""){
//					alert("empty list");
					return false; 
				}
			}
			
			if(this.oList['items'][type][0][key]){
				return this.oList['items'][type][0][key]['id'];
			}else{
				return false;
			}
			
		};
		
		this.addItemToList = function (type, key, i){
//			alert(type + " : " + i + " : "+ this.oList['items'][type][0][key]);
			
			this.getResult();
			
			if(!this.oList['items'][type]){
				this.oList['items'][type] = [{}];
			}else{
				if(this.oList['items'][type] == ""){this.oList[type][type] = [{}]; }
			}
			
			for(el in this.result){
				
				if(this.result[el]['id'] == i && !this.oList['items'][type][0][key] ){
					
					delete this.result[el]['descr'];
					var item = {};
					if(type=='apartment'){
						
						item.id = this.result[el]['id'];
						item.provider = this.result[el]['provider'];
//						item.title = this.result[el]['title'];
						item.price = this.result[el]['price'];
//						item.rating = this.result[el]['rating'];
//						item.review_total = this.result[el]['review_total'];
//						item.sqmeters = this.result[el]['sqmeters'];
//						item.opt_internet = this.result[el]['opt_internet'];
//						item.opt_elevator = this.result[el]['opt_elevator'];
//						item.opt_terrace = this.result[el]['opt_terrace'];
//						item.opt_aircon = this.result[el]['opt_aircon'];
//						item.opt_pool = this.result[el]['opt_pool'];
//						item.opt_bedrooms = this.result[el]['opt_bedrooms'];
//						item.maxpersons = this.result[el]['maxpersons'];
//						item.town_label = this.result[el]['town_label'];
//						item.district_label = this.result[el]['district_label'];
						item.image = this.result[el]['images'][0];
					}
					
					if(type=='hotel'){
						item.id = this.result[el]['id'];
						item.provider = this.result[el]['provider'];
						item.price = this.result[el]['price'];
						item.opt_special = this.result[el]['opt_special'];
						item.image = this.result[el]['images'][0];
					}
					
					this.oList['items'][type][0][key] = item;
					
					
					if(window.oResult && !this.oProperty){
						this.oList['items'][type][0][key]['token'] = oResult.token;
						this.oList['items'][type][0][key]['params'] = {};
						this.oList['items'][type][0][key]['params']['dateFrom'] = oResult.data.result.params.dateFrom;
						this.oList['items'][type][0][key]['params']['dateTo'] = oResult.data.result.params.dateTo;
						this.oList['items'][type][0][key]['params']['nAdult'] = oResult.data.result.params.nAdult;
						this.oList['items'][type][0][key]['params']['nChild'] = oResult.data.result.params.nChild;
						this.oList['items'][type][0][key]['params']['nights'] = oResult.data.result.params.nights;
						this.oList['items'][type][0][key]['params']['multiRoom'] = oResult.data.result.params.multiRoom;
					}else if(this.result[el].params){
						this.oList['items'][type][0][key]['token'] = this.token;
						this.oList['items'][type][0][key]['params'] = this.result[el].params;
					}
				}
			}
			
			this.updateMyListTotalSpan(type);
			this.setMyList();
			
		};
		
		this.deleteItemFromList = function (type, key){
			var arItem = this.deleteItem(type, key);
//			this.oList[type].items = arItem;
//			alert("Array Item after delete " + arItem.length);
//			if(arItem == "" || arItem.length == 'undefined'){this.oList[type] = {"items":[{}]}; }
			$("input[name=myList\["+key+"\]]").attr('checked',false);
			this.updateMyListTotalSpan(type);
			this.setMyList();
			
		};
		
		this.deleteItem = function (type, key){
			var arItem = this.oList['items'][type][0];
			for(i in this.oList['items'][type][0]){
				if( i == key){
//					alert("found");
					delete this.oList['items'][type][0][i];
				}
			}
			
			return arItem;
			
		};
		
		this.drawMyList = function (type){
			
			if(type == 'apartment'){
				$("#"+this.divMyListDisplay).html("");
				var itemHtml = "";
				for(i in this.oList['items'][''][0]){
					itemHtml += this.drawItem(this.oList['items'][''][0][i]);
				}
				
				$("#"+this.divMyListDisplay).append(itemHtml);
			}
			
			if(type=='hotel'){
				$("#"+this.divMyListDisplay).html("");
				var itemHtml = "";
				for(i in this.oList['items']['hotel'][0]){
					itemHtml += this.drawItem(this.oList['items']['hotel'][0][i]);
				}
				
				$("#"+this.divMyListDisplay).append(itemHtml);
			}
		};
		
		this.viewMylist = function(type){
			Shadowbox.open({
		        content:    '/view_mylist.php?lang='+this.lang + '&type='+type,
		        player:     "iframe",
		        title:      arTxt['Compare Selected Accommodations'],
		        height:     450,
		        width:      800
		    });
					
		}
		
		this.drawItem = function (i){
			
			// Price Information
	  		var htmlTotal = "";
	  		if(parseFloat(i['price']).toFixed(2) > 0){
		  		htmlTotal = '<strong>'+ jQuery.formatNumber(parseFloat(i['price']).toFixed(2),{format:"#.###,00",locale:"es"})+'&euro;</strong>';
		  		if(i['opt_special'] == 'Y'){
		  			htmlTotal += '<br />'+
		  			'     <span class="beforePrice"><strong>'+i['total_prediscount']+'&euro;</strong></span>'+
		  			'      <span class="alert"><strong>'+arTxt['Discount'] + ' ' + i['discount'] +' % </strong></span><br />';
		  		}
		  		var pricePerNight = (i['price'] / i.params.nights);
		  		htmlTotal += ' (' +  jQuery.formatNumber(parseFloat(pricePerNight).toFixed(2),{format:"#.###,00",locale:"es"})+ ' &euro; '+ arTxt['/night']+')';
		  		
	  		}else{
	  			htmlTotal = "-";
	  		}
	  		var linkUrl =  "/apartment_detail.php?lang="+ this.lang + "&apartment=" + i['id']+ "&a="+i['params'].dateFrom+"&d="+i['params'].dateTo + "&na="+i['params'].nAdult+"&nc="+i['params'].nChild;
	  		
			var html = '<div class="mylist-item"><div class="title">'+i['title']+'</div>'+	
						'<div class="ref">Ref: '+i['id']+'</div>'+
						'<div class="image"><img src="'+i['image']+'" class="img-framed" height="100"/></div>'+
						'<div class="remove"><a href="javascript:void(0)" onclick="parent.oMyList.deleteItemFromList(\'apartment\',\''+i['id']+'-'+i['provider']+'\');$(this).closest(\'div[class=mylist-item]\').hide();">Remove</a></div>'+
						'<div class="dates">'+
						''+arTxt['from']+': '+i['params'].dateFrom + ' '+arTxt['to'] + ': '+i['params'].dateTo +
						''+
						'</div>'+
						'<div class="pax">'+
						''+arTxt['adults']+': '+i['params'].nAdult + ' '+arTxt['children'] + ': '+i['params'].nChild +
						''+
						'</div>'+
						'<div class="price">'+htmlTotal + '</div>'+
						'<div class="book-link"><a href="'+linkUrl+'" target="_parent" >'+arTxt['More Info']+' <img src="/images/btn_arrow_rt_grey.gif" border="0" /></a></div>'+
						'<div class="char"><b>'+arTxt['sq meter']+':</b> '+i['sqmeters'] + '</div>'+
						'<div class="char"><b>'+arTxt['bedrooms']+':</b> '+i['opt_bedrooms'] + '</div>'+
						'<div class="char"><b>'+arTxt['sleeps']+':</b> '+i['maxpersons'] + '</div>'+
						'<div class="char"><b>'+arTxt['area']+':</b> '+ ((i['district_label']) ? i['district_label'] : i['town_label']) + '</div>'+
						
						'<div class="amenity '+((i['opt_evevator'] == 'Y') ? "bg-yes" : "bg-no")+'" >'+arTxt['elevator']+'</div>'+
						'<div class="amenity '+((i['opt_internet'] == 'Y') ? "bg-yes" : "bg-no")+'" >'+arTxt['internet']+'</div>'+
						'<div class="amenity '+((i['opt_terrace'] == 'Y') ? "bg-yes" : "bg-no")+'" >'+arTxt['terraza']+'</div>'+
						'<div class="amenity '+((i['opt_aircon'] == 'Y') ? "bg-yes" : "bg-no")+'" >'+arTxt['air-con']+'</div>'+
						'</div>';
			
			return html;
		};
};
