
import com.adobe.serialization.json.JSON;
import com.tp.bcard.view.Payment;
import com.tp.events.TPEvent;
import com.tp.helpers.Global;

import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;

import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.core.Application;
import mx.events.CollectionEvent;
import mx.events.ListEvent;
import mx.managers.PopUpManager;

private var urlLoader:URLLoader;
private var urlLoaderJob:URLLoader;
private var selectedDesign:Object;
public var backPage:String = TPEvent.GO_TO_STEP1;

public var allCreated:Boolean = false;


[Bindable]
private var savedDesignsList:ArrayCollection = new ArrayCollection();

private function onCreationComplete():void {
	allCreated = true;
	init();
	createListeners();
}

public function init():void {
	savedDesignsList.removeAll();
	designListObj.dataProvider = savedDesignsList;
	var req:URLRequest = new URLRequest(Global.savedDesignListPath);
	
	urlLoader = new URLLoader();
	
	urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onURLLoaderStatus);
	urlLoader.addEventListener(ProgressEvent.PROGRESS, onURLLoaderProgress);
	urlLoader.addEventListener(Event.COMPLETE, onURLLoaderComplete);
	urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onURLLoaderError);
	urlLoader.load(req);
	
}

private function createListeners():void {
	submitJob.addEventListener(MouseEvent.CLICK, onSubmitJobClick);
	
//	submitJob.addEventListener(MouseEvent.CLICK, onSubmitJobClickOld);
	
	designListObj.addEventListener(ListEvent.ITEM_CLICK, onDesignListObjClick);
	designListObj.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, onDesignListObjDoubleClick);
	back.addEventListener(MouseEvent.CLICK, onBackButtonClick);
}

private function onDesignListObjDoubleClick(e:ListEvent):void {
	selectedDesign = e.target.selectedItem;
	if (selectedDesign.status == 'pending') {
		Alert.show("You can't change design in 'pending' status", "Error");
		return;
	}
	if(selectedDesign.Product_Id == 1)
	{
		Global.productComboBoxSelectedIndex = 0;
	}
	else if(selectedDesign.Product_Id == 2)
	{
		Global.productComboBoxSelectedIndex = 1;
		if(selectedDesign.Product_Type == 0)
		{
			Global.setSizesForWall();
		}
		else
		{
			Global.setSizesForPoster();
		}
	}
	else if(selectedDesign.Product_Id == 3)
	{
		if(selectedDesign.Product_Type == 0)
		{
			Global.setFlyerOneSize();
		}
		else if(selectedDesign.Product_Type == 1)
		{
			Global.setFlyerTwoSize();
		}
		else if(selectedDesign.Product_Type == 2)
		{
			Global.setFlyerThreeSize();
		}
		else
		{
			Global.setFlyerFourSize();
		}		
		Global.productComboBoxSelectedIndex = 2;
	}
	else if(selectedDesign.Product_Id == 4)
	{
		Global.productComboBoxSelectedIndex = 3;
	}
	else if(selectedDesign.Product_Id == 5)
	{
		Global.productComboBoxSelectedIndex = 4;

	}
	else
	{
		Global.productComboBoxSelectedIndex = 0;
	}
	var tpEvent:TPEvent = new TPEvent(TPEvent.LOAD_DESIGN_AND_GO_STEP_2);
	this.dispatchEvent(tpEvent);
}

public function getSelectedDesign():Object {
	return selectedDesign;
}

private function onDesignListObjClick(e:ListEvent):void {
	submitJob.enabled = true;
}

private function onSubmitJobClick(e:MouseEvent):void {

	var selectedProductName:String = new String();
	//onSubmitJobClickOld();
	if(designListObj.selectedItem)
	{
		if(designListObj.selectedItem.Product_Id == 1)
		{
			selectedProductName = "Business Cards";
		}
		else if(designListObj.selectedItem.Product_Id == 2)
		{
			selectedProductName = "Calendar";
		}
		else if(designListObj.selectedItem.Product_Id == 3)
		{
			selectedProductName = "Flyer";
		}
		else if(designListObj.selectedItem.Product_Id == 4)
		{
			selectedProductName = "Letterhead Stationery";
		}
		else if(designListObj.selectedItem.Product_Id == 5)
		{
			selectedProductName = "Folding Brochures";
		}
	}
	
	var paymentOptionTitleWindow:Payment = PopUpManager.createPopUp(Application.application.step2,Payment,true) as Payment;
	PopUpManager.centerPopUp(paymentOptionTitleWindow);
	paymentOptionTitleWindow.cardId = designListObj.selectedItem.usercard_;
	paymentOptionTitleWindow.productName = selectedProductName;
	
}

public function onSubmitJobClickOld():void
{
//	Alert.show("All data clear now changing status");
	var items:Array = designListObj.selectedItems;
	if (items.length > 0) {
		
		var allJobs:Array = new Array();
		
		for (var i:String in items) {
			if (!items[i].status) {
				allJobs.push(items[i].usercard_);
			}
		}
		if (allJobs.length  == 0) {
			Alert.show("All Products already added to job queue");
			return;
		}
	
		var req:URLRequest = new URLRequest(Global.updateDesignListStatusPath);
		req.method = URLRequestMethod.POST; 
		
		var variables:URLVariables = new URLVariables();
        variables.jobs  = allJobs.join(",");
            
		req.data = variables;
		
		urlLoaderJob = new URLLoader();
		
		urlLoaderJob.addEventListener(HTTPStatusEvent.HTTP_STATUS, onURLLoaderStatus);
		urlLoaderJob.addEventListener(ProgressEvent.PROGRESS, onURLLoaderProgress);
		urlLoaderJob.addEventListener(Event.COMPLETE, onURLLoaderUpdateStatusComplete);
		urlLoaderJob.addEventListener(IOErrorEvent.IO_ERROR, onURLLoaderError);
		urlLoaderJob.load(req);
		
		submitJob.addEventListener(MouseEvent.CLICK, onSubmitJobClick);
	}	
}

private function onURLLoaderUpdateStatusComplete(e:Event):void
{
	var response:Object = JSON.decode(e.target.data);
	if (response.result == 'success') {
		savedDesignsList.removeAll();
		for (var k:String in response.list)
			savedDesignsList.addItem(response.list[k]);
		Alert.show(response.message);
	}
	else
		Alert.show(response.message);
	designListObj.dataProvider = savedDesignsList;
}

private function onURLLoaderStatus(e:HTTPStatusEvent):void
{
	trace ( "Load failed: HTTP Status = " + e.status );
}
private function onURLLoaderProgress(e:ProgressEvent):void
{
	
}
private function onURLLoaderComplete(e:Event):void
{
	var response:Object = JSON.decode(e.target.data);
	if (response.result == 'success') {
		savedDesignsList.removeAll();
		for (var k:String in response.list)
			savedDesignsList.addItem(response.list[k]);
	}
	else
		savedDesignsList.removeAll();
//	savedDesignsList.addEventListener(CollectionEvent.COLLECTION_CHANGE, onSavedDesignsListCollectionChange);
}

private function onSavedDesignsListCollectionChange(event:CollectionEvent):void {
	var len:int = savedDesignsList.length;
    var online:int = 0;
        
    for (var i:int=0;i<len;i++)
    {
        if (savedDesignsList.getItemAt(i).status)
        {
            online++;
        }
    }
    trace('Users online: ' + online);
}

private function onURLLoaderError(e:IOErrorEvent):void
{
	trace ( "Load failed: IO error: " + e.text );
}

private function onBackButtonClick(e:MouseEvent):void {
	var tpEvent:TPEvent
	if (Global.gotoBackPage != '')
		tpEvent = new TPEvent(Global.gotoBackPage);
	else
		tpEvent = new TPEvent(TPEvent.GO_TO_STEP1);
	this.dispatchEvent(tpEvent);
}